Skip to content

KingBaseES 每周每月深度检查

概述

除了日常的自动巡检外,KingBaseES 数据库还需要进行定期的深度检查,包括每周和每月的检查。深度检查能够更全面地评估数据库的健康状况,发现潜在的性能问题和安全隐患,确保数据库系统的长期稳定运行。

深度检查与日常巡检的主要区别在于:

  1. 检查频率:深度检查频率较低,每周或每月执行一次
  2. 检查深度:深度检查更深入,涉及更多的性能指标和配置项
  3. 人工参与:深度检查需要更多的人工分析和判断
  4. 分析维度:深度检查注重趋势分析和预防性维护

检查范围

深度检查应涵盖以下范围:

  1. 系统级检查:操作系统、存储、网络等基础设施
  2. 数据库级检查:配置、性能、安全等方面
  3. 应用级检查:SQL 性能、连接池配置等
  4. 架构级检查:高可用架构、备份策略等

每周检查内容

1. 性能分析

检查项检查命令正常标准异常处理
慢查询分析ksql -U system -d test -c "SELECT * FROM sys_stat_statements WHERE mean_exec_time > 1000 ORDER BY mean_exec_time DESC LIMIT 20;"无新增的慢查询优化慢查询,添加索引或修改 SQL
锁等待分析ksql -U system -d test -c "SELECT * FROM sys_locks WHERE granted = false ORDER BY query_start;"无长时间锁等待分析锁等待原因,优化事务设计
索引使用情况ksql -U system -d test -c "SELECT relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch FROM sys_stat_user_indexes JOIN sys_indexes ON sys_stat_user_indexes.indexrelid = sys_indexes.oid ORDER BY idx_scan;"所有索引都有使用删除未使用的索引,优化索引设计
表膨胀分析ksql -U system -d test -c "SELECT schemaname, relname, n_dead_tup, n_live_tup, round(100*n_dead_tup/(n_live_tup+1)) AS dead_pct FROM sys_stat_user_tables ORDER BY dead_pct DESC LIMIT 10;"死元组比例 < 20%执行 VACUUM 或 VACUUM FULL 操作

2. 复制状态深度检查

检查项检查命令正常标准异常处理
复制延迟趋势ksql -U system -d test -c "SELECT now() - pg_last_xact_replay_timestamp() AS delay;"延迟稳定,无明显增长分析延迟原因,优化网络或硬件
WAL 生成速率ksql -U system -d test -c "SELECT extract(epoch FROM now() - query_start) AS duration, pg_wal_lsn_diff(pg_current_wal_lsn(), lsn) AS wal_generated FROM (SELECT pg_current_wal_lsn() AS lsn) AS t, pg_sleep(5);"WAL 生成速率稳定检查是否有大量批量操作或长时间事务
复制槽状态ksql -U system -d test -c "SELECT * FROM sys_replication_slots;"所有复制槽状态正常清理无效的复制槽,监控复制槽滞后情况
归档状态ksql -U system -d test -c "SELECT * FROM sys_archive_status WHERE status = 'f';"无失败的归档检查归档路径权限和磁盘空间,修复归档配置

3. 备份与恢复检查

检查项检查命令正常标准异常处理
备份完整性检查pg_restore -l /backup/kingbase/$(date +%Y%m%d)*备份文件可正常读取重新执行备份,检查备份存储
恢复测试# 定期执行恢复测试恢复成功分析恢复失败原因,修复备份配置
备份保留策略`ls -lh /backup/kingbase/wc -l`备份文件数量符合保留策略

4. 安全检查

检查项检查命令正常标准异常处理
用户权限检查ksql -U system -d test -c "SELECT grantee, privilege_type, table_name FROM information_schema.role_table_grants WHERE grantee NOT IN ('system', 'sysadmin');"权限最小化回收不必要的权限,遵循最小权限原则
密码策略检查ksql -U system -d test -c "SELECT * FROM sys_user WHERE password_expired = true;"无过期密码通知用户更新密码,加强密码策略
审计日志分析`grep -i "error|warning" /opt/Kingbase/ES/V8/KESRealPro/V008R006C007B0013/Server/log/audit.logtail -n 50`无异常审计记录

每月检查内容

1. 系统级检查

