Oracle数据库执行SQL语句卡住“正在执行”状态,如何排查和解决?

陷入旧的冲突。
检查锁定状态。

查看这个锁表: sql 选择 s.sid、s.serial、s.username、l.type、l.lmode、l.request、l.block、o.object_name FROM v$ 会话 s、v$ 锁 l、dba_objects o 其中 s.sid = l.sid AND l.id1 = o.object_id AND o.object_name = 'SM_DICT_ITEM' AND l.block> 0;
障碍物 = 1 被卡住。
杀戮过程: sql 立即更改系统杀手会话“sid,请参阅”;
不要使用 SELECT 锁。
更改 UPDATE 行。
sql 更新 SM_DICT_ITEM SET sm_orderno = 1 WHERE sm_grkey = 'CCFORM_TSGD_TYPE';
检查交易是否已滚动: sql 选择 s.sid、s.serial、s.用户名、t.start_time、t.status FROM v$会话 s, v$交易 t 其中 s.saddr = t.ses_addr;
当CPU飞起来时看到这个: sql 选择 s.sid、s.serial、s.用户名、s.program、q.sql_text、q.cpu_time / 1 000000 AS cpu_sec FROM v$sessions, v$sql q 其中 s.sql_id = q.sql_id AND s.status = '活动' ORDER q.cpu_time DESC
他看得太久了。
更改参数: sql 更改系统状态 IDLTIME1 = 3 0000 目标 = 两者;
表已关闭,状态为; sql object_name,状态 FROM dba_objects WHERE object_name = 'SM_DICT_ITEM';
我实在无法决定当DBA。

Oracle SQL执行卡住显示“正在执行”怎么办?

Oracle SQL 执行被阻止并显示“正在运行”,通常是由于排它锁块所致。

检查锁: SQL 选择 sid、系列、sql_text、运行 从 v$sql 加入 v$session on v$sql.sql_id = v$session.sql_id 其中 cpu_time > 2 0000;
CPU time >2 0000 是阈值,可调。

杀戮会议: SQL 修改系统终止会话'sid,serial'立即;
立即替换sid,serial,立即终止。

注意: 删除会话将导致数据丢失或服务中断,请确认。

需要 DBA 权限。

问题仍然存在: 检查日志中是否有错误或锁定记录。

优化 SQL,减少更新次数并调整隔离级别。

监控锁,使用工具或脚本并及早检测它们。