GaussDB(for MySQL)标准版慢SQL问题定位
在相同业务场景下,架构设计和库表索引设计会影响查询性能,良好的设计可以提高查询性能,反之会出现很多慢SQL(执行时间很长的SQL语句)。本文介绍导致慢SQL的原因和解决方案。
SQL异常
- 原因及现象
SQL异常的原因很多,例如库表结构设计不合理、索引缺失、扫描行数太多等。
您可以在控制台的慢日志页面,下载并查看执行缓慢的SQL,慢SQL的执行耗时等信息。具体操作,请参见查看或下载GaussDB(for MySQL)标准版慢日志。
- 解决方案
实例瓶颈
- 原因及现象
- 业务量持续增长而没有扩容。
- 硬件老化,性能有损耗。
- 数据量一直增加,数据结构也有变化,导致原来不慢的SQL变成慢SQL。
您可以在控制台的查看实例的资源使用情况。如果资源使用率各项指标都接近100%,可能是实例到达了瓶颈。
- 解决方案
确认实例到达瓶颈后,建议升级实例规格。具体操作,请参见变更GaussDB(for MySQL)标准版实例的CPU和内存规格。
版本升级
- 原因及现象
实例升级版本可能会导致SQL执行计划发生改变,执行计划中连接类型从好到坏的顺序是system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>all。更多信息,请参见MySQL官方文档。
range和index连接类型时,如果SQL请求变慢,业务又不断重发请求,导致并行SQL查询比较多,会导致应用线程释放变慢,最终连接池耗尽,影响整个业务。
您可以在控制台的查看实例的当前连接数指标。
- 解决方案
参数设置不当
- 原因及现象
部分参数(如innodb_spin_wait_delay)设置不当会导致性能变慢。
您可以在控制台查看实例的参数修改情况。具体操作,请参见查看GaussDB(for MySQL)标准版参数修改历史。
- 解决方案
调整相关参数,使其适合业务场景。具体请参见GaussDB(for MySQL)标准版参数调优建议。
批量操作
定时任务
- 原因及现象
您可以在控制台查看实例的Delete语句执行频率、Insert语句执行频率、Insert_Select语句执行频率、Replace语句执行频率、Replace_Selection语句执行频率、Select语句执行频率、Update语句执行频率等指标,判断是否有规律性变化。具体操作,请参见查看GaussDB(for MySQL)标准版实例监控指标。
- 解决方案
调整定时任务的执行时间,建议在业务低峰期执行,并修改可维护时间段为业务低峰期。具体操作,请参见设置GaussDB(for MySQL)标准版实例可维护时间段。