目录
4.1. 工具概述 ¶
4.2. 脚本工具所在路径 ¶
4.3. 配置数据库连接信息 ¶
4.4. 工具代码及功能 ¶
4.4.1. chk_current_waitevent.sh ¶
4.4.2. chk_top_waitevent.sh ¶
4.4.3. chk_event_sql.sh ¶
4.4.4. chk_lock.sh ¶
4.4.5. chk_top_sql.sh ¶
4.4.6. chk_top_tableIO.sh ¶
4.4.7. chk_top_tablephysicalIO.sh ¶
4.4.8. chk_top_tableseqscanIO.sh ¶
4.4.9. chk_top_indexIO.sh ¶
4.4.10. chk_top_table_dml.sh ¶
4.4.11. chk_top_wal.sh ¶
问题诊断辅助工具是针对KingbaseES V8.6数据库开发的一套问题诊断工具。方便用户在系统故障情况下,及时了解系统特定信息。
为了保证脚本的通用性,本工具使用bash语法编写脚本,实际运行环境必须支持bash。
本工具的使用需要获取查询语句及等待事件,要求开启track_activities参数。部分shell脚本还需要依赖于extension的开启,如:sys_stat_statement, sys_kwr,sys_ksh。以上插件的开启方法可以参照《 KingbaseES数据库性能调优指南 》文档。
以下表格列出脚本及扩展组件的依赖关系。
脚本名称 |
扩展组件依赖 |
---|---|
chk_event_sql.sh |
sys_kwr及相关参数 sys_stat_statements 及相关参数 |
chk_top_sql.sh |
sys_stat_statements 及相关参数 |
chk_top_waitevent.sh |
sys_stat_statements 及相关参数 |
chk_top_wal.sh |
sys_stat_statements 及相关参数 |
如果当前数据库系统是高可用集群系统,需要将数据库集群的密码文件,复制到root用户的根目录下。如果数据库集群的系统用户是kingbase用户,则通常的复制命令如下:
kingbase$ su - root -c "cp $HOME/.encpwd ~ "
本工具所涉及的脚本统一放在软件安装目录SupTools/kb_diagtool。
在使用辅助工具前,先配置连接信息。用户读取通用参数文件(../suptools.ini),设置环境变量。根据用户的实际需求,修改通用参数文件。(详见 通用环境变量参数文件 )
4.4.1.1. 功能 ¶
查看数据库当前会话的等待事件信息。通过统计各类事件数量、当前等待会话正在运行的SQL,可以大致确定系统状态。
注意
该工具信息取自sys_stat_activity,具体字段的含义可以参考sys_stat_activity 定义。
4.4.2.1. 功能 ¶
查看过去60秒内的数据库等待事件,按等待事件数量排序,数据取自 perf.session_history 。
4.4.2.2. 显示结果样例 ¶
注意
该工具的信息取自perf.session_history,如果报该表不存在,表示sys_ksh 没有正确启用。
4.4.3.1. 功能 ¶
查看过去60秒内与特定等待事件相关的SQL。脚本运行时,需要特定的等待事件作为参数传入。等待事件可以根据chk_top_waitevent.sh结果,针对性进行分析。该脚本显示的数据取自 perf.session_history 。
注意
该脚本传入参数是一个等待事件,通常是3.4.2节返回的top waitevent,用于进一步查询具体哪些SQL导致了该等待事件。
4.4.4.1. 功能 ¶
检查当前数据库锁等待的会话信息,及当前会话执行的SQL。通过层级显示,可以方便定位源头操作。
输出信息解释如下:
425715: 表示进程PID。
transactioid: 表示锁的类型,这里是事务锁。
Exclusive: 表示锁的模式,这里是独占锁。
Null: 表对象的名称。由于是事务锁,因此,这里为null。
Delete from t1 :表示引起锁的具体SQL。
4.4.5.1. 功能 ¶
查询过去10秒,最耗时、逻辑IO最多、物理IO最多(扣除buffer hit)、临时块写入最多的SQL,每类选取5条(默认5条),分别列出,数据取自sys_stat_statement 。可以通过 chk_top_sql.sh $n ,返回 n 条记录。
4.4.5.2. 显示结果样例 ¶
4.4.6.1. 功能 ¶
查询过去10秒,IO 值最大的表。分别统计表的IO,表的索引IO,toast 对象的 IO ,数据取自pg_statio_all_tables 。这里的IO包括缓冲区读取和磁盘物理读取。
4.4.7.1. 功能 ¶
查询过去10秒,物理IO 值最大的表(数量可传参数)。分别统计表的IO,表的索引IO,toast 对象的 IO,数据取自pg_statio_all_tables,与chk_top_table IO不同,这里的IO只包括磁盘物理读取。
4.4.8.1. 功能 ¶
查询过去10秒,全表扫描的IO数量最大的表。全表扫描的IO数量是seq_scan次数与表大小的乘积,数据取自pg_stat_sys_tables。
4.4.8.2. 显示结果样例 ¶
4.4.9.1. 功能 ¶
与 chk_top_tableIO不同,这里只关注哪些索引引发的IO最大,分别统计逻辑IO与物理IO。
4.4.10.1. 功能 ¶
查询过去10秒(时间参数,可填),增删改次数最多的表。数据取自sys_stat_user_tables。
4.4.11.1. 功能 ¶
检查当前哪些 SQL引发最多的 WALWrite 或 WALSync 等待事件,通过观察当前的等待事件,可以间接确认哪些SQL引发频繁redo日志写或redo日志刷盘。