PostgreSQL码农集散地

每天5分钟PG聊通透第19期,为什么SQL性能会抖动?

参考文档点击文末阅读原文打开; 推荐《最好的PostgreSQL学习镜像》;


每天5分钟PG聊通透第19期,为什么SQL性能会抖动?

背景

  • 问题说明(现象、环境)
  • 分析原因
  • 结论和解决办法

链接、驱动、SQL

19、为什么SQL性能会抖动?

https://www.bilibili.com/video/BV1zL411V7HX/

衡量稳定性的标准之一:

  • SQL RT P99指标

一组数据:

progress: 47.0 s, 12085.7 tps, lat 10.205 ms stddev 41.218  
progress: 48.0 s, 12123.5 tps, lat 10.646 ms stddev 41.099  
progress: 49.0 s, 10480.9 tps, lat 13.070 ms stddev 44.771  
progress: 50.0 s, 11528.6 tps, lat 10.600 ms stddev 38.250  
progress: 51.0 s, 11593.0 tps, lat 10.702 ms stddev 42.348  
progress: 52.0 s, 11400.3 tps, lat 11.710 ms stddev 45.370  
progress: 53.0 s, 11318.1 tps, lat 11.129 ms stddev 41.952  
progress: 54.0 s, 10445.1 tps, lat 12.272 ms stddev 42.237  
progress: 55.0 s, 9457.5 tps, lat 13.413 ms stddev 48.934  
progress: 56.0 s, 9780.0 tps, lat 13.236 ms stddev 46.360  
progress: 57.0 s, 10441.9 tps, lat 12.039 ms stddev 43.334  
progress: 58.0 s, 8422.9 tps, lat 15.377 ms stddev 57.880  
progress: 59.0 s, 8620.0 tps, lat 14.381 ms stddev 49.209  
progress: 60.0 s, 9145.7 tps, lat 14.800 ms stddev 47.616  
progress: 61.0 s, 8526.9 tps, lat 14.349 ms stddev 50.431  
progress: 62.0 s, 10954.3 tps, lat 12.352 ms stddev 42.899  
progress: 63.0 s, 10469.2 tps, lat 11.282 ms stddev 41.580  
progress: 64.0 s, 9445.3 tps, lat 13.234 ms stddev 49.325  
progress: 65.0 s, 9309.8 tps, lat 13.482 ms stddev 60.079  
progress: 66.0 s, 8310.5 tps, lat 15.931 ms stddev 57.222  
progress: 67.0 s, 6861.2 tps, lat 19.285 ms stddev 53.860  
progress: 68.0 s, 7947.3 tps, lat 14.891 ms stddev 51.184  
progress: 69.0 s, 7798.5 tps, lat 17.091 ms stddev 50.679  
progress: 70.0 s, 7037.5 tps, lat 17.353 ms stddev 52.647  
progress: 71.0 s, 6969.1 tps, lat 18.422 ms stddev 54.305  
progress: 72.0 s, 6471.8 tps, lat 19.404 ms stddev 60.733  
progress: 73.0 s, 6806.3 tps, lat 18.334 ms stddev 61.328  
progress: 74.0 s, 5780.2 tps, lat 22.066 ms stddev 65.852  
progress: 75.0 s, 5883.0 tps, lat 23.143 ms stddev 67.310  
progress: 76.0 s, 6517.5 tps, lat 18.026 ms stddev 57.010  
progress: 77.0 s, 6023.9 tps, lat 21.483 ms stddev 67.866  
progress: 78.0 s, 5703.8 tps, lat 22.705 ms stddev 63.565  
progress: 79.0 s, 5377.8 tps, lat 23.320 ms stddev 62.066  
progress: 80.0 s, 5207.6 tps, lat 23.580 ms stddev 64.388  
progress: 81.0 s, 4729.9 tps, lat 28.230 ms stddev 76.392  
progress: 82.0 s, 5043.1 tps, lat 29.408 ms stddev 317.726  
progress: 83.0 s, 10181.7 tps, lat 12.849 ms stddev 43.276  
progress: 84.0 s, 10392.9 tps, lat 11.829 ms stddev 41.257  
progress: 85.0 s, 10331.7 tps, lat 12.852 ms stddev 40.385  
progress: 86.0 s, 10971.1 tps, lat 11.427 ms stddev 41.810  
progress: 87.0 s, 11236.2 tps, lat 10.996 ms stddev 42.564  

RT为什么抖动? 下面列举几个例子:

1、争抢资源
资源分类:

  • cpu
  • io
  • 内存
  • 网络

