Skip to content

KingBaseES 状态查看与诊断

状态查看概述

状态查看与诊断是KingBaseES数据库运维中的重要环节,通过查看数据库的各种状态,可以及时发现潜在问题,诊断当前故障,优化数据库性能。状态查看涵盖了数据库、集群、性能、资源、连接、复制等多个方面,是DBA日常运维的基础工作。

数据库状态查看

数据库基本信息

sql
-- 查看数据库版本
SELECT version();

-- 查看数据库名称
SELECT current_database();

-- 查看当前用户
SELECT current_user;

-- 查看数据库启动时间
SELECT pg_postmaster_start_time();

数据库运行状态

sql
-- 查看数据库进程状态
SELECT * FROM sys_stat_bgwriter;

-- 查看数据库设置
SELECT name, setting, unit, context FROM sys_settings WHERE category = 'Database';

-- 查看数据库活动状态
SELECT datname, numbackends, xact_commit, xact_rollback FROM sys_stat_database;

数据库文件状态

sql
-- 查看数据库文件位置
SELECT oid, datname, datadir FROM sys_database;

-- 查看表空间位置
SELECT spcname, spcpath FROM sys_tablespace;

-- 查看数据库大小
SELECT pg_size_pretty(pg_database_size(current_database()));

集群状态查看

集群节点状态

sql
-- 查看集群节点信息(适用于V8 R7集群)
SELECT * FROM sys_cluster_nodes;

-- 查看集群状态
SELECT * FROM sys_cluster_status;

主备复制状态

sql
-- 主库查看复制状态
SELECT 
    client_addr,
    application_name,
    state,
    sync_state,
    sent_lsn,
    write_lsn,
    flush_lsn,
    replay_lsn,
    write_lag,
    flush_lag,
    replay_lag
FROM sys_stat_replication;

-- 备库查看恢复状态
SELECT 
    pid,
    status,
    wal_received_lsn,
    wal_redo_lsn,
    wal_redo_start_time,
    wal_redo_lag
FROM sys_stat_wal_receiver;

性能状态查看

系统负载状态

sql
-- 查看系统负载
SELECT * FROM sys_stat_os_load;

-- 查看CPU使用率
SELECT * FROM sys_stat_os_cpu;

-- 查看内存使用情况
SELECT * FROM sys_stat_os_memory;

数据库性能指标

sql
-- 查看事务统计
SELECT 
    datname,
    xact_commit,
    xact_rollback,
    blks_read,
    blks_hit,
    tup_returned,
    tup_fetched,
    tup_inserted,
    tup_updated,
    tup_deleted
FROM sys_stat_database;

-- 查看索引使用情况
SELECT 
    schemaname,
    relname,
    idx_scan,
    idx_tup_read,
    idx_tup_fetch
FROM sys_stat_user_indexes;

-- 查看表使用情况
SELECT 
    schemaname,
    relname,
    seq_scan,
    seq_tup_read,
    idx_scan,
    idx_tup_fetch,
    n_tup_ins,
    n_tup_upd,
    n_tup_del
FROM sys_stat_user_tables;

慢查询状态

sql
-- 查看当前运行的慢查询
SELECT 
    pid,
    usename,
    datname,
    query_start,
    now() - query_start AS duration,
    query
FROM sys_stat_activity 
WHERE state = 'active' 
    AND now() - query_start > interval '1 second' 
ORDER BY duration DESC;

资源状态查看

内存使用状态

sql
-- 查看内存使用情况
SELECT 
    name,
    setting,
    unit
FROM sys_settings 
WHERE name IN ('shared_buffers', 'work_mem', 'maintenance_work_mem', 'effective_cache_size');

-- 查看内存上下文
SELECT * FROM sys_stat_memory_contexts;

磁盘使用状态

sql
-- 查看数据库大小
SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM sys_database;

-- 查看表大小
SELECT 
    schemaname,
    relname,
    pg_size_pretty(pg_table_size(relid)) AS table_size,
    pg_size_pretty(pg_indexes_size(relid)) AS indexes_size,
    pg_size_pretty(pg_total_relation_size(relid)) AS total_size
FROM sys_stat_user_tables 
ORDER BY pg_total_relation_size(relid) DESC;

-- 查看表空间使用情况
SELECT 
    spcname,
    pg_size_pretty(pg_tablespace_size(spcname)) AS size
FROM sys_tablespace;

CPU使用状态

sql
-- 查看数据库进程CPU使用率
SELECT 
    pid,
    usename,
    datname,
    query,
    now() - query_start AS duration,
    state
FROM sys_stat_activity 
WHERE state = 'active' 
ORDER BY query_start;

连接状态查看

连接统计

sql
-- 查看连接总数
SELECT count(*) FROM sys_stat_activity;

-- 查看连接状态分布
SELECT 
    state,
    count(*)
FROM sys_stat_activity 
GROUP BY state;

-- 查看用户连接数
SELECT 
    usename,
    count(*)
FROM sys_stat_activity 
GROUP BY usename;

连接详情

sql
-- 查看详细连接信息
SELECT 
    pid,
    usename,
    application_name,
    client_addr,
    client_port,
    datname,
    state,
    query_start,
    now() - query_start AS duration,
    query
FROM sys_stat_activity 
ORDER BY duration DESC;

连接限制

