greenplum6.9踩坑總結


最近做了greenplum 4.3 --> greenplum 6.9 的遷移升級, 踩坑無數, 先寫個總結:

  • 遷移方案:

    • 構建新集群, 再將老集群數據遷移到新集群。
    • 自帶的gptransfer不能用, 執行時會報一個參數不存在。
    • 最終只能回到原始的pg_dump。
    • 理想的方式是gptransfer大表, 小表dump。
    • greenplum 5開始不支持 date類型 --> text類型的自動隱式轉換, 會導致部分sql兼容性問題。
  • 在使用mirror的情況下, 一次導入過多數據可能導致節點掛掉, 導致primary和mirror替換。

    • 臨時的處理方案是導出數據時拆的更細一點

      # 原導出操作
      pg_dump -t 'dw.src*' dw | gzip > src.sql.gz
      
      # 拆分后的導出操作
      pg_dump -t 'dw.src_c*' dw | gzip > src_c.sql.gz
      pg_dump -t 'dw.src_e*' dw | gzip > src_e.sql.gz
      pg_dump -t 'dw.src_f*' dw | gzip > src_f.sql.gz
      ... etc
      
      • 實踐下來是沒有問題的。
  • 客戶環境問題

    • 偶爾會出現cpu異常導致的軟中斷進程ksoftrqd占滿資源, 具體底層應該和他們那一套基於openstack的超融合虛擬機的問題, 與我無瓜。
  • 性能問題

    • Greenplum的查詢優化器對一個節點上多個segment的集群有比較好的優化, 一開始部署一台一個節點的時候性能反而不如老集群, 與官方社區溝通后是查詢優化器的問題, 后來一個節點上裝了3個segment后性能顯著提升, 復雜sql比老集群快了一倍多。

    • 使用的gpinitsystem_config

      #數據庫代號
      ARRAY_NAME="Greenplum"
      
      #segment前綴
      SEG_PREFIX=gpseg
      
      #primary segment 起始的端口號
      PORT_BASE=33000
      
      #指定primary segment的數據目錄,網上寫的是多個相同目錄,多個目錄表示一台機器有多個segment
      declare -a DATA_DIRECTORY=(/home/gpadmin/data/datap1 /home/gpadmin/data/datap2 /home/gpadmin/data/datap3)
      
      #master所在機器的host name
      MASTER_HOSTNAME=mdw
      
      #master的數據目錄
      MASTER_DIRECTORY=/home/gpadmin/data/master
      
      #master的端口
      MASTER_PORT=5432
      
      #指定bash的版本
      TRUSTED_SHELL=/usr/bin/ssh
      
      #將日志寫入磁盤的間隔,每個段文件通常 =16MB < 2 * CHECK_POINT_SEGMENTS + 1
      CHECK_POINT_SEGMENTS=8
      
      #字符集
      ENCODING=UNICODE
      
      #mirror segment 起始的端口號
      MIRROR_PORT_BASE=44000
      
      # mirror的數據目錄,和主數據一樣,一個對一個,多個對多個
      declare -a MIRROR_DATA_DIRECTORY=(/home/gpadmin/data/datam1 /home/gpadmin/data/datam2 /home/gpadmin/data/datam3)
      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM