上周,我在北京的一家咖啡馆里,点了一杯拿铁,价格是2 8 元。
我注意到咖啡馆的菜单上写着“使用百度前必读”,然后是一串代码。
我好奇地查了一下,原来那是百度知道的一个页面。
我那个朋友说,他之前也遇到过类似的页面,但不太懂那些代码是什么意思。
我告诉他,那可能是页面的脚本,用于网站的运行和功能实现。
他听了之后,若有所思地点了点头,然后我们继续聊天。
算了,你看着办吧,如果你有兴趣,可以自己查查。

死锁后关闭TOMCAT,数据库能否自动解锁?

哎哟,这事儿啊,得看是哪个数据库了。
说实话,像MySQL和Oracle这种,锁管理是挺重要的。

先说MySQL吧,这玩意儿要解锁,得先找到那个锁着的进程。
操作是这样的,你用命令show processlist;,这就能看到当前所有进程的情况。
你仔细看看,哪个进程在等着,那就是它了。
然后,你用kill id;,这里的id就是那个进程的ID,一杀一个准。

再来说说Oracle,这解锁的命令稍微复杂一点。
你得用这个命令:SELECT s.sid, s.serial, s.username, s schemaname, s.osuser, s.process, s.machine, s.terminal, s.logon_time, l.type FROM v$sessions, v$lock WHERE s.sid=l.sid AND s.username IS NOT NULL ORDER BY sid;,这命令能帮你找到锁着的进程信息。

找到之后,你得用ALTER SYSTEM KILL SESSION 'sid, serial';,这里的sid和serial就是刚才查到的进程ID和序列号,一执行,锁就解了。

我当时也没想明白,为什么这两个数据库解锁命令差这么多。
不过,用熟了也就那么回事儿了。
总之,数据库锁管理得做好,不然出了问题,处理起来可就头疼了。

数据库锁表?别慌,本文教你如何解决

数据库锁表处理: 1 . DML操作导致:程序A修改未提交,程序B等待资源,锁表。
2 . DDL操作导致:大表ALTER操作,长事务,修改等待,锁表。
3 . 原因:多个事务争抢资源,死锁,锁表。

MySQL解锁:
执行SELECT FROM information_schema.processlist WHERE command NOT IN ('Sleep') ORDER BY time DESC,找到记录ID,KILL [记录ID]。

优化慢SQL,减少DML操作时间。

Oracle解锁:
执行SELECT SID, SERIAL, LOCKED_MODE, 'ALTER SYSTEM KILL SESSION ''||SID||','||SERIAL||''';,找到对应SQL执行。

查询慢SQL,优化。

避免锁表:
程序设计:隔离DML操作,异常回滚。

DDL操作:避免线上DDL,使用时间小或停服务,使用触发器复制数据,或扩展表。