一、數據庫連接與基礎操作
-
連接指定服務器數據庫
ksql -h 主機IP -p 端口號 -U 用戶名 -d 數據庫名 -W # 示例:連接 IP 為 192.168.1.100 的數據庫 ksql -h 192.168.1.100 -p 54321 -U system -d test -W
-
斷開數據庫連接
\q 或 exit
-
查看數據庫列表及詳細信息
\l+ SELECT datname FROM sys_database;
-
查看數據庫版本信息
sys_ctl -V # 查看服務端版本 SELECT version(); # 查看數據庫詳細版本
二、會話與進程管理
-
終止指定數據庫所有會話
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='xk_test' AND pid <> pg_backend_pid();
-
查看活躍會話及 SQL 信息
SELECT datname, usename, client_addr, query, state FROM sys_stat_activity WHERE datname IS NOT NULL;
-
終止指定進程
SELECT sys_terminate_backend(pid); -- 替換為實際 PID
-
查詢當前會話進程 ID
SELECT sys_backend_pid;
三、系統信息與狀態
-
查看 License 有效期
SELECT get_license_validdays();
-
數據庫運行時間與啟動時間
SELECT sys_postmaster_start_time(); SELECT current_timestamp - pg_postmaster_start_time() AS uptime;
-
查看客戶端連接信息
SELECT inet_client_addr(), inet_client_port(); -- 當前會話的客戶端 IP 和端口
-
查看數據庫物理存儲路徑
SELECT sys_relation_filepath('表名');
四、空間與容量管理
-
數據庫占用空間
SELECT pg_size_pretty(pg_database_size(current_database())); SELECT sum(pg_database_size(datname))/1024/1024 || 'MB' FROM sys_database;
-
表與索引空間統計
-- 表大小(含索引) 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 分析
-- 按平均執行時間排序 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;
-
長事務監控
SELECT * FROM sys_stat_activity WHERE xact_start + interval '1 hour' < now();
-
鎖阻塞查詢
SELECT 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;
六、高可用與備份恢復
-
主備狀態檢查
SELECT pg_is_in_recovery(); -- 返回 f 為主庫,t 為備庫
-
主庫查看備庫延遲
SELECT 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;
-
物理備份與恢復
# 全量備份 kbbackup -U system -D /data/kingbase -b /backup/full # 恢復備份 kbrestore -U system -D /data/kingbase_new -l /backup/full/backup_label
-
邏輯備份與導入
pg_dump -U system -d test -f test.sql # 導出 ksql -U system -d test -f test.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 表名;
-
統計信息更新
ANALYZE 表名; -- 收集統計信息
八、日志與故障排查
-
日志文件查看
tail -f $KINGBASE_DATA/sys_log/*.csv # 實時查看錯誤日志
-
數據庫進程檢查
ps aux | grep kingbase
-
連接數統計
SELECT datname, usename, COUNT(*) AS connections FROM sys_stat_activity WHERE usename IS NOT NULL GROUP BY datname, usename;
注意事項
- 高風險操作警告:
VACUUM FULL
會鎖表,需在業務低峰期操作;終止會話前確認影響。 - 備份驗證:定期檢查備份文件完整性,確保恢復流程可靠。
- 權限控制:避免直接使用
system
用戶操作生產環境,按需分配權限。