<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
該鎖會鎖定整張表,它是MySQL中最基本的鎖策略,並不依賴於儲存引擎(不管你是MySQL的什麼儲存引擎,對於表鎖的策略都是一樣的),並且表鎖是開銷最小的策略(因為粒度比較大)。由於表級鎖一次會將整個表鎖定,所以可以很好的避免死鎖問題。當然,鎖的粒度大所帶來最大的負面影響就是出現鎖資源爭用的概率也會最高,導致並行率大打折扣。
InnoDB儲存引擎
在對某個表執行SELECT、INSERT、DELETE、UPDATE 語句時,InnoDB儲存引擎是不會為這個表新增表級別的S鎖或者X鎖的。
一般情況下,不會使用InnoDB儲存引擎提供的表級別的S鎖和X鎖。只會在一些特殊情況下,比方說崩潰恢復過程中用到。
InnoDB儲存引擎下,手動新增表t的S鎖或X鎖:
lock tables t read -- S鎖 lock tables t write -- X鎖
不過儘量避免在使用InnoDB儲存引擎的表上使用LOCK TABLES這樣的手動鎖表語句,它們並不會提供什麼額外的保護,只是會降低並行能力而已。
MyISAM儲存引擎
MyISAM 的表級鎖有2種模式,分別為:表共用讀鎖(S鎖) 和 表獨佔寫鎖(X鎖)。
表共用讀鎖(S鎖):當開啟事務A 獲取表共用讀鎖, 則其他新開啟事務只能讀取資料,不能對操作的同張表進行更新或者插入操作,刪除操作,
表獨佔寫鎖(X鎖):當開啟事務A 獲取獨佔寫鎖,則其他新開啟的事物 讀取,新增,修改,刪除 等操作會處於阻塞狀態, 只到 事務A 主動釋放鎖。
MyISAM儲存引擎下,手動新增表t的S鎖或X鎖:
lock tables t read -- S鎖 lock tables t write -- X鎖
可通過 show status like 'tables%'; 命令來 檢視 mysql 內部表級鎖定的情況:
意向鎖概述
InnoDB支援多粒度鎖(multiple granularity locking),它允許行級鎖與表級鎖共存,而意向鎖就是其中的一種表鎖。
==意向鎖的存在是為了協調行鎖和表鎖的關係,支援多粒度(表鎖與行鎖)的鎖並存。==
意向鎖是一種不與行級鎖衝突的表級鎖,這一點非常重要。
意向鎖分為兩種:
select column from table ... lock in share mode; --
select column from table ... for mode; --
申請意向鎖的動作是資料庫完成的,就是說,事務A申請一行的行鎖的時候,資料庫會自動先開始申請表的意向鎖,不需要我們程式設計師使用程式碼來申請。
意向鎖解決的問題
事務A鎖住了表中的一行,讓這一行只能讀,不能寫。之後,事務B申請整個表的寫鎖。
如果事務B申請成功,那麼理論上它就能修改表中的任意一行,這與A持有的行鎖是衝突的。
資料庫需要避免這種衝突,就是說要讓B的申請被阻塞,直到A釋放了行鎖。於是就有了意向鎖。
事務B只需檢查表上的意向鎖,發現表上有意向共用鎖IS,說明表中有些行被共用行鎖鎖住了,因此,事務B申請表的寫鎖會被阻塞。
在資料表的場景中,如果我們給某一行資料加上了排它鎖,資料庫會自動給更大一級的空間,比如資料頁或資料表加上意向鎖,告訴其他人這個資料頁或資料表已經有人上過排它鎖了,這樣當其他人想要獲取資料表排它鎖的時候,只需要瞭解是否有人已經獲取了這個資料表的意向排他鎖即可。
意向鎖的並行性
開啟一個事務,並給查詢記錄加上X鎖:此時針對查詢的記錄還加上了一個表級別的共用排它鎖(IX)
再開啟一個事務,查詢不同記錄,並給查詢記錄加上X鎖:表級別的 IX共用排它鎖加鎖成功,因為兩次事務加的IX是針對不同的記錄的
結論:
自增鎖是MySQL一種特殊的鎖,如果表中存在自增欄位,當向表中插入資料時,MySQL便會自動維護一個表級的自增鎖。
在執行插入語句時就在表級別加一個AUTO-INC鎖,然後為每條待插入記錄的AUTO_INCREMENT修飾的列分配遞增的值,在該語句執行結束後,再把AUTO-INC鎖釋放掉。
一個事務在持有AUTO-INC鎖的過程中,其他事務的插入語句都要被阻塞,可以保證一個語句中分配的遞增值是連續的。也正因為此,其並行性顯然並不高,當我們向一個有AUTO_INCREMENT關鍵字的主鍵插入值的時候,每條語句都要對這個表鎖進行競爭,這樣的並行潛力其實是很低下的。
所以 innodb 引擎通過設定 innodb_autoinc_lock_mode 的值來提供不同的鎖定機制,來顯著提高sQL語句的可伸縮性和效能。
innodb_autoinc_lock_mode有三個取值:0,1,2
tradition(innodb_autoinc_lock_mode = 0) 模式:==傳統==鎖定模式
consecutive(innodb_autoinc_lock_mode = 1) 模式:==連續==鎖定模式
interleaved(innodb_autoinc_lock_mode = 2) 模式:==交錯==鎖定模式
在對某個表執行一些諸如ALTER TABLE、DROP TABLE 這類的 DDL 語句時,其他事務對這個表並行執行諸如 SELECT、INSERT、DELETE、UPDATE的語句會發生阻塞。
同理,某個事務中對某個表執行SELECT、INSERT、DELETE、UPDATE語句時,在其他對談中對這個表執行DDL語句也會發生阻塞。
這個過程其實是通過在server層使用一種稱之為後設資料鎖(英文名: Metadata Locks,簡稱MDL)結構來實現的。
MySQL5.5引入了meta data lock,簡稱MDL鎖,屬於表鎖範疇。MDL的作用是,保證讀寫的正確性。比如,如果一個查詢正在遍歷一個表中的資料,而執行期間另一個執行緒對這個表結構做變更,增加了一列,那麼查詢執行緒拿到的結果跟表結構對不上,肯定是不行的。
因此,當對一個表做增刪改查操作的時候,加MDL讀鎖;當要對錶做結構變更操作的時候,加MDL寫鎖。
==讀鎖之間不互斥,因此你可以有多個執行緒同時對一張表增刪改查。讀鎖和寫鎖之間、寫鎖和寫鎖之間是互斥的==,用來保證變更表結構操作的安全性,解決了 DML 和 DDL 操作之間的一致性問題。MDL鎖不需要顯式使用,在存取一個表的時候會被自動加上。
以上就是MySQL表級鎖使用說明的詳細內容,更多關於MySQL 表級鎖的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45