日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL自增字段并发插入导致死锁

發布時間:2024/9/20 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL自增字段并发插入导致死锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL帶自增字段的表在并發插入時發生死鎖

問題

'int' object has no attribute 'encode'", <class 'mysql.connector.errors.InternalError'>, (1213, '1213 (40001): Deadlock found when trying to get lock; try restarting transaction', u'40001'))
  • 1

tbl_a有一個自增字段id(PRI,auto_increment),在python腳本中通過線程池并發執行insert into語句

insert into tbl_a (name) select name from tbl_b where name = '%s';
  • 1

發生死鎖錯誤:
(1213, ‘1213 (40001): Deadlock found when trying to get lock; try restarting transaction’, u’40001’))

原理

AUTO-INC

MySQL對于自增字段有一種鎖機制:AUTO-INC Locking,從MySQL用戶手冊可以看到:

InnoDB uses a special lock called the table-level AUTO-INC lock for inserts into tables with AUTO_INCREMENT columns. This lock is normally held to the end of the statement (not to the end of the transaction), to ensure that auto-increment numbers are assigned in a predictable and repeatable order for a given sequence of INSERT statements
  • 1

對于自增字段的插入會觸發表級的AUTO-INC鎖,這個鎖作用于語句的而不是事務(即語句執行完了鎖就會被釋放)。使用這種鎖是為了確保自增列的值的可預見性和可重復性。可預見性是說當一條insert語句作用于多行時,這些行的自增列基于第一行來說是可預見的;可重復執行是指基于語句的復制在slave重放時自增列的值與master的一致。
帶自增字段的表插入在并發數大于208以上可能出現很多死鎖

innodb_autoinc_lock_mode

在5.1.22版本之后,MySQL InnoDB存儲引擎提供了一種輕量級互斥量的自增長實現機制,這種機制大大提高了自增長值插入的性能。參數innodb_autoinc_lock_mode,用于控制向有auto_increment 列的表插入數據時相關鎖的行為,實現性能與安全(主從的數據一致性)的平衡。

  • 先對自增長字段的插入進行分類,如下:

    • insert-like:指所有的插入語句,如insert,replace,insert—select,replace—select,load data等。
    • simple insert:指能在插入之前就確定插入行數的語句。這些語句包含insert、replace等,需要注意的是:simple inserts不包含insert—on duplicater key update這類SQL語句,例如insert into t(name) values(‘test’)。
    • bulk inserts:指在插入之前不能確定得到插入行數的語句,如insert—select,replace–select,load data。
    • mixed-mode inserts:指插入中有一部分的值是自增長的,有一部分是確定的。例如insert into t(id,name) values(1,‘a’),(null,‘b’),(5,‘c’);
  • innodb_autoinc_lock_mode的取值范圍是0, 1, 2,默認值是1:

    • 0(traditonal模式):兼容MySQL5.1.22版本之前的自增長實現方式,即通過表鎖的AUTO-INC Locking方式。
    • 1(consecutive連續模式):對于simple inserts,該值會用互斥量去對內存中的計數器進行累加的操作,對于bulk inserts,還是使用傳統表鎖的AUTO-INC Locking方式。在這種配置下,如果不考慮回滾操作,對于自增長列的增長還是連續的,并且在這種方式下,statement-based方式的replication還是能很好地工作。需要注意的是,如果已經使用AUTO-INC Locking方式去產生自增長的值,而這時需要進行simple inserts的操作時,還是需要等待AUTO-INC Locking的釋放。
    • 2(interleaved交錯模式):在這個模式下,對于所有的insert-like自增長的產生都是通過互斥量,而不是通過AUTO-INC Locking的方式,顯然這時性能最高的方式。然而會帶來一定的問題。因為并發插入的存在,在每次插入時,自增長的值可能不是連續的。最重要的是,基于Statment-base replication會出現問題。因此,使用這個模式,任何時候都應該使用row-base replication,這樣才能保證最大的并發性能及replication主從數據的一致。
  • innodb_autoinc_lock_mode = 2 不安全,但是在 binlog_format=ROW,transaction-isolation=READ-COMMITTED , innodb_autoinc_lock_mode = 2 是非常安全的。

