如何開啟和關閉MySQL 間隙鎖(gap lock)
MySQL InnoDB支援三種行鎖定方式:
行鎖(Record Lock):鎖直接加在索引記錄上面。
間隙鎖(Gap Lock):鎖加在不存在的空閒空間,可以是兩個索引記錄之間,也可能是第一個索引記錄之前或最後一個索引之後的空間。
Next-Key Lock:行鎖與間隙鎖組合起來用就叫做Next-Key Lock。
當我們用範圍條件而不是相等條件檢索資料,並請求共享或排他鎖時,InnoDB會給符合條件的已有資料記錄的索引項加鎖;對於鍵值在條件範圍內但並不存在的記錄,
叫做“間隙(GAP)”,InnoDB也會對這個“間隙”加鎖,這種鎖機制就是所謂的間隙鎖。
間隙鎖在InnoDB的唯一作用就是防止其它事務的插入操作,以此來達到防止幻讀的發生,所以間隙鎖不分什麼共享鎖與排它鎖。
要禁止間隙鎖的話,可以把隔離級別降為讀已提交,或者開啟引數innodb_locks_unsafe_for_binlog。
檢視是否開啟間隙鎖:
mysql> show variables like 'innodb_locks_unsafe_for_binlog';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_locks_unsafe_for_binlog | OFF |
+--------------------------------+-------+
innodb_locks_unsafe_for_binlog:預設值為0,即啟用gap lock。
這個引數最主要的作用就是控制innodb是否對gap加鎖。
但是,這一設定變更並不影響外來鍵和唯一索引(含主鍵)對gap進行加鎖的需要。
開啟innodb_locks_unsafe_for_binlog的REPEATABLE-READ事務隔離級別,很大程度上已經蛻變成了READ-COMMITTED。
關閉間隙鎖(gap lock)方法:
在my.cnf裡面的[mysqld]新增
[mysqld]
innodb_locks_unsafe_for_binlog = 1
重啟MySQL後生效.
行鎖(Record Lock):鎖直接加在索引記錄上面。
間隙鎖(Gap Lock):鎖加在不存在的空閒空間,可以是兩個索引記錄之間,也可能是第一個索引記錄之前或最後一個索引之後的空間。
Next-Key Lock:行鎖與間隙鎖組合起來用就叫做Next-Key Lock。
當我們用範圍條件而不是相等條件檢索資料,並請求共享或排他鎖時,InnoDB會給符合條件的已有資料記錄的索引項加鎖;對於鍵值在條件範圍內但並不存在的記錄,
叫做“間隙(GAP)”,InnoDB也會對這個“間隙”加鎖,這種鎖機制就是所謂的間隙鎖。
間隙鎖在InnoDB的唯一作用就是防止其它事務的插入操作,以此來達到防止幻讀的發生,所以間隙鎖不分什麼共享鎖與排它鎖。
要禁止間隙鎖的話,可以把隔離級別降為讀已提交,或者開啟引數innodb_locks_unsafe_for_binlog。
檢視是否開啟間隙鎖:
mysql> show variables like 'innodb_locks_unsafe_for_binlog';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_locks_unsafe_for_binlog | OFF |
+--------------------------------+-------+
innodb_locks_unsafe_for_binlog:預設值為0,即啟用gap lock。
這個引數最主要的作用就是控制innodb是否對gap加鎖。
但是,這一設定變更並不影響外來鍵和唯一索引(含主鍵)對gap進行加鎖的需要。
開啟innodb_locks_unsafe_for_binlog的REPEATABLE-READ事務隔離級別,很大程度上已經蛻變成了READ-COMMITTED。
關閉間隙鎖(gap lock)方法:
在my.cnf裡面的[mysqld]新增
[mysqld]
innodb_locks_unsafe_for_binlog = 1
重啟MySQL後生效.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2141515/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【鎖】MySQL間隙鎖MySql
- mysql innodb間隙鎖示例MySql
- MySQL 行級鎖之 間隙鎖、臨鍵鎖MySql
- Mysql next-locking 間隙鎖MySql
- MySQL行鎖、表鎖、間隙鎖,你都瞭解嗎MySql
- MySQL記錄鎖、間隙鎖、臨鍵鎖小案例演示MySql
- 【MySQL】gap lock 淺析MySql
- 一文搞懂MySQL行鎖、表鎖、間隙鎖詳解MySql
- mysql的啟動和關閉MySql
- 瞭解下Mysql的間隙鎖及產生的原因MySql
- MySQL Windows下關閉和啟動MySqlWindows
- MySQL innodb 的間隙鎖定(next-key locking)MySql
- 詳解 MySql InnoDB 中的三種行鎖(記錄鎖、間隙鎖與臨鍵鎖)MySql
- Mysql加鎖過程詳解(8)-理解innodb的鎖(record,gap,Next-Key lock)MySql
- MySQL啟動和關閉命令總結MySql
- MySQL 線上開啟&關閉GTID模式MySql模式
- InnoDB常用鎖總結(行鎖、間隙鎖、臨鍵鎖、表鎖)
- Mac新手使用技巧——如何在Mac上開啟和關閉螢幕使用時間Mac
- 面試突擊:MVCC 和間隙鎖有什麼區別?面試MVC
- Mysql加鎖過程詳解(9)-innodb下的記錄鎖,間隙鎖,next-key鎖MySql
- SElinux的開啟和關閉Linux
- centos:開啟和關閉selinuxCentOSLinux
- MySQL 多例項啟動和關閉指令碼MySql指令碼
- 【Mysql】metadata lock鎖MySql
- MYSQL 鎖:metadata lockMySql
- LevelDB C++教程: 如何開啟和關閉資料庫C++資料庫
- 教你如何開啟/關閉ubuntu防火牆Ubuntu防火牆
- 關閉和開啟歸檔日誌
- 批處理開啟和關閉OracleOracle
- mysql innodb lock鎖之record lock之一MySql
- mysql啟動和關閉外來鍵約束MySql
- MySQL 叢集的安全關閉和重啟方法MySql
- MySQL服務開啟關閉及登陸- 2MySql
- mysql表鎖與lock tablesMySql
- Mysql加鎖過程詳解(7)-初步理解MySQL的gap鎖MySql
- lock鎖和monitor.enter鎖
- MySQL 共享鎖 (lock in share mode),排他鎖 (for update)MySql
- Android 書本開啟和關閉動畫Android動畫