ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Oracle 死锁与慢查询总结
[打印本页]
作者:
南七星之家
时间:
2023-5-28 23:08
标题:
Oracle 死锁与慢查询总结
查看死锁
SELECT
s.sid "会话ID",
s.lockwait "等待锁",
s.event "等待的资源/事件", -- 最近等待或正在等待的资源/事件
DECODE(lo.locked_mode, 0, '尚未获得锁', 1, NULL, 2, '行共享锁', 3, '行排它锁', 4, '共享表锁',
5,'共享行排它锁',6, '排它表锁') "锁模式",
do.object_name "被锁对象",
s.status "会话状态",
sq.SQL_TEXT,
sq.SQL_FULLTEXT,
sq.executions "SQL执行次数",
ROUND(sq.elapsed_time/1000000, 2) "SQL执行时间(秒)",
DECODE(sq.executions,0,'-',NULL,'-',ROUND(sq.elapsed_time/1000000/sq.executions, 2)) "SQL平均执行时间(秒)",
DECODE(sq.executions,0,'-',NULL,'-',ROUND(sq.rows_processed/sq.executions, 2)) "平均返回行数",
s.sql_exec_start "SQL开始执行时间",
sq.last_active_time "查询计划最后活跃时间",
lo.process "操作系统进程ID",
s.port "进程端口号",
s.program "进程名称",
lo.os_user_name "操作系统用户名",
s.machine "操作系统机器名称",
'ALTER SYSTEM KILL SESSSION '''||s.sid||','||s.serial#||''';' "终止会话操作"
FROM v$sql sq
JOIN v$session s on s.sql_hash_value = sq.hash_value
JOIN v$locked_object lo on lo.session_id = s.sid
JOIN dba_objects do on do.object_id = lo.object_id
WHERE s.username='OPT_WMS_USER' ; -- Oracle用户名称,大写
复制代码
说明:
如果lockwait值不为空(形如0000001F83D6C748),并且status为ACTIVE,则说明存在死锁
event 最近等待或正在等待的资源/事件:
enq: TX - row lock contention :按模式6等待TX:当会话等待另一个会话已持有的行级锁时发生该事件,即某个用户正在更新、删除另一个会话希望更新、删除的行时,会发生这种情况。这种类型的TX排队等待对应于等待事件 enq:TX - row lock contention。
解决方案:已经持有锁的第一个会话执行提交或回
查看慢查询
查询执行最慢的SQL
[code]SELECT * FROM ( SELECT s.sql_text, --s.sql_fulltext, 注释掉该列,可以加快查询速度(如果需要查询完整sql文本,可以考虑通过sql_id二次查询) s.sql_id, s.executions "执行次数", ROUND(s.elapsed_time / 1000000, 2) "总执行时间(秒)", ROUND(s.elapsed_time / 1000000 / s.executions, 2) "平均执行时间", --单位:秒 s.first_load_time "父游标创建时间", s.parsing_user_id "用户id", u.username "用户名" FROM v$sqlarea s LEFT JOIN all_users u ON s.parsing_user_id = u.user_id WHERE s.executions > 0 AND u.username = 'OPT_WMS_USER' --注意 用户名大写 ORDER BY 平均执行时间 DESC)WHERE rownum
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4