回顧

查了一下測試環境MySQL參數,innodb_autoinc_lock_mode果然是1。

mysql> show variables like 'innodb_autoinc_lock_mode'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | innodb_autoinc_lock_mode | 1 | +--------------------------+-------+ 1 row in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

不過因為是腳本工具,僅執行一次,將并發量改成10之后問題消失了。根本的解決方法還是將innodb_autoinc_lock_mode設置為2。

參考

http://www.xuchanggang.cn/archives/1087.html
https://blog.csdn.net/poxiaonie/article/details/72899975
https://www.cnblogs.com/JiangLe/p/6362770.html

總結

以上是生活随笔為你收集整理的MySQL自增字段并发插入导致死锁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩avav | 日本电车痴汉 | 欧美性生交xxxxx久久久 | 日日噜噜夜夜狠狠久久丁香五月 | 国产精品宾馆在线精品酒店 | 日本高清中文字幕 | 中文字幕在线观看的网站 | 在线日本中文字幕 | 青青草精品视频 | 4438x在线观看| 亚洲少妇网| 日本精品人妻无码免费大全 | 交hdsexvideos娇小| 蜜乳av一区二区三区 | 亚洲国产精彩视频 | 亚洲av无码电影在线播放 | 精品视频一区在线观看 | 亚洲精品1区2区3区 国产丝袜网站 | 色偷偷av| 精品一区二区三区毛片 | 久久久91精品 | 亚洲女人在线 | 欧美人与禽猛交乱配视频 | 欧美日韩精品一区二区三区 | 久久一区二区三区四区 | 日本成人午夜 | 欧美日一区二区 | 在线观看黄色网页 | 波多野结衣福利视频 | 人妻无码一区二区三区免费 | 精品一区二区三区久久 | 国产精品传媒在线 | 欧美日韩一区二区三区在线 | 强乱中文字幕av一区乱码 | 午夜影院啊啊啊 | 久久亚洲影院 | 91免费视频黄 | 毛片无遮挡高清免费观看 | 亚洲欧美日韩激情 | 高清黄色一级片 | 色婷婷中文 | 日本不卡一区二区 | 国产传媒中文字幕 | 97超碰人 | 夜色一区二区 | 欧美变态口味重另类在线视频 | 亚洲欧美一区二区三区 | 久久99精品国产.久久久久 | 嫩草视频在线观看视频 | 成人综合婷婷国产精品久久 | 夜噜噜| 亚洲精品久久久中文字幕痴女 | 都市激情 亚洲 | 日韩成年视频 | 日韩中文字幕一区二区 | 成人午夜视频网站 | 国产在线观看无码免费视频 | 成年人在线观看视频 | yw在线观看 | 高潮在线视频 | 黄色大视频 | 女人张开双腿让男人捅 | 欧美激情动态图 | 91成人免费在线观看 | 黄在线网站 | 成年人免费毛片 | 少妇毛片| 色骚综合| 亚洲蜜桃精久久久久久久久久久久 | 爱爱视频在线看 | 看片国产 | 性生活视屏| 日本网站在线播放 | 91麻豆精品91久久久久同性 | 国产精品久久久久久久一区探花 | 日韩精品在线播放 | 中文字幕线人 | 亚洲啪视频 | 欧美日韩91 | 欧美亚洲激情视频 | 91亚州 | 偷偷操不一样的久久 | 午夜福利电影一区 | 青青草在线免费视频 | 国产视频精品在线 | 黄色在线观看www | 国内少妇精品 | 91av久久| 麻豆出品 | 欧美特级黄色录像 | 成年人黄色小视频 | 国产视频自拍一区 | 亚洲女人的天堂 | 日韩亚洲欧美一区 | 91日韩在线 | 丝袜福利视频 | 日韩乱码人妻无码中文字幕 | 国产亚洲色婷婷久久99精品91 | 精产国品一区二区三区 |