<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      MYSQL解鎖與鎖表的案例詳細說明

      [摘要]相對其他數據庫而言,MySQL的鎖機制比較簡單,其最顯著的特點是不同的存儲引擎支持不同的鎖機制MySQL鎖概述 相對其他數據庫而言,MySQL的鎖機制比較簡單,其最顯著的特點是不同的存儲引擎支持不同的鎖機制。比如,MyISAM和MEMORY存儲引擎采用的是表級鎖(table-level locki...
      相對其他數據庫而言,MySQL的鎖機制比較簡單,其最顯著的特點是不同的存儲引擎支持不同的鎖機制

      MySQL鎖概述

      相對其他數據庫而言,MySQL的鎖機制比較簡單,其最顯著的特點是不同的存儲引擎支持不同的鎖機制。比如,MyISAM和MEMORY存儲引擎采用的是表級鎖(table-level locking);BDB存儲引擎采用的是頁面鎖(page-level locking),但也支持表級鎖;InnoDB存儲引擎既支持行級鎖(row-level locking),也支持表級鎖,但默認情況下是采用行級鎖。

      MySQL這3種鎖的特性可大致歸納如下。

      開銷、加鎖速度、死鎖、粒度、并發性能

      l 表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖沖突的概率最高,并發度最低。
      l 行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖沖突的概率最低,并發度也最高。
      l 頁面鎖:開銷和加鎖時間界于表鎖和行鎖之間;會出現死鎖;鎖定粒度界于表鎖和行鎖之間,并發度一般。

      MyISAM表鎖

      MyISAM存儲引擎只支持表鎖,這也是MySQL開始幾個版本中唯一支持的鎖類型。隨著應用對事務完整性和并發性要求的不斷提高,MySQL才開始開發基于事務的存儲引擎,后來慢慢出現了支持頁鎖的BDB存儲引擎和支持行鎖的InnoDB存儲引擎(實際 InnoDB是單獨的一個公司,現在已經被Oracle公司收購)。但是MyISAM的表鎖依然是使用最為廣泛的鎖類型。本節將詳細介紹MyISAM表鎖的使用。
      查詢表級鎖爭用情況

      可以通過檢查table_locks_waited和table_locks_immediate狀態變量來分析系統上的表鎖定爭奪:
      mysql> show status like 'table%';
      +-----------------------+-------+
      Variable_name Value
      +-----------------------+-------+
      Table_locks_immediate 2979
      Table_locks_waited 0
      +-----------------------+-------+
      2 rows in set (0.00 sec))
      如果Table_locks_waited的值比較高,則說明存在著較嚴重的表級鎖爭用情況。

      獲取InnoDB行鎖爭用情況

      可以通過檢查InnoDB_row_lock狀態變量來分析系統上的行鎖的爭奪情況:
      mysql> show status like 'innodb_row_lock%';
      +-------------------------------+-------+
      Variable_name Value
      +-------------------------------+-------+
      InnoDB_row_lock_current_waits 0
      InnoDB_row_lock_time 0
      InnoDB_row_lock_time_avg 0
      InnoDB_row_lock_time_max 0
      InnoDB_row_lock_waits 0
      +-------------------------------+-------+
      5 rows in set (0.01 sec)
      如果發現鎖爭用比較嚴重,如InnoDB_row_lock_waits和InnoDB_row_lock_time_avg的值比較高,還可以通過

      解鎖

      第一種

      show processlist;

      找到鎖進程,kill id ;

      第二種

      mysql>UNLOCK TABLES;

      鎖表

      鎖定數據表,避免在備份過程中,表被更新

      mysql>LOCK TABLES tbl_name READ;

      為表增加一個寫鎖定:

      mysql>LOCK TABLES tbl_name WRITE;

      【相關推薦】

      1. Mysql免費視頻教程

      2. 如何提高百萬條的數據庫查詢速度

      3. 5個經常犯的數據庫設計錯誤

      4. Mysql原先內容不改變并在后面增加內容的sql語句詳解

      5. 對MySQL常用SQL語句寫法總結

      以上就是MYSQL解鎖和鎖表的實例詳解的詳細內容,更多請關注php中文網其它相關文章!


      學習教程快速掌握從入門到精通的SQL知識。




      日韩精品一区二区三区高清