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