外观
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 R6 | V8 R7 |
|---|---|---|
| 集群状态视图 | 基础集群视图 | 增强的集群状态视图,提供更详细的节点信息 |
| 性能监控视图 | 基础性能视图 | 增强的性能监控视图,包含更多性能指标 |
| 资源监控 | 基础资源监控 | 增强的资源监控,支持CPU、内存、磁盘的细粒度监控 |
| 复制状态 | 基础复制状态 | 增强的复制状态,包含更多复制延迟信息 |
| 诊断工具 | 基础诊断工具 | 集成KEM诊断工具,提供可视化诊断界面 |
| 动态性能视图 | 基础动态视图 | 新增多个动态性能视图,提供更丰富的状态信息 |
最佳实践
- 定期查看状态:定期查看数据库状态,及时发现潜在问题
- 监控关键指标:监控连接数、慢查询、复制延迟等关键指标
- 配置告警:配置监控告警,当状态异常时及时通知
- 自动化脚本:编写自动化脚本,定期收集和分析状态信息
- 日志分析:定期分析日志文件,发现隐藏问题
- 性能基线:建立性能基线,便于比较和发现异常
- 定期巡检:定期进行全面的状态巡检,确保数据库健康
常见问题(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更全面地了解数据库状态。同时,结合日志分析和系统命令诊断,可以更深入地分析数据库问题,提高数据库系统的可靠性和可用性。
