金仓数据库(KingbaseES)日常运维500条命令清单

说明:命令按 V8R6、V9 常见语法整理。不同小版本、兼容模式(Oracle、MySQL)及插件版本下,sys_ 与 pg_ 前缀、集群工具参数可能存在差异;执行前请用 ksql \h、sys_ctl --help、对应工具 --help 核对,破坏性命令务必先在测试环境验证。


一、连接与实例基础管理(1--30)

  1. ksql -U system -d test -h 127.0.0.1 -p 54321:本地或远程连接
  2. ksql -U system -d test -W:连接时提示输入密码
  3. ksql -U system -d test -c "SELECT version();":执行单条 SQL
  4. ksql -U system -d test -f /home/kes/check.sql:执行脚本文件
  5. ksql -U system -d test -o /home/kes/out.txt -c "SELECT now();":结果输出到文件
  6. ksql -l:列出实例内所有数据库
  7. ksql -U system -d test -c "\l":列出数据库及属主、编码
  8. \c dbname:切换数据库
  9. \conninfo:查看当前连接信息
  10. \dn:列出 schema
  11. \dt:列出当前 schema 表
  12. \d+ tablename:查看表结构、存储、分布信息
  13. \di:列出索引
  14. \dv:列出视图
  15. \df:列出函数
  16. \du:列出用户与角色
  17. \dx:列出已安装扩展
  18. \dp:查看对象权限
  19. \timing on:开启 SQL 执行耗时显示
  20. \x:切换扩展显示模式
  21. \encoding:查看客户端字符编码
  22. \q:退出 ksql
  23. sys_ctl status -D $KINGBASE_DATA:查看实例运行状态
  24. sys_ctl start -D $KINGBASE_DATA -l $KINGBASE_DATA/log/start.log:启动实例
  25. sys_ctl stop -D $KINGBASE_DATA -m fast:快速停止实例
  26. sys_ctl restart -D $KINGBASE_DATA -m fast:重启实例
  27. sys_ctl reload -D $KINGBASE_DATA:重载配置文件
  28. sys_ctl promote -D $KINGBASE_DATA:备库提升为主库
  29. sys_isready -h 127.0.0.1 -p 54321:探测实例是否可连接
  30. sys_controldata -D $KINGBASE_DATA:查看控制文件与集群状态

二、日常巡检(31--120)

2.1 实例与版本

  1. SELECT version();
  2. SELECT current_database(), current_user, now();
  3. SELECT sys_postmaster_start_time();
  4. SELECT date_trunc('second', now() - sys_postmaster_start_time()) AS uptime;
  5. SHOW server_version;
  6. SHOW data_directory;
  7. SELECT name, setting FROM sys_settings WHERE name IN ('port','listen_addresses');
  8. SELECT sys_conf_load_time();

2.2 连接与会话

  1. SELECT count(*) FROM sys_stat_activity;
  2. SELECT state, count(*) FROM sys_stat_activity GROUP BY state;
  3. SELECT count(*) FROM sys_stat_activity WHERE state = 'active';
  4. SELECT usename, count(*) FROM sys_stat_activity GROUP BY usename ORDER BY 2 DESC;
  5. SELECT datname, count(*) FROM sys_stat_activity GROUP BY datname;
  6. 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;
  7. SELECT setting FROM sys_settings WHERE name = 'max_connections';
  8. SELECT round((SELECT count(*) FROM sys_stat_activity)::numeric * 100 / (SELECT setting::int FROM sys_settings WHERE name='max_connections'), 2) AS conn_pct;
  9. SELECT * FROM sys_stat_activity WHERE backend_type = 'client backend' AND state = 'idle in transaction';
  10. 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;
  11. SELECT pid, now()-state_change AS idle_sec, query FROM sys_stat_activity WHERE state LIKE 'idle%' ORDER BY state_change LIMIT 20;
  12. SELECT * FROM sys_stat_database;

2.3 空间与对象

  1. SELECT datname, sys_size_pretty(sys_database_size(datname)) FROM sys_database ORDER BY sys_database_size(datname) DESC;
  2. SELECT sys_size_pretty(sys_database_size(current_database()));
  3. SELECT spcname, sys_size_pretty(sys_tablespace_size(spcname)) FROM sys_tablespace;
  4. 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;
  5. 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;
  6. 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;
  7. 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;
  8. SELECT schemaname, relname, indexrelname, idx_scan, idx_tup_read FROM sys_stat_all_indexes ORDER BY idx_scan ASC LIMIT 20;
  9. SELECT * FROM sys_stat_bgwriter;
  10. SELECT * FROM sys_stat_archiver;
  11. SELECT * FROM sys_stat_progress_vacuum;
  12. SELECT * FROM sys_stat_progress_create_index;