检查项检查命令正常标准异常处理
操作系统更新yum check-updateapt list --upgradable系统补丁及时更新规划系统更新,确保兼容性
磁盘健康检查smartctl -a /dev/sda磁盘无坏道和警告更换有问题的磁盘,加强磁盘监控
网络性能测试iperf3 -c <remote_host>网络带宽符合预期检查网络设备,优化网络配置
系统资源趋势# 分析监控系统中的资源趋势图资源使用趋势稳定规划资源扩容,优化系统配置

2. 数据库配置检查

检查项检查命令正常标准异常处理
配置参数合规性ksql -U system -d test -c "SHOW ALL;"配置参数符合最佳实践优化配置参数,调整到最佳值
日志配置检查grep -i log /opt/Kingbase/ES/V8/KESRealPro/V008R006C007B0013/data/kingbase.conf日志级别和格式合理调整日志配置,确保日志完整且不影响性能
连接池配置# 检查应用连接池配置连接池参数合理优化连接池配置,避免连接泄露
内存配置检查ksql -U system -d test -c "SHOW shared_buffers; SHOW work_mem; SHOW maintenance_work_mem;"内存配置符合系统资源调整内存配置,优化内存使用效率

3. 性能基准测试

检查项检查命令正常标准异常处理
TPS 测试pgbench -i -s 10 test && pgbench -c 10 -j 2 -T 60 testTPS 稳定,无明显下降分析性能下降原因,优化数据库配置
响应时间测试# 使用应用级性能测试工具响应时间符合业务要求优化应用代码和数据库配置
并发测试# 模拟高并发场景系统稳定,无崩溃或死锁优化并发控制,调整锁配置

4. 架构与容灾检查

检查项检查命令正常标准异常处理
高可用架构验证# 执行主备切换演练切换成功,业务不中断修复切换过程中的问题,优化切换流程
灾备系统检查# 检查异地灾备系统状态灾备系统正常,数据同步修复灾备系统问题,确保灾备可用性
备份策略评估# 评估当前备份策略的合理性备份策略符合 RTO 和 RPO 要求调整备份策略,提高数据安全性
容量规划评估# 分析数据增长趋势容量充足,满足未来需求规划容量扩容,确保系统可持续性

检查工具与脚本

1. 内置工具

KingBaseES 提供了以下内置工具用于深度检查:

bash
# V8 R7 内置检查工具
/opt/Kingbase/ES/V8/KESRealPro/V008R007C001B0024/Server/bin/ks_check -t weekly -o /var/log/kingbase/deep_check/
/opt/Kingbase/ES/V8/KESRealPro/V008R007C001B0024/Server/bin/ks_check -t monthly -o /var/log/kingbase/deep_check/

# 性能分析工具
/opt/Kingbase/ES/V8/KESRealPro/V008R007C001B0024/Server/bin/ks_top

2. 自定义脚本

每周检查脚本

bash
#!/bin/bash

# KingBaseES 每周深度检查脚本

# 配置信息
KB_HOME="/opt/Kingbase/ES/V8/KESRealPro/V008R006C007B0013"
KB_BIN="$KB_HOME/Server/bin"
KB_LOG="$KB_HOME/Server/log"
REPORT_DIR="/var/log/kingbase/deep_check"
DATE=$(date +%Y%m%d)
REPORT_FILE="$REPORT_DIR/weekly_check_${DATE}.txt"

# 创建报告目录
mkdir -p $REPORT_DIR

# 开始检查
echo "========================================" > $REPORT_FILE
echo "KingBaseES 每周深度检查报告" >> $REPORT_FILE
echo "检查时间: $(date)" >> $REPORT_FILE
echo "========================================" >> $REPORT_FILE
echo "" >> $REPORT_FILE

# 1. 性能分析
echo "1. 性能分析" >> $REPORT_FILE
echo "----------------------------------------" >> $REPORT_FILE

