vlambda博客
学习文章列表

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却没有利用起来,相当于性能差了一半。这是因为创建文件空间时,目录没有选择正确导致的。所以,如果安装集群数据库有两块磁盘时,要注意分布策略,不然性能损失是巨大的。

解决方法

很简单,通过创建新的文件空间和表空间,选择正确的配置,把旧表空间的表迁移到新的表空间上。这样磁盘性能提升了,就能够有更多的资源来提供用户的查询请求了,其处理作业的速度也会显著提升。