2.4 锁与等待

  1. SELECT locktype, mode, granted, count(*) FROM sys_locks GROUP BY 1,2,3 ORDER BY 4 DESC;
  2. SELECT pid, wait_event_type, wait_event, state, query FROM sys_stat_activity WHERE wait_event_type = 'Lock';
  3. 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;
  4. SELECT * FROM sys_locks WHERE NOT granted;
  5. SELECT pid, relation::regclass, mode, granted FROM sys_locks WHERE relation IS NOT NULL;
  6. SELECT count(*) FROM sys_stat_activity WHERE wait_event_type = 'IO';
  7. 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;
  8. SELECT * FROM sys_stat_activity WHERE state='active' AND now()-query_start > interval '5 min';
  9. SELECT pid, query FROM sys_stat_activity WHERE backend_xmin IS NOT NULL ORDER BY age(backend_xmin) DESC LIMIT 20;
  10. SELECT datname, age(datfrozenxid) FROM sys_database ORDER BY 2 DESC;
  11. SELECT relname, age(relfrozenxid) FROM sys_class WHERE relkind='r' ORDER BY 2 DESC LIMIT 20;
  12. SELECT count(*) FROM sys_prepared_xacts;
  13. SELECT * FROM sys_prepared_xacts ORDER BY prepared;

2.5 WAL、归档与复制

  1. 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;
  2. SELECT * FROM sys_stat_replication;
  3. SELECT client_addr, state, sync_state, sys_wal_lsn_diff(sent_lsn, replay_lsn) AS replay_lag_bytes FROM sys_stat_replication;
  4. SELECT application_name, state, sys_wal_lsn_diff(sys_current_wal_lsn(), replay_lsn) AS lag_bytes FROM sys_stat_replication;
  5. SELECT sys_last_wal_receive_lsn(), sys_last_wal_replay_lsn();
  6. SELECT sys_current_wal_lsn(), sys_last_wal_replay_lsn();
  7. SELECT sys_wal_lsn_diff(sys_last_wal_receive_lsn(), sys_last_wal_replay_lsn()) AS apply_lag;
  8. SHOW wal_level; SHOW archive_mode; SHOW archive_command;
  9. SELECT name, setting FROM sys_settings WHERE name IN ('wal_level','archive_mode','archive_command','max_wal_size','min_wal_size');
  10. ls -l $KINGBASE_DATA/pg_wal | tail -20:查看在线 WAL 文件
  11. SELECT count(*) FROM sys_ls_waldir();
  12. SELECT archived_count, failed_count, last_archived_wal, last_failed_wal FROM sys_stat_archiver;
  13. du -sh /backup/wal_archive:归档目录容量
  14. SHOW autovacuum; SHOW autovacuum_naptime; SHOW autovacuum_max_workers;

2.6 膨胀与自动清理

  1. SELECT * FROM sys_stat_activity WHERE backend_type LIKE '%autovacuum%';
  2. 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;
  3. SELECT * FROM sys_stat_progress_vacuum;
  4. SELECT relname, last_autovacuum, autovacuum_count FROM sys_stat_user_tables WHERE last_autovacuum IS NULL AND n_dead_tup > 1000;
  5. SELECT relname FROM sys_stat_user_tables WHERE last_analyze IS NULL;
  6. SELECT count(*) FROM sys_stat_activity WHERE query LIKE '%autovacuum%';
  7. SELECT name, setting, unit FROM sys_settings WHERE name LIKE '%timeout%';

