说明:命令按 V8R6、V9 常见语法整理。不同小版本、兼容模式(Oracle、MySQL)及插件版本下,
sys_与pg_前缀、集群工具参数可能存在差异;执行前请用ksql \h、sys_ctl --help、对应工具--help核对,破坏性命令务必先在测试环境验证。
一、连接与实例基础管理(1--30)
ksql -U system -d test -h 127.0.0.1 -p 54321:本地或远程连接ksql -U system -d test -W:连接时提示输入密码ksql -U system -d test -c "SELECT version();":执行单条 SQLksql -U system -d test -f /home/kes/check.sql:执行脚本文件ksql -U system -d test -o /home/kes/out.txt -c "SELECT now();":结果输出到文件ksql -l:列出实例内所有数据库ksql -U system -d test -c "\l":列出数据库及属主、编码\c dbname:切换数据库\conninfo:查看当前连接信息\dn:列出 schema\dt:列出当前 schema 表\d+ tablename:查看表结构、存储、分布信息\di:列出索引\dv:列出视图\df:列出函数\du:列出用户与角色\dx:列出已安装扩展\dp:查看对象权限\timing on:开启 SQL 执行耗时显示\x:切换扩展显示模式\encoding:查看客户端字符编码\q:退出 ksqlsys_ctl status -D $KINGBASE_DATA:查看实例运行状态sys_ctl start -D $KINGBASE_DATA -l $KINGBASE_DATA/log/start.log:启动实例sys_ctl stop -D $KINGBASE_DATA -m fast:快速停止实例sys_ctl restart -D $KINGBASE_DATA -m fast:重启实例sys_ctl reload -D $KINGBASE_DATA:重载配置文件sys_ctl promote -D $KINGBASE_DATA:备库提升为主库sys_isready -h 127.0.0.1 -p 54321:探测实例是否可连接sys_controldata -D $KINGBASE_DATA:查看控制文件与集群状态
二、日常巡检(31--120)
2.1 实例与版本
SELECT version();SELECT current_database(), current_user, now();SELECT sys_postmaster_start_time();SELECT date_trunc('second', now() - sys_postmaster_start_time()) AS uptime;SHOW server_version;SHOW data_directory;SELECT name, setting FROM sys_settings WHERE name IN ('port','listen_addresses');SELECT sys_conf_load_time();
2.2 连接与会话
SELECT count(*) FROM sys_stat_activity;SELECT state, count(*) FROM sys_stat_activity GROUP BY state;SELECT count(*) FROM sys_stat_activity WHERE state = 'active';SELECT usename, count(*) FROM sys_stat_activity GROUP BY usename ORDER BY 2 DESC;SELECT datname, count(*) FROM sys_stat_activity GROUP BY datname;SELECT pid,usename,datname,client_addr,state,wait_event_type,wait_event,query_start FROM sys_stat_activity WHERE state <> 'idle' ORDER BY query_start;SELECT setting FROM sys_settings WHERE name = 'max_connections';SELECT round((SELECT count(*) FROM sys_stat_activity)::numeric * 100 / (SELECT setting::int FROM sys_settings WHERE name='max_connections'), 2) AS conn_pct;SELECT * FROM sys_stat_activity WHERE backend_type = 'client backend' AND state = 'idle in transaction';SELECT pid, now()-xact_start AS xact_age, state, query FROM sys_stat_activity WHERE xact_start IS NOT NULL ORDER BY xact_start LIMIT 20;SELECT pid, now()-state_change AS idle_sec, query FROM sys_stat_activity WHERE state LIKE 'idle%' ORDER BY state_change LIMIT 20;SELECT * FROM sys_stat_database;
2.3 空间与对象
SELECT datname, sys_size_pretty(sys_database_size(datname)) FROM sys_database ORDER BY sys_database_size(datname) DESC;SELECT sys_size_pretty(sys_database_size(current_database()));SELECT spcname, sys_size_pretty(sys_tablespace_size(spcname)) FROM sys_tablespace;SELECT relname, sys_size_pretty(sys_total_relation_size(oid)) FROM sys_class WHERE relkind='r' ORDER BY sys_total_relation_size(oid) DESC LIMIT 20;SELECT nspname, sys_size_pretty(sum(sys_total_relation_size(c.oid))) FROM sys_class c JOIN sys_namespace n ON n.oid=c.relnamespace WHERE relkind='r' GROUP BY 1 ORDER BY sum(sys_total_relation_size(c.oid)) DESC;SELECT relname, n_live_tup, n_dead_tup, last_vacuum, last_autovacuum, last_analyze FROM sys_stat_user_tables ORDER BY n_dead_tup DESC LIMIT 20;SELECT schemaname, relname, seq_scan, idx_scan, seq_tup_read, n_live_tup FROM sys_stat_user_tables ORDER BY seq_scan DESC LIMIT 20;SELECT schemaname, relname, indexrelname, idx_scan, idx_tup_read FROM sys_stat_all_indexes ORDER BY idx_scan ASC LIMIT 20;SELECT * FROM sys_stat_bgwriter;SELECT * FROM sys_stat_archiver;SELECT * FROM sys_stat_progress_vacuum;SELECT * FROM sys_stat_progress_create_index;
2.4 锁与等待
SELECT locktype, mode, granted, count(*) FROM sys_locks GROUP BY 1,2,3 ORDER BY 4 DESC;SELECT pid, wait_event_type, wait_event, state, query FROM sys_stat_activity WHERE wait_event_type = 'Lock';SELECT a.pid AS blocked_pid, a.query AS blocked_query, b.pid AS blocking_pid, b.query AS blocking_query FROM sys_stat_activity a JOIN sys_locks l1 ON l1.pid=a.pid AND NOT l1.granted JOIN sys_locks l2 ON l2.locktype=l1.locktype AND l2.relation IS NOT DISTINCT FROM l1.relation AND l2.granted JOIN sys_stat_activity b ON b.pid=l2.pid;SELECT * FROM sys_locks WHERE NOT granted;SELECT pid, relation::regclass, mode, granted FROM sys_locks WHERE relation IS NOT NULL;SELECT count(*) FROM sys_stat_activity WHERE wait_event_type = 'IO';SELECT wait_event_type, wait_event, count(*) FROM sys_stat_activity WHERE wait_event IS NOT NULL GROUP BY 1,2 ORDER BY 3 DESC;SELECT * FROM sys_stat_activity WHERE state='active' AND now()-query_start > interval '5 min';SELECT pid, query FROM sys_stat_activity WHERE backend_xmin IS NOT NULL ORDER BY age(backend_xmin) DESC LIMIT 20;SELECT datname, age(datfrozenxid) FROM sys_database ORDER BY 2 DESC;SELECT relname, age(relfrozenxid) FROM sys_class WHERE relkind='r' ORDER BY 2 DESC LIMIT 20;SELECT count(*) FROM sys_prepared_xacts;SELECT * FROM sys_prepared_xacts ORDER BY prepared;
2.5 WAL、归档与复制
SELECT slot_name, slot_type, active, restart_lsn, sys_size_pretty(sys_wal_lsn_diff(sys_current_wal_lsn(), restart_lsn)) FROM sys_replication_slots;SELECT * FROM sys_stat_replication;SELECT client_addr, state, sync_state, sys_wal_lsn_diff(sent_lsn, replay_lsn) AS replay_lag_bytes FROM sys_stat_replication;SELECT application_name, state, sys_wal_lsn_diff(sys_current_wal_lsn(), replay_lsn) AS lag_bytes FROM sys_stat_replication;SELECT sys_last_wal_receive_lsn(), sys_last_wal_replay_lsn();SELECT sys_current_wal_lsn(), sys_last_wal_replay_lsn();SELECT sys_wal_lsn_diff(sys_last_wal_receive_lsn(), sys_last_wal_replay_lsn()) AS apply_lag;SHOW wal_level; SHOW archive_mode; SHOW archive_command;SELECT name, setting FROM sys_settings WHERE name IN ('wal_level','archive_mode','archive_command','max_wal_size','min_wal_size');ls -l $KINGBASE_DATA/pg_wal | tail -20:查看在线 WAL 文件SELECT count(*) FROM sys_ls_waldir();SELECT archived_count, failed_count, last_archived_wal, last_failed_wal FROM sys_stat_archiver;du -sh /backup/wal_archive:归档目录容量SHOW autovacuum; SHOW autovacuum_naptime; SHOW autovacuum_max_workers;
2.6 膨胀与自动清理
SELECT * FROM sys_stat_activity WHERE backend_type LIKE '%autovacuum%';SELECT relname, n_dead_tup, round(n_dead_tup*100.0/nullif(n_live_tup+n_dead_tup,0),2) AS dead_pct FROM sys_stat_user_tables ORDER BY dead_pct DESC LIMIT 20;SELECT * FROM sys_stat_progress_vacuum;SELECT relname, last_autovacuum, autovacuum_count FROM sys_stat_user_tables WHERE last_autovacuum IS NULL AND n_dead_tup > 1000;SELECT relname FROM sys_stat_user_tables WHERE last_analyze IS NULL;SELECT count(*) FROM sys_stat_activity WHERE query LIKE '%autovacuum%';SELECT name, setting, unit FROM sys_settings WHERE name LIKE '%timeout%';
2.7 日志检查
SHOW log_min_duration_statement;SHOW log_directory; SHOW log_filename; SHOW logging_collector;tail -n 200 $KINGBASE_DATA/log/*.loggrep -c "ERROR" $KINGBASE_DATA/log/*.loggrep "FATAL" $KINGBASE_DATA/log/*.log | tail -50grep "deadlock detected" $KINGBASE_DATA/log/*.log | tail -20grep -i "out of memory" $KINGBASE_DATA/log/*.log | tail -20df -h:文件系统使用率df -i:inode 使用率
2.8 主机资源
free -mtop -b -n1 | head -20iostat -x 1 3vmstat 1 5sar -u 1 5ss -lntp | grep 54321ps -ef | grep kingbaseuptimedmesg | tail -50cat /proc/meminfodu -sh $KINGBASE_DATAfind $KINGBASE_DATA -type f -size +1G -exec ls -lh {} \;SELECT * FROM sys_stat_ssl;SELECT * FROM sys_file_settings;SELECT * FROM sys_hba_file_rules;
三、性能优化与 SQL 诊断(121--220)
3.1 执行计划
EXPLAIN SELECT * FROM t WHERE id = 1;EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM t WHERE id = 1;EXPLAIN (ANALYZE, BUFFERS, VERBOSE, FORMAT JSON) SELECT ...;EXPLAIN (COSTS OFF) SELECT ...;EXPLAIN (ANALYZE, TIMING OFF) SELECT ...;
3.2 SQL 统计
SELECT * FROM sys_stat_statements ORDER BY total_exec_time DESC LIMIT 20;SELECT * FROM sys_stat_statements ORDER BY mean_exec_time DESC LIMIT 20;SELECT * FROM sys_stat_statements ORDER BY calls DESC LIMIT 20;SELECT * FROM sys_stat_statements ORDER BY rows DESC LIMIT 20;SELECT queryid, calls, round(total_exec_time::numeric,2) AS total_ms FROM sys_stat_statements ORDER BY 3 DESC LIMIT 20;SELECT queryid, query FROM sys_stat_statements WHERE shared_blks_read > 10000;SELECT sum(blks_hit)*100.0/nullif(sum(blks_hit+blks_read),0) AS cache_hit_pct FROM sys_stat_database;SELECT datname, blks_hit, blks_read FROM sys_stat_database ORDER BY blks_read DESC;SELECT * FROM sys_stat_user_tables WHERE seq_scan > idx_scan AND n_live_tup > 10000;SELECT * FROM sys_stat_all_indexes WHERE idx_scan = 0;SELECT indexrelname, sys_size_pretty(sys_relation_size(indexrelid)) FROM sys_stat_all_indexes ORDER BY sys_relation_size(indexrelid) DESC LIMIT 20;SELECT sys_stat_statements_reset();SELECT sys_stat_reset();SELECT sys_stat_reset_shared('bgwriter');
3.3 索引与统计信息
CREATE INDEX CONCURRENTLY idx_t_c1 ON t(c1);REINDEX INDEX CONCURRENTLY idx_t_c1;REINDEX TABLE t;ANALYZE t;ANALYZE VERBOSE t;VACUUM (VERBOSE, ANALYZE) t;VACUUM FULL t;VACUUM (FREEZE, VERBOSE) t;CLUSTER t USING idx_t_c1;SELECT * FROM sys_stats WHERE tablename = 't';SELECT attname, n_distinct, correlation FROM sys_stats WHERE tablename = 't';ALTER TABLE t ALTER COLUMN c1 SET STATISTICS 500;SELECT * FROM sys_indexes WHERE tablename = 't';SELECT reltuples, relpages FROM sys_class WHERE relname = 't';SELECT relname, relkind, relpages, reltuples FROM sys_class WHERE relname = 't';
3.4 关键参数
SELECT name, setting, unit FROM sys_settings WHERE name LIKE '%cost%';SHOW random_page_cost; SHOW effective_cache_size;SHOW work_mem; SHOW maintenance_work_mem;SHOW max_parallel_workers_per_gather;SET work_mem = '64MB';ALTER SYSTEM SET work_mem = '64MB';SELECT sys_reload_conf();SHOW shared_preload_libraries;SHOW effective_io_concurrency;SHOW shared_buffers; SHOW temp_buffers;SHOW max_worker_processes; SHOW max_parallel_workers;SHOW synchronous_commit;SHOW checkpoint_timeout; SHOW max_wal_size;SHOW track_io_timing;SHOW log_min_duration_statement;
3.5 检查点与后台写
CHECKPOINT;SELECT sys_switch_wal();SELECT * FROM sys_stat_progress_checkpoint;SELECT checkpoints_timed, checkpoints_req, buffers_checkpoint, buffers_backend FROM sys_stat_bgwriter;SELECT * FROM sys_stat_bgwriter;
3.6 锁与阻塞
SELECT * FROM sys_locks WHERE mode = 'ExclusiveLock';SELECT * FROM sys_locks WHERE locktype = 'advisory';SELECT * FROM sys_stat_activity WHERE wait_event = 'transactionid';SELECT pid, query FROM sys_stat_activity WHERE state='active' ORDER BY query_start LIMIT 10;SELECT sys_terminate_backend(pid);SELECT sys_cancel_backend(pid);SELECT * FROM sys_stat_activity WHERE backend_xid IS NOT NULL;SELECT * FROM sys_locks WHERE relation = 't'::regclass;SHOW deadlock_timeout; SHOW lock_timeout;
3.7 表与索引访问特征
SELECT * FROM sys_stat_user_functions;SELECT * FROM sys_stat_user_tables ORDER BY n_tup_upd DESC LIMIT 20;SELECT * FROM sys_stat_user_tables ORDER BY n_tup_del DESC LIMIT 20;SELECT relname, n_tup_hot_upd, n_tup_upd FROM sys_stat_user_tables;SELECT * FROM sys_stat_database_conflicts;SELECT * FROM sys_stat_activity WHERE backend_type = 'parallel worker';SELECT relname, sys_size_pretty(sys_relation_size(reltoastrelid)) AS toast_size FROM sys_class WHERE reltoastrelid <> 0 ORDER BY sys_relation_size(reltoastrelid) DESC LIMIT 20;SELECT relname, sys_size_pretty(sys_table_size(oid)) AS heap, sys_size_pretty(sys_indexes_size(oid)) AS idx FROM sys_class WHERE relkind='r' ORDER BY sys_total_relation_size(oid) DESC LIMIT 20;SELECT * FROM sys_stat_all_tables WHERE n_live_tup = 0 AND n_dead_tup > 0;
3.8 会话与超时控制
SET statement_timeout = '30s';SET lock_timeout = '5s';SET idle_in_transaction_session_timeout = '10min';SET idle_session_timeout = '30min';SHOW statement_timeout; SHOW idle_in_transaction_session_timeout;ALTER SYSTEM SET idle_in_transaction_session_timeout = '10min';
3.9 临时文件与 IO
SET log_temp_files = 0;SHOW temp_file_limit;SELECT datname, temp_files, temp_bytes FROM sys_stat_database ORDER BY temp_bytes DESC;SELECT * FROM sys_stat_activity WHERE wait_event_type = 'IO';SELECT * FROM sys_stat_activity WHERE wait_event_type = 'LWLock';
3.10 优化辅助
SELECT * FROM sys_prepared_statements;SELECT * FROM sys_cursors;SELECT name, statement, prepare_time FROM sys_prepared_statements ORDER BY prepare_time;EXPLAIN (ANALYZE, BUFFERS) SELECT ... /* 验证索引改写效果 */;SELECT * FROM sys_stat_statements WHERE query ILIKE '%seq scan%';SELECT queryid, query FROM sys_stat_statements WHERE total_exec_time > 60000;SELECT * FROM sys_stat_statements ORDER BY shared_blks_hit DESC LIMIT 10;SELECT * FROM sys_stat_statements ORDER BY wal_bytes DESC LIMIT 10;SELECT * FROM sys_stat_statements ORDER BY temp_blks_written DESC LIMIT 10;SELECT sys_size_pretty(sum(temp_bytes)) FROM sys_stat_database;CREATE EXTENSION IF NOT EXISTS pg_hint_plan;(按版本核对扩展名)SELECT /*+ IndexScan(t idx_t_c1) */ * FROM t WHERE c1 = 1;(需 hint 插件)SET enable_seqscan = off;SET enable_nestloop = off;SET enable_hashjoin = on;SET max_parallel_workers_per_gather = 4;SELECT * FROM sys_settings WHERE name IN ('jit','jit_above_cost','parallel_setup_cost');
四、备份与恢复(221--325)
4.1 逻辑备份
sys_dump -U system -d test -f /backup/test.sqlsys_dump -U system -d test -Fc -f /backup/test.dumpsys_dump -U system -d test -Fp -f /backup/test.sqlsys_dump -U system -d test -Ft -f /backup/test.tarsys_dump -U system -d test -Fd -j 4 -f /backup/test_dirsys_dump -U system -d test -n public -f /backup/public.sqlsys_dump -U system -d test -t t -f /backup/t.sqlsys_dump -U system -d test -T t -f /backup/except_t.sqlsys_dump -U system -d test --inserts -f /backup/test_inserts.sqlsys_dump -U system -d test --column-inserts -f /backup/test_col.sqlsys_dump -U system -d test --no-owner -f /backup/test.sqlsys_dump -U system -d test --no-privileges -f /backup/test.sqlsys_dump -U system -d test --clean --if-exists -f /backup/test.sqlsys_dump -U system -d test --schema-only -f /backup/schema.sqlsys_dump -U system -d test --data-only -f /backup/data.sqlsys_dump -U system -d test -Z 9 -Fc -f /backup/test.dumpsys_dump -U system -d test --verbose -f /backup/test.sqlsys_dump -U system -d test -j 4 -Fd -f /backup/test_parsys_dumpall -U system -g -f /backup/globals.sqlsys_dumpall -U system -f /backup/all.sqlsys_dumpall -U system -r -f /backup/roles.sqlsys_dumpall -U system -s -f /backup/all_schema.sqlsys_dump -U system -d test -b -f /backup/with_blob.sqlsys_dump -U system -d test --exclude-table-data=t_log -f /backup/test.sqlsys_dump -U system -d test --exclude-schema=history -f /backup/test.sqlsys_dump -U system -d test --section=pre-data -f /backup/pre.sqlsys_dump -U system -d test --serializable-deferrable -f /backup/test.sql
4.2 逻辑恢复
sys_restore -U system -d test /backup/test.dumpsys_restore -U system -C -d postgres /backup/test.dumpsys_restore -l /backup/test.dumpsys_restore -L /backup/toc.list -d test /backup/test.dumpsys_restore -j 4 -d test /backup/test_dirsys_restore -t t -d test /backup/test.dumpsys_restore -n public -d test /backup/test.dumpsys_restore --clean --if-exists -d test /backup/test.dumpsys_restore --data-only -d test /backup/test.dumpsys_restore --schema-only -d test /backup/test.dumpksql -U system -d test -f /backup/test.sqlcreatedb -U system -T template0 test_newCREATE DATABASE test_new TEMPLATE test;dropdb -U system test_newDROP DATABASE IF EXISTS test_new;
4.3 表级与数据交换
COPY t TO '/backup/t.csv' WITH (FORMAT csv, HEADER true);COPY t FROM '/backup/t.csv' WITH (FORMAT csv, HEADER true);\copy t TO '/backup/t.csv' CSV HEADER(ksql 元命令)\copy t FROM '/backup/t.csv' CSV HEADERCOPY (SELECT * FROM t WHERE dt='2026-11-01') TO '/backup/t_1101.csv' CSV HEADER;COPY t TO PROGRAM 'gzip > /backup/t.csv.gz' CSV HEADER;SELECT * FROM sys_stat_progress_copy;(按版本核对视图)
4.4 物理备份
sys_basebackup -D /backup/base -Fp -Xs -P -Rsys_basebackup -D /backup/base -Ft -z -Psys_basebackup -D /backup/base -Fp -Xs -P --checkpoint=fastsys_basebackup -D /backup/base -X stream -c fast -Psys_basebackup -D /backup/base -l "full_20261110" -Psys_basebackup -h standby_host -D /backup/base -Xs -Psys_basebackup -D /backup/base -Fp -Xs -P -R -S slot_name
4.5 备份工具 sys_rman
sys_rman initsys_rman --config=/backup/backup.info --stanza=kes backupsys_rman --config=/backup/backup.info --stanza=kes backup --type=fullsys_rman --config=/backup/backup.info --stanza=kes backup --type=incrsys_rman --config=/backup/backup.info --stanza=kes backup --type=diffsys_rman --config=/backup/backup.info --stanza=kes checksys_rman --config=/backup/backup.info --stanza=kes infosys_rman --config=/backup/backup.info --stanza=kes verifysys_rman --config=/backup/backup.info --stanza=kes restoresys_rman --config=/backup/backup.info --stanza=kes expiresys_rman --config=/backup/backup.info --stanza=kes archive-pushsys_rman --config=/backup/backup.info --stanza=kes archive-getsys_rman --config=/backup/backup.info --stanza=kes stanza-createsys_rman --config=/backup/backup.info --stanza=kes stanza-upgradesys_rman --config=/backup/backup.info --stanza=kes delete --set=...sys_rman --config=/backup/backup.info --stanza=kes backup --backup-standbysys_rman --config=/backup/backup.info --stanza=kes info --output=json
4.6 备份脚本
sys_backup.sh initsys_backup.sh startsys_backup.sh stopsys_backup.sh statuscrontab -e:配置定时备份任务0 2 * * * /home/kes/sys_backup.sh start >/dev/null 2>&1:每日 2 点备份sys_dump -Fc -f /backup/test_$(date +%F).dump test:按日期命名备份sys_restore -l /backup/test_20261110.dump | head -20:备份可读性校验md5sum /backup/test_20261110.dump:备份文件完整性校验
4.7 时间点恢复(PITR)
restore_command = 'cp /backup/wal_archive/%f %p'recovery_target_time = '2026-11-10 09:30:00'recovery_target_lsn = '0/1A2B3C4D'recovery_target_xid = '1234567'recovery_target_name = 'before_upgrade'recovery_target_action = 'promote'touch $KINGBASE_DATA/recovery.signalSELECT sys_create_restore_point('before_upgrade');SELECT sys_switch_wal();ls -l /backup/wal_archive | tail -20sys_waldump /backup/wal_archive/000000010000000000000001 | head -50- 恢复完成后执行
ANALYZE;刷新统计信息 - 恢复后执行
sys_vacuumdb --all --analyze(工具名按版本核对) - 恢复到新实例:
sys_basebackup+ 独立端口启动 - 恢复后核对
SELECT count(*) FROM t; - 恢复后核对序列当前值
SELECT last_value FROM seq_name; - 恢复后核对复制槽状态
- 恢复后重建索引统计
- 恢复演练记录表结构与数据量比对
- 备份保留策略:
find /backup -name "*.dump" -mtime +7 -delete(谨慎) - 异地备份:
rsync -avz /backup/ backup_host:/backup/ - 备份文件加密:
gpg -c /backup/test.dump - 备份目录权限检查:
ls -ld /backup
五、高可用与主备复制(326--385)
5.1 repmgr 集群管理
repmgr primary registerrepmgr standby registerrepmgr cluster showrepmgr cluster crosscheckrepmgr cluster event --limit 20repmgr service statusrepmgr standby promoterepmgr standby switchoverrepmgr node rejoinrepmgr cluster cleanuprepmgr standby clone -h primary_host -D $KINGBASE_DATArepmgr node statusrepmgr witness registerrepmgr cluster matrixrepmgr daemon start
5.2 复制参数与状态
SHOW synchronous_commit;SHOW synchronous_standby_names;ALTER SYSTEM SET synchronous_standby_names = 'standby1';SELECT * FROM sys_stat_replication;SELECT client_addr, state, sync_state, sent_lsn, replay_lsn FROM sys_stat_replication;SELECT slot_name, slot_type, active FROM sys_replication_slots;SELECT sys_create_physical_replication_slot('slot_name');SELECT sys_drop_replication_slot('slot_name');SELECT sys_replication_slot_advance('slot_name', sys_current_wal_lsn());SHOW wal_level; SHOW max_wal_senders; SHOW hot_standby;SELECT sys_is_in_recovery();SELECT sys_last_wal_receive_lsn(), sys_last_wal_replay_lsn();SELECT sys_wal_lsn_diff(sys_last_wal_receive_lsn(), sys_last_wal_replay_lsn());SHOW primary_conninfo;SHOW restore_command;SHOW wal_keep_segments;SELECT * FROM sys_stat_database_conflicts;
5.3 切换与恢复
sys_ctl promote -D $KINGBASE_DATAsys_rewind --target-pgdata=$KINGBASE_DATA --source-server="host=primary port=54321 user=system dbname=test"sys_rewind --target-pgdata=$KINGBASE_DATA --source-pgdata=/backup/baseSELECT sys_create_restore_point('switchover_point');SELECT sys_switch_wal();- 切换前检查:
SELECT * FROM sys_stat_replication; - 切换前检查:
SELECT slot_name, active FROM sys_replication_slots; - 切换后校验:
SELECT sys_is_in_recovery(); - 切换后校验:
SELECT count(*) FROM 关键业务表; - 回切前检查主备延迟为 0
- 回切命令:
repmgr standby switchover - 双主检查:主备同时
SELECT sys_is_in_recovery(); - 脑裂检查:比对
sys_current_wal_lsn() - VIP 切换:
ip addr add 10.0.0.10/24 dev eth0 - VIP 摘除:
ip addr del 10.0.0.10/24 dev eth0 systemctl status keepalivedip -4 addr show dev eth0ping -c 4 standby_hostchronyc sources -vntpq -pdate:主备时间一致性检查
5.4 逻辑复制
CREATE PUBLICATION pub_all FOR ALL TABLES;CREATE PUBLICATION pub_t FOR TABLE t;CREATE SUBSCRIPTION sub_t CONNECTION 'host=... dbname=...' PUBLICATION pub_t;SELECT * FROM sys_publication;SELECT * FROM sys_subscription;SELECT * FROM sys_stat_subscription;ALTER SUBSCRIPTION sub_t REFRESH PUBLICATION;
六、故障排查(386--450)
6.1 连接类
SELECT count(*), state FROM sys_stat_activity GROUP BY state;SELECT setting FROM sys_settings WHERE name='max_connections';ALTER SYSTEM SET max_connections = 1000;(需重启)SHOW listen_addresses;SELECT * FROM sys_hba_file_rules;grep "password authentication failed" $KINGBASE_DATA/log/*.log | tail -20grep "no pg_hba.conf entry" $KINGBASE_DATA/log/*.log | tail -20ss -lntp | grep 54321sys_isready -h 127.0.0.1 -p 54321ps -ef | grep postgres
6.2 锁与事务类
SELECT * FROM sys_locks WHERE NOT granted;- 阻塞树查询:见第 65 条
grep "deadlock detected" $KINGBASE_DATA/log/*.log | tail -10SHOW deadlock_timeout;SELECT sys_terminate_backend(pid) FROM sys_stat_activity WHERE state='idle in transaction' AND now()-state_change > interval '30 min';SELECT pid, now()-xact_start FROM sys_stat_activity WHERE xact_start IS NOT NULL ORDER BY 2 DESC LIMIT 10;SELECT * FROM sys_prepared_xacts;SELECT sys_advisory_unlock_all();
6.3 膨胀与 XID
SELECT relname, n_dead_tup FROM sys_stat_user_tables ORDER BY n_dead_tup DESC LIMIT 20;VACUUM (VERBOSE, ANALYZE) t;VACUUM FULL t;SELECT datname, age(datfrozenxid) FROM sys_database ORDER BY 2 DESC;SELECT relname, age(relfrozenxid) FROM sys_class ORDER BY 2 DESC LIMIT 20;VACUUM FREEZE t;- 单用户模式维护:
sys_single -D $KINGBASE_DATA(工具名按版本核对)
6.4 WAL 与归档
SELECT * FROM sys_stat_archiver;SHOW archive_command;sh -c "$(ksql -At -c 'SHOW archive_command' | sed 's/%p/\/tmp\/test_wal/g; s/%f/test_wal/g')"df -h $KINGBASE_DATA/pg_walSELECT count(*) FROM sys_ls_waldir();SELECT slot_name, sys_size_pretty(sys_wal_lsn_diff(sys_current_wal_lsn(), restart_lsn)) FROM sys_replication_slots;SELECT sys_drop_replication_slot('inactive_slot');
6.5 复制异常
SELECT * FROM sys_stat_replication;SELECT sys_last_wal_receive_lsn(), sys_last_wal_replay_lsn();SELECT * FROM sys_stat_database_conflicts;SHOW hot_standby_feedback;SHOW max_standby_streaming_delay;SELECT sys_is_in_recovery();tail -n 100 $KINGBASE_DATA/log/*.log | grep -i "replication"
6.6 资源类
dmesg | grep -i "out of memory"free -mtop -b -n1 -o %CPU | head -20top -b -n1 -o %MEM | head -20iostat -x 1 3pidstat -d 1 5SELECT * FROM sys_stat_activity WHERE wait_event_type='IO';SELECT * FROM sys_stat_statements ORDER BY total_exec_time DESC LIMIT 10;SELECT wait_event_type, wait_event, count(*) FROM sys_stat_activity GROUP BY 1,2 ORDER BY 3 DESC;SELECT datname, temp_files, temp_bytes FROM sys_stat_database ORDER BY 3 DESC;SHOW log_temp_files;
6.7 空间与文件
df -hdf -idu -sh $KINGBASE_DATA/*SELECT spcname, sys_size_pretty(sys_tablespace_size(spcname)) FROM sys_tablespace;lsof | grep deleted | head -20ulimit -ncat /proc/sys/fs/file-maxcat /proc/sys/vm/overcommit_memorycat /proc/sys/vm/swappiness
6.8 启动与崩溃
sys_ctl status -D $KINGBASE_DATAsys_controldata -D $KINGBASE_DATA | grep -i statetail -n 200 $KINGBASE_DATA/log/*.logls -l $KINGBASE_DATA/postmaster.pidsys_resetwal -D $KINGBASE_DATA(高危,仅崩溃后按手册使用)REINDEX TABLE t;:索引损坏重建
七、空间、对象与日常维护(451--478)
VACUUM;VACUUM ANALYZE;VACUUM FULL;ALTER SYSTEM SET autovacuum_vacuum_scale_factor = 0.1;ALTER TABLE t SET (autovacuum_vacuum_scale_factor = 0.05);ANALYZE;REINDEX DATABASE test;REINDEX INDEX CONCURRENTLY idx_t_c1;CLUSTER t USING idx_t_c1;TRUNCATE TABLE t;ALTER TABLE t SET (fillfactor = 80);CREATE TABLE t_p (id int, dt date) PARTITION BY RANGE (dt);CREATE TABLE t_p_202611 PARTITION OF t_p FOR VALUES FROM ('2026-11-01') TO ('2026-12-01');ALTER TABLE t_p ATTACH PARTITION t_p_202610 FOR VALUES FROM ('2026-10-01') TO ('2026-11-01');ALTER TABLE t_p DETACH PARTITION t_p_202601;CREATE TABLESPACE ts_data LOCATION '/data/kes/ts_data';ALTER TABLE t SET TABLESPACE ts_data;ALTER INDEX idx_t_c1 SET TABLESPACE ts_data;CREATE SEQUENCE seq_t START 1 INCREMENT 1 CACHE 20;SELECT last_value, is_called FROM seq_t;ALTER SEQUENCE seq_t RESTART WITH 10000;REFRESH MATERIALIZED VIEW CONCURRENTLY mv_t;SELECT * FROM sys_matviews;SELECT * FROM sys_sequences;SELECT * FROM sys_views WHERE schemaname='public';SELECT * FROM sys_tables WHERE schemaname='public';SELECT relname, n_live_tup FROM sys_stat_user_tables ORDER BY n_live_tup DESC LIMIT 20;SELECT * FROM sys_stat_progress_vacuum;
八、安全、权限与审计(479--500)
CREATE USER app_user WITH PASSWORD '******';ALTER USER app_user WITH PASSWORD '******';CREATE ROLE read_role NOLOGIN;GRANT CONNECT ON DATABASE test TO app_user;GRANT USAGE ON SCHEMA public TO app_user;GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_role;REVOKE DELETE ON t FROM app_user;ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO read_role;SELECT * FROM sys_roles;SELECT * FROM sys_user;SELECT grantee, table_schema, table_name, privilege_type FROM information_schema.table_privileges WHERE grantee='app_user';ALTER ROLE app_user VALID UNTIL '2027-01-01';SHOW password_encryption;SHOW ssl;ALTER SYSTEM SET ssl = on;SELECT * FROM sys_stat_ssl;SHOW audit_enabled;(审计参数按版本核对)SELECT * FROM sys_audit_log ORDER BY 1 DESC LIMIT 20;(审计视图按版本核对)ALTER SYSTEM SET log_connections = on;ALTER SYSTEM SET log_disconnections = on;ALTER SYSTEM SET log_statement = 'ddl';SELECT * FROM sys_settings WHERE name LIKE 'audit%';
使用提示
- 巡检建议每日执行第二类中"实例、会话、锁、长事务、WAL 归档、autovacuum、日志"七组,形成基线。
- 性能问题优先看
sys_stat_statements+EXPLAIN (ANALYZE, BUFFERS)+ 等待事件三件套,再决定索引、参数或 SQL 改写。 - 备份恢复务必区分逻辑备份(
sys_dump/sys_restore)与物理备份(sys_basebackup/sys_rman),PITR 依赖归档 WAL 连续可用。 - 主备环境以
repmgr和sys_stat_replication为核心观测点,切换前确认延迟为 0、复制槽正常。 - 标有"按版本核对"的命令涉及插件、视图或工具参数差异,执行前请以目标版本帮助信息为准。