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

嗯...运行Oracle SQL卡住了...显示“正在运行”...
2 02 2 年...遇到了一个情况...在上海...一个项目...卡了差不多十分钟...
一开始很迷茫...感觉不对...查了一下...原来是排他锁...
是for update子句...某张表被锁了...其他会话无法动...
比如...我执行了这条语句... 平方米 select from sm_dict_item where sm_grkey='ccform_tsgd_type' for update
嘿...多么巧合...这个表似乎被另一个会话锁定...
要找到原因...你必须查看锁...检查 v$sql 和 v$session...
查找持有锁的会话...我记得这个 SQL... 平方米 select sid,serial,sql_text,runs from v$sql join v$session on v$sql.sql_id=v$session.sql_id where cpu_time>2 0000;
cpu_time>2 0000...这是阈值...你需要看看真实情况...
检查...sid和serial...记下来...这是会话ID...
所以...完成这个会话...
命令是... 平方米 alter system Kill session 'sid,serial'立即;
例如... sid 是 1 2 3 ... 序列号是 4 5 6 ...
只需输入... 平方米 alter systemkill session '1 2 3 .4 5 6 'immediate;
立即...立即杀死...
但是...小心...结束会话...数据可能会丢失...服务也停止...
你需要确认...是否要杀死这个...
而且...你必须有权限...否则会报错...
直到后来才反应过来...也许我比较极端...直接杀死...
结果...有时...杀死...问题是还是有...
这时候...需要读日志...
检查数据库日志...有时候日志里有更详细的信息...
比如...阻塞冲突的记录...
优化SQL也可以...那个用于更新...如果可以就别用...
或者...调整事务隔离级别...比如读忙...
监控阻塞情况...也很重要...可以定期检查...使用工具或者脚本...
总之...锁定...先找到锁...检查会话...杀死会话...查看日志...优化SQL...监控...
2 02 2 年上海的情况...最后优化了SQL...问题消失了...

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

如果此 SQL 语句卡住,可能是由于锁冲突或不完整的事务。
首先检查谁被卡住并使用这个技巧:
sql 选择 s.sid、s.serial、s.username、s.status、l.type、l.lmode、l.request、l.block、o.object_name、o.object_type FROM v$sessions v、v$lock l、dba_objects o 其中 v.sid = l.sid 且 l.id1 = o.object_id AND o.object_name = 'SM_DICT_ITEM' 且 l.block > 0;
检查哪些会话的块为 1 这意味着块被卡住了。
如果无缘无故卡住,就杀掉它:
sql 更改系统立即终止会话“sid,serial”;
接下来,修改SQL。
不要使用 FOR UPDATE;直接更新行。

sql 更新 SM_DICT_ITEM SET sm_orderno = 1 WHERE sm_grkey = 'CCFORM_TSGD_TYPE';
你还要了解情况,不要让它一直跑下去。

sql 从 v$sessions v、v$transaction t 中选择 s.sid、s.serial、s.username、s.status、t.start_time、t.status,其中 s.saddr = t.ses_addr;
如果事务继续运行,请用户立即提交或回滚事务。

监视 CPU、内存和 I/O 等资源是否耗尽也很重要。

sql 选择 s.sid、s.serial、s.用户名、s.program、q.sql_text、q.cpu_time/1 000000 AS cpu_sec FROM v$sessions v, v$sqlq WHERE s.sql_id = q.sql_id AND s.status = 'ACTIVE' ORDER BY q.cpu_time DESC;
锁等待时间等参数也需要调整:
sql 更改系统设置 IDLTIME1 =3 0000 范围=两者;
最后,表状态、日志记录和联系 DBA 都是故障排除技术。
你自己先看看吧。

重启电脑后第一次查询sqlserver中的数据库很慢,之后每次查询都快

老实说:重新启动计算机后首次检查 SQL Server 数据库可能非常耗时。
我已经多次遇到这个问题了。
你的分析非常好。
让我补充一些个人经历​​。

说到硬件,我遇到的最后一件事是服务器内存不足。
机器重新启动后,系统资源被重新分配,数据库查询实际上花费了不到3 秒的时间,但前提是系统已将内存预热到该状态。
可见内存缓存有多么重要。
当我刚刚重新启动时,我的数据库查询从未命中缓存,并且每次都必须访问磁盘才能获取数据。

数据库的维护状况很有趣。
我有一家客户公司使用 SQL Server 代理自动运行碎片整理,但碎片整理设置为每天凌晨 3 :00 运行。
结果,每天早上第一件事就是运行查询的用户抱怨他们被卡住了。
坦率地说,索引过程会消耗CPU和I/O。
当我运行查询时,毫不奇怪,它的速度如蜗牛般缓慢。
然后更改为更大的维护窗口,问题得到解决。

应用程序和网络问题更为常见。
上次我帮助电子商务团队排除故障时,我们发现他们使用的连接池需要在服务器重新启动后重建。
想一想。
每次用户请求时都必须重新建立 TCP 连接。
这件事根本就不能拖延。
有趣的是,一旦连接池运行起来,后续的请求直接快了9 0%。
然后我切换到持久连接,问题就解决了。

关于SQL Server的内部机制,我记得在调优期间使用延迟内存分配功能,实际上看到初始查询性能显着下降。
当时不太明白,后来看资料才发现SQL Server在重启后需要时间重新评估它的内存分配策略。
在此阶段,数据库服务器的可用内存会暂时减少,因为它倾向于为更紧急的系统进程保留内存。

我自己没有运行过,但记得有数据显示SQL Server重启后的前3 0秒内内存使用量出现异常波动。
我们建议在此阶段监控服务器性能。
你可能会发现这样的东西。

最后说一点小知识。
一些国家数据库在重新启动后需要额外的时间来“预热”其内部元数据缓存,这会增加查询延迟。
使用这些系统的客户可能需要调整初始化参数。