2.7 日志检查

  1. SHOW log_min_duration_statement;
  2. SHOW log_directory; SHOW log_filename; SHOW logging_collector;
  3. tail -n 200 $KINGBASE_DATA/log/*.log
  4. grep -c "ERROR" $KINGBASE_DATA/log/*.log
  5. grep "FATAL" $KINGBASE_DATA/log/*.log | tail -50
  6. grep "deadlock detected" $KINGBASE_DATA/log/*.log | tail -20
  7. grep -i "out of memory" $KINGBASE_DATA/log/*.log | tail -20
  8. df -h:文件系统使用率
  9. df -i:inode 使用率

2.8 主机资源

  1. free -m
  2. top -b -n1 | head -20
  3. iostat -x 1 3
  4. vmstat 1 5
  5. sar -u 1 5
  6. ss -lntp | grep 54321
  7. ps -ef | grep kingbase
  8. uptime
  9. dmesg | tail -50
  10. cat /proc/meminfo
  11. du -sh $KINGBASE_DATA
  12. find $KINGBASE_DATA -type f -size +1G -exec ls -lh {} \;
  13. SELECT * FROM sys_stat_ssl;
  14. SELECT * FROM sys_file_settings;
  15. SELECT * FROM sys_hba_file_rules;

三、性能优化与 SQL 诊断(121--220)

3.1 执行计划

  1. EXPLAIN SELECT * FROM t WHERE id = 1;
  2. EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM t WHERE id = 1;
  3. EXPLAIN (ANALYZE, BUFFERS, VERBOSE, FORMAT JSON) SELECT ...;
  4. EXPLAIN (COSTS OFF) SELECT ...;
  5. EXPLAIN (ANALYZE, TIMING OFF) SELECT ...;

3.2 SQL 统计

  1. SELECT * FROM sys_stat_statements ORDER BY total_exec_time DESC LIMIT 20;
  2. SELECT * FROM sys_stat_statements ORDER BY mean_exec_time DESC LIMIT 20;
  3. SELECT * FROM sys_stat_statements ORDER BY calls DESC LIMIT 20;
  4. SELECT * FROM sys_stat_statements ORDER BY rows DESC LIMIT 20;
  5. SELECT queryid, calls, round(total_exec_time::numeric,2) AS total_ms FROM sys_stat_statements ORDER BY 3 DESC LIMIT 20;
  6. SELECT queryid, query FROM sys_stat_statements WHERE shared_blks_read > 10000;
  7. SELECT sum(blks_hit)*100.0/nullif(sum(blks_hit+blks_read),0) AS cache_hit_pct FROM sys_stat_database;
  8. SELECT datname, blks_hit, blks_read FROM sys_stat_database ORDER BY blks_read DESC;
  9. SELECT * FROM sys_stat_user_tables WHERE seq_scan > idx_scan AND n_live_tup > 10000;
  10. SELECT * FROM sys_stat_all_indexes WHERE idx_scan = 0;
  11. SELECT indexrelname, sys_size_pretty(sys_relation_size(indexrelid)) FROM sys_stat_all_indexes ORDER BY sys_relation_size(indexrelid) DESC LIMIT 20;
  12. SELECT sys_stat_statements_reset();
  13. SELECT sys_stat_reset();
  14. SELECT sys_stat_reset_shared('bgwriter');

3.3 索引与统计信息

  1. CREATE INDEX CONCURRENTLY idx_t_c1 ON t(c1);
  2. REINDEX INDEX CONCURRENTLY idx_t_c1;
  3. REINDEX TABLE t;
  4. ANALYZE t;
  5. ANALYZE VERBOSE t;
  6. VACUUM (VERBOSE, ANALYZE) t;
  7. VACUUM FULL t;
  8. VACUUM (FREEZE, VERBOSE) t;
  9. CLUSTER t USING idx_t_c1;
  10. SELECT * FROM sys_stats WHERE tablename = 't';
  11. SELECT attname, n_distinct, correlation FROM sys_stats WHERE tablename = 't';
  12. ALTER TABLE t ALTER COLUMN c1 SET STATISTICS 500;
  13. SELECT * FROM sys_indexes WHERE tablename = 't';
  14. SELECT reltuples, relpages FROM sys_class WHERE relname = 't';
  15. SELECT relname, relkind, relpages, reltuples FROM sys_class WHERE relname = 't';

3.4 关键参数

  1. SELECT name, setting, unit FROM sys_settings WHERE name LIKE '%cost%';
  2. SHOW random_page_cost; SHOW effective_cache_size;
  3. SHOW work_mem; SHOW maintenance_work_mem;
  4. SHOW max_parallel_workers_per_gather;
  5. SET work_mem = '64MB';
  6. ALTER SYSTEM SET work_mem = '64MB';
  7. SELECT sys_reload_conf();
  8. SHOW shared_preload_libraries;
  9. SHOW effective_io_concurrency;
  10. SHOW shared_buffers; SHOW temp_buffers;
  11. SHOW max_worker_processes; SHOW max_parallel_workers;
  12. SHOW synchronous_commit;
  13. SHOW checkpoint_timeout; SHOW max_wal_size;
  14. SHOW track_io_timing;
  15. SHOW log_min_duration_statement;

3.5 检查点与后台写

  1. CHECKPOINT;
  2. SELECT sys_switch_wal();
  3. SELECT * FROM sys_stat_progress_checkpoint;
  4. SELECT checkpoints_timed, checkpoints_req, buffers_checkpoint, buffers_backend FROM sys_stat_bgwriter;
  5. SELECT * FROM sys_stat_bgwriter;

3.6 锁与阻塞

  1. SELECT * FROM sys_locks WHERE mode = 'ExclusiveLock';
  2. SELECT * FROM sys_locks WHERE locktype = 'advisory';
  3. SELECT * FROM sys_stat_activity WHERE wait_event = 'transactionid';
  4. SELECT pid, query FROM sys_stat_activity WHERE state='active' ORDER BY query_start LIMIT 10;
  5. SELECT sys_terminate_backend(pid);
  6. SELECT sys_cancel_backend(pid);
  7. SELECT * FROM sys_stat_activity WHERE backend_xid IS NOT NULL;
  8. SELECT * FROM sys_locks WHERE relation = 't'::regclass;
  9. SHOW deadlock_timeout; SHOW lock_timeout;

3.7 表与索引访问特征

  1. SELECT * FROM sys_stat_user_functions;
  2. SELECT * FROM sys_stat_user_tables ORDER BY n_tup_upd DESC LIMIT 20;
  3. SELECT * FROM sys_stat_user_tables ORDER BY n_tup_del DESC LIMIT 20;
  4. SELECT relname, n_tup_hot_upd, n_tup_upd FROM sys_stat_user_tables;
  5. SELECT * FROM sys_stat_database_conflicts;
  6. SELECT * FROM sys_stat_activity WHERE backend_type = 'parallel worker';
  7. 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;
  8. 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;
  9. SELECT * FROM sys_stat_all_tables WHERE n_live_tup = 0 AND n_dead_tup > 0;

3.8 会话与超时控制

  1. SET statement_timeout = '30s';
  2. SET lock_timeout = '5s';
  3. SET idle_in_transaction_session_timeout = '10min';
  4. SET idle_session_timeout = '30min';
  5. SHOW statement_timeout; SHOW idle_in_transaction_session_timeout;
  6. ALTER SYSTEM SET idle_in_transaction_session_timeout = '10min';

3.9 临时文件与 IO

  1. SET log_temp_files = 0;
  2. SHOW temp_file_limit;
  3. SELECT datname, temp_files, temp_bytes FROM sys_stat_database ORDER BY temp_bytes DESC;
  4. SELECT * FROM sys_stat_activity WHERE wait_event_type = 'IO';
  5. SELECT * FROM sys_stat_activity WHERE wait_event_type = 'LWLock';

3.10 优化辅助

  1. SELECT * FROM sys_prepared_statements;
  2. SELECT * FROM sys_cursors;
  3. SELECT name, statement, prepare_time FROM sys_prepared_statements ORDER BY prepare_time;
  4. EXPLAIN (ANALYZE, BUFFERS) SELECT ... /* 验证索引改写效果 */;
  5. SELECT * FROM sys_stat_statements WHERE query ILIKE '%seq scan%';
  6. SELECT queryid, query FROM sys_stat_statements WHERE total_exec_time > 60000;
  7. SELECT * FROM sys_stat_statements ORDER BY shared_blks_hit DESC LIMIT 10;
  8. SELECT * FROM sys_stat_statements ORDER BY wal_bytes DESC LIMIT 10;
  9. SELECT * FROM sys_stat_statements ORDER BY temp_blks_written DESC LIMIT 10;
  10. SELECT sys_size_pretty(sum(temp_bytes)) FROM sys_stat_database;
  11. CREATE EXTENSION IF NOT EXISTS pg_hint_plan;(按版本核对扩展名)
  12. SELECT /*+ IndexScan(t idx_t_c1) */ * FROM t WHERE c1 = 1;(需 hint 插件)
  13. SET enable_seqscan = off;
  14. SET enable_nestloop = off;
  15. SET enable_hashjoin = on;
  16. SET max_parallel_workers_per_gather = 4;
  17. SELECT * FROM sys_settings WHERE name IN ('jit','jit_above_cost','parallel_setup_cost');

