GP数据库查询慢的问题排查及优化
集群规划情况
节点机器的primary数:4
节点机器的磁盘情况:
磁盘1:/dev/sdb 挂载目录:/data1
磁盘2:/dev/sdc 挂载目录:/data2
问题现象
用户反应数据库查询很慢,要好几十秒才能够查询到结果。
通过在数据库运行过程中,发现一个现象是,节点机器的其中一个磁盘/dev/sdb满负荷100%运行时,另外一个磁盘/dev/sdc的负载却只有30%左右,明显的不平衡。
查询慢的原因就找到了,接着主要排查磁盘负载不均衡的问题。
分析过程
查看主备及文件空间分布情况
可以看到dbid为26到29都是一台主机seg07上的primary,而且都放在了/data1目录下,即/dev/sdb磁盘而其镜像dbid为58至61又是另外一台主机的一块磁盘。这这样分配导致的问题就是,数据库有查询请求时,是访问primary节点的,然而primary节点都在一块磁盘上,这样压力都在这块磁盘上了,造成负载不均衡的现象,降低了磁盘的使用率。
如上图数据库访问数据时,请看实线指向,只访问各节点机器的磁盘/dev/sdb,而磁盘/dev/sdc却没有利用起来,相当于性能差了一半。这是因为创建文件空间时,目录没有选择正确导致的。所以,如果安装集群数据库有两块磁盘时,要注意分布策略,不然性能损失是巨大的。
解决方法
很简单,通过创建新的文件空间和表空间,选择正确的配置,把旧表空间的表迁移到新的表空间上。这样磁盘性能提升了,就能够有更多的资源来提供用户的查询请求了,其处理作业的速度也会显著提升。