争抢资源:

  • 系统后台进程争抢资源
    • 由于pg使用buffer IO, 例如 OS在执行大量的 异步刷脏 时, 可能导致IO资源的争抢
  • DB后台管理进程争抢资源
    • autovacuum: 垃圾回收, analyze, freeze. 争抢IO资源、冲击OS page cache、产生大量WAL还可能冲击网络(当有standby时)
    • checkpoint: 数据库刷脏, 争抢IO资源.
    • walwriter(通常情况是同步IO, 但是顺序IO), bgwriter(通常情况是异步IO): 刷脏, 争抢IO资源.

2、出现了锁等待, 导致抖动, 严重时还可能雪崩

3、执行计划抖动, 执行计划不正确导致了性能问题

4、输入条件的变化, 执行消耗变大, 导致SQL执行时间抖动(属于正常行为)

5、内存命中率变化, 例如原本在buffer命中的, 由于buffer被挤出, 导致需要从物理块设备访问数据, 从而增加IO延迟, 出现SQL抖动.

补充:
如何排查过去已经发生的问题?

  • auto_explain
  • awr
  • performance insight

《每天5分钟,PG聊通透 - 系列1 - 热门问题 - 链接、驱动、SQL - 第18期 - 为什么性能差? 如何找到捣蛋鬼SQL?》

本期彩蛋 - 数据库生态工具&国产开源数据库

用好周边工具, 数据库管理水平战胜90%老司机

1、管控软件

鸣嵩(前阿里云数据库总经理 / 研究员)等大佬们创业创办的云猿生, 核心产品是KubeBlocks. 他们的理念是让管理数据库和搭积木一样简单, 如果你要管理很多套并且种类(OLTP\OLAP\NoSQL\KV\TS\MQ等)很多的数据库产品, 推荐首选.  

  • https://github.com/apecloud/kubeblocks

PG中文社区核心委员唐成老师的公司乘数开源的Clup, 专用管理PostgreSQL和PolarDB的集群管理软件, 如果你要管理很多套数据库, 推荐选择. 并且Clup还提供了企业版、自研的连接池、分布式存储、一体机、备份平台等, 是企业用户推荐之选.

  • https://www.csudata.com/

若航开源的pigsty, 集成了300多个PG插件的PG集群和PolarDB集群管理软件, 如果你要管理很多套PG或PolarDB数据库, 且对插件有特别多的需求, 推荐选择.

  • https://pigsty.cc/zh/

2、审计监控诊断优化

翟总(曾经是我背后的男人)到海信聚好看后研发的 DBdoctor, 采用ebpf技术, 在对数据库几乎没有影响的情况下实时监控数据库和服务器的各项指标, 发现和诊断问题根因非常方便.

  • https://www.dbdoctor.cn/

天舟兄弟的核心产品Bytebase 是位于您和数据库之间的中间件。它是数据库 DevOps 的 GitLab/GitHub,专为开发人员、DBA 和平台工程师打造。

  • https://bytebase.cc/docs/introduction/what-is-bytebase/

D-Smart, Oracle老前辈白老大出品, 专注企业级市场, 将业界顶级DBA经验的产品化作品, 产品功能包括数据库监控、诊断、优化等.

  • https://www.modb.pro/db/567140

3、国产数据库IDE

IDE是开发者的必备工具,例如社区有pgAdmin, 国产IDE则可以看看老程序达刚老师的DeskUI: 

  • https://www.deskui.com

4、数据同步&迁移&备份恢复

NineData, 老领导出去创业做的产品, 产品涵盖了数据同步、迁移、备份、比对、devops、chatDBA等.

  • https://www.ninedata.cloud/home

DSG, 非常老牌的数据库同步迁移企业级产品, 支持各种数据库的异构和同构迁移, 用他们的话说, 没有dsg搞不定的迁移, 比goldengate还牛.

  • https://www.dsgdata.com/

除了PolarDB还非常值得关注的几款PG栈国产数据库:

HaloDB(基于PG兼容PostgreSQL、Oracle、MySQL. http://www.halodbtech.com/ )、IvorySQL(基于开源PG兼容PG、Oracle. https://www.ivorysql.org/zh-cn/ )、ProtonBase(云原生分布式数仓. https://protonbase.com/ )、成都文武数据库(https://ww-it.cn)

参考文档点击阅读原文获得


感谢关注我的github (https://github.com/digoal/blog) 及视频号:

Image

彩蛋2:  全国大学生数据库创新设计赛  点击报名