維命令速查手冊:DBA必備的100條核心命令)
Greenplum是基于PostgreSQL深度定制的MPP分析型數(shù)據(jù)庫其運(yùn)維邏輯與單機(jī)PostgreSQL有本質(zhì)區(qū)別。單機(jī)DBA只需要關(guān)注一個(gè)實(shí)例而Greenplum DBA面對的是一整個(gè)集群包括Master、Standby、多個(gè)Primary Segment及其對應(yīng)的Mirror。這種分布式架構(gòu)決定了Greenplum運(yùn)維的核心思維轉(zhuǎn)換從關(guān)注單個(gè)實(shí)例的狀態(tài)擴(kuò)展到關(guān)注整個(gè)集群的協(xié)調(diào)一致性從本地文件系統(tǒng)的操作擴(kuò)展到跨主機(jī)的分布式管理。只有掌握一套系統(tǒng)的命令體系才能在這個(gè)復(fù)雜環(huán)境中高效工作。本文將100條命令按運(yùn)維場景劃分為十個(gè)模塊從集群啟停、狀態(tài)監(jiān)控、配置管理到故障恢復(fù)、備份恢復(fù)、擴(kuò)容縮容覆蓋Greenplum DBA日常工作的核心需求。一、集群啟停命令1. 啟動集群gpstart正常啟動整個(gè)Greenplum集群包括Master和所有Segment。2. 快速啟動gpstart -a跳過確認(rèn)提示適合腳本化運(yùn)維場景。3. 維護(hù)模式啟動gpstart -m僅啟動Master進(jìn)入維護(hù)模式用于目錄維護(hù)和數(shù)據(jù)恢復(fù)場景。4. 管理員限制模式gpstart -R限制連接僅允許管理員訪問。5. 顯示詳細(xì)信息gpstart -v輸出詳細(xì)的啟動日志用于排查啟動失敗的原因。6. 正常停止集群gpstop智能關(guān)閉模式等待所有活動連接自然結(jié)束再關(guān)閉。7. 快速停止gpstop -a跳過確認(rèn)提示適合自動化運(yùn)維腳本。8. 快速關(guān)閉模式gpstop -M fast中斷所有事務(wù)并回滾然后關(guān)閉集群。這是最常用的停止模式。9. 立即關(guān)閉gpstop -M immediate立即中止所有進(jìn)程不建議在生產(chǎn)環(huán)境使用可能導(dǎo)致數(shù)據(jù)損壞。10. 維護(hù)模式停止gpstop -m僅停止Master實(shí)例與gpstart -m對應(yīng)使用。11. 重啟集群gpstop -r停止后自動重啟整個(gè)集群參數(shù)修改后的常見操作。12. 配置文件重載gpstop -u不停止服務(wù)僅重新加載postgresql.conf和pg_hba.conf的修改。13. 停止指定主機(jī)Segmentgpstop --host hostname僅停止特定主機(jī)的Segment不能與-m、-r、-u等參數(shù)混用。14. 連接Masterpsql -d postgres -h master_host -p 5432 -U gpadmin標(biāo)準(zhǔn)連接方式所有客戶端連接必須指向Master節(jié)點(diǎn)。15. 查看當(dāng)前連接信息\conninfo在psql中查看當(dāng)前會話的主機(jī)、端口、數(shù)據(jù)庫和用戶信息。二、集群狀態(tài)監(jiān)控命令16. 查看集群基本狀態(tài)gpstate顯示集群運(yùn)行狀態(tài)的基本匯總信息日常巡檢的第一命令。17. 簡要狀態(tài)gpstate -b顯示簡化的狀態(tài)信息快速判斷集群是否健康。18. 主備映射關(guān)系gpstate -c顯示Primary與Mirror的對應(yīng)關(guān)系用于確認(rèn)鏡像配置。19. 查看Mirror狀態(tài)gpstate -m僅顯示所有Mirror實(shí)例的狀態(tài)和配置信息。20. 查看故障Segmentgpstate -e列出所有存在問題的Segment定位故障節(jié)點(diǎn)的首選命令。21. 查看Standby Mastergpstate -f顯示Standby Master的詳細(xì)狀態(tài)信息。22. 快速健康檢查gpstate -Q快速檢查集群整體健康狀態(tài)適合高頻日常巡檢。23. 集群詳細(xì)信息gpstate -s輸出集群完整的配置和狀態(tài)信息用于深入排查。24. 查看Greenplum版本gpstate -i顯示當(dāng)前Greenplum版本信息。25. 查看Segment配置表SELECT * FROM gp_segment_configuration ORDER BY content;核心系統(tǒng)表查詢所有Segment的content、role、status、hostname和port。content相同的兩行是一對Primary和Mirror。26. 查看當(dāng)前會話和查詢SELECT * FROM pg_stat_activity;查看所有活躍會話、用戶名、客戶端IP和執(zhí)行的SQL語句定位阻塞源頭的第一站。27. 終止阻塞會話SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname db_name;強(qiáng)制終止特定數(shù)據(jù)庫上的所有連接注意提前確認(rèn)影響范圍。28. 查看磁盤剩余空間SELECT * FROM gp_toolkit.gp_disk_free;查看每個(gè)Segment節(jié)點(diǎn)的磁盤剩余空間預(yù)防磁盤爆滿。29. 查看表膨脹診斷SELECT * FROM gp_toolkit.gp_bloat_diag;識別存在膨脹問題的表指導(dǎo)VACUUM操作。30. 查看集群日志gplogfilter -n 10查看最近的10條日志快速定位異常時(shí)間點(diǎn)。三、配置管理命令31. 查看參數(shù)值gpconfig -s max_connections查看某個(gè)參數(shù)在所有Segment上的當(dāng)前值確認(rèn)配置是否一致。32. 修改參數(shù)gpconfig -c gp_vmem_protect_limit -v 8196在所有Segment實(shí)例上統(tǒng)一修改參數(shù)值。33. 僅修改Master參數(shù)gpconfig -m gp_vmem_protect_limit -v 16384 -m 8196僅修改Master上的參數(shù)值Segment保持不變。34. 刪除參數(shù)gpconfig -r max_connections注釋掉postgresql.conf中的參數(shù)恢復(fù)默認(rèn)值。35. 列出所有可配置參數(shù)gpconfig -l列出所有支持的配置參數(shù)名稱。36. 查看所有參數(shù)psql -c SHOW ALL;查看當(dāng)前會話的所有參數(shù)值。37. 查看搜索路徑SHOW search_path;查看當(dāng)前方案搜索順序。38. 設(shè)置數(shù)據(jù)庫搜索路徑ALTER DATABASE mydb SET search_path TO myschema, public, pg_catalog;為特定數(shù)據(jù)庫設(shè)置方案搜索順序讓SQL執(zhí)行時(shí)自動匹配。39. 設(shè)置角色搜索路徑ALTER ROLE sally SET search_path TO myschema, public, pg_catalog;為特定用戶設(shè)置搜索路徑。40. 查看當(dāng)前方案SELECT current_schema();確認(rèn)當(dāng)前會話的默認(rèn)方案。四、Schema管理命令41. 查看所有Schema\dn列出當(dāng)前數(shù)據(jù)庫中的所有方案。42. 創(chuàng)建SchemaCREATE SCHEMA myschema;創(chuàng)建新的方案用于邏輯隔離數(shù)據(jù)庫對象。43. 指定所有者創(chuàng)建SchemaCREATE SCHEMA schemaname AUTHORIZATION username;創(chuàng)建由特定用戶擁有的方案。44. 刪除SchemaDROP SCHEMA myschema;刪除空方案僅當(dāng)方案中沒有對象時(shí)才能成功。45. 級聯(lián)刪除SchemaDROP SCHEMA myschema CASCADE;刪除方案及其內(nèi)部所有對象表、函數(shù)等。五、用戶與權(quán)限管理46. 查看所有角色\du列出數(shù)據(jù)庫中的所有角色和權(quán)限信息。47. 創(chuàng)建角色CREATE ROLE read_only;創(chuàng)建角色作為權(quán)限組用于批量賦權(quán)管理。48. 創(chuàng)建用戶CREATE USER bdp01 WITH PASSWORD passwd123;創(chuàng)建具有登錄權(quán)限的數(shù)據(jù)庫用戶。49. 授予角色GRANT read_only TO gpadmin;將角色授予用戶用戶繼承角色的權(quán)限。50. 修改用戶密碼ALTER ROLE user_name PASSWORD new_secure_pwd;修改數(shù)據(jù)庫用戶密碼需同步更新pg_hba.conf認(rèn)證配置。51. 查看用戶資源隊(duì)列SELECT rolname, rsqname FROM pg_roles, gp_toolkit.gp_resqueue_status WHERE pg_roles.rolresqueue gp_toolkit.gp_resqueue_status.queueid;查看每個(gè)用戶當(dāng)前分配的資源隊(duì)列。六、資源隊(duì)列管理52. 查看資源隊(duì)列SELECT * FROM gp_toolkit.gp_resqueue_status;查看所有資源隊(duì)列的運(yùn)行狀態(tài)和活動語句數(shù)。53. 創(chuàng)建資源隊(duì)列CREATE RESOURCE QUEUE load_queue WITH (ACTIVE_STATEMENTS3, MEMORY_LIMIT1024MB, PRIORITYLOW);創(chuàng)建資源隊(duì)列限制并發(fā)數(shù)和內(nèi)存使用防止資源爭搶。54. 分配用戶到資源隊(duì)列ALTER USER bdp01 RESOURCE QUEUE load_queue;將用戶分配到指定的資源隊(duì)列中。55. 刪除資源隊(duì)列DROP RESOURCE QUEUE queue_name;刪除資源隊(duì)列需確保沒有用戶正在使用。七、對象管理命令56. 查看表大小SELECT pg_size_pretty(pg_relation_size(schema.tablename));查看指定表的物理大小用于空間評估。57. 查看數(shù)據(jù)庫大小SELECT pg_size_pretty(pg_database_size(databasename));查看數(shù)據(jù)庫的總大小。58. 查看表結(jié)構(gòu)\d schema.tablename查看表的字段、類型、存儲參數(shù)和分布鍵信息。59. 查看索引信息SELECT * FROM pg_indexes WHERE tablename table_name;查看表的所有索引定義和分布信息。60. 查看當(dāng)前分布鍵SELECT localoid::regclass, attname FROM gp_distribution_policy, pg_attribute WHERE policyattrseq IS NOT NULL AND attrelid localoid AND attnum policyattrseq;查看表的分布鍵字段確認(rèn)數(shù)據(jù)分布策略。61. 創(chuàng)建表CREATE TABLE t1 (id SERIAL, name TEXT, dt DATE) DISTRIBUTED BY (id) PARTITION BY RANGE (dt) (START (2023-01-01) END (2025-01-01) EVERY (INTERVAL 1 month));創(chuàng)建分區(qū)表同時(shí)指定分布鍵和分區(qū)策略。分布鍵決定數(shù)據(jù)在Segment間的物理分布通常選擇主鍵或經(jīng)常JOIN的列。62. 添加字段ALTER TABLE t1 ADD COLUMN status VARCHAR(20) DEFAULT active;添加字段。若表非空且添加NOT NULL約束必須同步提供DEFAULT值。63. 刪除字段ALTER TABLE t1 DROP COLUMN desc;刪除字段。物理空間不會立即釋放需VACUUM FULL后才回收。64. 重命名表ALTER TABLE t1 RENAME TO t1_archive;重命名操作瞬時(shí)完成但需同步更新ETL腳本和視圖中的硬編碼。65. 創(chuàng)建索引CREATE INDEX idx_t1_name ON t1(name);在每個(gè)Segment上獨(dú)立構(gòu)建本地索引Master層只維護(hù)元數(shù)據(jù)。66. 刪除索引DROP INDEX idx_t1_name;刪除索引釋放存儲空間。八、數(shù)據(jù)分布管理67. 檢查數(shù)據(jù)分布SELECT gp_segment_id, COUNT(*) FROM table GROUP BY 1;查看表數(shù)據(jù)在每個(gè)Segment上的分布情況識別數(shù)據(jù)傾斜。68. 使用命令行檢查傾斜gpskew -t public.ate -a postgres檢查表的分布傾斜程度數(shù)據(jù)不均勻?qū)?yán)重影響并行計(jì)算性能。69. 查看Segment數(shù)據(jù)量分布SELECT content, COUNT(*) FROM gp_segment_configuration GROUP BY content;查看Segment配置確認(rèn)集群實(shí)例數(shù)量。九、備份、恢復(fù)與數(shù)據(jù)裝載70. 全庫備份gpbackup --dbname appdb官方推薦備份工具生成壓縮包遠(yuǎn)超pg_dump的單線程性能。71. 備份指定Schemagpbackup --dbname appdb --include-schema app僅備份特定Schema。72. 備份指定表gpbackup --dbname appdb --include-table app.orders僅備份特定表。73. 指定備份目錄gpbackup --dbname appdb --backup-dir /backup/greenplum自定義備份文件存儲位置。74. 并行備份gpbackup --dbname mydb --backup-dir /backup --jobs 4使用多Job并行備份加速大規(guī)模數(shù)據(jù)備份。75. 恢復(fù)備份gprestore --timestamp 20260727103000按時(shí)間戳恢復(fù)指定備份。76. 恢復(fù)并創(chuàng)建數(shù)據(jù)庫gprestore --timestamp 20260727103000 --create-db恢復(fù)時(shí)自動創(chuàng)建目標(biāo)數(shù)據(jù)庫。77. 恢復(fù)指定表gprestore --timestamp 20260727103000 --include-table app.orders僅恢復(fù)特定表。78. 啟動gpfdistgpfdist -d /data/load -p 8081 -l /tmp/gpfdist.log啟動并行文件服務(wù)用于高速數(shù)據(jù)裝載。79. 創(chuàng)建可讀外部表CREATE EXTERNAL TABLE app.ext_orders (order_id BIGINT, customer_id BIGINT) LOCATION (gpfdist://etl01:8081/orders.csv) FORMAT CSV (HEADER);創(chuàng)建外部表從gpfdist服務(wù)讀取CSV數(shù)據(jù)。80. 使用gpload裝載數(shù)據(jù)gpload -f load_orders.yml -l load_orders.log基于YAML配置文件批量加載數(shù)據(jù)。81. 批量插入COPY t1 FROM /data/file.csv WITH (FORMAT CSV, HEADER TRUE);推薦的大批量數(shù)據(jù)導(dǎo)入方式繞過SQL解析直接走Segment間高速通道。十、高可用、恢復(fù)與擴(kuò)容82. 恢復(fù)故障Segmentgprecoverseg -a快速恢復(fù)所有故障Segment需先用gpstate -e確認(rèn)故障范圍。83. 全量恢復(fù)gprecoverseg -a -F全量恢復(fù)開銷較大僅在增量恢復(fù)不可用或需要重建數(shù)據(jù)目錄時(shí)使用。84. 恢復(fù)首選角色gprecoverseg -a -r將發(fā)生角色切換的Segment恢復(fù)到Preferred RolePrimary或Mirror執(zhí)行數(shù)據(jù)平衡。85. 導(dǎo)出恢復(fù)配置gprecoverseg -o ./recover.info導(dǎo)出故障節(jié)點(diǎn)信息用于批量恢復(fù)。86. 導(dǎo)入恢復(fù)配置gprecoverseg -i recover.info根據(jù)配置文件恢復(fù)指定節(jié)點(diǎn)。87. 添加Mirrorgpaddmirrors -i mirror_config為集群添加Mirror實(shí)例需先用gpaddmirrors -o生成配置文件審核后再正式執(zhí)行。88. 初始化Standby Mastergpinitstandby -s gpstandby初始化備Master實(shí)現(xiàn)Master高可用。89. 移除Standby Mastergpinitstandby -r移除當(dāng)前的備Master。90. 激活Standby Mastergpactivatestandby -a激活備Master僅在確認(rèn)原Master不再提供服務(wù)且Standby同步正常后執(zhí)行。91. 強(qiáng)制激活備Mastergpactivatestandby -f強(qiáng)制激活備Master可能丟失部分?jǐn)?shù)據(jù)。92. 查看Standby激活狀態(tài)gpstate -f確認(rèn)Standby Master的同步狀態(tài)和激活進(jìn)度。93. 生成擴(kuò)容配置gpexpand -f new_hosts生成擴(kuò)容配置文件包含新加主機(jī)的信息。94. 初始化新增Segmentgpexpand -i gpexpand_inputfile根據(jù)配置文件執(zhí)行擴(kuò)容初始化。95. 執(zhí)行數(shù)據(jù)重分布gpexpand -d 01:00:00啟動數(shù)據(jù)重分布將數(shù)據(jù)遷移到新增Segment上。不同版本參數(shù)有差異需以當(dāng)前發(fā)行版手冊為準(zhǔn)。96. 查看數(shù)據(jù)重分布進(jìn)度SELECT * FROM gp_toolkit.gp_resgroup_status;監(jiān)控?cái)?shù)據(jù)重分布的任務(wù)進(jìn)度。十一、日常巡檢與實(shí)用技巧97. 快速巡檢gpstate -s gpstate -e gpstate -f gpconfig -s max_connections gpssh -f hostfile -e df -h psql -d postgres -c SELECT content, role, preferred_role, mode, status, hostname FROM gp_segment_configuration ORDER BY content, role;推薦的日常巡檢命令組合快速評估集群整體健康狀態(tài)。98. 查看當(dāng)前時(shí)間點(diǎn)的備份狀態(tài)gpbackup -v檢查備份工具版本和狀態(tài)。99. 設(shè)置客戶端編碼SET client_encoding TO UTF8;設(shè)置當(dāng)前會話的客戶端編碼避免中文亂碼。100. 自定義psql提示符\set PROMPT1 %n%m:% [%/] %# 自定義psql提示符清晰標(biāo)識當(dāng)前連接的主機(jī)、端口和數(shù)據(jù)庫防止誤操作。結(jié)語Greenplum運(yùn)維的核心思維轉(zhuǎn)換是從PostgreSQL單庫視角擴(kuò)展到整個(gè)MPP集群。執(zhí)行任何操作前要先想清楚這個(gè)命令是在Master上執(zhí)行還是需要在所有Segment上執(zhí)行考慮操作對數(shù)據(jù)分布的影響而不僅僅是對單表的影響權(quán)衡高可用配置思考操作對Mirror和Standby的影響。遇到問題時(shí)正確的排查順序至關(guān)重要。先檢查Coordinator狀態(tài)確認(rèn)Master是否正常再檢查Segment狀態(tài)定位具體故障節(jié)點(diǎn)然后確認(rèn)Mirror是否可用接著檢查數(shù)據(jù)分布是否均衡評估系統(tǒng)資源使用情況最后分析SQL執(zhí)行計(jì)劃確認(rèn)查詢是否合理。避免只在Master上觀察局部現(xiàn)象要學(xué)會使用gpssh在各Segment間快速排查。對于Segment恢復(fù)、Standby激活、擴(kuò)容和全表重分布等高風(fēng)險(xiǎn)操作務(wù)必使用與當(dāng)前發(fā)行版匹配的官方手冊并在執(zhí)行前完成備份、空間評估和回退設(shè)計(jì)。同時(shí)提醒gpstop -M immediate和pg_resetxlog屬于高風(fēng)險(xiǎn)操作可能造成數(shù)據(jù)損壞或集群不可用生產(chǎn)環(huán)境中絕對禁止使用。