在emcc监控下,发现某业务sql执行时长为2h多。
拿出该sql执行的变量值,把同样的sql拿到plsql里面去执行,并把变量替换为实际值,结果基本是10s之内出来结果。
请问这种情况的排查思路是什么?或者说优化思路是什么。以及发生该问题的原因可能是什么?
排查思路:
(1)检查是否存在锁表、死锁等问题。可以通过查询数据库的锁表信息、查看等待事件等方式进行排查。
(2)检查SQL语句的执行计划是否发生了变化,是否存在索引失效、全表扫描等情况。可以通过查询SQL语句的执行计划和索引状态等信息进行排查。
(3)检查数据库的资源使用情况,例如CPU、内存、磁盘等是否存在瓶颈。可以通过查看数据库的系统监控信息进行排查。
(4)检查是否存在网络延迟等问题。可以通过ping命令、traceroute命令等方式进行排查。
优化思路:
(1)优化SQL语句,例如增加索引、拆分大的SQL语句等。
(2)优化数据库的资源使用情况,例如增加CPU、内存、磁盘等。
(3)优化网络连接,例如增加带宽、优化网络拓扑等。
(4)进行分布式部署,例如将数据库进行分库分表、增加缓存等。
发生该问题的原因可能是:
(1)SQL语句执行计划发生了变化,导致查询效率降低。
(2)数据库资源使用过度,例如CPU、内存、磁盘等。
(3)网络延迟或连接问题。
(4)其他未知原因。