
# 调优流程
对慢SQL语句进行分析，通常包括以下步骤：
#### 操作步骤
1. 收集SQL中涉及到的所有表的统计信息。在数据库中，统计信息是优化器生成计划的源数据。没有收集统计信息或者统计信息陈旧往往会造成执行计划严重劣化，从而导致性能问题。从经验数据来看，10%左右性能问题是因为没有收集统计信息。具体请参见[更新统计信息](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0253.html#ZH-CN_TOPIC_0000002559105627)。
2. 通过查看执行计划来查找原因。如果SQL长时间运行未结束，通过EXPLAIN命令查看执行计划，进行初步定位。如果SQL可以运行出结果，则推荐使用EXPLAIN ANALYZE或EXPLAIN PERFORMANCE查看执行计划及实际运行情况，以便更精确地定位问题原因。有关执行计划的详细介绍请参见[SQL执行计划介绍](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0249.html#ZH-CN_TOPIC_0000002527985842)。
3. [审视和修改表定义](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0254.html#ZH-CN_TOPIC_0000002527825924)。
4. 针对EXPLAIN或EXPLAIN PERFORMANCE信息，定位SQL慢的具体原因以及改进措施，具体请参见[典型SQL调优点](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0262.html#ZH-CN_TOPIC_0000002559105631)。
5. 通常情况下，有些SQL语句可以通过查询重写转换成等价的，或特定场景下等价的语句。重写后的语句比原语句更简单，且可以简化某些执行步骤达到提升性能的目的。查询重写方法在各个数据库中基本是通用的。[经验总结：SQL语句改写规则](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0269.html#ZH-CN_TOPIC_0000002559105635)介绍了几种常用的通过改写SQL进行调优的方法。
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- 执行优化慢SQL可能造成业务使用异常，请谨慎操作。
- 关于长事务中SQL语句存在的风险： 长事务会阻塞死元组回收，长事务中若进行表的DELETE或UPDATE操作，会导致表出现大量空页面。而统计信息的收集是通过采样的方式，大量的空页面会导致采样到空页面的概率大幅提升，影响统计信息的真实程度，从而影响计划的准确性，导致性能劣化、CPU冲高等问题。在业务谨慎使用长事务，避免统计信息不准，计划跳变等问题。
  
 
