核心提示:版本,其中可以一個寫操作,同時有許多讀取操作。這明數據庫或表支持數據依賴的不同視圖,取決于訪問何時開始。其它共同的術語是“時間跟蹤”、“寫復制”或者“按需復制”。
不同于行級或頁級鎖定的選項:
· 版本,其中可以一個寫操作,同時有許多讀取操作。這明數據庫或表支持數據依賴的不同視圖,取決于訪問何時開始。其它共同的術語是“時間跟蹤”、“寫復制”或者“按需復制”。
· 按需復制在許多情況下優先于頁級或行級鎖定。然而,在最壞的情況下,它可能比使用常規鎖定使用多的內存。
· 除了行級鎖定外,你可以使用應用程序級鎖定,例如在MySQL中使用GET_LOCK和RELEASE_LOCK。這些是建議性鎖定,它們只能在運行良好的應用程序中工作。
為達到最高鎖定速度,除InnoDB 和BDB 之外,對所有存儲引擎,MySQL使用表鎖定。對于InnoDB 和BDB 表,如果你用LOCK TABLES顯式鎖定表,MySQL只使用表鎖定;如果你不使用LOCK TABLES,因為 InnoDB 使用自動行級鎖定而BDB 使用頁級鎖定來保證事務隔離。
但是對于大表,對于大多數應用程序,表鎖定比行鎖定更好,但存在部分缺陷。表鎖定使許多線程同時從一個表中進行讀取操作,但如果一個線程想要對表進行寫操作,它必須首先獲得獨占訪問。更新期間,所有其它想要訪問該表的線程必須等待直到更新完成。
表更新通常情況認為比表檢索更重要,因此給予它們更高的優先級。這應確保更新一個表的活動不能“餓死”,即使該表上有很繁重的SELECT 活動。
表鎖定在這種情況下會造成問題,例如當線程正等待,因為硬盤已滿并且在線程可以處理之前必須有空閑空間。在這種情況下,所有想要訪問出現問題的表的線程也被設置成等待狀態,直到有更多的硬盤空間可用。
表鎖定在下面的情況下也存在問題:
· 一個客戶發出長時間運行的查詢。
· 然后,另一個客戶對同一個表進行更新。該客戶必須等待直到SELECT完成。
· 另一個客戶對同一個表上發出了另一個 SELECT 語句。因為UPDATE比 SELECT 優先級高,該SELECT 語句等待UPDATE完成,并且等待第1個 SELECT 完成。
Tag: 設計公司 | 網頁設計公司 | 廣告公司 | 網站設計 | 平面設計 | 互動媒體 | 網頁設計 | Web design | Website design | design house | 媒體公司 | Iphone app | 程式設計 | Flash 網頁 | Flash game | 動畫設計 | 後期製作 | 網上商店 | 網上宣傳 | 網頁服務 |
留言列表