每天学透1个知识点—Oracle性能调优之数据库突然变慢
当收到告警说数据库突然变得非常慢,你会如何开始排查?请描述你的第一步和整体思路。
面对突发的性能问题,我的目标是快速定位瓶颈,而不是立即调优。我会遵循以下步骤:
-
确认现象和范围:先确认是所有应用都慢,还是某个模块慢?是查询慢还是更新慢?这有助于缩小范围
- 检查系统资源:登录数据库服务器,用 top、vmstat、iostat 快速查看 CPU、内存、I/O 是否存在异常。如果CPU 100%,可能是SQL或并发问题;如果I/O等待高,可能是磁盘瓶颈或糟糕的执行计划。
- 查看数据库等待事件:连接到数据库,查询当前的等待事件(Oracle:v$session_wait 或 v$session 中的 event;达梦:v$sessions 中的 state 和 wait_class)。这能告诉我数据库在“等什么”——是在等锁、等I/O,还是在等网络
- 识别消耗最高的会话/SQL:找出当前消耗资源最多的会话(Oracle:v$session 结合 v$sqlarea;达梦:v$sessions 和 v$sql_history)。通常,一个糟糕的SQL会导致系统变慢
- 获取执行计划并分析:对找到的TOP SQL,获取其实际执行计划(Oracle:DBMS_XPLAN.DISPLAY_CURSOR;达梦:EXPLAIN 或 CACHEPLN),检查是否走了正确的索引,表连接顺序是否合理。
- 采取临时措施:如果确认为某个SQL导致,可以暂时使用SQL Profile或手动绑定执行计划(或联系开发人员优化),或者必要时kill掉异常会话。
- 事后分析:收集AWR报告(Oracle)或系统监控日志,分析历史趋势,找出根本原因,彻底优化。

浙公网安备 33010602011771号