最近接手一个实际查询调优的活儿,对方说Greenplum的性能太弱了,于是按网上教程调整了许多参数。当然,有些有点儿用,有些没什么用。于是几经周折。 我们首先做了硬件设备的性能测试,就用Greenplum自带的工具进行:
gpcheckperf -f all_segments -S 512G -d /gpdata
因为偷懒,就没测那么大。但就是上述代码,发现了以下几个问题:
- 磁盘读性能居然与磁盘写性能接近
- 各主机间网络性能弱
经过排查,发现5是部署在某虚拟机上,且各主机间虽然是使用万兆网卡,但mdw与sdw4共用同一主机,而mdw同步也做为数据节点使用。这就导致了以上问题。于是:
- 重新安装操作系统到裸机
- 在实体机上安装Greenplum
- 配置主机间使用双网卡绑定mode 4,lacp_rate=fast, xmit_hash_policy=layer3+4
- 恢复数据
- 调整参数 然而性能提升非常有限!于是继续: set optimizer off 性能大幅提升,从原来约300s提升到50s左右。大喜! 然而高兴得太早了:当同时有多个查询运行时,系统直接挂掉!显示内存不足————每主机可是有512GB内存,每主机,也不过就12P+12M的啊! 再查,终于发现,之前参考网上教程,把shared_buffers设置高了! 以下划重点: 网上说:shared_buffers 应设置为总内存的10%,然后一点点的调高测试! 实际上,主机内存为512GB,10%就是51GB,我们没敢放这么高,放了21G,挂掉;改为8G,继续挂掉!放大招:改回125MB,通过! 所以千万别按网上教程,放那么大的shared_buffers,它会做非常大的Buffer和Cache,吃光内存!