GaussDB系统调优与性能诊断(一)

影响数据库性能的因素包含以下几类:

  • 硬件:服务器(CPU/内存)、存储(IO性能)、网络(带宽)。
  • 系统规模:并发、数据量。
  • 软件环境:操作系统及参数配置。
  • 数据库:优化器、内核参数、表结构、索引、统计信息等。

当系统整体存在性能问题时,考虑通过系统调优来解决。

系统调优

系统调优流程

数据库系统调优的大致流程如下:

  1. 整体性能问题诊断,明确调优范围。判断压力是否在数据库?

  2. 如果压力在数据库层面,排查监控是否有如下问题症状:

  • CPU占用高
  • IO占用高
  • 内存占用高
  • 网络异常
  • 线程池占满
  1. 如果压力在数据库层面,排查监控观察到症状后,可以尝试从以下角度解决问题:
  • 系统资源不足
  • 并发问题
  • 数据库配置问题
  • 内核资源使用不优
  • SQL需要优化
  1. 如果压力不在数据库层面,可以尝试从以下角度定位问题:
  • 应用服务器资源不足
  • 应用服务器到数据库之间的网络通信
  • 业务处理查询结果慢

资源使用分析

通过TPOPS运维管理平台可以查看对应时间段内数据库的资源使用情况。

如果没有部署运维管理平台,可以通过以下方式来分析资源使用:

  • CPU使用top命令查看当前CPU使用情况,sar -u -f /var/log/sa/sa**查看历史CPU使用情况。
  • 内存使用free命令查看当前内存使用情况,sar -r -f /var/log/sa/sa**查看历史内存使用情况。
  • 磁盘IO使用iostat -xm 1命令查看当前磁盘IO使用情况,sar -b -f /var/log/sa/sa**查看历史磁盘IO使用情况。
  • 连接池使用:通过以下SQL查看数据库实时连接池使用情况。
select node_name,session_info 
from dbe_perf.global_threadpool_status order by 1;

内存模型

GaussDB数据库内存可以划分为动态内存(dynamic memory)、共享内存(shared memory)、其他内存(other memory)三个部分。

  • 参数max_process_memory控制GaussDB数据库能够使用的最大服务器内存。
  • 参数work_mem:内部排序操作和Hash表在开始写入临时磁盘文件之前使用的内存大小。一旦work_mem限定的物理内存不够,算子运算数据将写入临时表空间,会带来5到10倍的性能下降。
  • 参数maintenance_work_mem:维护操作可使用的最大内存,例如VACUMM和CREATE INDEX操作。
  • 参数shared_buffers:数据库使用的共享内存大小。
  • 参数cstore_buffers:列存表使用的共享缓冲区大小。
  • 执行作业最终可用的内存等于max_process_memory - shared_memory - cstore_buffers

查看数据库内存使用:

--查看内存使用详细信息
select * from pg_total_memory_detail;  --查看此视图需要开启内存保护特性

--数据库最大可用内存
show max_process_memory;

--查看各内存组件大小
show work_mem;
show maintenance_work_mem;

show cstore_buffers;
show shared_buffers;
show wal_buffers;

--查看动态内存使用
select contextname,pg_size_pretty(sum(totalsize)),pg_size_pretty(sum(freesize)) 
  from gs_session_memory_detail 
  group by contextname order by sum(totalsize) desc limit 10;

等待事件

常见的等待事件及其含义:

等待事件含义
wait cmd等待读取网络通信包。当前会话正在等待用户发送数据,当前压力不在数据库
wait io等待IO完成,可能存在IO异常
wait wal sync等待WAL日志同步到备库。即提交的事务在等待备机落盘。可能的原因:WAL日志量大、主备机网络异常、备机IO异常
wait data sync等待完成数据页到备机的同步
flush data等待向网络中nodename指定节点的plevel对应线程发送数据。可能的原因:数据量大、网络异常
logctrl_sleep为保障数据库RTO,数据库本身具备流控能力(recovery_time_target)。在压力测试时,可考虑是否关闭流控
pooler create conn分布式GaussDB内pooler CN正在向DN建立连接。可能的原因:CN到DN网络异常、DN上线程池繁忙、DN到dns服务器延时高
wait node当前查询正在等待其他节点返回。如果多数查询在等待某个节点,表示该节点可能是瓶颈
sort/sort-fetch tuple/sort-write file分别表示正在执行sort算子、获取sort元组、sort下盘操作。其他算子Material/HashJoin/HashAgg等类似。对于异常下盘场景,可以评估当前会话增加work_mem,其他场景考虑优化查询
gtm xxxgtm异常事件优先排查CN/DN与GTM主机的网络延时
DataFileRead/DataFileWrite通常大量出现这两种等待事件可能是IO异常、业务SQL不优
tuple/transactionid通常大量出现这两种等待事件,业务极大可能有并发更新导致业务整体阻塞。结合系统视图排查造成阻塞的会话
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GottdesKrieges

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值