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)
      
posted @ 2020-09-01 10:30  wellDoneGaben  阅读(767)  评论(0编辑  收藏  举报