sql
-- 查看连接限制配置
SELECT 
    name,
    setting
FROM sys_settings 
WHERE name IN ('max_connections', 'superuser_reserved_connections', 'connection_timeout');

复制状态查看

复制进度

sql
-- 主库查看复制进度
SELECT 
    client_addr,
    application_name,
    state,
    sync_state,
    sent_lsn,
    write_lsn,
    flush_lsn,
    replay_lsn,
    write_lag,
    flush_lag,
    replay_lag
FROM sys_stat_replication;

-- 备库查看恢复进度
SELECT 
    checkpoint_lsn,
    redo_lsn,
    redo_start_lsn,
    redo_end_lsn,
    redo_start_time,
    redo_end_time
FROM sys_stat_progress_recovery;

复制配置

sql
-- 查看复制配置参数
SELECT 
    name,
    setting
FROM sys_settings 
WHERE name IN ('wal_level', 'max_wal_senders', 'synchronous_commit', 'synchronous_standby_names');

诊断方法

日志分析

bash
-- 查看错误日志
tail -n 200 /opt/Kingbase/ES/V8/data/log/kdb.log

-- 搜索错误信息
grep -i "error\|fatal\|panic" /opt/Kingbase/ES/V8/data/log/kdb.log

性能分析

sql
-- 查看慢查询
SELECT 
    pid,
    usename,
    datname,
    query_start,
    now() - query_start AS duration,
    query
FROM sys_stat_activity 
WHERE state = 'active' 
    AND now() - query_start > interval '1 second';

-- 查看锁等待
SELECT 
    a.pid,
    a.usename,
    a.datname,
    a.query,
    a.wait_event_type,
    a.wait_event,
    now() - a.query_start AS duration
FROM sys_stat_activity a 
WHERE a.wait_event_type IS NOT NULL;

系统命令诊断

bash
-- 查看数据库进程
ps -ef | grep kingbase

-- 查看端口监听
netstat -tuln | grep 54321

-- 查看磁盘空间
df -h

-- 查看内存使用
free -m

-- 查看CPU使用率
top

版本差异(V8 R6 vs V8 R7)

特性V8 R6V8 R7
集群状态视图基础集群视图增强的集群状态视图,提供更详细的节点信息
性能监控视图基础性能视图增强的性能监控视图,包含更多性能指标
资源监控基础资源监控增强的资源监控,支持CPU、内存、磁盘的细粒度监控
复制状态基础复制状态增强的复制状态,包含更多复制延迟信息
诊断工具基础诊断工具集成KEM诊断工具,提供可视化诊断界面
动态性能视图基础动态视图新增多个动态性能视图,提供更丰富的状态信息

最佳实践

  1. 定期查看状态:定期查看数据库状态,及时发现潜在问题
  2. 监控关键指标:监控连接数、慢查询、复制延迟等关键指标
  3. 配置告警:配置监控告警,当状态异常时及时通知
  4. 自动化脚本:编写自动化脚本,定期收集和分析状态信息
  5. 日志分析:定期分析日志文件,发现隐藏问题
  6. 性能基线:建立性能基线,便于比较和发现异常
  7. 定期巡检:定期进行全面的状态巡检,确保数据库健康

常见问题(FAQ)

Q1: 如何查看数据库当前有多少连接?

A: 可以使用以下SQL语句查看数据库当前连接数:

sql
SELECT count(*) FROM sys_stat_activity;

Q2: 如何查看慢查询?

A: 可以使用以下SQL语句查看当前正在执行的慢查询:

sql
SELECT 
    pid,
    usename,
    datname,
    query_start,
    now() - query_start AS duration,
    query
FROM sys_stat_activity 
WHERE state = 'active' 
    AND now() - query_start > interval '1 second' 
ORDER BY duration DESC;

Q3: 如何查看主备复制状态?

A: 在主库上可以使用以下SQL语句查看复制状态:

sql
SELECT 
    client_addr,
    application_name,
    state,
    sync_state,
    sent_lsn,
    write_lsn,
    flush_lsn,
    replay_lsn,
    write_lag,
    flush_lag,
    replay_lag
FROM sys_stat_replication;

在备库上可以使用以下SQL语句查看恢复状态:

sql
SELECT 
    pid,
    status,
    wal_received_lsn,
    wal_redo_lsn,
    wal_redo_start_time,
    wal_redo_lag
FROM sys_stat_wal_receiver;

Q4: 如何查看数据库大小?

A: 可以使用以下SQL语句查看数据库大小:

sql
SELECT pg_size_pretty(pg_database_size(current_database()));

Q5: 如何查看表空间使用情况?

A: 可以使用以下SQL语句查看表空间使用情况:

sql
SELECT 
    spcname,
    pg_size_pretty(pg_tablespace_size(spcname)) AS size
FROM sys_tablespace;

总结

状态查看与诊断是KingBaseES数据库运维的基础工作,通过定期查看数据库的各种状态,可以及时发现潜在问题,诊断当前故障,优化数据库性能。KingBaseES提供了丰富的动态性能视图和系统表,便于DBA查看和分析数据库状态。V8 R7版本在状态查看和诊断方面进行了增强,提供了更多的视图和指标,有助于DBA更全面地了解数据库状态。同时,结合日志分析和系统命令诊断,可以更深入地分析数据库问题,提高数据库系统的可靠性和可用性。