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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql AUTO_INC 是否锁_AUTO-INC锁的一些思考

發布時間:2023/12/2 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql AUTO_INC 是否锁_AUTO-INC锁的一些思考 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

AUTO-INC鎖是一個表級鎖,這種鎖是作用于語句的而不是事務(即語句執行完了鎖就會被釋放)。innodb_autoinc_lock_mode用于控制AUTO-INC的鎖表邏輯,可能的取值為0,1,2.

innodb_autoinc_lock_mode=0?(每次都會產生表鎖)

不管是對于simple inserts(insert into values),bulk inserts(insert into select,replace select),mixed-mode inserts(insert into on deplicate key update,insert into values (1,'test'),(null,'test2'))類型的sql語句,每條sql語句都會產生auto-inc表鎖,每一次產生新的行記錄就會進行獲取一個auto_increment值。此種情況下產生的insert_id是連續的,但是并發性較差。

innodb_autoinc_lock_mode=1?(默認,可預判行數時使用新方式,不可確定數量時使用表鎖,對于simple insert會獲得批量的鎖,保證連續插入)

保證同一條insert語句中新插入的auto_increment id都是連續的,并發程度較高,這種模式下:

“simple inserts”:直接通過分析語句,獲得要插入的數量,然后一次性分配足夠的auto_increment id,只會將整個分配的過程鎖住。

“bulk inserts”:因為不能確定插入的數量,因此使用和以前的模式相同的表級鎖定。

“mixed-mode inserts”:直接分析語句,獲得最壞情況下需要插入的數量,然后一次性分配足夠的auto_increment id,只會將整個分配的過程鎖住。需要注意的是,這種方式下,會分配過多的id,而導致”浪費“。比如INSERT INTO t1 (c1,c2) VALUES (1,'a'), (NULL,'b'), (5,'c'), (NULL,'d');會一次性的分配5個id,而不管用戶是否指定了部分id;INSERT ... ON DUPLICATE KEY UPDATE一次性分配,而不管將來插入過程中是否會因為duplicate key而僅僅執行update操作。

innodb_autoinc_lock_mode=2?(不會鎖表,來一個sql則處理一個,會出現多個sql產生的insert_id相互交叉的現象)

這種模式是來一個分配一個,而不會鎖表,這種方式并發性最高,只會鎖住分配id的過程,和innodb_autoinc_lock_mode = 1的區別在于,不會預分配多個,這種方式并發性最高。但是在replication中當binlog_format為statement-based時(簡稱SBR statement-based replication)存在問題,因為是來一個分配一個,這樣當并發執行時,“bulk inserts”在分配的時會同時向其他的INSERT分配,會出現主從不一致(從庫執行結果和主庫執行結果不一樣),因為binlog只會記錄開始的insert id。雖說 innodb_autoinc_lock_mode = 2 不安全,但是在binlog_format=ROW,transaction-isolation=READ-COMMITTED , innodb_autoinc_lock_mode = 2?是非常安全的。

總結

以上是生活随笔為你收集整理的mysql AUTO_INC 是否锁_AUTO-INC锁的一些思考的全部內容,希望文章能夠幫你解決所遇到的問題。

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