四、备份与恢复(221--325)

4.1 逻辑备份

  1. sys_dump -U system -d test -f /backup/test.sql
  2. sys_dump -U system -d test -Fc -f /backup/test.dump
  3. sys_dump -U system -d test -Fp -f /backup/test.sql
  4. sys_dump -U system -d test -Ft -f /backup/test.tar
  5. sys_dump -U system -d test -Fd -j 4 -f /backup/test_dir
  6. sys_dump -U system -d test -n public -f /backup/public.sql
  7. sys_dump -U system -d test -t t -f /backup/t.sql
  8. sys_dump -U system -d test -T t -f /backup/except_t.sql
  9. sys_dump -U system -d test --inserts -f /backup/test_inserts.sql
  10. sys_dump -U system -d test --column-inserts -f /backup/test_col.sql
  11. sys_dump -U system -d test --no-owner -f /backup/test.sql
  12. sys_dump -U system -d test --no-privileges -f /backup/test.sql
  13. sys_dump -U system -d test --clean --if-exists -f /backup/test.sql
  14. sys_dump -U system -d test --schema-only -f /backup/schema.sql
  15. sys_dump -U system -d test --data-only -f /backup/data.sql
  16. sys_dump -U system -d test -Z 9 -Fc -f /backup/test.dump
  17. sys_dump -U system -d test --verbose -f /backup/test.sql
  18. sys_dump -U system -d test -j 4 -Fd -f /backup/test_par
  19. sys_dumpall -U system -g -f /backup/globals.sql
  20. sys_dumpall -U system -f /backup/all.sql
  21. sys_dumpall -U system -r -f /backup/roles.sql
  22. sys_dumpall -U system -s -f /backup/all_schema.sql
  23. sys_dump -U system -d test -b -f /backup/with_blob.sql
  24. sys_dump -U system -d test --exclude-table-data=t_log -f /backup/test.sql
  25. sys_dump -U system -d test --exclude-schema=history -f /backup/test.sql
  26. sys_dump -U system -d test --section=pre-data -f /backup/pre.sql
  27. sys_dump -U system -d test --serializable-deferrable -f /backup/test.sql

