程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MySQL數據庫優化(五):鎖

MySQL數據庫優化(五):鎖

編輯:關於MYSQL數據庫

  1 鎖機制

  當前MySQL已經支持 ISAM, MyISAM, MEMORY (HEAP) 類型表的表級鎖了,BDB 表支持頁級鎖,InnoDB 表支持行級鎖。很多時候,可以通過經驗來猜測什麼樣的鎖對應用程序更合適,不過通常很難說一個鎖比別的更好,這全都要依據應用程序來決定,不同的地方可能需要不同的鎖。

  想要決定是否需要采用一個支持行級鎖的存儲引擎,就要看看應用程序都要做什麼,其中的查詢、更新語句是怎麼用的。例如,很多的web應用程序大量的做查詢,很少刪除,主要是基於索引的更新,只往特定的表中插入記錄。采用基本的MySQL MyISAM 表就很合適了。

  MySQL中對表級鎖的存儲引擎來說是釋放死鎖的。避免死鎖可以這樣做到:在任何查詢之前先請求鎖,並且按照請求的順序鎖表。

  MySQL中用於 WRITE(寫) 的表鎖的實現機制如下:

  如果表沒有加鎖,那麼就加一個寫鎖。

  否則的話,將請求放到寫鎖隊列中。

  MySQL中用於 READ(讀) 的表鎖的實現機制如下:

  如果表沒有加寫鎖,那麼就加一個讀鎖。

  否則的話,將請求放到讀鎖隊列中。

  當鎖釋放後,寫鎖隊列中的線程可以用這個鎖資源,然後才輪到讀鎖隊列中的線程。

  這就是說,如果表裡有很多更新操作的話,那麼 SELECT 必須等到所有的更新都完成了之後才能開始。

  從 MySQL 3.23.33 開始,可以通過狀態變量 Table_locks_waited 和 Table_locks_immediate 來分析系統中的鎖表爭奪情況:

  mysql>SHOWSTATUSLIKE'Table%';
  +-----------------------+---------+
  |Variable_name|Value|
  +-----------------------+---------+
  |Table_locks_immediate|1151552|
  |Table_locks_waited|15324|
  +-----------------------+---------+

  • 首頁
  • 上一頁
  • 1
  • 2
  • 3
  • 4
  • 下一頁
  • 尾頁
  • 共4頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved