MaxDB有關鎖機制
Locks
Use
原理上,多個程式可以在同一時間獲得相同的資料庫物件,比如同一個表。資料庫系統使用鎖同步並行操作和隔離單獨的程式。
鎖的型別:
Name | Objects that can be locked |
Shared lock (SHARE LOCK) 共享鎖 | 表、行、資料庫目錄 |
Exclusive lock (EXCLUSIVE LOCK) 排他鎖 | 表、行、資料庫目錄 |
行 |
Activities
請求鎖
行級或者表級的鎖可以通過資料庫系統被隱式的請求或者釋放,或者顯示的被使用者請求或者釋放。對資料庫目錄的鎖都是通過資料庫系統隱式的請求和釋放的。
可以使用隔離級別決定什麼時候什麼型別的鎖被設定,決定程式的並行度和將會出現的現象。可以在資料庫的session啟動的時候定義隔離級別,如果沒有定義,則使用預設值。
依賴於隔離級別,資料庫系統在執行sql語句的時候申請必須的鎖。Sql語句在執行改變資料的操作(insert、update、delete)的時候程式申請一個排他鎖。
使用鎖語法,也可以顯示的為程式或者表中單獨的行申請鎖,通過在sql語句中定義一個LOCK選項,這個可以在任何的隔離級別,可以使用LOCK選項臨時的為某些sql語句覆蓋隔離級別。
如果同一個程式在一個表中申請了太多的行級鎖,資料庫系統會試圖設定一個表級鎖在該表上,可以定義在有多少行級鎖的時候系統轉換成表級鎖,通過配置MAXLOCKS引數(普通資料庫引數)。
釋放鎖
Type of Lock | Release |
通過使用LOCK語法顯示的釋放 | 資料庫系統在程式結束的時候釋放鎖。除了以下的情況: COMMIT或者ROLLBACK命令執行結束程式並且包含一個LOCK語法。 |
隱式設定共享鎖 | 依賴於隔離級別 |
隱式設定排他鎖 變更行排他鎖 通過SQL語句修改資料申請的排他鎖 表鎖 | 在程式中沒有釋放,但是在整個程式結束的時候釋放 |
沒有被修改的行上的排他鎖 行上的共享鎖 | 可以通過UNLOCK語法被釋放 |
可以通過REQUEST_TIMEOUT(特別資料庫引數)限制使用者等待一個鎖被釋放的時間,當這個時間超時的時候,會產生一個資料庫系統的提示,可以根據該提示進一步處理。
顯示鎖的資訊
可以檢視鎖的資訊:
LOCKS系統表包含了有關鎖的資訊;
LOCK_HOLDER系統表;
LOCK_REQUESTOR系統表
LOCK_WAITS包含了有關鎖等待的資訊。
(這些系統表的所有者是DOMAIN使用者)
現象
如果很多的程式同時訪問相同的資料庫物件,比如表,會在結果集上出現互相矛盾的情況,會出現以下的現象:
髒讀:
程式 T1修改一個行。程式T2在程式T1提交之前讀這個行,然後T1執行了回滾操作,這個時候T2讀取的資料實際上是不存在的。
不可重複讀
程式T1讀一個行,程式T2修改或者刪除了該行且提交了程式。如果隨後T1再讀該行,則T1返回改變的行或者提示行不存在。
Phantom
程式T1執行一個有查詢條件的SQL語法S,返回結果集M。程式T2增加或修改資料使至少一新行滿足S的查詢條件,如果T1再執行S,則新的結果集和M是不同的。
通過設定 隔離級別決定哪種現象是可以接受的:.
Relationship between the 隔離級別 and phenomena
Phenomena | 隔離級別 | |||
0 | 1 or 10 | 2 or 20 | 3 or 30 | |
Dirty Read | yes | no | no | no |
Non Repeatable Read | yes | yes | no | no |
Phantom | yes | yes | yes | no |
並行鎖
下表顯示在並行操作中存在哪些共享鎖和排他鎖:
A transaction has.. | ||||||
For a table | For a row | For the database catalog | ||||
Another transaction can... | Exclusive lock | Shared lock | Exclusive lock | Shared lock | Exclusive lock | Shared lock |
Request an exclusive lock for the table | no | no | no | no | no | yes |
Request a shared lock for the table | no | yes | no | yes | no | yes |
Request an exclusive lock for any row in the table | no | no | - | - | no | yes |
Request an exclusive lock for the locked row | - | - | no | no | - | - |
Request an exclusive lock for a different row | - | - | yes | yes | - | - |
Request a shared lock for any row in the table | no | yes | - | - | no | yes |
Request a shared lock for the locked row | - | - | no | yes | - | - |
Request a shared lock for a different row | - | - | yes | yes | - | - |
Change the definition of the table in the database catalog | no | no | no | no | no | no |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/51862/viewspace-180645/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [鎖機制] 鎖相關查詢
- PHP 鎖機制PHP
- SQLite鎖機制SQLite
- Mysql鎖機制MySql
- Oracle鎖機制Oracle
- java鎖機制Java
- oracle 鎖機制Oracle
- SQL鎖機制SQL
- Mysql鎖機制分析MySql
- Enqueue 鎖定機制ENQ
- MS SQL鎖機制SQL
- oracle鎖機制研究Oracle
- mysql的鎖機制MySql
- 分散式鎖機制分散式
- maxsql和maxDBSQL
- Mysql中的鎖機制——MyISAM表鎖MySql
- synchronized鎖機制 之 程式碼塊鎖synchronized
- 資料庫鎖機制資料庫
- Mysql各種鎖機制MySql
- mysql myisam的鎖機制MySql
- mysql鎖機制總結MySql
- ORACLE鎖機制-轉載Oracle
- MySQL鎖機制與MVCCMySqlMVC
- oracle中的鎖機制Oracle
- ORACLE DML鎖定機制Oracle
- 鎖機制優化MySQL優化MySql
- sqlserver鎖機制(轉載)SQLServer
- Win10鎖屏介面沒有關機鍵Win10
- MySQL效能優化(九)-- 鎖機制之行鎖MySql優化
- 鎖機制到加鎖的必要性
- 【鎖機制】共享鎖、排它鎖、悲觀鎖、樂觀鎖、死鎖等等
- MySQL InnoDB 中的鎖機制MySql
- CAS 無鎖式同步機制
- 【MySQL】MySQL中的鎖機制MySql
- 【MySQL】InnoDB鎖機制之一MySql
- ORACLE鎖機制深入理解Oracle
- 【MySQL】InnoDB鎖機制之二MySql
- MongoDB的鎖機制 (Concurrency)MongoDB