4.2 逻辑恢复

  1. sys_restore -U system -d test /backup/test.dump
  2. sys_restore -U system -C -d postgres /backup/test.dump
  3. sys_restore -l /backup/test.dump
  4. sys_restore -L /backup/toc.list -d test /backup/test.dump
  5. sys_restore -j 4 -d test /backup/test_dir
  6. sys_restore -t t -d test /backup/test.dump
  7. sys_restore -n public -d test /backup/test.dump
  8. sys_restore --clean --if-exists -d test /backup/test.dump
  9. sys_restore --data-only -d test /backup/test.dump
  10. sys_restore --schema-only -d test /backup/test.dump
  11. ksql -U system -d test -f /backup/test.sql
  12. createdb -U system -T template0 test_new
  13. CREATE DATABASE test_new TEMPLATE test;
  14. dropdb -U system test_new
  15. DROP DATABASE IF EXISTS test_new;

4.3 表级与数据交换

  1. COPY t TO '/backup/t.csv' WITH (FORMAT csv, HEADER true);
  2. COPY t FROM '/backup/t.csv' WITH (FORMAT csv, HEADER true);
  3. \copy t TO '/backup/t.csv' CSV HEADER(ksql 元命令)
  4. \copy t FROM '/backup/t.csv' CSV HEADER
  5. COPY (SELECT * FROM t WHERE dt='2026-11-01') TO '/backup/t_1101.csv' CSV HEADER;
  6. COPY t TO PROGRAM 'gzip > /backup/t.csv.gz' CSV HEADER;
  7. SELECT * FROM sys_stat_progress_copy;(按版本核对视图)

4.4 物理备份

  1. sys_basebackup -D /backup/base -Fp -Xs -P -R
  2. sys_basebackup -D /backup/base -Ft -z -P
  3. sys_basebackup -D /backup/base -Fp -Xs -P --checkpoint=fast
  4. sys_basebackup -D /backup/base -X stream -c fast -P
  5. sys_basebackup -D /backup/base -l "full_20261110" -P
  6. sys_basebackup -h standby_host -D /backup/base -Xs -P
  7. sys_basebackup -D /backup/base -Fp -Xs -P -R -S slot_name

4.5 备份工具 sys_rman

  1. sys_rman init
  2. sys_rman --config=/backup/backup.info --stanza=kes backup
  3. sys_rman --config=/backup/backup.info --stanza=kes backup --type=full
  4. sys_rman --config=/backup/backup.info --stanza=kes backup --type=incr
  5. sys_rman --config=/backup/backup.info --stanza=kes backup --type=diff
  6. sys_rman --config=/backup/backup.info --stanza=kes check
  7. sys_rman --config=/backup/backup.info --stanza=kes info
  8. sys_rman --config=/backup/backup.info --stanza=kes verify
  9. sys_rman --config=/backup/backup.info --stanza=kes restore
  10. sys_rman --config=/backup/backup.info --stanza=kes expire
  11. sys_rman --config=/backup/backup.info --stanza=kes archive-push
  12. sys_rman --config=/backup/backup.info --stanza=kes archive-get
  13. sys_rman --config=/backup/backup.info --stanza=kes stanza-create
  14. sys_rman --config=/backup/backup.info --stanza=kes stanza-upgrade
  15. sys_rman --config=/backup/backup.info --stanza=kes delete --set=...
  16. sys_rman --config=/backup/backup.info --stanza=kes backup --backup-standby
  17. sys_rman --config=/backup/backup.info --stanza=kes info --output=json