echo "慢查询 Top 20:" >> $REPORT_FILE
$KB_BIN/ksql -U system -d test -c "SELECT queryid, query, calls, mean_exec_time, max_exec_time FROM sys_stat_statements WHERE mean_exec_time > 1000 ORDER BY mean_exec_time DESC LIMIT 20;" >> $REPORT_FILE 2>&1
echo "" >> $REPORT_FILE
echo "锁等待情况:" >> $REPORT_FILE
$KB_BIN/ksql -U system -d test -c "SELECT pid, relname, mode, granted, query_start, now() - query_start AS duration FROM sys_locks JOIN sys_stat_activity ON sys_locks.pid = sys_stat_activity.pid LEFT JOIN sys_class ON sys_locks.relation = sys_class.oid WHERE granted = false ORDER BY duration DESC;" >> $REPORT_FILE 2>&1
echo "" >> $REPORT_FILE
echo "未使用索引:" >> $REPORT_FILE
$KB_BIN/ksql -U system -d test -c "SELECT schemaname, relname, indexrelname FROM sys_stat_user_indexes JOIN sys_indexes ON sys_stat_user_indexes.indexrelid = sys_indexes.oid WHERE idx_scan = 0 AND indisunique = false;" >> $REPORT_FILE 2>&1
echo "" >> $REPORT_FILE
echo "表膨胀情况:" >> $REPORT_FILE
$KB_BIN/ksql -U system -d test -c "SELECT schemaname, relname, n_dead_tup, n_live_tup, round(100*n_dead_tup/(n_live_tup+1)) AS dead_pct FROM sys_stat_user_tables ORDER BY dead_pct DESC LIMIT 10;" >> $REPORT_FILE 2>&1
echo "" >> $REPORT_FILE

# 2. 复制状态深度检查
echo "2. 复制状态深度检查" >> $REPORT_FILE
echo "----------------------------------------" >> $REPORT_FILE
echo "复制延迟:" >> $REPORT_FILE
$KB_BIN/ksql -U system -d test -c "SELECT now() - pg_last_xact_replay_timestamp() AS delay;" >> $REPORT_FILE 2>&1
echo "" >> $REPORT_FILE
echo "WAL 生成速率:" >> $REPORT_FILE
$KB_BIN/ksql -U system -d test -c "SELECT extract(epoch FROM now() - query_start) AS duration, pg_wal_lsn_diff(pg_current_wal_lsn(), lsn) AS wal_generated FROM (SELECT pg_current_wal_lsn() AS lsn) AS t, pg_sleep(5);" >> $REPORT_FILE 2>&1
echo "" >> $REPORT_FILE
echo "复制槽状态:" >> $REPORT_FILE
$KB_BIN/ksql -U system -d test -c "SELECT slot_name, plugin, slot_type, active, restart_lsn, confirmed_flush_lsn FROM sys_replication_slots;" >> $REPORT_FILE 2>&1
echo "" >> $REPORT_FILE

# 3. 安全检查
echo "3. 安全检查" >> $REPORT_FILE
echo "----------------------------------------" >> $REPORT_FILE
echo "用户权限检查:" >> $REPORT_FILE
$KB_BIN/ksql -U system -d test -c "SELECT grantee, privilege_type, table_name FROM information_schema.role_table_grants WHERE grantee NOT IN ('system', 'sysadmin');" >> $REPORT_FILE 2>&1
echo "" >> $REPORT_FILE
echo "过期密码用户:" >> $REPORT_FILE
$KB_BIN/ksql -U system -d test -c "SELECT usename, passwd, valuntil FROM sys_user WHERE valuntil < now();" >> $REPORT_FILE 2>&1
echo "" >> $REPORT_FILE

# 检查结束
echo "========================================" >> $REPORT_FILE
echo "每周深度检查完成" >> $REPORT_FILE
echo "报告文件: $REPORT_FILE" >> $REPORT_FILE
echo "========================================" >> $REPORT_FILE

echo "KingBaseES 每周深度检查完成"
echo "报告文件: $REPORT_FILE"

每月检查脚本

bash
#!/bin/bash

# KingBaseES 每月深度检查脚本

# 配置信息
KB_HOME="/opt/Kingbase/ES/V8/KESRealPro/V008R006C007B0013"
KB_BIN="$KB_HOME/Server/bin"
REPORT_DIR="/var/log/kingbase/deep_check"
DATE=$(date +%Y%m%d)
REPORT_FILE="$REPORT_DIR/monthly_check_${DATE}.txt"

# 创建报告目录
mkdir -p $REPORT_DIR

# 开始检查
echo "========================================" > $REPORT_FILE
echo "KingBaseES 每月深度检查报告" >> $REPORT_FILE
echo "检查时间: $(date)" >> $REPORT_FILE
echo "========================================" >> $REPORT_FILE
echo "" >> $REPORT_FILE

