🚀 优质资源分享 🚀
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
**摘要:**本文从应用业务优化角度,以常见触发IO慢的业务SQL场景为例,指导如何通过优化业务去提升IO效率和降低IO。
本文分享自华为云社区《GaussDB(DWS)性能优化之业务降IO优化》,作者:along_2020。
IO高?业务慢?在DWS实际业务场景中因IO高、IO瓶颈导致的性能问题非常多,其中应用业务设计不合理导致的问题占大多数。本文从应用业务优化角度,以常见触发IO慢的业务SQL场景为例,指导如何通过优化业务去提升IO效率和降低IO。
说明 :因磁盘故障(如慢盘)、raid卡读写策略(如Write Through)、集群主备不均等非应用业务原因导致的IO高不在本次讨论。
一、确定IO瓶颈&识别高IO的语句
1、查等待视图确定IO瓶颈
SELECT wait\_status,wait\_event,count(*) AS cnt FROM pgxc\_thread\_wait\_status
WHERE wait\_status <> 'wait cmd' AND wait\_status <> 'synchronize quit' AND wait\_status <> 'none'
GROUP BY 1,2 ORDER BY 3 DESC limit 50;
IO瓶颈时常见等待状态如下:
2、抓取高IO消耗的SQL
主要思路为先通过OS命令识别消耗高的线程,然后结合DWS的线程号信息找到消耗高的业务SQL,具体方法参见附件中iowatcher.py脚本和README使用介绍
3、SQL级IO问题分析基础
在抓取到消耗IO高的业务SQL后怎么分析?主要掌握以下两点基础知识:
1)PGXC_THREAD_WAIT_STATUS视图功能,详细介绍参见:
https://support.huaweicloud.com/devg2-dws/dws_0402_0892.html
2)EXPLAIN功能,至少需掌握的知识点有Scan算子、A-time、A-rows、E- rows,详细介绍参见:
https://bbs.huaweicloud.com/blogs/197945
二、常见触发IO瓶颈的高频业务场景
场景1:列存小CU膨胀
某业务SQL查询出390871条数据需43248ms,分析计划主要耗时在Cstore Scan