4.6 备份脚本

  1. sys_backup.sh init
  2. sys_backup.sh start
  3. sys_backup.sh stop
  4. sys_backup.sh status
  5. crontab -e:配置定时备份任务
  6. 0 2 * * * /home/kes/sys_backup.sh start >/dev/null 2>&1:每日 2 点备份
  7. sys_dump -Fc -f /backup/test_$(date +%F).dump test:按日期命名备份
  8. sys_restore -l /backup/test_20261110.dump | head -20:备份可读性校验
  9. md5sum /backup/test_20261110.dump:备份文件完整性校验

4.7 时间点恢复(PITR)

  1. restore_command = 'cp /backup/wal_archive/%f %p'
  2. recovery_target_time = '2026-11-10 09:30:00'
  3. recovery_target_lsn = '0/1A2B3C4D'
  4. recovery_target_xid = '1234567'
  5. recovery_target_name = 'before_upgrade'
  6. recovery_target_action = 'promote'
  7. touch $KINGBASE_DATA/recovery.signal
  8. SELECT sys_create_restore_point('before_upgrade');
  9. SELECT sys_switch_wal();
  10. ls -l /backup/wal_archive | tail -20
  11. sys_waldump /backup/wal_archive/000000010000000000000001 | head -50
  12. 恢复完成后执行 ANALYZE; 刷新统计信息
  13. 恢复后执行 sys_vacuumdb --all --analyze(工具名按版本核对)
  14. 恢复到新实例:sys_basebackup + 独立端口启动
  15. 恢复后核对 SELECT count(*) FROM t;
  16. 恢复后核对序列当前值 SELECT last_value FROM seq_name;
  17. 恢复后核对复制槽状态
  18. 恢复后重建索引统计
  19. 恢复演练记录表结构与数据量比对
  20. 备份保留策略:find /backup -name "*.dump" -mtime +7 -delete(谨慎)
  21. 异地备份:rsync -avz /backup/ backup_host:/backup/
  22. 备份文件加密:gpg -c /backup/test.dump
  23. 备份目录权限检查:ls -ld /backup

五、高可用与主备复制(326--385)

5.1 repmgr 集群管理

  1. repmgr primary register
  2. repmgr standby register
  3. repmgr cluster show
  4. repmgr cluster crosscheck
  5. repmgr cluster event --limit 20
  6. repmgr service status
  7. repmgr standby promote
  8. repmgr standby switchover
  9. repmgr node rejoin
  10. repmgr cluster cleanup
  11. repmgr standby clone -h primary_host -D $KINGBASE_DATA
  12. repmgr node status
  13. repmgr witness register
  14. repmgr cluster matrix
  15. repmgr daemon start

5.2 复制参数与状态

  1. SHOW synchronous_commit;
  2. SHOW synchronous_standby_names;
  3. ALTER SYSTEM SET synchronous_standby_names = 'standby1';
  4. SELECT * FROM sys_stat_replication;
  5. SELECT client_addr, state, sync_state, sent_lsn, replay_lsn FROM sys_stat_replication;
  6. SELECT slot_name, slot_type, active FROM sys_replication_slots;
  7. SELECT sys_create_physical_replication_slot('slot_name');
  8. SELECT sys_drop_replication_slot('slot_name');
  9. SELECT sys_replication_slot_advance('slot_name', sys_current_wal_lsn());
  10. SHOW wal_level; SHOW max_wal_senders; SHOW hot_standby;
  11. SELECT sys_is_in_recovery();
  12. SELECT sys_last_wal_receive_lsn(), sys_last_wal_replay_lsn();
  13. SELECT sys_wal_lsn_diff(sys_last_wal_receive_lsn(), sys_last_wal_replay_lsn());
  14. SHOW primary_conninfo;
  15. SHOW restore_command;
  16. SHOW wal_keep_segments;
  17. SELECT * FROM sys_stat_database_conflicts;

5.3 切换与恢复

  1. sys_ctl promote -D $KINGBASE_DATA
  2. sys_rewind --target-pgdata=$KINGBASE_DATA --source-server="host=primary port=54321 user=system dbname=test"
  3. sys_rewind --target-pgdata=$KINGBASE_DATA --source-pgdata=/backup/base
  4. SELECT sys_create_restore_point('switchover_point');
  5. SELECT sys_switch_wal();
  6. 切换前检查:SELECT * FROM sys_stat_replication;
  7. 切换前检查:SELECT slot_name, active FROM sys_replication_slots;
  8. 切换后校验:SELECT sys_is_in_recovery();
  9. 切换后校验:SELECT count(*) FROM 关键业务表;
  10. 回切前检查主备延迟为 0
  11. 回切命令:repmgr standby switchover
  12. 双主检查:主备同时 SELECT sys_is_in_recovery();
  13. 脑裂检查:比对 sys_current_wal_lsn()
  14. VIP 切换:ip addr add 10.0.0.10/24 dev eth0
  15. VIP 摘除:ip addr del 10.0.0.10/24 dev eth0
  16. systemctl status keepalived
  17. ip -4 addr show dev eth0
  18. ping -c 4 standby_host
  19. chronyc sources -v
  20. ntpq -p
  21. date:主备时间一致性检查

