4.阻塞的排查
5.阻塞的解決方法
達夢資料庫支援多使用者併發訪問、修改資料。在實際工作中,有可能出現多個事務同時訪問、修改相同資料的情況,當乙個事務正在占用某個資源的鎖,此時另乙個事務正在請求這個資源上與第乙個鎖相衝突的鎖型別時,就會發生阻塞。此時,被阻塞的事務將一直掛起,直到持有鎖的事務放棄鎖定的資源為止。本文就將給大家介紹如何使用對應的動態效能檢視檢視阻塞以及如何解決阻塞。
執行 update 操作並且不提交,具體操作如下:
3.1 在新會話下執行 select 操作
可以看到,由於 mvcc 的多版本機制,寫不會阻塞讀,所以 select 操作可以正常進行。但是前面的事務沒有提交,所以查出來的結果還是舊版本的值,也就是 update之前的值。
3.2 在新會話下執行 dml 操作
此時,由於 delete 操作需要加上與之前 update 操作相同型別的鎖,所以阻塞發生,當前事務被掛起。
當阻塞發生時,我們可以通過 v$lock 檢視查到當前資料庫中鎖的狀態
結果中我們可以看到,事務 2399 被阻塞了,阻塞他的事務為 2393,同樣我們也可以通過 v$trxwait 檢視查詢誰阻塞誰,
得出同樣的結果,id 為 2399 的事務正在等待 id 為 2393 的事務,等待時間是1071599 毫秒。
接下來,通過 v$sessions 檢視查詢兩個事務對應的會話
可以得到兩個事務對應的會話 id 和當前執行 sql 語句,可以知道是哪些 sql 語句產生的阻塞。
根據需求,可以有兩種解決方案。
5.1 提交或回滾產生阻塞的事務。
根據上文,我們可知產生阻塞的事務會話 id 為 2410147992。此時,我們只需要在該會話下提交或回滾事務,鎖自然會被釋放,阻塞解決。
5.2 關閉產生阻塞的會話
同樣,我們也可以使用系統過程 sp_close_session(sess_id)來關閉對應的會話,具體使用方法如下。
此時,鎖被釋放,delete 操作也可以順利進行下去。
達夢資料庫外部表
外部表,是指不存在於資料庫中的表。通過向達夢提供描述外部表的元資料,我們可以把乙個作業系統檔案當成乙個唯讀的資料庫表,就像這些資料儲存在乙個普通資料庫表中一樣來進行訪問。外部表是對資料庫表的延伸。建立簡單的達夢外部表的過程 1.假設外部資料在test.txt中 dmdba localhost cat...
達夢資料庫表空間
5 維護回滾表空間 6 臨時表空間 7 刪除表空間 system 系統表空間,存放資料字典資訊 roll 回滾表空間,存放回滾記錄 temp 臨時表空間,做排序 main 系統預設表空間,存放使用者資料。建立使用者,沒有指定表空間,預設就是 main 表空 間。hmain huge 表空間 查詢表空...
達夢資料庫表空間
表空間是一種邏輯儲存結構,資料庫的物件如表 索引等在邏輯上都是儲存在指定的表空間中。system 系統表空間,用於存放資料字典資訊 roll 回滾表空間,用於存放的回滾資料 temp 臨時表空間,用於存放是臨時資料 建立表空間 create table vaspace.student stu no ...