# 1. 系统资源趋势
echo "1. 系统资源趋势" >> $REPORT_FILE
echo "----------------------------------------" >> $REPORT_FILE
echo "CPU 使用率历史:" >> $REPORT_FILE
top -bn1 | grep "Cpu(s)" >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "内存使用率历史:" >> $REPORT_FILE
free -h >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "磁盘使用率历史:" >> $REPORT_FILE
df -h >> $REPORT_FILE
echo "" >> $REPORT_FILE

# 2. 数据库配置检查
echo "2. 数据库配置检查" >> $REPORT_FILE
echo "----------------------------------------" >> $REPORT_FILE
echo "内存配置:" >> $REPORT_FILE
$KB_BIN/ksql -U system -d test -c "SHOW shared_buffers; SHOW work_mem; SHOW maintenance_work_mem; SHOW effective_cache_size;" >> $REPORT_FILE 2>&1
echo "" >> $REPORT_FILE
echo "日志配置:" >> $REPORT_FILE
$KB_BIN/ksql -U system -d test -c "SHOW log_destination; SHOW logging_collector; SHOW log_directory; SHOW log_filename; SHOW log_rotation_size;" >> $REPORT_FILE 2>&1
echo "" >> $REPORT_FILE

# 3. 性能基准测试
echo "3. 性能基准测试" >> $REPORT_FILE
echo "----------------------------------------" >> $REPORT_FILE
echo "TPS 测试结果:" >> $REPORT_FILE
$KB_BIN/pgbench -i -s 10 test > /dev/null 2>&1
$KB_BIN/pgbench -c 10 -j 2 -T 60 test >> $REPORT_FILE 2>&1
echo "" >> $REPORT_FILE

# 4. 容量规划评估
echo "4. 容量规划评估" >> $REPORT_FILE
echo "----------------------------------------" >> $REPORT_FILE
echo "数据库大小:" >> $REPORT_FILE
du -sh $KB_HOME/data >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "表大小 Top 10:" >> $REPORT_FILE
$KB_BIN/ksql -U system -d test -c "SELECT schemaname, relname, pg_size_pretty(pg_total_relation_size(relid)) AS total_size, pg_size_pretty(pg_relation_size(relid)) AS data_size, pg_size_pretty(pg_indexes_size(relid)) AS index_size FROM sys_stat_user_tables ORDER BY pg_total_relation_size(relid) DESC LIMIT 10;" >> $REPORT_FILE 2>&1
echo "" >> $REPORT_FILE

# 检查结束
echo "========================================" >> $REPORT_FILE
echo "每月深度检查完成" >> $REPORT_FILE
echo "报告文件: $REPORT_FILE" >> $REPORT_FILE
echo "========================================" >> $REPORT_FILE
echo "KingBaseES 每月深度检查完成"
echo "报告文件: $REPORT_FILE"

3. 部署与调度

  1. 保存脚本

    bash
    mkdir -p /opt/Kingbase/scripts
    # 保存每周和每月检查脚本
    chmod +x /opt/Kingbase/scripts/weekly_check.sh /opt/Kingbase/scripts/monthly_check.sh
  2. 配置 crontab

    bash
    crontab -e
    # 每周日凌晨3点执行深度检查
    0 3 * * 0 /opt/Kingbase/scripts/weekly_check.sh
    # 每月1日凌晨4点执行深度检查
    0 4 1 * * /opt/Kingbase/scripts/monthly_check.sh

报告生成与分析

1. 报告内容

深度检查报告应包含以下内容:

  1. 检查基本信息:检查时间、数据库版本、检查范围
  2. 检查项汇总:各项检查的结果(通过/警告/失败)
  3. 详细检查结果:每个检查项的具体数据和状态
  4. 问题分析:发现的问题和可能的原因
  5. 建议措施:针对问题提出的解决方案和优化建议
  6. 趋势分析:关键指标的变化趋势和预测

2. 报告分析

  1. 定期审查:每周和每月检查完成后,及时审查报告
  2. 问题跟踪:对发现的问题进行跟踪,确保及时解决
  3. 趋势分析:比较连续报告,分析性能变化趋势
  4. 优化实施:根据报告建议,实施系统优化
  5. 持续改进:根据检查结果,不断完善检查内容和流程

版本差异

V8 R6 vs V8 R7

特性V8 R6V8 R7
深度检查工具需自定义脚本内置 ks_check 工具
性能视图基础性能视图增强型性能视图,支持更多指标
报告生成需自定义脚本内置报告生成功能,支持多种格式
自动化程度较低,需大量人工参与较高,支持自动化执行和报告生成
分析能力基础分析能力增强型分析能力,支持趋势分析

