Greenplum数据库性能调优
发表于 2025/04/17
0
作者|方原
测试内容
gpcheckperf 是 Greenplum 数据库提供的一个性能测试工具,用于评估 Greenplum 数据库集群的性能。它执行一系列的性能测试,包括 CPU、内存、磁盘 I/O 等方面的测试,并生成详细的报告,帮助用户了解系统的性能状况和可能的瓶颈。通过分析 gpcheckperf 的报告,用户可以调整配置、优化性能,以提高 Greenplum 数据库集群的性能表现。
执行 gpcheckperf -f /data1/gpdb/hostfile -d 300s /data1/gpdb/master -B 16k -r ds -S 5GB –duration 测试脚本
根据官网介绍gpcheckperf命令测试的是主机的硬件性能,非数据库性能,主要是磁盘测试,从确定主要优化方向为磁盘IO。
性能目标: 性能达到850M-1600M
调优前数据: 性能为616M,距离客户要求的850M-1600M的要求有较大的差距
性能瓶颈分析
再次执行测试脚本,观察使用iostat观察磁盘性能,
发现数据盘的使用率100%,并且写入延迟搞到10ms。可以发现io确为性能瓶颈
应用信息
软件名称 | 版本 | 说明 |
Greenplum | 6.12.1 | Greenplum数据库 |
调优实施
1. 搭建raid盘提高磁盘吞吐量
搭建合适的raid可以提高磁盘性能,我们尝试了多种模式进行测试,数据如下:raid类型 | 双系统盘raid1 | 单数据盘raid0 | 三数据盘raid0 | 四数据盘raid0 | 五数据盘raid10 |
测试结果 | 600M | 200M | 666M | 853M | 1009M |
磁盘利用率 | 100% | 100% | 100% | 100% | 100% |
可以看到,搭建raid对于性能的提升是巨大的。与客户沟通后,确定采用全部12块数据盘搭建raid10作为最终搭建raid的手段。
2. 硬盘OS参数调优
按照分析可以看见,磁盘利用率都为100%,说明性能瓶颈在磁盘。所以下面在OS层面对磁盘的各参数进行调优,目的是提高硬盘读写性能。
1) 硬盘内存缓存参数
vm.dirty_ratio表示脏页所占的百分比(相对于所有可用内存,即空闲内存页+可回收内存页)达到dirty_ratio时,write调用会唤醒内核的flusher线程开始回写脏页数据,直到脏页比例低于此值,write调用此时会阻塞,硬盘IO会暂停,一般默认20%。
当dirty_ratio过低时,会发生频繁的落盘操作,影响磁盘的IO性能,此时可以适当提高dirty_ratio的值,在本次调优中,经过多次测试,当dirty_ratio在60%~70%之间时,会有较高的IO性能,但过高的dirty_ratio会有丢失数据的风险,所以最终选择dirty_ratio为60%。
修改的步骤为:sysctl -w vm.dirty_background_ratio=60
2) 硬盘调度策略调整
硬盘的调度策略是指操作系统为了高效地管理磁盘I/O操作而采用的一系列方法和技术。这些策略决定了操作系统如何响应多个磁盘请求,以最小化寻道时间、旋转延迟和数据传输时间,从而提高磁盘访问效率。
在本次调优的服务器OS中,硬盘的调度策略有my-deadline,kyber,bfq和none四种,经过调优测试对比,当硬盘的调度策略为bfq时,系统有较高的IO性能。
修改步骤为:echo bfq > /sys/block/sdd/queue/scheduler
3) IO调度队列调整
nr_requests表示请求的IO调度队列大小,默认128。nr_requests参数,可以提高系统的吞吐量,似乎越大越好,但是该请求队列的也不能过大,因为这样会消耗大量的内存空间。
所以,在本次优化中,适当提高nr_requests可以提高系统的吞吐量,但是不宜设置的过高。经调优测试,当nr_requests调整为原来的两倍时,系统可以获得较高的IO性能。
修改步骤为:echo 512 >/sys/block/sdd/queue/nr_requests
调优结果:
调整dirty_ratio=60 |
调整scheduler=bfq |
调整nr_requests=512 |
1264M |
1302M |
1442M |
16%(对比1089M) |
3%(对比1264M) |
11%(对比1302M) |