欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL中InnoDB的間隙鎖問題

 更新時(shí)間:2015年07月03日 11:56:47   投稿:goldensun  
這篇文章主要介紹了MySQL中InnoDB的間隙鎖問題,提醒用戶注意死鎖情況,需要的朋友可以參考下

 在為一個(gè)客戶排除死鎖問題時(shí)我遇到了一個(gè)有趣的包括InnoDB間隙鎖的情形。對(duì)于一個(gè)WHERE子句不匹配任何行的非插入的寫操作中,我預(yù)期事務(wù)應(yīng)該不會(huì)有鎖,但我錯(cuò)了。讓我們看一下這張表及示例UPDATE。
 

mysql> SHOW CREATE TABLE preferences \G
*************************** 1. row ***************************
    Table: preferences
Create Table: CREATE TABLE `preferences` (
 `numericId` int(10) unsigned NOT NULL,
 `receiveNotifications` tinyint(1) DEFAULT NULL,
 PRIMARY KEY (`numericId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT COUNT(*) FROM preferences;
+----------+
| COUNT(*) |
+----------+
|    0 |
+----------+
1 row in set (0.01 sec)
mysql> UPDATE preferences SET receiveNotifications='1' WHERE numericId = '2';
Query OK, 0 rows affected (0.01 sec)
Rows matched: 0 Changed: 0 Warnings: 0

InnoDB狀態(tài)顯示這個(gè)UPDATE在主索引記錄上持有了一個(gè)X鎖:
 
---TRANSACTION 4A18101, ACTIVE 12 sec
2 lock struct(s), heap size 376, 1 row lock(s)
MySQL thread id 3, OS thread handle 0x7ff2200cd700, query id 35 localhost msandbox
Trx read view will not see trx with id >= 4A18102, sees < 4A18102
TABLE LOCK table `test`.`preferences` trx id 4A18101 lock mode IX
RECORD LOCKS space id 31766 page no 3 n bits 72 index `PRIMARY` of table `test`.`preferences` trx id 4A18101 lock_mode X


這是為什么呢,Heikki在其bug報(bào)告中做了解釋,這很有意義,我知道修復(fù)起來(lái)很困難,但略帶厭惡地我又希望它能被差異化處理。為完成這篇文章,讓我證明下上面說到的死鎖情況,下面中mysql1是第一個(gè)會(huì)話,mysql2是另一個(gè),查詢的順序如下:
 

mysql1> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql1> UPDATE preferences SET receiveNotifications='1' WHERE numericId = '1';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0
mysql2> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql2> UPDATE preferences SET receiveNotifications='1' WHERE numericId = '2';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0
mysql1> INSERT INTO preferences (numericId, receiveNotifications) VALUES ('1', '1'); -- This one goes into LOCK WAIT
mysql2> INSERT INTO preferences (numericId, receiveNotifications) VALUES ('2', '1');
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

現(xiàn)在你看到導(dǎo)致死鎖是多么的容易,因此一定要避免這種情況——如果來(lái)自于事務(wù)的INSERT部分導(dǎo)致非插入的寫操作可能不匹配任何行的話,不要這樣做,使用REPLACE INTO或使用READ-COMMITTED事務(wù)隔離。

相關(guān)文章

  • 詳解如何利用amoeba(變形蟲)實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)讀寫分離

    詳解如何利用amoeba(變形蟲)實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)讀寫分離

    這篇文章主要介紹了詳解如何利用amoeba(變形蟲)實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)讀寫分離,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • MySQL5.5版本安裝與安裝失敗詳細(xì)講解

    MySQL5.5版本安裝與安裝失敗詳細(xì)講解

    MySQL是一款安全、跨平臺(tái)、高效的,并與PHP、Java等主流編程語(yǔ)言緊密結(jié)合的數(shù)據(jù)庫(kù)系統(tǒng),下面這篇文章主要給大家介紹了關(guān)于MySQL5.5版本安裝與安裝失敗詳細(xì)講解的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • mysqld_safe啟動(dòng)腳本源碼閱讀、分析

    mysqld_safe啟動(dòng)腳本源碼閱讀、分析

    這篇文章主要介紹了mysqld_safe啟動(dòng)腳本源碼閱讀、分析,mysqld_safe是一個(gè)帶有安全特性的啟動(dòng)腳本,使用Shell語(yǔ)言編寫,需要的朋友可以參考下
    2014-07-07
  • Mysql的水平分表與垂直分表的講解

    Mysql的水平分表與垂直分表的講解

    今天小編就為大家分享一篇關(guān)于Mysql的水平分表與垂直分表的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • Linux下安裝MySQL5.7.19問題小結(jié)

    Linux下安裝MySQL5.7.19問題小結(jié)

    第一次在自己虛機(jī)上安裝mysql 中間碰到很多問題 在這里記下來(lái),特此分享到腳本之家平臺(tái)供大家參考
    2017-08-08
  • MySQL數(shù)據(jù)庫(kù)基礎(chǔ)入門之常用命令小結(jié)

    MySQL數(shù)據(jù)庫(kù)基礎(chǔ)入門之常用命令小結(jié)

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)基礎(chǔ)入門之常用命令,結(jié)合實(shí)例形式分析了MySQL數(shù)據(jù)庫(kù)管理、備份、日志常用操作命令與使用注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • macOS Sierra安裝Apache2.4+PHP7.0+MySQL5.7.16

    macOS Sierra安裝Apache2.4+PHP7.0+MySQL5.7.16

    這篇文章主要為大家詳細(xì)介紹了macOS Sierra安裝Apache2.4+PHP7.0+MySQL5.7.16的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • MySQL 數(shù)據(jù)類型選擇原則

    MySQL 數(shù)據(jù)類型選擇原則

    MySQL支持大量的數(shù)據(jù)類型,選擇正確的類型對(duì)性能十分關(guān)鍵。本篇介紹了MySQL 的數(shù)據(jù)類型選擇原則,可以根據(jù)這些基本的原則確定數(shù)據(jù)表字段的具體數(shù)據(jù)類型。
    2021-05-05
  • Spark SQL常見4種數(shù)據(jù)源詳解

    Spark SQL常見4種數(shù)據(jù)源詳解

    這篇文章主要介紹了Spark SQL常見4種數(shù)據(jù)源(詳細(xì)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2019-06-06
  • 使用Jmeter連接Mysql圖文教程

    使用Jmeter連接Mysql圖文教程

    Apache JMeter是Apache組織開發(fā)的基于Java的壓力測(cè)試工具。用于對(duì)軟件做壓力測(cè)試,它最初被設(shè)計(jì)用于Web應(yīng)用測(cè)試,但后來(lái)擴(kuò)展到其他測(cè)試領(lǐng)域。今天我們來(lái)看看如何使用Jmeter連接Mysql
    2016-12-12

最新評(píng)論