V8 R7 新特性

  1. 内置深度检查工具

    bash
    # 每周深度检查
    /opt/Kingbase/ES/V8/KESRealPro/V008R007C001B0024/Server/bin/ks_check -t weekly -o /var/log/kingbase/deep_check/
    
    # 每月深度检查
    /opt/Kingbase/ES/V8/KESRealPro/V008R007C001B0024/Server/bin/ks_check -t monthly -o /var/log/kingbase/deep_check/
  2. 增强型性能视图

    sql
    -- V8 R7 新增性能视图
    SELECT * FROM sys_stat_performance;
    SELECT * FROM sys_stat_wait_events;
    SELECT * FROM sys_stat_io;
  3. 内置报告生成

    bash
    # 生成 HTML 格式报告
    /opt/Kingbase/ES/V8/KESRealPro/V008R007C001B0024/Server/bin/ks_report -t deep_check -o /var/log/kingbase/reports/ -f html

最佳实践

1. 检查策略优化

  1. 根据业务需求调整检查频率:对于关键业务系统,可以增加检查频率
  2. 重点关注关键指标:根据系统特点,重点关注相关的性能指标
  3. 结合监控系统:将深度检查与监控系统结合,实现互补
  4. 定期更新检查内容:根据数据库版本更新和业务变化,定期更新检查内容

2. 问题处理流程

  1. 建立问题台账:对发现的问题进行记录,跟踪解决进度
  2. 优先级划分:根据问题的影响范围和严重程度,划分优先级
  3. 根本原因分析:对复杂问题进行根本原因分析,彻底解决
  4. 预防措施:针对问题原因,制定预防措施,避免同类问题再次发生

3. 团队协作

  1. 跨团队协作:深度检查需要数据库管理员、系统管理员和应用开发人员的协作
  2. 知识共享:定期分享检查结果和优化经验,提高团队整体水平
  3. 培训与认证:定期组织培训,提高团队的技术水平和认证等级

4. 持续改进

  1. 定期评估检查流程:评估当前检查流程的有效性,不断改进
  2. 引入新技术和工具:关注数据库技术发展,引入新的检查工具和方法
  3. 自动化程度提升:不断提高检查的自动化程度,减少人工干预
  4. 指标体系优化:根据业务需求,优化检查指标体系

常见问题

1. 深度检查耗时过长

问题描述:深度检查执行时间过长,影响系统性能。

解决方法

  • 在业务低峰期执行深度检查
  • 优化检查脚本,减少不必要的检查项
  • 并行执行检查任务,提高检查效率
  • 使用更高效的检查工具

2. 检查结果误报

问题描述:深度检查报告中存在误报,导致不必要的排查工作。

解决方法

  • 调整检查阈值,适应业务特点
  • 增加检查的采样次数,提高检查准确性
  • 结合多种指标进行综合判断
  • 人工审查报告,过滤误报

3. 检查结果分析困难

问题描述:深度检查报告数据量大,分析困难。

解决方法

  • 优化报告格式,突出关键信息
  • 使用可视化工具展示报告数据
  • 建立报告模板,标准化报告内容
  • 培养专业的分析人员

4. 检查发现的问题无法及时解决

问题描述:深度检查发现的问题由于各种原因无法及时解决。

解决方法

  • 建立问题优先级机制,优先解决严重问题
  • 与业务部门沟通,合理安排解决时间
  • 制定长期优化计划,逐步解决问题
  • 定期跟踪问题解决进度

总结

每周每月的深度检查是 KingBaseES 数据库运维的重要组成部分,它能够更全面地评估数据库的健康状况,发现潜在的性能问题和安全隐患,确保数据库系统的长期稳定运行。通过合理的检查策略、有效的工具脚本和专业的分析方法,可以提高深度检查的效率和效果,为数据库系统的可靠运行提供有力保障。

在实际应用中,建议管理员:

  • 根据业务需求和系统特点,制定适合的深度检查计划
  • 结合自动化工具和人工分析,提高检查效率和准确性
  • 建立完善的问题跟踪和解决机制,确保问题及时解决
  • 定期评估和优化检查流程,持续改进检查效果
  • 加强团队协作和知识共享,提高整体运维水平

通过科学的每周每月深度检查,可以显著提高 KingBaseES 数据库的可用性、性能和安全性,为业务系统的稳定运行提供坚实的基础。