Ix{kzVBN;X&hha0dQSgWuiw0NWUvMRmkD|>
literal 0
HcmV?d00001
diff --git a/content/zh/docs/Administratorguide/public_sys-resources/icon-notice.gif b/content/zh/docs/Administratorguide/public_sys-resources/icon-notice.gif
new file mode 100644
index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27
GIT binary patch
literal 406
zcmV;H0crk6Nk%w1VIu$@0J8u9|NsB@_xJDb@8;&_*4Ea}&d#;9wWXz{jEszHYim+c
zQaU<1At50E0000000000A^8Le000gEEC2ui03!e%000R7038S%NU)&51O^i-Tu6`s
z0)`MFE@;3YqD6xSC^kTNu_J>91{PH8XfZ(p1pp2-SU@u3#{mEUC}_}tg3+I#{z}{Ok@D_ZUDg-
zt0stin4;pC8M{WLSlRH*1pzqEw1}3oOskyNN?j;7HD{BBZ*OEcv4HK!6Bk6beR+04
z&8}k>SkTusVTDmkyOz#5fCA$JTPGJVQvr3uZ?QzzPQFvD0rGf_PdrcF`pMs}p^BcF
zKtKTd`0wipR%nKN&Wj+V}pX;WC3SdJV!a_8Qi
zE7z`U*|Y^H0^}fB$R?oG%6hQ
z+MMLZbQBH@)Vg&1^3?qHb(5!%>3r0+`eq=&V&E}0Dypi0000000000
z00000A^8LW000R9EC2ui03!e$000L5z=Uu}ED8YtqjJd<+B}(9bIOb$3-31_h|V>=0A{
z1Hh0#H30>fNT})^fRU_83uewx9oRr{f{Sx1Ml`t)EQ
zGkHZ67&~y{W5Jpq4H_WfuLxp*3<7O}GEl;1ESe36fLNs=B0&LQM1Buf(R)qg(BRd`t1OPjI1m_q4
literal 0
HcmV?d00001
diff --git "a/content/zh/docs/Administratorguide/\344\276\213\350\241\214\347\273\264\346\212\244.md" "b/content/zh/docs/Administratorguide/\344\276\213\350\241\214\347\273\264\346\212\244.md"
new file mode 100644
index 000000000..2eadbd4d7
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\344\276\213\350\241\214\347\273\264\346\212\244.md"
@@ -0,0 +1,23 @@
+# 例行维护
+
+- **[日维护检查项](日维护检查项.md)**
+
+- **[检查操作系统参数](检查操作系统参数.md)**
+
+- **[检查openGauss健康状态](检查openGauss健康状态.md)**
+
+- **[检查数据库性能](检查数据库性能.md)**
+
+- **[检查和清理日志](检查和清理日志.md)**
+
+- **[检查时间一致性](检查时间一致性.md)**
+
+- **[检查应用连接数](检查应用连接数.md)**
+
+- **[例行维护表](例行维护表.md)**
+
+- **[例行重建索引](例行重建索引.md)**
+
+- **[数据安全维护建议](数据安全维护建议.md)**
+为保证openGauss数据库中的数据安全,避免丢失数据,非法访问数据等事故发生,请仔细阅读以下内容。
+
diff --git "a/content/zh/docs/Administratorguide/\344\276\213\350\241\214\347\273\264\346\212\244\350\241\250.md" "b/content/zh/docs/Administratorguide/\344\276\213\350\241\214\347\273\264\346\212\244\350\241\250.md"
new file mode 100644
index 000000000..9a286fbc1
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\344\276\213\350\241\214\347\273\264\346\212\244\350\241\250.md"
@@ -0,0 +1,106 @@
+# 例行维护表
+
+为了保证数据库的有效运行,数据库必须在插入/删除操作后,基于客户场景,定期做VACUUM FULL和ANALYZE,更新统计信息,以便获得更优的性能。
+
+## 相关概念
+
+使用VACUUM、VACUUM FULL和ANALYZE命令定期对每个表进行维护,主要有以下原因:
+
+- VACUUM FULL可回收已更新或已删除的数据所占据的磁盘空间,同时将小数据文件合并。
+- VACUUM对每个表维护了一个可视化映射来跟踪包含对别的活动事务可见的数组的页。一个普通的索引扫描首先通过可视化映射来获取对应的数组,来检查是否对当前事务可见。若无法获取,再通过堆数组抓取的方式来检查。因此更新表的可视化映射,可加速唯一索引扫描。
+- VACUUM可避免执行的事务数超过数据库阈值时,事务ID重叠造成的原有数据丢失。
+- ANALYZE可收集与数据库中表内容相关的统计信息。统计结果存储在系统表PG\_STATISTIC中。查询优化器会使用这些统计数据,生成最有效的执行计划。
+
+## 操作步骤
+
+1. 使用VACUUM或VACUUM FULL命令,进行磁盘空间回收。
+ - **VACUUM**:
+
+ 对表执行VACUUM操作
+
+ ```
+ postgres=# VACUUM customer;
+ ```
+
+ ```
+ VACUUM
+ ```
+
+ 可以与数据库操作命令并行运行。(执行期间,可正常使用的语句:SELECT、INSERT、UPDATE和DELETE。不可正常使用的语句:ALTER TABLE)。
+
+ 对表分区执行VACUUM操作
+
+ ```
+ postgres=# VACUUM customer_par PARTITION ( P1 );
+ ```
+
+ ```
+ VACUUM
+ ```
+
+ - **VACUUM FULL**:
+
+ ```
+ postgres=# VACUUM FULL customer;
+ ```
+
+ ```
+ VACUUM
+ ```
+
+ 需要向正在执行的表增加排他锁,且需要停止其他所有数据库操作。
+
+2. 使用ANALYZE语句更新统计信息。
+
+ ```
+ postgres=# ANALYZE customer;
+ ```
+
+ ```
+ ANALYZE
+ ```
+
+ 使用ANALYZE VERBOSE语句更新统计信息,并输出表的相关信息。
+
+ ```
+ postgres=# ANALYZE VERBOSE customer;
+ ```
+
+ ```
+ ANALYZE
+ ```
+
+ 也可以同时执行VACUUM ANALYZE命令进行查询优化。
+
+ ```
+ postgres=# VACUUM ANALYZE customer;
+ ```
+
+ ```
+ VACUUM
+ ```
+
+ > **说明:**
+ >VACUUM和ANALYZE会导致I/O流量的大幅增加,这可能会影响其他活动会话的性能。因此,建议通过“vacuum\_cost\_delay”参数设置《开发者指南》中“GUC参数说明 \> 资源消耗 \> 基于开销的清理延迟”。
+
+3. 删除表
+
+ ```
+ postgres=# DROP TABLE customer;
+ postgres=# DROP TABLE customer_par;
+ postgres=# DROP TABLE part;
+ ```
+
+ 当结果显示为如下信息,则表示删除成功。
+
+ ```
+ DROP TABLE
+ ```
+
+
+## 维护建议
+
+- 定期对部分大表做VACUUM FULL,在性能下降后为全库做VACUUM FULL,目前暂定每月做一次VACUUM FULL。
+- 定期对系统表做VACUUM FULL,主要是PG\_ATTRIBUTE。
+- 启用系统自动清理进程(AUTOVACUUM)自动执行VACUUM和ANALYZE,回收被标识为删除状态的记录空间,并更新表的统计数据。
+
diff --git "a/content/zh/docs/Administratorguide/\344\276\213\350\241\214\351\207\215\345\273\272\347\264\242\345\274\225.md" "b/content/zh/docs/Administratorguide/\344\276\213\350\241\214\351\207\215\345\273\272\347\264\242\345\274\225.md"
new file mode 100644
index 000000000..b1085694c
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\344\276\213\350\241\214\351\207\215\345\273\272\347\264\242\345\274\225.md"
@@ -0,0 +1,64 @@
+# 例行重建索引
+
+## 背景信息
+
+数据库经过多次删除操作后,索引页面上的索引键将被删除,造成索引膨胀。例行重建索引,可有效的提高查询效率。
+
+数据库支持的索引类型为B-tree索引,例行重建索引可有效的提高查询效率。
+
+- 如果数据发生大量删除后,索引页面上的索引键将被删除,导致索引页面数量的减少,造成索引膨胀。重建索引可回收浪费的空间。
+- 新建的索引中逻辑结构相邻的页面,通常在物理结构中也是相邻的,所以一个新建的索引比更新了多次的索引访问速度要快。
+
+## 重建索引
+
+重建索引有以下两种方式:
+
+- 先删除索引(DROP INDEX),再创建索引(CREATE INDEX)。
+
+ 在删除索引过程中,会在父表上增加一个短暂的排他锁,阻止相关读写操作。在创建索引过程中,会锁住写操作但是不会锁住读操作,此时读操作只能使用顺序扫描。
+
+- 使用REINDEX语句重建索引。
+ - 使用REINDEX TABLE语句重建索引,会在重建过程中增加排他锁,阻止相关读写操作。
+ - 使用REINDEX INTERNAL TABLE语句重建desc表(包括列存表的cudesc表)的索引,会在重建过程中增加排他锁,阻止相关读写操作。
+
+
+## 操作步骤
+
+假定在导入表“areaS”上的“area\_id”字段上存在普通索引“areaS\_idx”。重建索引有以下两种方式:
+
+- 先删除索引(DROP INDEX),再创建索引(CREATE INDEX)
+ 1. 删除索引。
+
+ ```
+ postgres=# DROP INDEX areaS_idx;
+ DROP INDEX
+ ```
+
+ 2. 创建索引。
+
+ ```
+ postgres=# CREATE INDEX areaS_idx ON areaS (area_id);
+ CREATE INDEX
+ ```
+
+
+- 使用REINDEX重建索引。
+ - 使用REINDEX TABLE语句重建索引。
+
+ ```
+ postgres=# REINDEX TABLE areaS;
+ REINDEX
+ ```
+
+ - 使用REINDEX INTERNAL TABLE重建desc表(包括列存表的cudesc表)的索引。
+
+ ```
+ postgres=# REINDEX INTERNAL TABLE areaS;
+ REINDEX
+ ```
+
+
+
+> **说明:**
+>在重建索引前,用户可以通过临时增大maintenance\_work\_mem和psort\_work\_mem的取值来加快索引的重建。
+
diff --git "a/content/zh/docs/Administratorguide/\345\220\257\345\201\234openGauss.md" "b/content/zh/docs/Administratorguide/\345\220\257\345\201\234openGauss.md"
new file mode 100644
index 000000000..3d47f2023
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\345\220\257\345\201\234openGauss.md"
@@ -0,0 +1,62 @@
+# 启停openGauss
+
+## 启动openGauss
+
+1. 以操作系统用户omm登录数据库主节点。
+2. 使用以下命令启动openGauss。
+
+ ```
+ gs_om -t start
+ ```
+
+ > **说明:**
+ >双机启动必须以双机模式启动, 若中间过程以单机模式启动, 则必须修复才能恢复双机关系, 用gs\_ctl build进行修复,gs\_ctl的使用方法请参见《openGauss 工具参考》。
+
+
+## 停止openGauss
+
+1. 以操作系统用户omm登录数据库主节点。
+2. 使用以下命令停止openGauss。
+
+ ```
+ gs_om -t stop
+ ```
+
+ > **说明:**
+ >启停节点及AZ的操作请参见《openGauss 工具参考》中“服务端工具 \> gs\_om”章节。
+
+
+## 示例
+
+启动openGauss:
+
+```
+gs_om -t start
+Starting cluster.
+=========================================
+=========================================
+Successfully started.
+
+```
+
+停止openGauss:
+
+```
+gs_om -t stop
+Stopping cluster.
+=========================================
+Successfully stopped cluster.
+=========================================
+End stop cluster.
+```
+
+## 错误排查
+
+如果启动openGauss或者停止openGauss服务失败,请根据日志文件中的日志信息排查错误,参见[日志参考](日志参考.md)。
+
+如果是超时导致启动失败,可以执行如下命令,设置启动超时时间,默认超时时间为300s。
+
+```
+gs_om -t start --time-out=300
+```
+
diff --git "a/content/zh/docs/Administratorguide/\345\244\207\344\273\275\344\270\216\346\201\242\345\244\215.md" "b/content/zh/docs/Administratorguide/\345\244\207\344\273\275\344\270\216\346\201\242\345\244\215.md"
new file mode 100644
index 000000000..ec12e72a5
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\345\244\207\344\273\275\344\270\216\346\201\242\345\244\215.md"
@@ -0,0 +1,9 @@
+# 备份与恢复
+
+- **[概述](概述.md)**
+
+- **[物理备份恢复](物理备份恢复.md)**
+
+- **[逻辑备份恢复](逻辑备份恢复.md)**
+
+
diff --git "a/content/zh/docs/Administratorguide/\345\256\236\344\276\213\344\270\273\345\244\207\345\210\207\346\215\242.md" "b/content/zh/docs/Administratorguide/\345\256\236\344\276\213\344\270\273\345\244\207\345\210\207\346\215\242.md"
new file mode 100644
index 000000000..b749e97eb
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\345\256\236\344\276\213\344\270\273\345\244\207\345\210\207\346\215\242.md"
@@ -0,0 +1,119 @@
+# 实例主备切换
+
+## 操作场景
+
+openGauss在运行过程中,数据库管理员可能需要手工对数据库节点做主备切换。例如发现数据库节点主备failover后需要恢复原有的主备角色,或怀疑硬件故障需要手动进行主备切换。
+
+> **说明:**
+>主备切换为维护操作,确保openGauss状态正常,所有业务结束后,再进行切换操作。
+
+## 操作步骤
+
+1. 以操作系统用户omm登录数据库任意节点,执行如下命令,查看主备情况。
+
+ ```
+ gs_om -t status --detail
+ ```
+
+2. 以操作系统用户omm登录准备切换为主节点的备节点,执行如下命令。
+
+ ```
+ gs_ctl switchover -D /home/omm/cluster/dn1/
+ ```
+
+ /home/omm/cluster/dn1/为备数据库节点的数据目录。
+
+ > **须知:**
+ >对于同一集群,上一次主备切换未完成,不能执行下一次切换。对于业务正在操作时,发起switchover,可能主机的线程无法停止导致switchover显示超时,实际后台仍然在运行,等主机线程停止后,switchover即可完成。比如在主机删除一个大的分区表时,可能无法响应switchover发起的信号。
+
+3. switchover成功后,执行如下命令记录当前主备机器信息。
+
+ ```
+ gs_om -t refreshconf
+ ```
+
+
+## 示例
+
+将数据库节点备实例切换为主实例。
+
+1.查询集群状态。
+
+```
+gs_om -t status --detail
+[ Cluster State ]
+
+cluster_state : Normal
+redistributing : No
+current_az : AZ_ALL
+
+[ Datanode State ]
+
+node node_ip instance state | node node_ip instance state
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+1 pekpopgsci00234 10.244.60.70 6001 /home/wuqw/cluster/dn1 P Primary Normal | 2 pekpopgsci00238 10.244.61.81 6002 /home/wuqw/cluster/dn1 S Standby Normal
+```
+
+2.登录备节点,进行主备切换。
+
+```
+gs_ctl switchover -D /home/wuqw/cluster/dn1/
+[2020-06-17 14:28:01.730][24438][][gs_ctl]: gs_ctl switchover ,datadir is -D "/home/wuqw/cluster/dn1"
+[2020-06-17 14:28:01.730][24438][][gs_ctl]: switchover term (1)
+[2020-06-17 14:28:01.768][24438][][gs_ctl]: waiting for server to switchover............
+[2020-06-17 14:28:11.175][24438][][gs_ctl]: done
+[2020-06-17 14:28:11.175][24438][][gs_ctl]: switchover completed (/home/wuqw/cluster/dn1)
+```
+
+3.保存集群主备机器信息。
+
+```
+gs_om -t refreshconf
+Generating dynamic configuration file for all nodes.
+Successfully generated dynamic configuration file.
+```
+
+## 错误排查
+
+如果switchover过程中出现失败,请根据日志文件中的日志信息排查错误,参见[日志参考](日志参考.md)。
+
+## 异常处理
+
+异常判断标准如下:
+
+- 业务压力下,主备实例切换时间长,这种情况不需要处理。
+- 其他备机正在build的情况下,主机需要发送日志到备机后,才能降备,导致主备切换时间长。这种情况不需要处理,但应尽量避免build过程中进行主备切换。
+- 切换过程中,因网络故障、磁盘满等原因造成主备实例连接断开,出现双主现象时,此时请参考如下步骤修复。
+
+ > **警告:**
+ >出现双主状态后,请按如下步骤恢复成正常的主备状态。否则可能会造成数据丢失。
+
+
+1. 执行以下命令查询数据库当前的实例状态。
+
+ ```
+ gs_om -t status --detail
+ ```
+
+ 若查询结果显示两个实例的状态都为Primary,这种状态为异常状态。
+
+2. 确定降为备机的节点,在节点上执行如下命令关闭服务。
+
+ ```
+ gs_ctl stop -D /home/omm/cluster/dn1/
+ ```
+
+3. 执行以下命令,以standby模式启动备节点。
+
+ ```
+ gs_ctl start -D /home/omm/cluster/dn1/ -M standby
+ ```
+
+4. 保存集群主备机器信息。
+
+ ```
+ gs_om -t refreshconf
+ ```
+
+5. 查看集群状态,确认实例状态恢复。
+
diff --git "a/content/zh/docs/Administratorguide/\345\256\241\350\256\241\346\227\245\345\277\227.md" "b/content/zh/docs/Administratorguide/\345\256\241\350\256\241\346\227\245\345\277\227.md"
new file mode 100644
index 000000000..accfb1f91
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\345\256\241\350\256\241\346\227\245\345\277\227.md"
@@ -0,0 +1,6 @@
+# 审计日志
+
+审计功能开启时会不断产生大量的审计日志,占用磁盘空间。用户可以根据磁盘空间的大小设置审计日志维护策略。
+
+关于如何设置审计日志维护策略请参见《开发者指南》中“管理数据库安全 \> 设置数据库审计 \> 维护审计日志”章节。
+
diff --git "a/content/zh/docs/Administratorguide/\345\274\202\345\270\270\345\244\204\347\220\206-1.md" "b/content/zh/docs/Administratorguide/\345\274\202\345\270\270\345\244\204\347\220\206-1.md"
new file mode 100644
index 000000000..50e179e72
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\345\274\202\345\270\270\345\244\204\347\220\206-1.md"
@@ -0,0 +1,363 @@
+# 异常处理
+
+如果发现检查结果异常,可以根据以下内容进行修复。
+
+**表 1** 检查openGauss运行状态
+
+
+检查项
+ |
+异常状态
+ |
+处理方法
+ |
+
+
+CheckClusterState(检查openGauss状态)
+ |
+openGauss未启动或openGauss实例未启动
+ |
+使用以下命令启动openGauss及实例。
+gs_om -t start
+ |
+
+openGauss状态异常或openGauss实例异常
+ |
+检查各主机、实例状态,根据状态信息进行排查。
+gs_check -i CheckClusterState
+ |
+
+CheckDBParams(检查数据库参数)
+ |
+数据库参数错误
+ |
+通过gs_guc工具修改数据库参数为指定值。
+ |
+
+CheckDebugSwitch(检查调试日志)
+ |
+日志级别不正确
+ |
+使用gs_guc工具将log_min_messages改为指定内容。
+ |
+
+CheckDirPermissions(检查目录权限)
+ |
+路径权限错误
+ |
+修改对应目录权限为指定数值(750/700)。
+chmod 750 DIR
+ |
+
+CheckReadonlyMode(检查只读模式)
+ |
+只读模式被打开
+ |
+确认数据库节点所在磁盘使用率未超阈值(默认60%)且未在执行其他运维操作。
+gs_check -i CheckDataDiskUsage
+ps ux
+使用gs_guc工具关闭openGauss只读模式
+gs_guc reload -N all -I all -c 'default_transaction_read_only = off'
+gs_guc reload -N all -I all -c 'default_transaction_read_only = off'
+ |
+
+CheckEnvProfile(检查环境变量)
+ |
+环境变量不一致
+ |
+重新执行前置更新环境变量信息。
+ |
+
+CheckBlockdev(检查磁盘预读块)
+ |
+磁盘预读块大小不为16384
+ |
+使用gs_checkos设置预读块大小为16384KB,并写入自启动文件。
+gs_checkos -i B3
+ |
+
+CheckCursorNum(检查游标数)
+ |
+检查游标数失败
+ |
+检查数据库能否正常连接,openGauss状态是否正常。
+ |
+
+CheckPgxcgroup(检查重分布状态)
+ |
+有未完成重分布的pgxc_group表
+ |
+继续完成扩容或缩容的数据重分布操作。
+gs_expand、gs_shrink
+ |
+
+CheckDiskFormat(检查磁盘配置)
+ |
+各节点磁盘配置不一致
+ |
+将各节点的磁盘规格改为相同。
+ |
+
+CheckSpaceUsage(检查磁盘空间使用率)
+ |
+磁盘可用空间不足
+ |
+清理或扩展对应目录所在的磁盘。
+ |
+
+CheckInodeUsage(检查磁盘索引使用率)
+ |
+磁盘可用索引不足
+ |
+清理或扩展对应目录所在的磁盘。
+ |
+
+CheckSwapMemory(检查交换内存)
+ |
+交换内存大于物理内存
+ |
+将交换内存调小或关闭。
+ |
+
+CheckLogicalBlock(检查磁盘逻辑块)
+ |
+磁盘逻辑块大小不为512
+ |
+使用gs_checkos修改磁盘逻辑块大小为512KB,并写入开机自启动文件。
+gs_checkos -i B4
+ |
+
+CheckIOrequestqueue(检查IO请求)
+ |
+IO请求值不为32768
+ |
+使用gs_checkos设置IO请求值为32768,并写入开机自启动文件。
+gs_checkos -i B4
+ |
+
+CheckCurConnCount(检查当前连接数)111
+ |
+当前连接数超过最大连接数的90%
+ |
+断开未使用的数据库主节点连接。
+ |
+
+CheckMaxAsyIOrequests(检查最大异步请求)
+ |
+最大异步请求值小于104857600或当前节点数据库实例数)*1048576
+ |
+使用gs_checkos设置最大异步请求值为104857600和当前节点数据库实例数*1048576中的最大值。
+gs_checkos -i B4
+ |
+
+CheckMTU(检查MTU值)
+ |
+MTU值不一致
+ |
+设置各节点的MTU一致为1500或8192。
+ifconfig eth* MTU 1500
+ |
+
+CheckIOConfigure(检查IO配置)
+ |
+IO配置不是deadline
+ |
+使用gs_checkos设置IO配置为deadline,并写入开机自启动文件。
+gs_checkos -i B4
+ |
+
+CheckRXTX(检查RXTX值)
+ |
+网卡RX/TX值不是4096
+ |
+使用checkos设置openGauss使用的物理网卡RX/TX值为4096
+gs_checkos -i B5
+ |
+
+CheckPing(检查网络通畅)
+ |
+存在openGauss IP无法ping通
+ |
+检查异常ip间网络设置和状态、防火墙状态。
+ |
+
+CheckNetWorkDrop(检查网络丢包率)
+ |
+网络通信丢包率高于1%
+ |
+检查对应IP间网络负载、状态。
+ |
+
+CheckMultiQueue(检查网卡多队列)
+ |
+未开启网卡多队列并未将网卡中断绑定到不同CPU核心
+ |
+开启网卡多队列并将网卡队列中断绑定到不同的CPU核心。
+ |
+
+CheckEncoding(检查编码格式)
+ |
+各节点编码格式不一致
+ |
+在/etc/profile中写入一致的编码信息。
+echo "export LANG=XXX" >> /etc/profile
+ |
+
+CheckFirewall(检查防火墙)
+ |
+防火墙未关闭
+ |
+关闭防火墙服务。
+redHat(CentOS)7.x:systemctl status firewalld.service
+redHat(CentOS)6.x:service iptables down
+SuSE:SuSEfirewall2 down
+ |
+
+CheckKernelVer(检查内核版本)
+ |
+内核版本不一致
+ |
+使用gs_replace替换不一致的节点。
+gs_replace
+ |
+
+CheckMaxHandle(检查最大文件句柄数)
+ |
+最大文件句柄数小于1000000
+ |
+设置91-nofile.conf/90-nofile.conf最大文件句柄数软硬限制为1000000。
+gs_checkos -i B2
+ |
+
+CheckNTPD(检查时间同步服务)
+ |
+NTPD服务未开启或时间误差超过一分钟
+ |
+开启NTPD服务并设置时钟一致。
+ |
+
+CheckOSVer(检查操作系统版本)
+ |
+操作系统不被支持或不在同一混搭列表
+ |
+使用gs_replace将异常节点替换为受支持系统或在同一混搭列表内的系统的节点。
+gs_replace
+ |
+
+CheckSysParams(检查操作系统参数)
+ |
+操作系统参数设置不满足要求
+ |
+使用gs_checkos进行参数设置或手动设置。
+gs_checkos -i B1
+vim /etc/sysctl.conf
+ |
+
+CheckTHP(检查THP服务)
+ |
+THP服务未开启
+ |
+使用gs_checkos设置THP服务
+gs_checkos -i B6
+ |
+
+CheckTimeZone(检查时区)
+ |
+时区不一致
+ |
+设置各节点为同一时区
+cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime
+ |
+
+CheckCPU(检查CPU)
+ |
+CPU占用过高或IO等待过高
+ |
+进行CPU配置升级或磁盘性能升级
+ |
+
+CheckSshdService(检查SSHD服务)
+ |
+未开启SSHD服务
+ |
+启动SSHD服务并写入开机自启动文件
+server sshd start
+echo "server sshd start" >> initFile
+ |
+
+CheckSshdConfig(检查SSHD配置)
+ |
+SSHD服务配置错误
+ |
+设置SSHD服务,
+PasswordAuthentication=no;
+MaxStartups=1000;
+UseDNS=yes;
+ClientAliveInterval=10800/ClientAliveInterval=0
+并重启服务:
+server sshd start
+ |
+
+CheckCrondService(检查Crond服务)
+ |
+Crond服务未启动
+ |
+安装Crond服务并启用
+ |
+
+CheckStack(检查堆栈大小)
+ |
+堆栈大小小于3072
+ |
+使用gs_checkos设置为3072并重启堆栈值过小进程。
+gs_checkos -i B2
+ |
+
+CheckNoCheckSum(检查NoCheckSum参数)
+ |
+NoCheckSum设置错误或不一致
+ |
+设置各节点的NoCheckSum值一致(存在redHat6.4/6.5且为bond0时全部设为Y,否则全部设为N)
+echo Y > /sys/module/sctp/parameters/no_checksums
+ |
+
+CheckSysPortRange(检查系统端口设置)
+ |
+系统ip端口不在预期范围内或openGauss端口在系统ip端口内
+ |
+设置系统ip端口范围参数到26000-65535之中;设置openGauss端口在系统ip端口范围外
+vim /etc/sysctl.conf
+ |
+
+CheckMemInfo(检查内存信息)
+ |
+各节点内存大小不一致
+ |
+使用相同规格的物理内存
+ |
+
+CheckHyperThread(检查超线程)
+ |
+未开启CPU超线程
+ |
+开启CPU超线程
+ |
+
+CheckTableSpace(检查表空间)
+ |
+表空间路径和openGauss路径存在嵌套或表空间路径相互存在嵌套
+ |
+将表空间数据迁移到路径合法的表空间中
+ |
+
+CheckSctpService(检查SCTP服务)
+ |
+未开启SCTP服务
+ |
+部署并开启SCTP服务
+modprobe sctp
+ |
+
+
+
+
diff --git "a/content/zh/docs/Administratorguide/\345\274\202\345\270\270\345\244\204\347\220\206-3.md" "b/content/zh/docs/Administratorguide/\345\274\202\345\270\270\345\244\204\347\220\206-3.md"
new file mode 100644
index 000000000..394795494
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\345\274\202\345\270\270\345\244\204\347\220\206-3.md"
@@ -0,0 +1,124 @@
+# 异常处理
+
+使用gs\_checkperf工具检查openGauss性能状态后,如果发现检查结果发现异常,可以根据以下内容进行修复。
+
+**表 1** 检查openGauss级别性能状态
+
+
+异常状态
+ |
+处理方法
+ |
+
+
+主机CPU占有率高
+ |
+1、更换和增加高性能的CPU。
+2、使用top命令查看系统哪些进程的CPU占有率高,然后使用kill命令关闭没有使用的进程。
+top
+ |
+
+openGauss CPU占有率高
+ |
+1、更换和增加高性能的CPU。
+2、使用top命令查看数据库哪些进程的CPU占有率高,然后使用kill命令关闭没有使用的进程。
+top
+3、使用gs_expand工具扩容,增加新的主机均衡CPU占有率。
+ |
+
+共享内存命中率低
+ |
+1、扩大内存。
+2、使用如下命令查看操作系统配置文件/etc/sysctl.conf,调大共享内存kernel.shmmax值。
+vim /etc/sysctl.conf
+ |
+
+内存中排序比率低
+ |
+扩大内存。
+ |
+
+I/O、磁盘使用率高
+ |
+1、更换高性能的磁盘。
+2、调整数据布局,尽量将I/O请求较合理的分配到所有物理磁盘中。
+3、全库进行VACUUM FULL操作。
+vacuum full;
+4、进行磁盘整理。
+5、降低并发数。
+ |
+
+事务统计
+ |
+查询pg_stat_activity系统表,将不必要的连接断开。(登录数据库后查询:postgres=# \d+ pg_stat_activity;)
+ |
+
+
+
+
+**表 2** 检查节点级别性能状态
+
+
+异常状态
+ |
+处理方法
+ |
+
+
+CPU占有率高
+ |
+1、更换和增加高性能的CPU。
+2、使用top命令查看系统哪些进程的CPU占有率高,然后使用kill命令关闭没有使用的进程。
+top
+ |
+
+内存使用率过高情况
+ |
+扩大或清理内存。
+ |
+
+I/O使用率过高情况
+ |
+1、更换高性能的磁盘。
+2、进行磁盘清理。
+3、尽可能用内存的读写代替直接磁盘I/O,使频繁访问的文件或数据放入内存中进行操作处理。
+ |
+
+
+
+
+**表 3** 会话/进程级别性能状态
+
+
+异常状态
+ |
+处理方法
+ |
+
+
+CPU、内存、I/O使用率过高情况
+ |
+查看哪个进程占用CPU/内存高或I/O使用率高,若是无用的进程,则kill掉,否则排查具体原因。例如SQL执行占用内存大,查看是否SQL语句需要优化。
+ |
+
+
+
+
+**表 4** SSD性能状态
+
+
+异常状态
+ |
+处理方法
+ |
+
+
+SSD读写性能故障
+ |
+使用以下命令查看SSD是否有故障,排查具体故障原因。
+gs_checkperf -i SSD -U omm
+ |
+
+
+
+
diff --git "a/content/zh/docs/Administratorguide/\345\274\202\345\270\270\345\244\204\347\220\206.md" "b/content/zh/docs/Administratorguide/\345\274\202\345\270\270\345\244\204\347\220\206.md"
new file mode 100644
index 000000000..7996b92a7
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\345\274\202\345\270\270\345\244\204\347\220\206.md"
@@ -0,0 +1,106 @@
+# 异常处理
+
+使用gs\_checkos检查或设置状态为Abnormal,可以使用如下命令查看详细的错误信息。
+
+```
+gs_checkos -i A --detail
+```
+
+其中,Abnormal为必须处理项,影响openGauss安装。Warning可以不处理,不会影响openGauss安装。
+
+- 如果操作系统版本(A1)检查项检查结果为Abnormal,需要将不属于混编范围的操作系统版本替换为混编范围内的操作系统版本。
+- 如果内核版本(A2)检查项检查结果为Warning,则表示openGauss内平台的内核版本不一致。
+- 如果Unicode状态(A3)检查项检查结果为Abnormal,需要将各主机的字符集设置为相同的字符集,可以在/etc/profile文件中添加"export LANG=XXX"(XXX为Unicode编码)。
+
+ ```
+ vim /etc/profile
+ ```
+
+- 如果时区状态(A4)检查项检查结果为Abnormal,需要将各主机的时区设置为相同时区,可以将/usr/share/zoneinfo/目录下的时区文件拷贝为/etc/localtime文件。
+
+ ```
+ cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime
+ ```
+
+- 如果交换内存状态(A5)检查项检查结果为Abnormal,可能是因为swap空间大于mem空间,可减小Swap解决或者增大Mem空间解决。
+- 如果系统控制参数(A6)检查项检查结果为Abnormal,可以使用以下两种方法进行设置。
+ - 可以使用如下命令进行设置。
+
+ ```
+ gs_checkos -i B1
+ ```
+
+ - 根据错误提示信息,在/etc/sysctl.conf文件中进行设置。然后执行sysctl -p使其生效。
+
+ ```
+ vim /etc/sysctl.conf
+ ```
+
+
+
+- 如果文件系统配置状态(A7)检查项检查结果为Abnormal,可以使用如下命令进行设置。
+
+ ```
+ gs_checkos -i B2
+ ```
+
+- 如果磁盘配置状态(A8)检查项检查结果为Abnormal,需修改磁盘挂载格式为:“rw,noatime,inode64,allocsize=16m”。
+
+ 使用linux的man mount命令挂载XFS选项:
+
+ ```
+ rw,noatime,inode64,allocsize=16m
+ ```
+
+ 也可以在/etc/fstab文件中设定XFS选项。如下示例:
+
+ ```
+ /dev/data /data xfs rw,noatime,inode64,allocsize=16m 0 0
+ ```
+
+- 如果预读块大小(A9)检查项检查结果为Abnormal,可以使用如下命令进行设置。
+
+ ```
+ gs_checkos -i B3
+ ```
+
+- 如果IO调度状态(A10)检查项检查结果为Abnormal,可以使用如下命令进行设置。
+
+ ```
+ gs_checkos -i B4
+ ```
+
+- 如果网卡配置状态(A11)检查项检查结果为Warning,可以使用如下命令进行设置。
+
+ ```
+ gs_checkos -i B5
+ ```
+
+- 如果时间一致性(A12)检查项检查结果为Abnormal,需检查是否安装ntp服务,以及ntp服务是否启动;并与ntp时钟源同步。
+- 如果防火墙状态(A13)检查项检查结果为Abnormal,需关闭防火墙服务。使用如下命令进行设置。
+ - SuSE:
+
+ ```
+ SuSEfirewall2 stop
+ ```
+
+ - RedHat7:
+
+ ```
+ systemctl disable firewalld
+ ```
+
+ - RedHat6:
+
+ ```
+ service iptables stop
+ ```
+
+
+- 如果THP服务(A14)检查项检查结果为Abnormal,可以使用如下命令进行设置。
+
+ ```
+ gs_checkos -i B6
+ ```
+
+
diff --git "a/content/zh/docs/Administratorguide/\346\200\247\350\203\275\346\227\245\345\277\227.md" "b/content/zh/docs/Administratorguide/\346\200\247\350\203\275\346\227\245\345\277\227.md"
new file mode 100644
index 000000000..aa269c76f
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\200\247\350\203\275\346\227\245\345\277\227.md"
@@ -0,0 +1,22 @@
+# 性能日志
+
+性能日志主要关注外部资源的访问性能问题。性能日志指的是数据库系统在运行时检测物理资源的运行状态的日志,在对外部资源进行访问时的性能检测,包括磁盘、Hadoop openGauss等外部资源的访问检测信息。在出现性能问题时,可以借助性能日志及时的定位问题发生的原因,能极大地提升问题解决效率。
+
+## 日志文件存储路径
+
+数据库节点的性能日志目录在“$GAUSSLOG/gs\_profile”中各自对应的目录下。
+
+## 日志文件命名格式
+
+数据库节点的性能日志的命名规则:
+
+postgresql-创建时间.prf
+
+默认情况下,每日0点或者日志文件大于20MB或者数据库实例(数据库节点)重新启动后,会生成新的日志文件。
+
+## 日志内容说明
+
+数据库节点每一行日志内容的默认格式:
+
+主机名称+日期+时间+实例名称+线程号+日志内容
+
diff --git "a/content/zh/docs/Administratorguide/\346\223\215\344\275\234\346\227\245\345\277\227.md" "b/content/zh/docs/Administratorguide/\346\223\215\344\275\234\346\227\245\345\277\227.md"
new file mode 100644
index 000000000..06d2df942
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\223\215\344\275\234\346\227\245\345\277\227.md"
@@ -0,0 +1,30 @@
+# 操作日志
+
+操作日志是指数据库管理员使用工具操作数据库时以及工具被openGauss调用时产生的日志。如果openGauss发生故障,可以通过这些日志信息跟踪用户对数据库进行了哪些操作,重现故障场景。
+
+## 日志文件存储路径
+
+默认在“$GAUSSLOG/bin”目录下,如果环境变量$GAUSSLOG不存在或者变量值为空,则工具日志信息不会记录到对应的工具日志文件中,日志信息只会打印到屏幕上。
+
+其中$GAUSSLOG默认为“/var/log/gaussdb/_用户名_”。
+
+> **说明:**
+>如果使用om脚本部署时,则日志路径为 “/var/log/gaussdb/_用户名_”。
+
+## 日志文件命名格式
+
+日志文件命名格式为:
+
+- 工具名-日志创建时间.log
+- 工具名-日志创建时间-current.log
+
+其中,“工具名-日志创建时间.log”是历史日志文件,“工具名-日志创建时间-current.log”是当前日志文件。
+
+如果日志大小超过16MB,在下一次调用该工具时,会重命名当前日志文件为历史日志文件,并以当前时间生成新的当前日志文件。
+
+例如将“gs\_guc-2015-01-16\_183728-current.log”重命名为“gs\_guc-2015-01-16\_183728.log”,然后重新生成“gs\_guc-2015-01-17\_142216-current.log”。
+
+## 维护建议
+
+建议定时对过期的日志文件进行转储,以避免大量日志占用太多的磁盘空间和避免重要日志丢失。
+
diff --git "a/content/zh/docs/Administratorguide/\346\225\260\346\215\256\345\256\211\345\205\250\347\273\264\346\212\244\345\273\272\350\256\256.md" "b/content/zh/docs/Administratorguide/\346\225\260\346\215\256\345\256\211\345\205\250\347\273\264\346\212\244\345\273\272\350\256\256.md"
new file mode 100644
index 000000000..9ae26bc51
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\225\260\346\215\256\345\256\211\345\205\250\347\273\264\346\212\244\345\273\272\350\256\256.md"
@@ -0,0 +1,23 @@
+# 数据安全维护建议
+
+为保证openGauss数据库中的数据安全,避免丢失数据,非法访问数据等事故发生,请仔细阅读以下内容。
+
+## 避免数据被丢失
+
+建议用户规划周期性的物理备份,且对备份文件进行可靠的保存。在系统发生严重错误的情况下,可以利用备份文件,将系统恢复到备份前的状态。
+
+## 避免数据被非法访问
+
+- 建议对数据库用户进行权限分级管理。数据库管理员根据业务需要,建立用户并赋予权限,保证各用户对数据库的合理访问。
+- 对于openGauss的服务端和客户端(或基于客户端库开发的应用程序),最好也部署在可信任的内网中。如果服务端和客户端一定要部署在非信任的网络中,需要在服务启动前,打开SSL加密,保证数据在非信任网络上的传输安全。需要注意的是,打开SSL加密会降低数据库的性能。
+
+## 避免系统日志泄露个人数据
+
+- 将调试日志发给他人进行分析前,请删除个人数据。
+
+ > **说明:**
+ >因为日志级别(log\_min\_messages)设置为DEBUGx(x为DEBUG级别,取值范围为1\~5)时,调试日志中记录的信息可能包含用户的个人数据。
+
+- 将系统日志发给其他人进行分析前,请删除个人数据。因为在默认配置下,当SQL语句执行错误时,日志中会记录出错的SQL语句,而这些SQL语句中可能包含用户个人数据。
+- 将log\_min\_error\_statement参数的值设置为PANIC可以避免在系统日志中记录出错的SQL语句,但是关闭此功能将导致发生错误时难以定位。
+
diff --git "a/content/zh/docs/Administratorguide/\346\227\245\345\277\227\345\217\202\350\200\203.md" "b/content/zh/docs/Administratorguide/\346\227\245\345\277\227\345\217\202\350\200\203.md"
new file mode 100644
index 000000000..0c746436f
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\227\245\345\277\227\345\217\202\350\200\203.md"
@@ -0,0 +1,15 @@
+# 日志参考
+
+- **[日志类型简介](日志类型简介.md)**
+
+- **[系统日志](系统日志.md)**
+
+- **[操作日志](操作日志.md)**
+
+- **[审计日志](审计日志.md)**
+
+- **[WAL日志](WAL日志.md)**
+
+- **[性能日志](性能日志.md)**
+
+
diff --git "a/content/zh/docs/Administratorguide/\346\227\245\345\277\227\347\261\273\345\236\213\347\256\200\344\273\213.md" "b/content/zh/docs/Administratorguide/\346\227\245\345\277\227\347\261\273\345\236\213\347\256\200\344\273\213.md"
new file mode 100644
index 000000000..335079c6d
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\227\245\345\277\227\347\261\273\345\236\213\347\256\200\344\273\213.md"
@@ -0,0 +1,55 @@
+# 日志类型简介
+
+在数据库运行过程中,会出现大量日志,既有保证数据库安全可靠的WAL日志(预写式日志,也称为Xlog),也有用于数据库日常维护的运行和操作日志等。在数据库发生故障时,可以参考这些日志进行问题定位和数据库恢复的操作。
+
+## 日志类型
+
+日志类型的详细说明请参见下表。
+
+**表 1** 日志类型
+
+
+类型
+ |
+说明
+ |
+
+
+系统日志
+ |
+数据库系统进程运行时产生的日志,记录系统进程的异常信息。
+ |
+
+操作日志
+ |
+通过客户端工具(例如gs_guc)操作数据库时产生的日志。
+ |
+
+Trace日志
+ |
+打开数据库的调试开关后,会记录大量的Trace日志。这些日志可以用来分析数据库的异常信息。
+ |
+
+黑匣子日志
+ |
+数据库系统崩溃的时候,通过故障现场堆、栈信息可以分析出故障发生时的进程上下文,方便故障定位。黑匣子具有在系统崩溃时,dump出进程和线程的堆、栈、寄存器信息的功能。
+ |
+
+审计日志
+ |
+开启数据库审计功能后,将数据库用户的某些操作记录在日志中,这些日志称为审计日志。
+ |
+
+WAL日志
+ |
+又称为REDO日志,在数据库异常损坏时,可以利用WAL日志进行恢复。由于WAL日志的重要性,所以需要经常备份这些日志。
+ |
+
+性能日志
+ |
+数据库系统在运行时检测物理资源的运行状态的日志,在对外部资源进行访问时的性能检测,包括磁盘、Hadoop openGauss等外部资源的访问检测信息。
+ |
+
+
+
+
diff --git "a/content/zh/docs/Administratorguide/\346\227\245\347\273\264\346\212\244\346\243\200\346\237\245\351\241\271.md" "b/content/zh/docs/Administratorguide/\346\227\245\347\273\264\346\212\244\346\243\200\346\237\245\351\241\271.md"
new file mode 100644
index 000000000..e405bc148
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\227\245\347\273\264\346\212\244\346\243\200\346\237\245\351\241\271.md"
@@ -0,0 +1,170 @@
+# 日维护检查项
+
+## 检查openGauss状态
+
+通过openGauss提供的工具查询数据库和实例状态,确认数据库和实例都处于正常的运行状态,可以对外提供数据服务。
+
+- 检查实例状态
+
+ ```
+ gs_check -U omm -i CheckClusterState
+ ```
+
+- 检查参数
+
+ ```
+ postgres=# SHOW parameter_name;
+ ```
+
+- 修改参数
+
+ ```
+ gs_guc reload -D /gaussdb/data/dbnode -c "paraname=value"
+ ```
+
+
+## 检查锁信息
+
+锁机制是数据库保证数据一致性的重要手段,检查相关信息可以检查数据库的事务和运行状况。
+
+- 查询数据库中的锁信息。
+
+ ```
+ postgres=# SELECT * FROM pg_locks;
+ ```
+
+- 查询等待锁的线程状态信息。
+
+ ```
+ postgres=# SELECT * FROM pg_thread_wait_status WHERE wait_status = 'acquire lock';
+ ```
+
+- 查询等待锁的事件信息。
+
+ ```
+ postgres=# SELECT node_name, thread_name, tid, wait_status, query_id FROM pgxc_thread_wait_status WHERE wait_status = 'acquire lock';
+ ```
+
+- 结束系统进程
+
+ 查找正在运行的系统进程,然后使用kill命令结束此进程。
+
+ ```
+ ps ux
+ kill -9 pid
+ ```
+
+
+## 统计事件数据
+
+SQL语句长时间运行会占用大量系统资源,用户可以通过查看事件发生的时间,占用内存大小来了解现在数据库运行状态。
+
+- 查询事件的时间
+
+ 查询事件的线程启动时间、事务启动时间、SQL启动时间以及状态变更时间。
+
+ ```
+ postgres=# SELECT backend_start,xact_start,query_start,state_change FROM pg_stat_activity;
+ ```
+
+- 查询当前服务器的会话计数信息
+
+ ```
+ postgres=# SELECT count(*) FROM pg_stat_activity;
+ ```
+
+- 系统级统计信息
+
+ 查询当前使用内存最多的会话信息。
+
+ ```
+ postgres=# SELECT * FROM pv_session_memory_detail() ORDER BY usedsize desc limit 10;
+ ```
+
+
+## 对象检查
+
+表、索引、分区、约束等是数据库的核心存储对象,其核心信息和对象维护是DBA重要的日常工作。
+
+- 查看表的详细信息
+
+ ```
+ postgres=# \d+ table_name
+ ```
+
+- 查询表统计信息
+
+ ```
+ postgres=# SELECT * FROM pg_statistic;
+ ```
+
+- 查看索引的详细信息
+
+ ```
+ postgres=# \d+ index_name
+ ```
+
+- 查询分区表信息
+
+ ```
+ postgres=# SELECT * FROM pg_partition;
+ ```
+
+- 收集统计信息
+
+ 使用ANALYZE语句收集数据库相关的统计信息。
+
+ 使用VACUUM语句可以回收空间并更新统计信息。
+
+- 查询约束信息
+
+ ```
+ postgres=# SELECT * FROM pg_constraint;
+ ```
+
+
+## SQL报告检查
+
+使用EXPLAIN语句查看执行计划。
+
+## 备份
+
+数据备份重于一切,日常应检查备份执行情况,并检查备份有效性,确保备份能够保障数据安全,备份安全加密也应兼顾。
+
+- 指定用户导出数据库:
+
+ ```
+ gs_dump dbname -p port -f out.sql -U user_name -W password
+ ```
+
+- 导出schema:
+
+ ```
+ gs_dump dbname -p port -n schema_name -f out.sql
+ ```
+
+- 导出table:
+
+ ```
+ gs_dump dbname -p port -t table_name -f out.sql
+ ```
+
+
+## 基本信息检查
+
+基本信息包括版本、组件、补丁集等信息,定期检查数据库信息并登记在案是数据库生命周期管理的重要内容之一。
+
+- 版本信息
+
+ ```
+ postgres=# SELECT version();
+ ```
+
+- 容量检查
+
+ ```
+ postgres=# SELECT pg_table_size('table_name');
+ postgres=# SELECT pg_database_size('database_name');
+ ```
+
+
diff --git "a/content/zh/docs/Administratorguide/\346\243\200\346\237\245openGauss\345\201\245\345\272\267\347\212\266\346\200\201.md" "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245openGauss\345\201\245\345\272\267\347\212\266\346\200\201.md"
new file mode 100644
index 000000000..b853bb9eb
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245openGauss\345\201\245\345\272\267\347\212\266\346\200\201.md"
@@ -0,0 +1,7 @@
+# 检查openGauss健康状态
+
+- **[检查办法](检查办法-0.md)**
+
+- **[异常处理](异常处理-1.md)**
+
+
diff --git "a/content/zh/docs/Administratorguide/\346\243\200\346\237\245openGauss\350\277\220\350\241\214\346\227\245\345\277\227.md" "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245openGauss\350\277\220\350\241\214\346\227\245\345\277\227.md"
new file mode 100644
index 000000000..4691a8f7f
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245openGauss\350\277\220\350\241\214\346\227\245\345\277\227.md"
@@ -0,0 +1,111 @@
+# 检查openGauss运行日志
+
+数据库运行时,某些操作在执行过程中可能会出现错误,数据库依然能够运行。但是此时数据库中的数据可能已经发生不一致的情况。建议按月检查openGauss运行日志,及时发现隐患。
+
+## 前提条件
+
+- 收集日志的主机网络通畅且未宕机,数据库安装用户互信正常。
+- 日志收集工具依赖操作系统工具如gstack,如果未安装该工具,则提示错误后,跳过该收集项。
+
+## 操作步骤
+
+1. 以操作系统用户omm登录数据库主节点。
+2. 执行如下命令收集数据库日志。
+
+ ```
+ gs_collector --begin-time="20160616 01:01" --end-time="20160616 23:59"
+ ```
+
+ 20160616 01:01为日志的开始时间,20160616 23:59为日志的结束时间。
+
+3. 根据[2](#zh-cn_topic_0237088806_zh-cn_topic_0059778412_l87490fc259434bc6ac7800ec9881a6ab)的界面输出提示,进入相应的日志收集目录,解压收集的日志,并检查数据库日志。
+
+ 以下以日志收集路径“/opt/gaussdb/tmp/gaussdba\_mppdb/collector\_20160726\_105158.tar.gz”为例进行操作。
+
+ ```
+ tar -xvzf /opt/gaussdb/tmp/gaussdba_mppdb/collector_20160726_105158.tar.gz
+ cd /opt/gaussdb/tmp/gaussdba_mppdb/collector_20160726_105158
+ ```
+
+
+## 示例
+
+- 以--begin-time与--end-time为参数执行gs\_collector命令。
+
+ ```
+ gs_collector --begin-time="20160616 01:01" --end-time="20160616 23:59"
+ ```
+
+ 当显示类似如下信息表示日志已经归档。
+
+ ```
+ Successfully collected files
+ All results are stored in /tmp/gaussdba_mppdb/collector_20160616_175615.tar.gz.
+ ```
+
+- 以--begin-time,--end-time与-h为参数执行gs\_collector命令。
+
+ ```
+ gs_collector --begin-time="20160616 01:01" --end-time="20160616 23:59" -h plat2
+ ```
+
+ 当显示类似如下信息表示日志已经归档。
+
+ ```
+ Successfully collected files
+ All results are stored in /tmp/gaussdba_mppdb/collector_20160616_190225.tar.gz.
+ ```
+
+- 以--begin-time,--end-time与-f为参数执行gs\_collector命令。
+
+ ```
+ gs_collector --begin-time="20160616 01:01" --end-time="20160616 23:59" -f /opt/software/gaussdb/output
+ ```
+
+ 当显示类似如下信息表示日志已经归档。
+
+ ```
+ Successfully collected files
+ All results are stored in /opt/software/gaussdb/output/collector_20160616_190511.tar.gz.
+ ```
+
+- 以--begin-time,--end-time与--keyword为参数执行gs\_collector命令。
+
+ ```
+ gs_collector --begin-time="20160616 01:01" --end-time="20160616 23:59" --keyword="os"
+ ```
+
+ 当显示类似如下信息表示日志已经归档。
+
+ ```
+ Successfully collected files.
+ All results are stored in /tmp/gaussdba_mppdb/collector_20160616_190836.tar.gz.
+ ```
+
+- 以--begin-time,--end-time与-o为参数执行gs\_collector命令。
+
+ ```
+ gs_collector --begin-time="20160616 01:01" --end-time="20160616 23:59" -o /opt/software/gaussdb/output
+ ```
+
+ 当显示类似如下信息表示日志已经归档。
+
+ ```
+ Successfully collected files.
+ All results are stored in /opt/software/gaussdb/output/collector_20160726_113711.tar.gz.
+ ```
+
+- 以--begin-time,--end-time与-l为参数(文件名必须以.log为后缀)执行gs\_collector命令。
+
+ ```
+ gs_collector --begin-time="20160616 01:01" --end-time="20160616 23:59" -l /opt/software/gaussdb/logfile.log
+ ```
+
+ 当显示类似如下信息表示日志已经归档。
+
+ ```
+ Successfully collected files.
+ All results are stored in /opt/software/gaussdb/output/collector_20160726_113711.tar.gz.
+ ```
+
+
diff --git "a/content/zh/docs/Administratorguide/\346\243\200\346\237\245\345\212\236\346\263\225-0.md" "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\345\212\236\346\263\225-0.md"
new file mode 100644
index 000000000..89474315b
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\345\212\236\346\263\225-0.md"
@@ -0,0 +1,350 @@
+# 检查办法
+
+通过openGauss提供的gs\_check工具可以开展openGauss健康状态检查。
+
+## 注意事项
+
+- 扩容新节点检查只能在root用户下执行,其他场景都必须在omm用户下执行。
+- 必须指定-i或-e参数,-i会检查指定的单项,-e会检查对应场景配置中的多项。
+- 如果-i参数中不包含root类检查项或-e场景配置列表中没有root类检查项,则不需要交互输入root权限的用户及其密码。
+- 可使用--skip-root-items跳过检查项中包含的root类检查,以免需要输入root权限用户及密码。
+- 检查扩容新节点与现有节点之间的一致性,在现有节点执行gs\_check命令指定--hosts参数进行检查,其中hosts文件中需要写入新节点ip。
+
+## 操作步骤
+
+方式1:
+
+1. 以操作系统用户omm登录数据库主节点。
+2. 执行如下命令对openGauss数据库状态进行检查。
+
+ ```
+ gs_check -i CheckClusterState
+ ```
+
+ 其中,-i指定检查项,注意区分大小写。格式:-i CheckClusterState、-i CheckCPU或-i CheckClusterState,CheckCPU。
+
+ 取值范围为所有支持的检查项名称,详细列表请参见《openGauss 工具参考》中“服务端工具 \> gs\_checkos \> openGauss状态检查表”,用户可以根据需求自己编写新检查项。
+
+
+方式2:
+
+1. 以操作系统用户omm登录数据库主节点。
+2. 执行如下命令对openGauss数据库进行健康检查。
+
+ ```
+ gs_check -e inspect
+ ```
+
+ 其中,-e指定场景名,注意区分大小写。格式:-e inspect或-e upgrade。
+
+ 取值范围为所有支持的巡检场景名称,默认列表包括:inspect(例行巡检)、upgrade(升级前巡检)、expand(扩容前巡检)、binary\_upgrade(就地升级前巡检)、health(健康检查巡检),用户可以根据需求自己编写场景。
+
+
+方式3:
+
+1. 以操作系统用户omm登录数据库主节点。
+2. 将巡检工具gs\_check及相关目录inspection拷贝分发到所有扩容新节点。
+3. 将扩容新节点ip写到文件_ipListFile_中,以换行符进行分隔。
+4. 执行如下命令对扩容新节点进行扩容前检查。
+
+ ```
+ gs_check -e expand_new_node --hosts ipListFile
+ ```
+
+ -e必须为expand\_new\_node,即扩容前新节点检查。
+
+
+openGauss巡检的主要作用是在openGauss运行过程中,检查整个openGauss状态是否正常,或者重大操作前(升级、扩容),确保openGauss满足操作所需的环境条件和状态条件。详细的巡检项目和场景请参见《openGauss 工具参考》中“服务端工具 \> gs\_checkos \> openGauss状态检查表”。
+
+## 示例
+
+执行单项检查结果:
+
+```
+perfadm@lfgp000700749:/opt/huawei/perfadm/tool/script> gs_check -i CheckCPU
+Parsing the check items config file successfully
+Distribute the context file to remote hosts successfully
+Start to health check for the cluster. Total Items:1 Nodes:3
+
+Checking... [=========================] 1/1
+Start to analysis the check result
+CheckCPU....................................OK
+The item run on 3 nodes. success: 3
+
+Analysis the check result successfully
+Success. All check items run completed. Total:1 Success:1 Failed:0
+For more information please refer to /opt/huawei/wisequery/script/gspylib/inspection/output/CheckReport_201902193704661604.tar.gz
+```
+
+本地执行结果:
+
+```
+perfadm@lfgp000700749:/opt/huawei/perfadm/tool/script> gs_check -i CheckCPU -L
+
+2017-12-29 17:09:29 [NAM] CheckCPU
+2017-12-29 17:09:29 [STD] 检查主机CPU占用率,如果idle 大于30%并且iowait 小于 30%.则检查项通过,否则检查项不通过
+2017-12-29 17:09:29 [RST] OK
+
+2017-12-29 17:09:29 [RAW]
+Linux 4.4.21-69-default (lfgp000700749) 12/29/17 _x86_64_
+
+17:09:24 CPU %user %nice %system %iowait %steal %idle
+17:09:25 all 0.25 0.00 0.25 0.00 0.00 99.50
+17:09:26 all 0.25 0.00 0.13 0.00 0.00 99.62
+17:09:27 all 0.25 0.00 0.25 0.13 0.00 99.37
+17:09:28 all 0.38 0.00 0.25 0.00 0.13 99.25
+17:09:29 all 1.00 0.00 0.88 0.00 0.00 98.12
+Average: all 0.43 0.00 0.35 0.03 0.03 99.17
+```
+
+执行场景检查结果:
+
+```
+[perfadm@SIA1000131072 Check]$ gs_check -e inspect
+Parsing the check items config file successfully
+The below items require root privileges to execute:[CheckBlockdev CheckIOrequestqueue CheckIOConfigure CheckCheckMultiQueue CheckFirewall CheckSshdService CheckSshdConfig CheckCrondService CheckNoCheckSum CheckSctpSeProcMemory CheckBootItems CheckFilehandle CheckNICModel CheckDropCache]
+Please enter root privileges user[root]:root
+Please enter password for user[root]:
+Please enter password for user[root] on the node[10.244.57.240]:
+Check root password connection successfully
+Distribute the context file to remote hosts successfully
+Start to health check for the cluster. Total Items:59 Nodes:2
+
+Checking... [ ] 21/59
+Checking... [=========================] 59/59
+Start to analysis the check result
+CheckClusterState...........................OK
+The item run on 2 nodes. success: 2
+
+CheckDBParams...............................OK
+The item run on 1 nodes. success: 1
+
+CheckDebugSwitch............................OK
+The item run on 2 nodes. success: 2
+
+CheckDirPermissions.........................OK
+The item run on 2 nodes. success: 2
+
+CheckReadonlyMode...........................OK
+The item run on 1 nodes. success: 1
+
+CheckEnvProfile.............................OK
+The item run on 2 nodes. success: 2 (consistent)
+The success on all nodes value:
+GAUSSHOME /usr1/gaussdb/app
+LD_LIBRARY_PATH /usr1/gaussdb/app/lib
+PATH /usr1/gaussdb/app/bin
+
+
+CheckBlockdev...............................OK
+The item run on 2 nodes. success: 2
+
+CheckCurConnCount...........................OK
+The item run on 1 nodes. success: 1
+
+CheckCursorNum..............................OK
+The item run on 1 nodes. success: 1
+
+CheckPgxcgroup..............................OK
+The item run on 1 nodes. success: 1
+
+CheckDiskFormat.............................OK
+The item run on 2 nodes. success: 2
+
+CheckSpaceUsage.............................OK
+The item run on 2 nodes. success: 2
+
+CheckInodeUsage.............................OK
+The item run on 2 nodes. success: 2
+
+CheckSwapMemory.............................OK
+The item run on 2 nodes. success: 2
+
+CheckLogicalBlock...........................OK
+The item run on 2 nodes. success: 2
+
+CheckIOrequestqueue.....................WARNING
+The item run on 2 nodes. warning: 2
+The warning[host240,host157] value:
+On device (vdb) 'IO Request' RealValue '256' ExpectedValue '32768'
+On device (vda) 'IO Request' RealValue '256' ExpectedValue '32768'
+
+CheckMaxAsyIOrequests.......................OK
+The item run on 2 nodes. success: 2
+
+CheckIOConfigure............................OK
+The item run on 2 nodes. success: 2
+
+CheckMTU....................................OK
+The item run on 2 nodes. success: 2 (consistent)
+The success on all nodes value:
+1500
+
+CheckPing...................................OK
+The item run on 2 nodes. success: 2
+
+CheckRXTX...................................NG
+The item run on 2 nodes. ng: 2
+The ng[host240,host157] value:
+NetWork[eth0]
+RX: 256
+TX: 256
+
+
+CheckNetWorkDrop............................OK
+The item run on 2 nodes. success: 2
+
+CheckMultiQueue.............................OK
+The item run on 2 nodes. success: 2
+
+CheckEncoding...............................OK
+The item run on 2 nodes. success: 2 (consistent)
+The success on all nodes value:
+LANG=en_US.UTF-8
+
+CheckFirewall...............................OK
+The item run on 2 nodes. success: 2
+
+CheckKernelVer..............................OK
+The item run on 2 nodes. success: 2 (consistent)
+The success on all nodes value:
+3.10.0-957.el7.x86_64
+
+CheckMaxHandle..............................OK
+The item run on 2 nodes. success: 2
+
+CheckNTPD...................................OK
+host240: NTPD service is running, 2020-06-02 17:00:28
+host157: NTPD service is running, 2020-06-02 17:00:06
+
+
+CheckOSVer..................................OK
+host240: The current OS is centos 7.6 64bit.
+host157: The current OS is centos 7.6 64bit.
+
+
+CheckSysParams..........................WARNING
+The item run on 2 nodes. warning: 2
+The warning[host240,host157] value:
+Warning reason: variable 'net.ipv4.tcp_retries1' RealValue '3' ExpectedValue '5'.
+Warning reason: variable 'net.ipv4.tcp_syn_retries' RealValue '6' ExpectedValue '5'.
+Warning reason: variable 'net.sctp.path_max_retrans' RealValue '5' ExpectedValue '10'.
+Warning reason: variable 'net.sctp.max_init_retransmits' RealValue '8' ExpectedValue '10'.
+
+
+CheckTHP....................................OK
+The item run on 2 nodes. success: 2
+
+CheckTimeZone...............................OK
+The item run on 2 nodes. success: 2 (consistent)
+The success on all nodes value:
++0800
+
+CheckCPU....................................OK
+The item run on 2 nodes. success: 2
+
+CheckSshdService............................OK
+The item run on 2 nodes. success: 2
+
+CheckSshdConfig.........................WARNING
+The item run on 2 nodes. warning: 2
+The warning[host240,host157] value:
+
+Warning reason: UseDNS parameter is not set; expected: no
+
+CheckCrondService...........................OK
+The item run on 2 nodes. success: 2
+
+CheckStack..................................OK
+The item run on 2 nodes. success: 2 (consistent)
+The success on all nodes value:
+8192
+
+CheckNoCheckSum.............................OK
+The item run on 2 nodes. success: 2 (consistent)
+The success on all nodes value:
+Nochecksum value is N,Check items pass.
+
+CheckSysPortRange...........................OK
+The item run on 2 nodes. success: 2
+
+CheckMemInfo................................OK
+The item run on 2 nodes. success: 2 (consistent)
+The success on all nodes value:
+totalMem: 31.260929107666016G
+
+CheckHyperThread............................OK
+The item run on 2 nodes. success: 2
+
+CheckTableSpace.............................OK
+The item run on 1 nodes. success: 1
+
+CheckSctpService............................OK
+The item run on 2 nodes. success: 2
+
+CheckSysadminUser...........................OK
+The item run on 1 nodes. success: 1
+
+CheckGUCConsistent..........................OK
+All DN instance guc value is consistent.
+
+CheckMaxProcMemory..........................OK
+The item run on 1 nodes. success: 1
+
+CheckBootItems..............................OK
+The item run on 2 nodes. success: 2
+
+CheckHashIndex..............................OK
+The item run on 1 nodes. success: 1
+
+CheckPgxcRedistb............................OK
+The item run on 1 nodes. success: 1
+
+CheckNodeGroupName..........................OK
+The item run on 1 nodes. success: 1
+
+CheckTDDate.................................OK
+The item run on 1 nodes. success: 1
+
+CheckDilateSysTab...........................OK
+The item run on 1 nodes. success: 1
+
+CheckKeyProAdj..............................OK
+The item run on 2 nodes. success: 2
+
+CheckProStartTime.......................WARNING
+host157:
+STARTED COMMAND
+Tue Jun 2 16:57:18 2020 /usr1/dmuser/dmserver/metricdb1/server/bin/gaussdb --single_node -D /usr1/dmuser/dmb1/data -p 22204
+Mon Jun 1 16:15:15 2020 /usr1/gaussdb/app/bin/gaussdb -D /usr1/gaussdb/data/dn1 -M standby
+
+
+CheckFilehandle.............................OK
+The item run on 2 nodes. success: 2
+
+CheckRouting................................OK
+The item run on 2 nodes. success: 2
+
+CheckNICModel...............................OK
+The item run on 2 nodes. success: 2 (consistent)
+The success on all nodes value:
+version: 1.0.0
+model: Red Hat, Inc. Virtio network device
+
+
+CheckDropCache..........................WARNING
+The item run on 2 nodes. warning: 2
+The warning[host240,host157] value:
+No DropCache process is running
+
+CheckMpprcFile..............................NG
+The item run on 2 nodes. ng: 2
+The ng[host240,host157] value:
+There is no mpprc file
+
+Analysis the check result successfully
+Failed. All check items run completed. Total:59 Success:52 Warning:5 NG:2
+For more information please refer to /usr1/gaussdb/tool/script/gspylib/inspection/output/CheckReport_inspect611.tar.gz
+
+```
+
diff --git "a/content/zh/docs/Administratorguide/\346\243\200\346\237\245\345\212\236\346\263\225-2.md" "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\345\212\236\346\263\225-2.md"
new file mode 100644
index 000000000..3fada42dc
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\345\212\236\346\263\225-2.md"
@@ -0,0 +1,40 @@
+# 检查办法
+
+通过openGauss提供的性能统计工具gs\_checkperf可以对硬件性能进行检查。
+
+## 前提条件
+
+- openGauss运行状态正常。
+- 运行在数据库之上的业务运行正常。
+
+## 操作步骤
+
+1. 以操作系统用户omm登录数据库主节点。
+2. 执行如下命令对openGauss数据库进行性能检查。
+
+ ```
+ gs_checkperf
+ ```
+
+
+具体的性能统计项目请参见《openGauss 工具参考》中“服务端工具 \> gs\_checkperf \> 性能检查项”。
+
+## 示例
+
+以简要格式在屏幕上显示性能统计结果。
+
+```
+gs_checkperf -i pmk -U omm
+Cluster statistics information:
+ Host CPU busy time ratio : 1.43 %
+ MPPDB CPU time % in busy time : 1.88 %
+ Shared Buffer Hit ratio : 99.96 %
+ In-memory sort ratio : 100.00 %
+ Physical Reads : 4
+ Physical Writes : 25
+ DB size : 70 MB
+ Total Physical writes : 25
+ Active SQL count : 2
+ Session count : 3
+```
+
diff --git "a/content/zh/docs/Administratorguide/\346\243\200\346\237\245\345\212\236\346\263\225.md" "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\345\212\236\346\263\225.md"
new file mode 100644
index 000000000..bdcd4d55c
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\345\212\236\346\263\225.md"
@@ -0,0 +1,60 @@
+# 检查办法
+
+通过openGauss提供的gs\_checkos工具可以完成操作系统状态检查。
+
+## 前提条件
+
+- 当前的硬件和网络环境正常。
+- 各主机间root互信状态正常。
+- 只能使用root用户执行gs\_checkos命令。
+
+## 操作步骤
+
+1. 以root用户身份登录任意一台服务器。
+2. 执行如下命令对openGauss节点服务器的OS参数进行检查。
+
+ ```
+ gs_checkos -i A
+ ```
+
+ 检查节点服务器的OS参数的目的是为了保证openGauss正常通过预安装,并且在安装成功后可以安全高效的运行。详细的检查项目请参见《openGauss 工具参考》中“服务端工具 \> gs\_checkos”章节。
+
+
+## 示例
+
+执行gs\_checkos前需要先使用gs\_preinstall工具执行前置脚本,准备环境。以参数"A"为例。
+
+```
+gs_checkos -i A
+Checking items:
+ A1. [ OS version status ] : Normal
+ A2. [ Kernel version status ] : Normal
+ A3. [ Unicode status ] : Normal
+ A4. [ Time zone status ] : Normal
+ A5. [ Swap memory status ] : Normal
+ A6. [ System control parameters status ] : Normal
+ A7. [ File system configuration status ] : Normal
+ A8. [ Disk configuration status ] : Normal
+ A9. [ Pre-read block size status ] : Normal
+ A10.[ IO scheduler status ] : Normal
+ A11.[ Network card configuration status ] : Normal
+ A12.[ Time consistency status ] : Warning
+ A13.[ Firewall service status ] : Normal
+ A14.[ THP service status ] : Normal
+Total numbers:14. Abnormal numbers:0. Warning number:1.
+```
+
+以参数"B"为例。
+
+```
+gs_checkos -i B
+Setting items:
+ B1. [ Set system control parameters ] : Normal
+ B2. [ Set file system configuration value ] : Normal
+ B3. [ Set pre-read block size value ] : Normal
+ B4. [ Set IO scheduler value ] : Normal
+ B5. [ Set network card configuration value ] : Normal
+ B6. [ Set THP service ] : Normal
+Total numbers:6. Abnormal numbers:0. Warning number:0.
+```
+
diff --git "a/content/zh/docs/Administratorguide/\346\243\200\346\237\245\345\222\214\346\270\205\347\220\206\346\227\245\345\277\227.md" "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\345\222\214\346\270\205\347\220\206\346\227\245\345\277\227.md"
new file mode 100644
index 000000000..bfc8ef841
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\345\222\214\346\270\205\347\220\206\346\227\245\345\277\227.md"
@@ -0,0 +1,11 @@
+# 检查和清理日志
+
+日志是检查系统运行及故障定位的关键手段。建议按月度例行查看操作系统日志及数据库的运行日志。同时,随着时间的推移,日志的增加会占用较多的磁盘空间。建议按月度清理数据库的运行日志。
+
+- **[检查操作系统日志](检查操作系统日志.md)**
+
+- **[检查openGauss运行日志](检查openGauss运行日志.md)**
+
+- **[清理运行日志](清理运行日志.md)**
+
+
diff --git "a/content/zh/docs/Administratorguide/\346\243\200\346\237\245\345\272\224\347\224\250\350\277\236\346\216\245\346\225\260.md" "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\345\272\224\347\224\250\350\277\236\346\216\245\346\225\260.md"
new file mode 100644
index 000000000..ec6d1e51e
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\345\272\224\347\224\250\350\277\236\346\216\245\346\225\260.md"
@@ -0,0 +1,126 @@
+# 检查应用连接数
+
+如果应用程序与数据库的连接数超过最大值,则新的连接无法建立。建议每天检查连接数,及时释放空闲的连接或者增加最大连接数。
+
+## 操作步骤
+
+1. 以操作系统用户omm登录数据库主节点。
+2. 使用如下命令连接数据库。
+
+ ```
+ gsql -d postgres -p 8000
+ ```
+
+ postgres为需要连接的数据库名称,8000为数据库主节点的端口号。
+
+ 连接成功后,系统显示类似如下信息:
+
+ ```
+ gsql ((openGauss 1.0 build 290d125f) compiled at 2020-05-08 02:59:43 commit 2143 last mr 131
+ Non-SSL connection (SSL connection is recommended when requiring high-security)
+ Type "help" for help.
+
+ postgres=#
+ ```
+
+3. 执行如下SQL语句查看连接数。
+
+ ```
+ postgres=# SELECT count(*) FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;
+ ```
+
+ 显示类似如下的信息,其中2表示当前有两个应用连接到数据库。
+
+ ```
+ count
+ -------
+ 2
+ (1 row)
+ ```
+
+4. 查看现有最大连接数。
+
+ ```
+ postgres=# SHOW max_connections;
+ ```
+
+ 显示信息如下,其中200为现在的最大连接数。
+
+ ```
+ max_connections
+ -----------------
+ 200
+ (1 row)
+ ```
+
+
+## 异常处理
+
+如果显示的连接数接近数据库的最大连接数max\_connections,则需要考虑清理现有连接数或者增加新的连接数。
+
+1. 执行如下SQL语句,查看state字段等于idle,且state\_change字段长时间没有更新过的连接信息。
+
+ ```
+ postgres=# SELECT * FROM pg_stat_activity where state='idle' order by state_change;
+ ```
+
+ 显示类似如下的信息:
+
+ ```
+ datid | datname | pid | usesysid | usename | application_name | client_addr
+ | client_hostname | client_port | backend_start | xact_start | quer
+ y_start | state_change | waiting | enqueue | state | resource_pool
+ | query
+ -------+----------+-----------------+----------+----------+------------------+---------------
+ -+-----------------+-------------+-------------------------------+------------+--------------
+ -----------------+-------------------------------+---------+---------+-------+---------------
+ +----------------------------------------------
+ 13626 | postgres | 140390162233104 | 10 | gaussdba | |
+ | | -1 | 2016-07-15 14:08:59.474118+08 | | 2016-07-15 14
+ :09:04.496769+08 | 2016-07-15 14:09:04.496975+08 | f | | idle | default_pool
+ | select count(group_name) from pgxc_group;
+ 13626 | postgres | 140390132872976 | 10 | gaussdba | cn_5002 | 10.180.123.163
+ | | 48614 | 2016-07-15 14:11:16.014871+08 | | 2016-07-15 14
+ :21:17.346045+08 | 2016-07-15 14:21:17.346095+08 | f | | idle | default_pool
+ | SET SESSION AUTHORIZATION DEFAULT;RESET ALL;
+ (2 rows)
+ ```
+
+2. 释放空闲的连接数。
+
+ 查看每个连接,并与此连接的使用者确认是否可以断开连接,或执行如下SQL语句释放连接。其中,pid为上一步查询中空闲连接所对应的pid字段值。
+
+ ```
+ postgres=# SELECT pg_terminate_backend(140390132872976);
+ ```
+
+ 显示类似如下的信息:
+
+ ```
+ postgres=# SELECT pg_terminate_backend(140390132872976);
+ pg_terminate_backend
+ ----------------------
+ t
+ (1 row)
+ ```
+
+ 如果没有可释放的连接,请执行下一步。
+
+3. 增加最大连接数。
+
+ ```
+ gs_guc set -D /gaussdb/data/dbnode -c "max_connections= 800"
+ ```
+
+ 其中800为新修改的连接数。
+
+4. 重启数据库服务使新的设置生效。
+
+ > **说明:**
+ >重启openGauss操作会导致用户执行操作中断,请在操作之前规划好合适的执行窗口。
+
+ ```
+ gs_om -t stop && gs_om -t start
+ ```
+
+
diff --git "a/content/zh/docs/Administratorguide/\346\243\200\346\237\245\346\223\215\344\275\234\347\263\273\347\273\237\345\217\202\346\225\260.md" "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\346\223\215\344\275\234\347\263\273\347\273\237\345\217\202\346\225\260.md"
new file mode 100644
index 000000000..6d8b5520b
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\346\223\215\344\275\234\347\263\273\347\273\237\345\217\202\346\225\260.md"
@@ -0,0 +1,7 @@
+# 检查操作系统参数
+
+- **[检查办法](检查办法.md)**
+
+- **[异常处理](异常处理.md)**
+
+
diff --git "a/content/zh/docs/Administratorguide/\346\243\200\346\237\245\346\223\215\344\275\234\347\263\273\347\273\237\346\227\245\345\277\227.md" "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\346\223\215\344\275\234\347\263\273\347\273\237\346\227\245\345\277\227.md"
new file mode 100644
index 000000000..6f349e852
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\346\223\215\344\275\234\347\263\273\347\273\237\346\227\245\345\277\227.md"
@@ -0,0 +1,14 @@
+# 检查操作系统日志
+
+建议按月检查操作系统日志,排除操作系统运行异常隐患。
+
+## 操作步骤
+
+执行如下命令查看操作系统日志文件。
+
+```
+vim /var/log/messages
+```
+
+关注其中近一个月出现的kernel、error、fatal等字样,根据系统报警信息进行处理。
+
diff --git "a/content/zh/docs/Administratorguide/\346\243\200\346\237\245\346\225\260\346\215\256\345\272\223\346\200\247\350\203\275.md" "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\346\225\260\346\215\256\345\272\223\346\200\247\350\203\275.md"
new file mode 100644
index 000000000..8304f6c30
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\346\225\260\346\215\256\345\272\223\346\200\247\350\203\275.md"
@@ -0,0 +1,7 @@
+# 检查数据库性能
+
+- **[检查办法](检查办法-2.md)**
+
+- **[异常处理](异常处理-3.md)**
+
+
diff --git "a/content/zh/docs/Administratorguide/\346\243\200\346\237\245\346\227\266\351\227\264\344\270\200\350\207\264\346\200\247.md" "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\346\227\266\351\227\264\344\270\200\350\207\264\346\200\247.md"
new file mode 100644
index 000000000..77045f05d
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\243\200\346\237\245\346\227\266\351\227\264\344\270\200\350\207\264\346\200\247.md"
@@ -0,0 +1,46 @@
+# 检查时间一致性
+
+数据库事务一致性通过逻辑时钟保证,与操作系统时间无关,但是系统时间不一致会导致诸多潜在问题,主要是后台运维和监控功能异常,因此在月度检查时建议检查各个节点的时间一致性。
+
+## 操作步骤
+
+1. 以操作系统用户omm登录数据库主节点。
+2. 创建记录openGauss各节点的配置文件(_mpphosts文件目录_用户可随意指定,建议放在/tmp下)。
+
+ ```
+ vim /tmp/mpphosts
+ ```
+
+ 增加各节点的主机名称。
+
+ ```
+ plat1
+ plat2
+ plat3
+ ```
+
+3. 保存配置文件。
+
+ ```
+ :wq!
+ ```
+
+4. 执行如下命令,输出各节点上的时间到“/tmp/sys\_ctl-os1.log”文件中。
+
+ ```
+ for ihost in `cat /tmp/mpphosts`; do ssh -n -q $ihost "hostname;date"; done > /tmp/sys_ctl-os1.log
+ ```
+
+5. 根据输出确认各个节点的时间一致性,节点之间时间差异不能超过30秒。
+
+ ```
+ cat /tmp/sys_ctl-os1.log
+ plat1
+ Thu Feb 9 16:46:38 CST 2017
+ plat2
+ Thu Feb 9 16:46:49 CST 2017
+ plat3
+ Thu Feb 9 16:46:14 CST 2017
+ ```
+
+
diff --git "a/content/zh/docs/Administratorguide/\346\246\202\350\277\260.md" "b/content/zh/docs/Administratorguide/\346\246\202\350\277\260.md"
new file mode 100644
index 000000000..60b8376b5
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\246\202\350\277\260.md"
@@ -0,0 +1,103 @@
+# 概述
+
+数据备份是保护数据安全的重要手段之一,为了更好的保护数据安全,openGauss数据库支持两种备份恢复类型、多种备份恢复方案,备份和恢复过程中提供数据的可靠性保障机制。
+
+备份与恢复类型可分为逻辑备份与恢复、物理备份与恢复。
+
+- 逻辑备份与恢复:通过逻辑导出对数据进行备份,逻辑备份只能基于备份时刻进行数据转储,所以恢复时也只能恢复到备份时保存的数据。对于故障点和备份点之间的数据,逻辑备份无能为力,逻辑备份适合备份那些很少变化的数据,当这些数据因误操作被损坏时,可以通过逻辑备份进行快速恢复。如果通过逻辑备份进行全库恢复,通常需要重建数据库,导入备份数据来完成,对于可用性要求很高的数据库,这种恢复时间太长,通常不被采用。由于逻辑备份具有平台无关性,所以更为常见的是,逻辑备份被作为一个数据迁移及移动的主要手段。
+- 物理备份与恢复:通过物理文件拷贝的方式对数据库进行备份,以磁盘块为基本单位将数据从主机复制到备机。通过备份的数据文件及归档日志等文件,数据库可以进行完全恢复。物理备份速度快,一般被用作对数据进行备份和恢复,用于全量备份的场景。通过合理规划,可以低成本进行备份与恢复。
+
+ 以下为openGauss支持的两类数据备份恢复方案,备份方案也决定了当异常发生时该如何恢复。
+
+ **表 1** 两种备份恢复类型对比
+
+
+ 备份类型
+ |
+ 应用场景
+ |
+ 支持的介质
+ |
+ 优缺点
+ |
+
+
+ 逻辑备份与恢复
+ |
+ 适合于数据量小的场景。
+ 目前用于表备份恢复,可以备份恢复单表和多表。
+ |
+
+ |
+ 可按用户需要进行指定对象的备份和恢复,灵活度高。
+ 当数据量大时,备份效率低。
+ |
+
+ 物理备份与恢复
+ |
+ 适用于数据量大的场景,主要用于全量数据备份恢复,也可对整个数据库中的WAL归档日志和运行日志进行备份恢复。
+ |
+ 数据量大时,备份效率高。
+ |
+
+
+
+
+ 当需要进行备份恢复操作时,主要从以下四个方面考虑数据备份方案。
+
+ - 备份对业务的影响在可接受范围。
+ - 数据库恢复效率。
+
+ 为尽量减小数据库故障的影响,要使恢复时间减到最少,从而使恢复的效率达到最高。
+
+ - 数据可恢复程度。
+
+ 当数据库失效后,要尽量减少数据损失。
+
+ - 数据库恢复成本。
+
+ 在现网选择备份策略时参考的因素比较多,如备份对象、数据大小、网络配置等,[表2](#zh-cn_topic_0237088826_zh-cn_topic_0100209712_table1179095017218)列出了可用的备份策略和每个备份策略的适用场景。
+
+ **表 2** 备份策略典型场景
+
+
+ 备份策略
+ |
+ 关键性能因素
+ |
+ 典型数据量
+ |
+ 性能规格
+ |
+
+
+ 集群备份
+ |
+
+ |
+ 数据:PB级
+ 对象:约100万个
+ |
+ 备份:
+ - 每个主机80 Mbit/s(NBU/EISOO+磁盘)
- 约90%磁盘I/O速率(SSD/HDD)
+ |
+
+ 表备份
+ |
+
+ |
+ 数据:10 TB级
+ |
+ 备份:基于查询性能速度+I/O速度
+ 说明: 多表备份时,备份耗时计算方式:
+ 总时间 = 表数量 x 起步时间 + 数据总量 / 数据备份速度
+ 其中:
+ - 磁盘起步时间为5s左右,NBU起步时间比DISK长(取决于NBU部署方案)。
- 数据备份速度为单节点50MB/s左右(基于1GB大小的表,物理机备份到本地磁盘得出此速率)。
+ 表越小,备份性能更低。
+
+ |
+
+
+
+
+
diff --git "a/content/zh/docs/Administratorguide/\346\270\205\347\220\206\350\277\220\350\241\214\346\227\245\345\277\227.md" "b/content/zh/docs/Administratorguide/\346\270\205\347\220\206\350\277\220\350\241\214\346\227\245\345\277\227.md"
new file mode 100644
index 000000000..9d4501d17
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\346\270\205\347\220\206\350\277\220\350\241\214\346\227\245\345\277\227.md"
@@ -0,0 +1,25 @@
+# 清理运行日志
+
+数据库运行过程中会产生大量运行日志,占用大量的磁盘空间,建议清理过期日志文件,只保留一个月的日志。
+
+## 操作步骤
+
+1. 以操作系统用户omm登录数据库主节点。
+2. 清理日志。
+ 1. 将超过1个月的日志备份到其他磁盘。
+ 2. 进入日志存放目录。
+
+ ```
+ cd $GAUSSLOG
+ ```
+
+ 3. 进入相应的子目录,使用如下方式删除1个月之前产生的日志。
+
+ ```
+ rm 日志名称
+ ```
+
+ 日志文件的命名格式为“postgresql-年-月-日\_HHMMSS”。
+
+
+
diff --git "a/content/zh/docs/Administratorguide/\347\211\251\347\220\206\345\244\207\344\273\275\346\201\242\345\244\215.md" "b/content/zh/docs/Administratorguide/\347\211\251\347\220\206\345\244\207\344\273\275\346\201\242\345\244\215.md"
new file mode 100644
index 000000000..4e4c4a460
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\347\211\251\347\220\206\345\244\207\344\273\275\346\201\242\345\244\215.md"
@@ -0,0 +1,5 @@
+# 物理备份恢复
+
+- **[gs\_basebackup](gs_basebackup.md)**
+
+
diff --git "a/content/zh/docs/Administratorguide/\347\212\266\346\200\201\346\237\245\350\257\242.md" "b/content/zh/docs/Administratorguide/\347\212\266\346\200\201\346\237\245\350\257\242.md"
new file mode 100644
index 000000000..70c51dae9
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\347\212\266\346\200\201\346\237\245\350\257\242.md"
@@ -0,0 +1,220 @@
+# 状态查询
+
+## 背景信息
+
+openGauss支持查看整个openGauss的状态,通过查询结果确认openGauss或者单个主机的运行状态是否正常。
+
+## 前提条件
+
+openGauss已经启动。
+
+## 操作步骤
+
+1. 以操作系统用户omm登录数据库主节点。
+2. 使用如下命令查询openGauss状态:
+
+ ```
+ gs_om -t status --detail
+ ```
+
+ openGauss状态显示结果的参数说明请参见[表1](#zh-cn_topic_0237088790_table9610118112610)。
+
+ 若要查询某主机上的实例状态,请在命令中增加“-h”项。示例如下:
+
+ ```
+ gs_om -t status -h plat2
+ ```
+
+ 其中,plat2为待查询主机的名称。
+
+
+## 参数说明
+
+**表 1** 节点角色说明
+
+
+字段
+ |
+字段含义
+ |
+字段值
+ |
+
+
+cluster_state
+ |
+openGauss状态。显示整个openGauss是否运行正常。
+ |
+- Normal:表示openGauss可用,且数据有冗余备份。所有进程都在运行,主备关系正常。
- Unavailable:表示openGauss不可用。
- Degraded:表示openGauss可用,但存在故障的数据库节点、数据库主节点实例。
+ |
+
+node
+ |
+主机名称
+ |
+表示该实例所在的主机名称。多AZ时会显示AZ编号。
+ |
+
+node_ip
+ |
+主机IP
+ |
+表示该实例所在的主机IP。
+ |
+
+instance
+ |
+实例ID
+ |
+表示该实例的ID。
+ |
+
+state
+ |
+实例角色
+ |
+- Normal: 表示单主机实例
- Primary:表示实例为主实例。
- Standby:表示实例为备实例。
- Secondary:表示实例为从备实例。
- Pending:表示该实例在仲裁阶段。
- Unknown:表示实例状态未知。
- Down: 表示实例处于宕机状态
- Abnormal: 表示节点处于异常状态
- Manually stopped: 表示节点已经被手动停止
+ |
+
+
+
+
+每个角色也存在不同的状态, 例如启动, 连接等, 其各个状态说明如下
+
+**表 2** 节点状态说明
+
+
+状态
+ |
+字段含义
+ |
+
+
+Normal
+ |
+表示节点启动正常
+ |
+
+Need repair
+ |
+当前节点需要修复
+ |
+
+Starting
+ |
+节点正在启动中
+ |
+
+Wait promoting
+ |
+节点正等待升级中, 例如备机向主机发送升级请求后, 正在等待主机回应时的状态
+ |
+
+Promoting
+ |
+备节点正在升级为主节点的状态
+ |
+
+Demoting
+ |
+节点正在降级中, 如主机正在降为备机中
+ |
+
+Building
+ |
+备机启动失败, 需要重建,
+ |
+
+Catchup
+ |
+备节点正在追赶主节点
+ |
+
+Coredump
+ |
+节点程序崩溃
+ |
+
+Unknown
+ |
+节点状态未知
+ |
+
+
+
+
+当节点出现Need repair状态时, 可能需要对该节点进行重建使其恢复正常, 通常情况下, 节点重建原因说明如下:
+
+表3 节点重建原因说明
+
+
+状态
+ |
+字段含义
+ |
+
+
+Normal
+ |
+表示节点启动正常
+ |
+
+WAL segment removed
+ |
+主机日志WAL日志不存在, 备机日志比主机日志新
+ |
+
+Disconnect
+ |
+备机不能连接主机
+ |
+
+Version not matched
+ |
+主备二进制版本不一致
+ |
+
+Mode not matched
+ |
+主备角色不匹配, 例如两个备机互联
+ |
+
+System id not matched
+ |
+主备数据库系统id不一致, 主备双机要求System ID必须一致
+ |
+
+Timeline not matched
+ |
+日志时间线不一致
+ |
+
+Unknown
+ |
+其他原因
+ |
+
+
+
+
+1.
+
+## 示例
+
+查看openGauss详细状态信息,含实例状态信息。
+
+```
+gs_om -t status --detail
+[ Cluster State ]
+
+cluster_state : Normal
+redistributing : No
+current_az : AZ_ALL
+
+[ Datanode State ]
+
+node node_ip instance state | node node_ip instance state
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+1 pekpopgsci00235 10.244.62.204 6001 /opt/gaussdb/cluster/data/dn1 P Primary Normal | 2 pekpopgsci00238 10.244.61.81 6002 /opt/gaussdb/cluster/data/dn1 S Standby Normal
+```
+
diff --git "a/content/zh/docs/Administratorguide/\347\224\237\346\210\220\351\205\215\347\275\256\346\226\207\344\273\266.md" "b/content/zh/docs/Administratorguide/\347\224\237\346\210\220\351\205\215\347\275\256\346\226\207\344\273\266.md"
new file mode 100644
index 000000000..e8f34b4bb
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\347\224\237\346\210\220\351\205\215\347\275\256\346\226\207\344\273\266.md"
@@ -0,0 +1,61 @@
+# 生成配置文件
+
+## 背景信息
+
+在openGauss使用过程中,如果静态配置文件无意损坏后,会影响openGauss感知openGauss拓扑结构和主备关系gs\_om工具生成静态配置文件,替换已经损坏的配置文件,openGauss的正常运行。
+
+## 前置条件
+
+无。
+
+## 操作步骤
+
+1. 以操作系统用户omm登录数据库主节点。
+2. 执行如下命令会在本服务器指定目录下生成配置文件。
+
+ ```
+ gs_om -t generateconf -X /opt/software/openGauss/clusterconfig.xml --distribute
+ ```
+
+ /opt/software/openGauss/clusterconfig.xml为openGauss安装时XML配置文件的存放目录。
+
+ > **说明:**
+ >1. 执行命令后,日志信息中会有新文件的存放的目录。以一主两备环境为例,打开新文件存放目录,会出现3个以主机名命名的配置文件,需要用这3个文件分别替换对应主机的配置文件。
+ >2. 若不使用--distribute参数,需执行[3](#zh-cn_topic_0237088792_zh-cn_topic_0059777801_lc1ce55d572e44beea3e47b1b427fae3e)将静态配置文件分配到对应节点;若使用--distribute参数,则会将生成的静态配置文件自动分配到对应节点,无需执行[3](#zh-cn_topic_0237088792_zh-cn_topic_0059777801_lc1ce55d572e44beea3e47b1b427fae3e)。
+
+3. (可选)分别替换3台主机的/opt/gaussdb/app/bin目录下损坏的静态配置文件。
+
+ 这里以其中一台主机为例进行介绍。
+
+ ```
+ mv /opt/huawei/wisequery/script/static_config_files/cluster_static_config_SIA1000056771 /opt/gaussdb/app/bin/cluster_static_config
+ ```
+
+
+## 示例
+
+在openGauss中的任意主机上执行如下命令,生成配置文件:
+
+```
+gs_om -t generateconf -X /opt/software/openGauss/clusterconfig.xml --distribute
+Generating static configuration files for all nodes.
+Creating temp directory to store static configuration files.
+Successfully created the temp directory.
+Generating static configuration files.
+Successfully generated static configuration files.
+Static configuration files for all nodes are saved in /opt/huawei/Bigdata/mppdb/wisequery/script/static_config_files.
+Distributing static configuration files to all nodes.
+Successfully distributed static configuration files.
+```
+
+打开生成的配置文件目录,会看到新生成的3个文件:
+
+```
+cd /opt/huawei/Bigdata/mppdb/wisequery/script/static_config_files
+ll
+total 456
+-rwxr-xr-x 1 omm dbgrp 155648 2016-07-13 15:51 cluster_static_config_plat1
+-rwxr-xr-x 1 omm dbgrp 155648 2016-07-13 15:51 cluster_static_config_plat2
+-rwxr-xr-x 1 omm dbgrp 155648 2016-07-13 15:51 cluster_static_config_plat3
+```
+
diff --git "a/content/zh/docs/Administratorguide/\347\263\273\347\273\237\346\227\245\345\277\227.md" "b/content/zh/docs/Administratorguide/\347\263\273\347\273\237\346\227\245\345\277\227.md"
new file mode 100644
index 000000000..df5cac2f4
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\347\263\273\347\273\237\346\227\245\345\277\227.md"
@@ -0,0 +1,25 @@
+# 系统日志
+
+openGauss运行时数据库节点以及openGauss安装部署时产生的日志统称为系统日志。如果openGauss在运行时发生故障,可以通过这些系统日志及时定位故障发生的原因,根据日志内容制定恢复openGauss的方法。
+
+## 日志文件存储路径
+
+数据库节点的运行日志放在“/var/log/gaussdb/用户名/pg\_log”中各自对应的目录下。
+
+OM openGauss安装卸载时产生的日志放在“/var/log/gaussdb/用户名/om”目录下。
+
+## 日志文件命名格式
+
+数据库节点运行日志的命名规则:
+
+postgresql-创建时间.log
+
+默认情况下,每日0点或者日志文件大于16MB或者数据库实例(数据库节点)重新启动后,会生成新的日志文件。
+
+## 日志内容说明
+
+- 数据库节点每一行日志内容的默认格式:
+
+ 日期+时间+时区+用户名称+数据库名称+会话ID+日志级别+日志内容
+
+
diff --git "a/content/zh/docs/Administratorguide/\351\200\273\350\276\221\345\244\207\344\273\275\346\201\242\345\244\215.md" "b/content/zh/docs/Administratorguide/\351\200\273\350\276\221\345\244\207\344\273\275\346\201\242\345\244\215.md"
new file mode 100644
index 000000000..70811ad09
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\351\200\273\350\276\221\345\244\207\344\273\275\346\201\242\345\244\215.md"
@@ -0,0 +1,11 @@
+# 逻辑备份恢复
+
+- **[gs\_dump](gs_dump.md)**
+
+- **[gs\_dumpall](gs_dumpall.md)**
+
+- **[gs\_restore](gs_restore.md)**
+
+- **[gs\_backup](gs_backup.md)**
+
+
diff --git "a/content/zh/docs/Administratorguide/\351\253\230\345\215\261\346\223\215\344\275\234\344\270\200\350\247\210\350\241\250.md" "b/content/zh/docs/Administratorguide/\351\253\230\345\215\261\346\223\215\344\275\234\344\270\200\350\247\210\350\241\250.md"
new file mode 100644
index 000000000..15c487fdd
--- /dev/null
+++ "b/content/zh/docs/Administratorguide/\351\253\230\345\215\261\346\223\215\344\275\234\344\270\200\350\247\210\350\241\250.md"
@@ -0,0 +1,98 @@
+# 高危操作一览表
+
+各项操作请严格遵守指导书操作,同时如下高危操作禁止随意执行。
+
+[表1](#zh-cn_topic_0237088894_zh-cn_topic_0059777750_t725e2ece7f7a4d5f962b2c314e7e836b)中描述在产品的操作与维护阶段,进行日常操作时应注意的严禁操作。
+
+**表 1** 禁用操作
+
+
+操作名称
+ |
+操作风险
+ |
+
+
+严禁修改数据目录下文件名,权限,内容不能修改,不能删除内容。
+ |
+导致数据库节点实例出现严重错误,并且无法修复。
+ |
+
+严禁删除数据库系统表或系统表数据。
+ |
+删除系统表将导致无法正常进行业务操作。
+ |
+
+
+
+
+[表2](#zh-cn_topic_0237088894_zh-cn_topic_0059777750_tf7f1e2a0747f496baffa365814127a3c)中描述在产品的操作与维护阶段,进行日常操作时应注意的高危操作。
+
+**表 2** 高危操作
+
+
+操作分类
+ |
+操作名称
+ |
+操作风险
+ |
+风险等级
+ |
+规避措施
+ |
+重大操作观察项目
+ |
+
+
+数据库
+ |
+不能直接在配置文件中手动修改端口号。
+ |
+导致数据库启动不了或者连接不上。
+ |
+▲▲▲▲▲
+ |
+尽量使用工具修改,不要手动操作
+ |
+无。
+ |
+
+不能随意修改pg_hba.conf配置文件中的内容。
+ |
+导致客户端连接不上。
+ |
+▲▲▲▲▲
+ |
+严格根据产品手册操作。
+ |
+无。
+ |
+
+不能手动修改pg_xlog的内容。
+ |
+导致数据库无法启动,数据不一致。
+ |
+▲▲▲▲▲
+ |
+尽量使用工具修改,不要手动操作。
+ |
+无。
+ |
+
+作业
+ |
+使用kill -9终止作业进程。
+ |
+导致作业占用的系统资源无法释放。
+ |
+▲▲▲
+ |
+尽量登录数据库使用pg_terminate_backend,pg_cancel_backend操作终止作业,或使用Ctrl+C终止作业进程。
+ |
+观察资源使用情况。
+ |
+
+
+
+
diff --git a/content/zh/docs/Compilationguide/FAQ.md b/content/zh/docs/Compilationguide/FAQ.md
index d457fe0d3..b3357af9d 100644
--- a/content/zh/docs/Compilationguide/FAQ.md
+++ b/content/zh/docs/Compilationguide/FAQ.md
@@ -2,6 +2,10 @@
- **[如何清除编译过程中生成的临时文件](如何清除编译过程中生成的临时文件.md)**
-- **[如何解决“Configure error: Ccompiler cannot create executables”报错](如何解决-Configure-error-Ccompiler-cannot-create-executables-报错.md)**
+- **[如何解决“Configure error: C compiler cannot create executables”报错](如何解决-Configure-error-C-compiler-cannot-create-executables-报错.md)**
+
+- **[如何解决 "g++: fatal error: Killed signal terminated program cclplus" 报错](如何解决-g++-fatal-error-Killed-signal-terminated-program-cclplus-报错.md)**
+
+- **[如何解决"out of memory allocating xxx bytes after a total of xxx bytes"报错](如何解决-out-of-memory-allocating-xxx-bytes-after-a-total-of-xxx-bytes-报错.md)**
diff --git "a/content/zh/docs/Compilationguide/build-sh\344\273\213\347\273\215.md" "b/content/zh/docs/Compilationguide/build-sh\344\273\213\347\273\215.md"
new file mode 100644
index 000000000..885363774
--- /dev/null
+++ "b/content/zh/docs/Compilationguide/build-sh\344\273\213\347\273\215.md"
@@ -0,0 +1,75 @@
+# build.sh介绍
+
+openGauss-server/build.sh是编译过程中的重要脚本工具。其集成了软件安装编译、产品安装包编译两种功能,可快速进行代码编译和打包。
+
+详细参数选项如下表所示:
+
+**表 1** build.sh参数功能选项介绍。
+
+
+功能选项
+ |
+缺省值
+ |
+参数
+ |
+功能
+ |
+
+
+-h
+ |
+不使用此选项
+ |
+-
+ |
+帮助菜单。
+ |
+
+-m
+ |
+release
+ |
+[debug | release | memcheck]
+ |
+选择编译目标版本。
+ |
+
+-3rd
+ |
+${代码路径}/binarylibs
+ |
+[binarylibs path]
+ |
+指定binarylibs的路径,需绝对路径。
+ |
+
+-pkg
+ |
+不使用此功能
+ |
+-
+ |
+将代码编译结果压缩封装成安装包。
+ |
+
+--no_om_adapt
+ |
+不使用此选项
+ |
+-
+ |
+安装包不去适配om,仅在添加-pkg选项时生效。
+ |
+
+
+
+
+> **说明:**
+>1. -m \[debug | release | memcheck\] 表示可选择三种目标版本:
+> - release: 代表生成release版本的二进制程序,该版本编译时,配置GCC高级别优化选项,去除内核调试代码,通常用于生成环境或性能测试环境。
+> - debug:代表生成debug版本的二进制程序,该版本编译时,增加内核代码调试功能,通常用于开发自测环境。
+> - memcheck:代表生成memcheck版本的二进制程序,该版本编译时,在debug版本基础上新增ASAN功能,通常用于定位内存问题。
+>2. -3rd \[binarylibs path\] 为binarylibs的路径。缺省情况下,当前代码文件夹下存在binarylibs。如果将binarylibs移动到openGauss-server下,或在openGauss-server下创建了指向binarylibs的软链接,可不指定此选项。但需要注意其容易被git clean等操作删除。
+>3. 此脚本每个参数选项都设置了缺省值,且数量并不多,依赖关系简单,因此使用时非常方便。如果用户需求值与缺省值不同,请根据实际情况进行设置。
+
diff --git "a/content/zh/docs/Compilationguide/figures/\347\273\230\345\233\2761.png" "b/content/zh/docs/Compilationguide/figures/\347\273\230\345\233\2761.png"
new file mode 100644
index 0000000000000000000000000000000000000000..8faf34a3f75974cb6b4c5f3f081f384691e5db48
GIT binary patch
literal 30588
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⪻Jcoz(aYcfCR+Rf;XixAQp{{jpa|b
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
-安装包编译即将代码编译生成软件安装包。
+安装包编译即将代码编译生成软件安装包,安装包的编译打包过程也集成在build.sh之中。
## 前提条件
-- 已按照[搭建编译环境](搭建编译环境.md)的要求准备好相关软硬件。
-- 已下载代码和子仓库,具体请参见[代码下载](代码下载.md)。
-- 已完成开源软件编译构建。
+- 已按照[搭建编译环境](搭建编译环境.md)的要求准备好相关软硬件,并且已经参考[代码下载](代码下载.md) 下载了代码。
+- 已完成开源软件编译构建,具体请参见[开源软件编译构建](开源软件编译构建.md)。
+- 了解 [build.sh](build-sh介绍.md) 脚本的参数选项和功能。
+- 代码环境干净,没有以前编译生成的文件。具体请参见[FAQ 4.1](如何清除编译过程中生成的临时文件.md)。
## 操作步骤
-1. 执行如下命令进入到安装包代码编译脚本目录。
+1. 执行如下命令进入到代码目录。
```
- [user@linux sda]$ cd /sda/openGauss-server/package
+ [user@linux sda]$ cd /sda/openGauss-server
```
-2. 执行如下命令,编译出openGauss安装包。
+2. 执行如下命令编译出openGauss产品安装包。
```
- [user@linux package]$ sh package_gaussdb_single.sh -m [debug | release | memcheck]
+ [user@linux openGauss-server]$ sh build.sh -m [debug | release | memcheck] -3rd [binarylibs path] -pkg
+ ```
+
+ 例如:
+
+ ```
+ sh build.sh -pkg # 生成release版本的openGauss安装包。需代码目录下有binarylibs或者其软链接,否则将会失败。
```
> **说明:**
- >_\[debug | release | memcheck\]_可选择三种目标版本,三种目标版本如下所示:
- >- release: 代表生成release版本的二进制程序,该版本编译时,配置GCC高级别优化选项,去除内核调试代码,通常用于生成环境或性能测试环境。
- >- debug:代表生成debug版本的二进制程序,该版本编译时,增加内核代码调试功能,通常用于开发自测环境;
- >- memcheck:代表生成memcheck版本的二进制程序,该版本编译时,在debug版本基础上新增ASAN功能,通常用于定位内存问题。
+ >可通过添加 --no\_om\_adapt 选项指定安装包不适配om。
+ >此步骤会经历上一章节所介绍的一键式编译最终生成软件的过程、与将软件封装成安装包的过程。
-3. 显示如下内容,表示编译成功。
+3. 显示如下内容,表示安装包编译成功。
```
success!
```
- - 更多详细命令参数可参照 –h。
- - 生成的安装包会存放在当前目录下。
- - 编译日志为:make\_package.log
+ - 生成的安装包会存放在./package目录下。
+ - 编译日志为:make\_compile.log
+ - 安装包打包日志为:./package/make\_package.log
diff --git "a/content/zh/docs/Compilationguide/\344\273\243\347\240\201\344\270\213\350\275\275.md" "b/content/zh/docs/Compilationguide/\344\273\243\347\240\201\344\270\213\350\275\275.md"
index e437de429..0d7ffe6c2 100644
--- "a/content/zh/docs/Compilationguide/\344\273\243\347\240\201\344\270\213\350\275\275.md"
+++ "b/content/zh/docs/Compilationguide/\344\273\243\347\240\201\344\270\213\350\275\275.md"
@@ -2,18 +2,23 @@
## 前提条件
-已在本地安装并配置git和git-lfs,熟悉git submodule的应用。
+已在本地安装并配置git和git-lfs。
## 操作步骤
-1. 执行如下命令下载代码和子仓库,其中_\[git ssh address\]_表示实际代码下载地址,_openGauss-server_表示代码下载后的存放位置。此处举例代码下载到的本地路径为 /sda/openGauss-server, 下文将直接使用此路径。
+1. 执行如下命令下载代码和开源第三方软件仓库等,其中_\[git ssh address\]_表示实际代码下载地址,可在openGauss社区获取这些地址。
```
[user@linux sda]$ git clone [git ssh address] openGauss-server
- [user@linux sda]$ cd openGauss-server
- [user@linux openGauss-server]$ git submodule init
- [user@linux openGauss-server]$ git submodule update
+ [user@linux sda]$ git clone [git ssh address] openGauss-third_party
+ [user@linux sda]$ git clone [git ssh address] openGauss-third_party_binarylibs
+ [user@linux sda]$ mv openGauss-third_party_binarylibs binarylibs
```
+ > **说明:**
+ >- openGauss-server:openGauss的代码仓库。
+ >- openGauss-third\_party:openGauss依赖的开源第三方软件仓库。
+ >- openGauss-third\_party\_binarylibs:编译好的开源第三方软件仓库。用户可以通过[开源软件编译构建](开源软件编译构建.md)获取这些文件,也可在直接在此仓库下载获取。在这里为了缩短名称,并且和开源第三方软件仓库编译输出的目标位置保持一致,将其重命名为binarylibs。
+
2. 下载项进度均显示为100%时表示下载成功。
diff --git "a/content/zh/docs/Compilationguide/\345\246\202\344\275\225\346\270\205\351\231\244\347\274\226\350\257\221\350\277\207\347\250\213\344\270\255\347\224\237\346\210\220\347\232\204\344\270\264\346\227\266\346\226\207\344\273\266.md" "b/content/zh/docs/Compilationguide/\345\246\202\344\275\225\346\270\205\351\231\244\347\274\226\350\257\221\350\277\207\347\250\213\344\270\255\347\224\237\346\210\220\347\232\204\344\270\264\346\227\266\346\226\207\344\273\266.md"
index 7c3964f9e..01899f02b 100644
--- "a/content/zh/docs/Compilationguide/\345\246\202\344\275\225\346\270\205\351\231\244\347\274\226\350\257\221\350\277\207\347\250\213\344\270\255\347\224\237\346\210\220\347\232\204\344\270\264\346\227\266\346\226\207\344\273\266.md"
+++ "b/content/zh/docs/Compilationguide/\345\246\202\344\275\225\346\270\205\351\231\244\347\274\226\350\257\221\350\277\207\347\250\213\344\270\255\347\224\237\346\210\220\347\232\204\344\270\264\346\227\266\346\226\207\344\273\266.md"
@@ -6,7 +6,7 @@
## 回答
-进入/sda/openGauss-server目录,执行如下命令清除编译过程中生成的临时文件。
+进入/sda/openGauss-server目录,选择执行如下命令清除编译过程中生成的临时文件。
- 删除由configure和make生成的文件。
diff --git "a/content/zh/docs/Compilationguide/\345\246\202\344\275\225\350\247\243\345\206\263-Configure-error-C-compiler-cannot-create-executables-\346\212\245\351\224\231.md" "b/content/zh/docs/Compilationguide/\345\246\202\344\275\225\350\247\243\345\206\263-Configure-error-C-compiler-cannot-create-executables-\346\212\245\351\224\231.md"
new file mode 100644
index 000000000..831a453b8
--- /dev/null
+++ "b/content/zh/docs/Compilationguide/\345\246\202\344\275\225\350\247\243\345\206\263-Configure-error-C-compiler-cannot-create-executables-\346\212\245\351\224\231.md"
@@ -0,0 +1,12 @@
+# 如何解决“Configure error: C compiler cannot create executables”报错
+
+## 问题
+
+如何解决版本编译时出现的“Configure error: C compiler cannot create executables”报错。
+
+## 回答
+
+报错原因:binarylibs文件不完整或者被损坏。
+
+解决办法:若binarylibs是通过开源软件构建而来,请重新构建开源第三方软件。若binarylibs是代码下载而来,可以进入binarylibs文件夹内, 执行命令**git pull && git lfs pull**下载缺失的文件。重新执行当前脚本或命令。
+
diff --git "a/content/zh/docs/Compilationguide/\345\246\202\344\275\225\350\247\243\345\206\263-Configure-error-Ccompiler-cannot-create-executables-\346\212\245\351\224\231.md" "b/content/zh/docs/Compilationguide/\345\246\202\344\275\225\350\247\243\345\206\263-Configure-error-Ccompiler-cannot-create-executables-\346\212\245\351\224\231.md"
deleted file mode 100644
index d5d42c1f5..000000000
--- "a/content/zh/docs/Compilationguide/\345\246\202\344\275\225\350\247\243\345\206\263-Configure-error-Ccompiler-cannot-create-executables-\346\212\245\351\224\231.md"
+++ /dev/null
@@ -1,12 +0,0 @@
-# 如何解决“Configure error: Ccompiler cannot create executables”报错
-
-## 问题
-
-如何解决版本编译时出现的“Configure error: Ccompiler cannot create executables”报错。
-
-## 回答
-
-报错原因:子仓库文件不完整或者被删除。
-
-解决办法:进入/sda/openGauss-server/binarylibs, 执行命令**git pull && git lfs pull**下载缺失的文件,并重新执行当前脚本或命令。
-
diff --git "a/content/zh/docs/Compilationguide/\345\246\202\344\275\225\350\247\243\345\206\263-g++-fatal-error-Killed-signal-terminated-program-cclplus-\346\212\245\351\224\231.md" "b/content/zh/docs/Compilationguide/\345\246\202\344\275\225\350\247\243\345\206\263-g++-fatal-error-Killed-signal-terminated-program-cclplus-\346\212\245\351\224\231.md"
new file mode 100644
index 000000000..704d0eece
--- /dev/null
+++ "b/content/zh/docs/Compilationguide/\345\246\202\344\275\225\350\247\243\345\206\263-g++-fatal-error-Killed-signal-terminated-program-cclplus-\346\212\245\351\224\231.md"
@@ -0,0 +1,12 @@
+# 如何解决 "g++: fatal error: Killed signal terminated program cclplus" 报错
+
+## 问题
+
+如何解决编译过程中出现的 "g++: fatal error: Killed signal terminated program cclplus" 报错。
+
+## 回答
+
+报错原因:脚本中的编译过程都添加了-sj参数,并发数太大导致错误。
+
+解决办法:编译过程中降低make 并发数,或者直接使用make命令。使用一键式脚本的话需要修改脚本。
+
diff --git "a/content/zh/docs/Compilationguide/\345\246\202\344\275\225\350\247\243\345\206\263-out-of-memory-allocating-xxx-bytes-after-a-total-of-xxx-bytes-\346\212\245\351\224\231.md" "b/content/zh/docs/Compilationguide/\345\246\202\344\275\225\350\247\243\345\206\263-out-of-memory-allocating-xxx-bytes-after-a-total-of-xxx-bytes-\346\212\245\351\224\231.md"
new file mode 100644
index 000000000..22505dbd7
--- /dev/null
+++ "b/content/zh/docs/Compilationguide/\345\246\202\344\275\225\350\247\243\345\206\263-out-of-memory-allocating-xxx-bytes-after-a-total-of-xxx-bytes-\346\212\245\351\224\231.md"
@@ -0,0 +1,12 @@
+# 如何解决"out of memory allocating xxx bytes after a total of xxx bytes"报错
+
+## 问题
+
+如何解决编译过程中出现的"out of memory allocating xxx bytes after a total of xxx bytes"报错。
+
+## 回答
+
+报错原因:脚本中的编译过程都添加了-sj参数,同时机器配置较低,内存不足,并发数太大导致错误
+
+解决办法:编译过程中降低make 并发数,或者直接使用make命令。使用一键式脚本的话需要修改脚本。
+
diff --git "a/content/zh/docs/Compilationguide/\345\274\200\346\272\220\350\275\257\344\273\266\347\274\226\350\257\221\346\236\204\345\273\272.md" "b/content/zh/docs/Compilationguide/\345\274\200\346\272\220\350\275\257\344\273\266\347\274\226\350\257\221\346\236\204\345\273\272.md"
new file mode 100644
index 000000000..efcc33779
--- /dev/null
+++ "b/content/zh/docs/Compilationguide/\345\274\200\346\272\220\350\275\257\344\273\266\347\274\226\350\257\221\346\236\204\345\273\272.md"
@@ -0,0 +1,76 @@
+# 开源软件编译构建
+
+## 开源软件编译构建
+
+openGauss的编译,需要提前把所依赖的开源第三方软件进行编译和构建。这些开源第三方软件存放在代码openGauss-third\_party代码仓中,并且用户通常只需要构建一次。若存在开源软件版本更新,则需要重新构建。
+
+用户也可以直接在binarylibs仓库中直接获取开源软件编译构建的输出文件,则可以跳过这一个步骤,参考[3.1.1代码下载](代码下载.md)。
+
+**表 1** openGauss开源三方件编译前置软件要求
+
+
+所需软件
+ |
+建议版本
+ |
+
+
+python3
+ |
+建议版本:3.6
+ |
+
+python3-dev
+ |
+建议版本:3.x
+ |
+
+pam-devl
+ |
+建议版本:1.1.8-1.3.1
+ |
+
+ncurses-devel
+ |
+建议版本:5.9-13.20130511
+ |
+
+libffi-dev
+ |
+建议版本:3.1
+ |
+
+patch
+ |
+建议版本:2.7.1-10
+ |
+
+
+
+
+执行如下命令进入内核依赖的开源第三方软件目录,进行开源第三方软件的编译和构建,产生相应的二进制程序或库文件。/sda/openGauss-third\_party为开源第三方软件下载目录。
+
+```
+[user@linux sda]$ cd /sda/openGauss-third_party/build
+[user@linux sda]$ sh build.sh
+```
+
+用户执行以上命令之后,可以自动生成数据库编译所需的开源第三方软件,如果想单独的生成某个开源三方软件,可以进入对应的目录,执行build.sh脚本,如:
+
+```
+[user@linux sda]$ cd /sda/openGauss-third_party/dependency/openssl
+[user@linux sda]$ sh build.sh
+```
+
+即可编译生成openssl
+
+> **说明:**
+>相关的报错日志可以查看对应的build目录下对应名字的log以及对应模块下的log,如dependency模块下的openssl的相关编译安装日志可以查看:
+>- /sda/openGauss-third\_party/build/dependency\_build.log
+>- /sda/openGauss-third\_party/dependency/build/openssl\_build.log
+>- /sda/openGauss-third\_party/dependency/openssl/build\_openssl.log
+
+## 编译构建结果
+
+执行上述脚本,最终编译构建出的结果会存放在openGauss-third\_party同级的binarylibs目录。这些文件会在后面编译openGauss-server时使用到。
+
diff --git "a/content/zh/docs/Compilationguide/\346\246\202\350\277\260.md" "b/content/zh/docs/Compilationguide/\346\246\202\350\277\260.md"
new file mode 100644
index 000000000..8e6899102
--- /dev/null
+++ "b/content/zh/docs/Compilationguide/\346\246\202\350\277\260.md"
@@ -0,0 +1,4 @@
+# 概述
+
+本文档介绍了openGauss对于操作系统的要求、编译环境的要求、软件依赖、编译方法以及编译结果的存放位置等。
+
diff --git "a/content/zh/docs/Compilationguide/\347\211\210\346\234\254\347\274\226\350\257\221.md" "b/content/zh/docs/Compilationguide/\347\211\210\346\234\254\347\274\226\350\257\221.md"
index 0b3d9b971..0765a845f 100644
--- "a/content/zh/docs/Compilationguide/\347\211\210\346\234\254\347\274\226\350\257\221.md"
+++ "b/content/zh/docs/Compilationguide/\347\211\210\346\234\254\347\274\226\350\257\221.md"
@@ -2,7 +2,9 @@
openGauss的编译过程和生成安装包的过程已经写成了两个一键式的脚本,可以方便的通过脚本进行编译操作。也可以自己配置环境变量,通过命令进行编译。
-本章节会介绍openGauss编译需要满足的前提条件,编译的操作步骤等。
+本章节会介绍openGauss编译需要满足的前提条件,编译的操作步骤等,下图是对编译流程的大致概括,详细内容见下文。
+
+
- **[编译前准备](编译前准备.md)**
diff --git "a/content/zh/docs/Compilationguide/\347\233\256\347\232\204.md" "b/content/zh/docs/Compilationguide/\347\233\256\347\232\204.md"
new file mode 100644
index 000000000..09a6c1585
--- /dev/null
+++ "b/content/zh/docs/Compilationguide/\347\233\256\347\232\204.md"
@@ -0,0 +1,4 @@
+# 目的
+
+本文档帮助读者快速了解编译openGauss所需的软硬件要求、环境配置,以及如何从源码编译出软件或者安装包。
+
diff --git "a/content/zh/docs/Compilationguide/\347\256\200\344\273\213.md" "b/content/zh/docs/Compilationguide/\347\256\200\344\273\213.md"
new file mode 100644
index 000000000..fb53df15e
--- /dev/null
+++ "b/content/zh/docs/Compilationguide/\347\256\200\344\273\213.md"
@@ -0,0 +1,7 @@
+# 简介
+
+- **[目的](目的.md)**
+
+- **[概述](概述.md)**
+
+
diff --git "a/content/zh/docs/Compilationguide/\347\274\226\350\257\221\345\211\215\345\207\206\345\244\207.md" "b/content/zh/docs/Compilationguide/\347\274\226\350\257\221\345\211\215\345\207\206\345\244\207.md"
index 1b2d6fdcd..f775e8a78 100644
--- "a/content/zh/docs/Compilationguide/\347\274\226\350\257\221\345\211\215\345\207\206\345\244\207.md"
+++ "b/content/zh/docs/Compilationguide/\347\274\226\350\257\221\345\211\215\345\207\206\345\244\207.md"
@@ -2,4 +2,8 @@
- **[代码下载](代码下载.md)**
+- **[开源软件编译构建](开源软件编译构建.md)**
+
+- **[build.sh介绍](build-sh介绍.md)**
+
diff --git "a/content/zh/docs/Compilationguide/\350\275\257\344\273\266\344\276\235\350\265\226\350\246\201\346\261\202.md" "b/content/zh/docs/Compilationguide/\350\275\257\344\273\266\344\276\235\350\265\226\350\246\201\346\261\202.md"
index 8562aa09a..306e023f8 100644
--- "a/content/zh/docs/Compilationguide/\350\275\257\344\273\266\344\276\235\350\265\226\350\246\201\346\261\202.md"
+++ "b/content/zh/docs/Compilationguide/\350\275\257\344\273\266\344\276\235\350\265\226\350\246\201\346\261\202.md"
@@ -13,12 +13,7 @@
-libaio
- |
-建议版本:0.3.109-13
- |
-
-libaio-devel
+ |
libaio-devel
|
建议版本:0.3.109-13
|
@@ -38,29 +33,19 @@
建议版本:5.9-13.20130511
|
-zlib-devel
- |
-建议版本:1.2.7-15
- |
-
-glibc
+ |
glibc.devel
|
建议版本:2.17-111
|
-glibc.i686
- |
-建议版本:2.17-111
- |
-
-glibc.devel*
+ |
patch
|
-建议版本:2.17-111
+ | 建议版本:2.7.1-10
|
-patch
+ |
lsb_release
|
-建议版本:2.7.1-10
+ | 建议版本:4.1
|
diff --git "a/content/zh/docs/Compilationguide/\350\275\257\344\273\266\345\256\211\350\243\205\347\274\226\350\257\221.md" "b/content/zh/docs/Compilationguide/\350\275\257\344\273\266\345\256\211\350\243\205\347\274\226\350\257\221.md"
index e8e37ae64..c564e8906 100644
--- "a/content/zh/docs/Compilationguide/\350\275\257\344\273\266\345\256\211\350\243\205\347\274\226\350\257\221.md"
+++ "b/content/zh/docs/Compilationguide/\350\275\257\344\273\266\345\256\211\350\243\205\347\274\226\350\257\221.md"
@@ -4,9 +4,10 @@
## 前提条件
-- 已按照[搭建编译环境](搭建编译环境.md)的要求准备好相关软硬件。
-- 已下载代码和子仓库。具体请参见[代码下载](代码下载.md)。
-- 已完成开源软件编译构建。
+- 已按照[搭建编译环境](搭建编译环境.md)的要求准备好相关软硬件,并且已参考[代码下载](代码下载.md) 下载了代码。
+- 已完成开源软件编译构建,具体请参见[开源软件编译构建](开源软件编译构建.md)。
+- 了解 [build.sh](build-sh介绍.md) 脚本的参数选项和功能。
+- 代码环境干净,没有以前编译生成的文件。具体请参见[FAQ 4.1](如何清除编译过程中生成的临时文件.md)。
## 一键式脚本编译
@@ -19,14 +20,14 @@
2. 执行如下命令,编译安装openGauss。
```
- [user@linux openGauss-server]$ sh build.sh [debug | release | memcheck]
+ [user@linux openGauss-server]$ sh build.sh -m [debug | release | memcheck] -3rd [binarylibs path]
```
- > **说明:**
- >_\[debug | release | memcheck\]_表示可选择三种目标版本,三种目标版本如下所示:
- >- release: 代表生成release版本的二进制程序,该版本编译时,配置GCC高级别优化选项,去除内核调试代码,通常用于生成环境或性能测试环境。
- >- debug:代表生成debug版本的二进制程序,该版本编译时,增加内核代码调试功能,通常用于开发自测环境;
- >- memcheck:代表生成memcheck版本的二进制程序,该版本编译时,在debug版本基础上新增ASAN功能,通常用于定位内存问题。
+ 例如:
+
+ ```
+ sh build.sh -pkg # 生成release版本的openGauss安装包。需代码目录下有binarylibs或者其软链接,否则将会失败。
+ ```
3. 显示如下内容,表示编译成功。
@@ -55,19 +56,19 @@
> **说明:**
>- 显示的结果表示openGauss当前支持的操作系统,openGauss支持的操作系统为centos7.6\_x86\_64、openeuler\_aarch64。
- >- 如果结果显示为 Failed,表示当前操作系统不支持。
+ >- 如果结果显示为 Failed 或者其他版本,表示openGauss不支持当前操作系统。
-3. 配置环境变量,将[步骤2](#li1666842982511)获取到的结果替换下面的**\*\*\***。
+3. 配置环境变量,根据自己的代码下载位置补充两处"\_\_\_\_",将[步骤2](#li1666842982511)获取到的结果替换下面的**\*\*\***。
```
- export CODE_BASE=`pwd`
- export GCC_PATH=$CODE_BASE/binarylibs/buildtools/***/gcc8.2/
+ export CODE_BASE=________ # openGauss-server的路径
+ export BINARYLIBS=________ # binarylibs的路径
+ export GAUSSHOME=$CODE_BASE/dest/
+ export GCC_PATH=$BINARYLIBS/buildtools/***/gcc8.2/
export CC=$GCC_PATH/gcc/bin/gcc
export CXX=$GCC_PATH/gcc/bin/g++
- export LD_LIBRARY_PATH=$GCC_PATH/gcc/lib64:$GCC_PATH/isl/lib:$GCC_PATH/mpc/lib/:$GCC_PATH/mpfr/lib/:$GCC_PATH/gmp/lib/:$LD_LIBRARY_PATH
- export PATH=$CODE_BASE/dest/bin:$GCC_PATH/gcc/bin:$PATH
- export LD_LIBRARY_PATH=$CODE_BASE/dest/lib:$LD_LIBRARY_PATH
- export GAUSSHOME=$CODE_BASE/dest/
+ export LD_LIBRARY_PATH=$GAUSSHOME/lib:$GCC_PATH/gcc/lib64:$GCC_PATH/isl/lib:$GCC_PATH/mpc/lib/:$GCC_PATH/mpfr/lib/:$GCC_PATH/gmp/lib/:$LD_LIBRARY_PATH
+ export PATH=$GAUSSHOME/bin:$GCC_PATH/gcc/bin:$PATH
```
4. 选择版本进行configure。
@@ -75,27 +76,29 @@
debug版:
```
- ./configure --gcc-version=8.2.0 CC=g++ CFLAGS='-O0' --prefix=$GAUSSHOME --enable-debug --enable-cassert --enable-thread-safety --without-readline --without-zlib
+ ./configure --gcc-version=8.2.0 CC=g++ CFLAGS='-O0' --prefix=$GAUSSHOME --3rd=$BINARYLIBS --enable-debug --enable-cassert --enable-thread-safety --without-readline --without-zlib
```
release版:
```
- ./configure --gcc-version=8.2.0 CC=g++ CFLAGS="-O2 -g3" --prefix=$GAUSSHOME --enable-thread-safety --without-readline --without-zlib
+ ./configure --gcc-version=8.2.0 CC=g++ CFLAGS="-O2 -g3" --prefix=$GAUSSHOME --3rd=$BINARYLIBS --enable-thread-safety --without-readline --without-zlib
```
memcheck版:
```
- ./configure --gcc-version=8.2.0 CC=g++ CFLAGS='-O0' --prefix=$GAUSSHOME --enable-debug --enable-cassert --enable-thread-safety --without-readline --without-zlib --enable-memory-check
+ ./configure --gcc-version=8.2.0 CC=g++ CFLAGS='-O0' --prefix=$GAUSSHOME --3rd=$BINARYLIBS --enable-debug --enable-cassert --enable-thread-safety --without-readline --without-zlib --enable-memory-check
```
> **说明:**
- >_\[debug | release | memcheck\]_表示可选择三种目标版本,三种目标版本如下所示:
- >- release: 代表生成release版本的二进制程序,该版本编译时,配置GCC高级别优化选项,去除内核调试代码,通常用于生成环境或性能测试环境。
- >- debug:代表生成debug版本的二进制程序,该版本编译时,增加内核代码调试功能,通常用于开发自测环境;
- >- memcheck:代表生成memcheck版本的二进制程序,该版本编译时,在debug版本基础上新增ASAN功能,通常用于定位内存问题。
- >在ARM平台上,release版本的CFLAGS需要添加 -D\_\_USE\_NUMA 。
+ >1. _\[debug | release | memcheck\]_ 表示可选择三种目标版本,三种目标版本如下所示:
+ > - release: 代表生成release版本的二进制程序,该版本编译时,配置GCC高级别优化选项,去除内核调试代码,通常用于生成环境或性能测试环境。
+ > - debug:代表生成debug版本的二进制程序,该版本编译时,增加内核代码调试功能,通常用于开发自测环境;
+ > - memcheck:代表生成memcheck版本的二进制程序,该版本编译时,在debug版本基础上新增ASAN功能,通常用于定位内存问题。
+ >2. 在ARM平台上,CFLAGS需要添加 -D\_\_USE\_NUMA 。
+ >3. 在ARMv8.1或者更高的平台上\(例如鲲鹏920\),CFLAGS需要添加 -D\_\_ARM\_LSE 。
+ >4. 若将binarylibs移动到openGauss-server下,或在openGauss-server下创建了指向binarylibs的软链接,可不指定--3rd参数。但这样做的话需要注意其容易被git clean等操作删除。
5. 执行如下命令,编译安装。
@@ -107,7 +110,7 @@
6. 显示如下内容,表示编译安装成功。
```
- PostgreSQL installation complete.
+ openGauss installation complete.
```
- 编译后软件安装路径为:$GAUSSHOME
diff --git "a/content/zh/docs/Description/figures/openGauss\350\241\214\345\210\227\346\267\267\345\255\230\345\274\225\346\223\216.png" "b/content/zh/docs/Description/figures/openGauss\350\241\214\345\210\227\346\267\267\345\255\230\345\274\225\346\223\216.png"
new file mode 100644
index 0000000000000000000000000000000000000000..5548dd618a66f9b849bb1ce2f61c5df4ac8f7cf9
GIT binary patch
literal 123232
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