| 原因 | 说明 | 解决要点 |
|---|---|---|
| 未预加载插件 | 未在 shared_preload_libraries 中添加 sys_stat_statements | 修改配置并重启数据库 |
| 未创建扩展 | 未在目标数据库中执行 CREATE EXTENSION | 登录数据库执行创建语句 |
| 跟踪参数禁用 | sys_stat_statements.track 默认值为 none | 设置为 top/all 并重载配置 |
| 统计数据未收集 | 启用后无 SQL 执行或刚重启 | 执行测试 SQL 并等待统计刷新 |
| 统计数据已重置 | 执行过 sys_stat_statements_reset () | 重新执行 SQL 等待数据生成 |
| 权限不足 | 普通用户无查询权限 | 授予 SELECT 权限或用超级用户查询 |
| 版本兼容性 | 旧版本需额外配置 | 按对应版本文档配置 |
1. 检查插件是否预加载(最常见原因)
sys_stat_statements 是扩展插件,必须在数据库启动时预加载。
# 查看当前预加载配置
ksql -U system -d kingbase -c "SHOW shared_preload_libraries;"# 若未包含sys_stat_statements,执行以下操作:
# 方式A:编辑kingbase.conf(需重启)
vi $KINGBASE_DATA/kingbase.conf
# 添加或修改:shared_preload_libraries = 'sys_stat_statements'# 方式B:使用ALTER SYSTEM(推荐)
ksql -U system -d kingbase -c "ALTER SYSTEM SET shared_preload_libraries = 'sys_stat_statements';"# 重启数据库使配置生效
sys_ctl restart -D $KINGBASE_DATA
2. 确认扩展已创建(数据库级配置)
预加载后需在目标数据库中创建扩展才能使用北京人大金仓信息技术股份有限公司:
-- 登录目标数据库
ksql -U system -d your_database-- 检查扩展是否存在
SELECT * FROM pg_extension WHERE extname = 'sys_stat_statements';-- 若不存在,创建扩展
CREATE EXTENSION sys_stat_statements;
3. 检查跟踪参数配置(启用统计收集)
sys_stat_statements.track 默认值为none,会禁用统计收集:
-- 查看当前跟踪级别
SHOW sys_stat_statements.track;-- 设置为合适级别(推荐top或all)
ALTER SYSTEM SET sys_stat_statements.track = 'top'; -- 仅跟踪顶层语句
-- 或 ALTER SYSTEM SET sys_stat_statements.track = 'all'; -- 跟踪所有语句(包括嵌套)-- 重载配置使参数生效(无需重启)
SELECT sys_reload_conf();-- 可选:检查其他相关参数
SHOW sys_stat_statements.max; -- 最大跟踪语句数(默认5000)
SHOW sys_stat_statements.track_utility; -- 是否跟踪工具命令(默认on)
4. 验证统计数据收集与权限
-- 1. 执行测试SQL生成统计数据
SELECT * FROM pg_database LIMIT 1;
SELECT sys_sleep(1); -- 执行耗时操作便于观察-- 2. 等待统计刷新(最多500ms)后查询
SELECT * FROM sys_stat_statements LIMIT 5;-- 3. 若仍为空,检查权限
-- 确保当前用户有查询权限
GRANT SELECT ON sys_stat_statements TO your_user;-- 4. 检查是否被重置过
-- 若近期执行过此命令,统计数据会被清空
SELECT sys_stat_statements_reset();
5. 版本特殊情况处理
- KingbaseES V8R6+:插件默认内置但默认关闭,只需设置 track 参数
- KingbaseES V8R6 以下:需手动预加载并创建扩展
- 主备架构:需在所有节点配置相同参数,统计数据仅在执行 SQL 的节点生成
