国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

在Informix數據庫中釋放異常的鎖資源

2024-07-21 02:42:53
字體:
來源:轉載
供稿:網友
Informix數據庫釋放異常的鎖資源:

問題

在Informix數據庫中,鎖的使用和釋放是自動完成的。但在某些異常情況下,當前臺程序退出(正常或異常)后,相應在數據庫中的會話沒有終止,其占有的資源(主要是鎖)沒有被釋放,影響了其他用戶的使用。

這種情況可能出現在用戶表或系統表中,一般都是由于產品的BUG或非常極端的情況引起的。

這時需要用手工的方式將有問題的會話終止,以釋放其占有的資源,當然重新啟動數據庫自然就釋放了所有的資源了,但有時業務上暫時不允許重新啟動。

第一步,確定被鎖住的資源

一般在遇到這種情況時,很容易確定被鎖住的資源,如果是用戶表,則一般會在操作這張表時報錯,而如果是系統表,也會直接報告是哪張表,如:

211: Cannot read system catalog (sysPRocplan).

144: ISAM error: key value locked

在以上的信息中,關于存儲過程的系統表sysprocplan被鎖住了。

在確定了相關表名后,需要查詢出其在內部的表號,以便后續的處理,如下所示:

dbaccess <該表所在的數據庫>

select hex(partnum) from systables where tabname="<表名>"

執行返回的是一個16進制表示的數,這是該表在IDS內部的標識。

第二步,查找上鎖的用戶線索

運行IDS鎖的監控命令onstat -k,確定對該表上鎖的用戶線索,如下所示:

$ onstat -k

IBM Informix Dynamic Server Version 9.40.FC6 -- On-Line -- Up 18:13:12 -- 38912 Kbytes

Locks

address  wtlist owner  lklist type tblsnum rowid key#/bsiz

10a13a590 0   10afd30c8 0   HDR+S 100002 207  0

在輸出中,查找tblsnum為第一步找到的表號的行,每行代表一個鎖資源的情況,并找到相應的owner,即使用這個鎖的用戶線索號。

第三步,查找用戶線索對應的會話

通過用戶線索監控命令onstat -u進一步查找相應的會話以及用戶情況。如下所示:

$ onstat -u

IBM Informix Dynamic Server Version 9.40.FC6 -- On-Line -- Up 18:20:47 -- 38912 Kbytes Userthreads

address flags   sessid user tty wait tout locks nreads nwrites

10afd1028 ---P--D  1    informix - 0 0 0 28 7

10afd1850 ---P--F  0    informix - 0 0 0 0 0

10afd2078 ---P---  5    informix - 0 0 0 0 0

10afd28a0 ---P--B  6    informix - 0 0 0 0 0

10afd30c8 Y--P--- 17   informix 4 10b1f9548 0 1 157 0

10afd4118 ---P--D  9    informix - 0 0 0 0 0

10afd4940 Y--P--D  13   informix - 10a125f10 0 0 0 0

其中第一列為線索號,相對應的第三列為擁有該線索的會話號。

第四步,分析原因并采取措施

有了會話號之后,就可以進一步分析原因或采取相應的措施了,如:

onstat -g ses <會話號>,分析會話的狀態

onstat -g sql <會話號>,查看會話的SQL情況

注意,如果在會話的database一項中出現的是“-”,說明該會話所對應的客戶端程序已經退出,但數據庫中的會話并未終止,

或通過onmode -z <會話號>直接終止該會話,其所占有的鎖資源將全部釋放。

管理建議:

請關注異常鎖的情況,如果頻繁出現,應該是產品的BUG,要考慮IDS版本的升級。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 达孜县| 财经| 木里| 吉木乃县| 永年县| 龙山县| 祁连县| 金沙县| 仙桃市| 鄂托克前旗| 德钦县| 登封市| 绵竹市| 迭部县| 武宁县| 韶关市| 莱西市| 通许县| 永安市| 泰来县| 沙田区| 邵阳市| 安义县| 芜湖县| 土默特右旗| 宁夏| 林周县| 公主岭市| 怀来县| 阜南县| 治多县| 澳门| 定陶县| 西贡区| 昂仁县| 古丈县| 克什克腾旗| 百色市| 阿拉善盟| 碌曲县| 奎屯市|