一、数据库连接与基础操作
-
连接指定服务器数据库
bashksql -h 主机IP -p 端口号 -U 用户名 -d 数据库名 -W # 示例:连接 IP 为 192.168.1.100 的数据库 ksql -h 192.168.1.100 -p 54321 -U system -d test -W
-
断开数据库连接
bash\q 或 exit
-
查看数据库列表及详细信息
sql\l+ SELECT datname FROM sys_database;
-
查看数据库版本信息
bashsys_ctl -V # 查看服务端版本 SELECT version(); # 查看数据库详细版本
二、会话与进程管理
-
终止指定数据库所有会话
sqlSELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='xk_test' AND pid <> pg_backend_pid();
-
查看活跃会话及 SQL 信息
sqlSELECT datname, usename, client_addr, query, state FROM sys_stat_activity WHERE datname IS NOT NULL;
-
终止指定进程
sqlSELECT sys_terminate_backend(pid); -- 替换为实际 PID
-
查询当前会话进程 ID
sqlSELECT sys_backend_pid;
三、系统信息与状态
-
查看 License 有效期
sqlSELECT get_license_validdays();
-
数据库运行时间与启动时间
sqlSELECT sys_postmaster_start_time(); SELECT current_timestamp - pg_postmaster_start_time() AS uptime;
-
查看客户端连接信息
sqlSELECT inet_client_addr(), inet_client_port(); -- 当前会话的客户端 IP 和端口
-
查看数据库物理存储路径
sqlSELECT sys_relation_filepath('表名');
四、空间与容量管理
-
数据库占用空间
sqlSELECT pg_size_pretty(pg_database_size(current_database())); SELECT sum(pg_database_size(datname))/1024/1024 || 'MB' FROM sys_database;
-
表与索引空间统计
sql-- 表大小(含索引) SELECT pg_size_pretty(pg_total_relation_size('表名')); -- 表数据大小 SELECT pg_size_pretty(pg_relation_size('表名')); -- 索引大小 SELECT pg_size_pretty(pg_total_relation_size('表名') - pg_relation_size('表名'));
五、性能监控与调优
-
慢 SQL 分析
sql-- 按平均执行时间排序 SELECT userid::regrole, dbid, query FROM sys_stat_statements ORDER BY mean_exec_time DESC LIMIT 5; -- 按总执行时间排序 SELECT userid::regrole, dbid, query FROM sys_stat_statements ORDER BY total_exec_time DESC LIMIT 5;
-
长事务监控
sqlSELECT * FROM sys_stat_activity WHERE xact_start + interval '1 hour' < now();
-
锁阻塞查询
sqlSELECT blocked_locks.pid AS blocked_pid, blocked_activity.query AS blocked_query, blocking_locks.pid AS blocking_pid, blocking_activity.query AS blocking_query FROM pg_locks blocked_locks JOIN pg_stat_activity blocked_activity ON blocked_activity.pid = blocked_locks.pid JOIN pg_locks blocking_locks ON blocking_locks.locktype = blocked_locks.locktype JOIN pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid WHERE NOT blocked_locks.granted;
六、高可用与备份恢复
-
主备状态检查
sqlSELECT pg_is_in_recovery(); -- 返回 f 为主库,t 为备库
-
主库查看备库延迟
sqlSELECT client_addr, pg_wal_lsn_diff(sent_lsn, write_lsn) AS sent_lag, pg_wal_lsn_diff(sent_lsn, replay_lsn) AS apply_lag FROM pg_stat_replication;
-
物理备份与恢复
bash# 全量备份 kbbackup -U system -D /data/kingbase -b /backup/full # 恢复备份 kbrestore -U system -D /data/kingbase_new -l /backup/full/backup_label
-
逻辑备份与导入
bashpg_dump -U system -d test -f test.sql # 导出 ksql -U system -d test -f test.sql # 导入
七、表维护与优化
-
表膨胀处理
sql-- 查询表膨胀率 SELECT c.oid::regclass AS table_name, greatest(age(c.relfrozenxid), age(t.relfrozenxid)) AS age FROM pg_class c LEFT JOIN pg_class t ON c.reltoastrelid = t.oid WHERE c.relkind IN ('r', 'm') ORDER BY age DESC; -- 手动清理膨胀 VACUUM FULL 表名;
-
统计信息更新
sqlANALYZE 表名; -- 收集统计信息
八、日志与故障排查
-
日志文件查看
bashtail -f $KINGBASE_DATA/sys_log/*.csv # 实时查看错误日志
-
数据库进程检查
bashps aux | grep kingbase
-
连接数统计
sqlSELECT datname, usename, COUNT(*) AS connections FROM sys_stat_activity WHERE usename IS NOT NULL GROUP BY datname, usename;
注意事项
- 高风险操作警告 :
VACUUM FULL
会锁表,需在业务低峰期操作;终止会话前确认影响。 - 备份验证:定期检查备份文件完整性,确保恢复流程可靠。
- 权限控制 :避免直接使用
system
用户操作生产环境,按需分配权限。