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