5.4 逻辑复制

  1. CREATE PUBLICATION pub_all FOR ALL TABLES;
  2. CREATE PUBLICATION pub_t FOR TABLE t;
  3. CREATE SUBSCRIPTION sub_t CONNECTION 'host=... dbname=...' PUBLICATION pub_t;
  4. SELECT * FROM sys_publication;
  5. SELECT * FROM sys_subscription;
  6. SELECT * FROM sys_stat_subscription;
  7. ALTER SUBSCRIPTION sub_t REFRESH PUBLICATION;

六、故障排查(386--450)

6.1 连接类

  1. SELECT count(*), state FROM sys_stat_activity GROUP BY state;
  2. SELECT setting FROM sys_settings WHERE name='max_connections';
  3. ALTER SYSTEM SET max_connections = 1000;(需重启)
  4. SHOW listen_addresses;
  5. SELECT * FROM sys_hba_file_rules;
  6. grep "password authentication failed" $KINGBASE_DATA/log/*.log | tail -20
  7. grep "no pg_hba.conf entry" $KINGBASE_DATA/log/*.log | tail -20
  8. ss -lntp | grep 54321
  9. sys_isready -h 127.0.0.1 -p 54321
  10. ps -ef | grep postgres

6.2 锁与事务类

  1. SELECT * FROM sys_locks WHERE NOT granted;
  2. 阻塞树查询:见第 65 条
  3. grep "deadlock detected" $KINGBASE_DATA/log/*.log | tail -10
  4. SHOW deadlock_timeout;
  5. SELECT sys_terminate_backend(pid) FROM sys_stat_activity WHERE state='idle in transaction' AND now()-state_change > interval '30 min';
  6. SELECT pid, now()-xact_start FROM sys_stat_activity WHERE xact_start IS NOT NULL ORDER BY 2 DESC LIMIT 10;
  7. SELECT * FROM sys_prepared_xacts;
  8. SELECT sys_advisory_unlock_all();

6.3 膨胀与 XID

  1. SELECT relname, n_dead_tup FROM sys_stat_user_tables ORDER BY n_dead_tup DESC LIMIT 20;
  2. VACUUM (VERBOSE, ANALYZE) t;
  3. VACUUM FULL t;
  4. SELECT datname, age(datfrozenxid) FROM sys_database ORDER BY 2 DESC;
  5. SELECT relname, age(relfrozenxid) FROM sys_class ORDER BY 2 DESC LIMIT 20;
  6. VACUUM FREEZE t;
  7. 单用户模式维护:sys_single -D $KINGBASE_DATA(工具名按版本核对)

6.4 WAL 与归档

  1. SELECT * FROM sys_stat_archiver;
  2. SHOW archive_command;
  3. sh -c "$(ksql -At -c 'SHOW archive_command' | sed 's/%p/\/tmp\/test_wal/g; s/%f/test_wal/g')"
  4. df -h $KINGBASE_DATA/pg_wal
  5. SELECT count(*) FROM sys_ls_waldir();
  6. SELECT slot_name, sys_size_pretty(sys_wal_lsn_diff(sys_current_wal_lsn(), restart_lsn)) FROM sys_replication_slots;
  7. SELECT sys_drop_replication_slot('inactive_slot');

6.5 复制异常

  1. SELECT * FROM sys_stat_replication;
  2. SELECT sys_last_wal_receive_lsn(), sys_last_wal_replay_lsn();
  3. SELECT * FROM sys_stat_database_conflicts;
  4. SHOW hot_standby_feedback;
  5. SHOW max_standby_streaming_delay;
  6. SELECT sys_is_in_recovery();
  7. tail -n 100 $KINGBASE_DATA/log/*.log | grep -i "replication"

6.6 资源类

  1. dmesg | grep -i "out of memory"
  2. free -m
  3. top -b -n1 -o %CPU | head -20
  4. top -b -n1 -o %MEM | head -20
  5. iostat -x 1 3
  6. pidstat -d 1 5
  7. SELECT * FROM sys_stat_activity WHERE wait_event_type='IO';
  8. SELECT * FROM sys_stat_statements ORDER BY total_exec_time DESC LIMIT 10;
  9. SELECT wait_event_type, wait_event, count(*) FROM sys_stat_activity GROUP BY 1,2 ORDER BY 3 DESC;
  10. SELECT datname, temp_files, temp_bytes FROM sys_stat_database ORDER BY 3 DESC;
  11. SHOW log_temp_files;

6.7 空间与文件

  1. df -h
  2. df -i
  3. du -sh $KINGBASE_DATA/*
  4. SELECT spcname, sys_size_pretty(sys_tablespace_size(spcname)) FROM sys_tablespace;
  5. lsof | grep deleted | head -20
  6. ulimit -n
  7. cat /proc/sys/fs/file-max
  8. cat /proc/sys/vm/overcommit_memory
  9. cat /proc/sys/vm/swappiness

6.8 启动与崩溃

  1. sys_ctl status -D $KINGBASE_DATA
  2. sys_controldata -D $KINGBASE_DATA | grep -i state
  3. tail -n 200 $KINGBASE_DATA/log/*.log
  4. ls -l $KINGBASE_DATA/postmaster.pid
  5. sys_resetwal -D $KINGBASE_DATA(高危,仅崩溃后按手册使用)
  6. REINDEX TABLE t;:索引损坏重建

七、空间、对象与日常维护(451--478)

  1. VACUUM;
  2. VACUUM ANALYZE;
  3. VACUUM FULL;
  4. ALTER SYSTEM SET autovacuum_vacuum_scale_factor = 0.1;
  5. ALTER TABLE t SET (autovacuum_vacuum_scale_factor = 0.05);
  6. ANALYZE;
  7. REINDEX DATABASE test;
  8. REINDEX INDEX CONCURRENTLY idx_t_c1;
  9. CLUSTER t USING idx_t_c1;
  10. TRUNCATE TABLE t;
  11. ALTER TABLE t SET (fillfactor = 80);
  12. CREATE TABLE t_p (id int, dt date) PARTITION BY RANGE (dt);
  13. CREATE TABLE t_p_202611 PARTITION OF t_p FOR VALUES FROM ('2026-11-01') TO ('2026-12-01');
  14. ALTER TABLE t_p ATTACH PARTITION t_p_202610 FOR VALUES FROM ('2026-10-01') TO ('2026-11-01');
  15. ALTER TABLE t_p DETACH PARTITION t_p_202601;
  16. CREATE TABLESPACE ts_data LOCATION '/data/kes/ts_data';
  17. ALTER TABLE t SET TABLESPACE ts_data;
  18. ALTER INDEX idx_t_c1 SET TABLESPACE ts_data;
  19. CREATE SEQUENCE seq_t START 1 INCREMENT 1 CACHE 20;
  20. SELECT last_value, is_called FROM seq_t;
  21. ALTER SEQUENCE seq_t RESTART WITH 10000;
  22. REFRESH MATERIALIZED VIEW CONCURRENTLY mv_t;
  23. SELECT * FROM sys_matviews;
  24. SELECT * FROM sys_sequences;
  25. SELECT * FROM sys_views WHERE schemaname='public';
  26. SELECT * FROM sys_tables WHERE schemaname='public';
  27. SELECT relname, n_live_tup FROM sys_stat_user_tables ORDER BY n_live_tup DESC LIMIT 20;
  28. SELECT * FROM sys_stat_progress_vacuum;

八、安全、权限与审计(479--500)

  1. CREATE USER app_user WITH PASSWORD '******';
  2. ALTER USER app_user WITH PASSWORD '******';
  3. CREATE ROLE read_role NOLOGIN;
  4. GRANT CONNECT ON DATABASE test TO app_user;
  5. GRANT USAGE ON SCHEMA public TO app_user;
  6. GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_role;
  7. REVOKE DELETE ON t FROM app_user;
  8. ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO read_role;
  9. SELECT * FROM sys_roles;
  10. SELECT * FROM sys_user;
  11. SELECT grantee, table_schema, table_name, privilege_type FROM information_schema.table_privileges WHERE grantee='app_user';
  12. ALTER ROLE app_user VALID UNTIL '2027-01-01';
  13. SHOW password_encryption;
  14. SHOW ssl;
  15. ALTER SYSTEM SET ssl = on;
  16. SELECT * FROM sys_stat_ssl;
  17. SHOW audit_enabled;(审计参数按版本核对)
  18. SELECT * FROM sys_audit_log ORDER BY 1 DESC LIMIT 20;(审计视图按版本核对)
  19. ALTER SYSTEM SET log_connections = on;
  20. ALTER SYSTEM SET log_disconnections = on;
  21. ALTER SYSTEM SET log_statement = 'ddl';
  22. 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、复制槽正常。
  • 标有"按版本核对"的命令涉及插件、视图或工具参数差异,执行前请以目标版本帮助信息为准。