Mysql資料庫鎖 表級鎖分析

2021-08-01 02:17:50 字數 2699 閱讀 5184

按操作的型別分:

讀鎖(共享鎖):針對同乙份資料,多個讀操作可以同時進行而不會相互影響。

寫鎖(排它鎖):當前寫操作沒有完成,會阻斷其它的寫鎖和讀鎖。

按對資料操作的粒度分:

表鎖(偏讀):整個表被鎖,偏向於myisam引擎,開銷小,加鎖快,無死鎖;

鎖定粒度大,發生鎖衝突的概率最高,併發度最低。 行鎖

表級鎖分析

1、建表語句:

create table `userlock` (

`id` int(8) not null,

`name` varchar(20) default null,

primary key (`id`)

) engine=myisam default charset=utf8;

create table `

booklock

` (`id` int(8) not null,

`name` varchar(20) default null,

primary key (`id`)

) engine=myisam default charset=utf8;

插入資料:

insert into `test`.`userlock

` (`name`, `id`) values ('ba', '1');

insert into `test`.`userlock

` (`name`, `id`) values ('ca', '2');

insert into `test`.`bookl

ock` (`name`, `id`) values ('ba', '1');

insert into `test`.`bookl

ock` (`name`, `id`) values ('ca', '2');

2、手動增加表鎖

lock table 表名字1 read(write),表名字2 read(write)。。。

3、檢視表上加過的鎖

in_use=0說明表沒有加鎖

4、給 booklock表加讀鎖,給userlock加寫鎖

5.釋放表鎖

unlock tables;

6.表鎖的分析比較

讀鎖(共享鎖)

寫鎖(排它鎖)

給userlock新增寫鎖

(1)當前session對鎖定表進行查詢、更新、插入都不會出錯

當前session對其它沒有鎖定的表查詢,更新、插入都會出錯

(2)其它session對鎖定的表的查詢(讀、寫都會被阻塞)被阻塞,需要等待鎖被釋放

其它session對沒有被鎖定的表進行增刪改查都不會出錯。

總結

讀鎖會阻塞寫(其它session不能寫被鎖定的表),但是不會阻塞

讀;而寫鎖則會把讀和寫都阻塞(其它session不能讀寫被鎖定的

表)。

7.使用show status like 'table%';

通過檢查table_locks_immediate和table_locks_waited狀態量來分析系統上的表鎖定:

table_locks_immediate:產生表級鎖定的次數,表示可以立即獲取鎖的查詢次數,每立即獲取鎖一次值加1;

table_locks_waited:出現表級鎖定爭用而發生等待的次數(不能立即獲取鎖的次數,每等待一次鎖值加1),此值高則說明存在著較嚴重的表級鎖爭用的情況。

myisam的讀寫鎖排程是寫優先,這也是myisam不適合做寫為主的表的引擎。因為寫鎖後,其它執行緒不能做任何操作,大量的更新會使查詢很難得到鎖,從而造成永遠阻塞。

Mysql 資料庫表鎖 行鎖

偏向myisam,開銷小,加鎖快,無死鎖,鎖粒度大,發生鎖衝突的概率較高,併發度較低。測試表,用於表加鎖後的讀寫可能性驗證 create table if not exists table lock id int 10 primary key not null auto increment comm...

MySQL資料庫事務中的行級鎖,表級鎖,頁級鎖

鎖定用於確保事務完整性和資料庫一致性。鎖定可以防止使用者讀取其他使用者正在更改的資料,並防止多個使用者同時更改相同的資料。如果不使用鎖定,資料庫中的資料可能在邏輯上變得不正確,而針對這些資料進行查詢可能會產生想不到的結果。在電腦科學中,鎖是在執行多執行緒時用於強行限制資源訪問的同步機制,即用於在併發...

詳解MySQL資料庫中的 全域性鎖 表級鎖 行級鎖

在軟體開發中,程式在高併發的情況下,為了保證一致性或者說安全性,我們通常都會通過加鎖的方式來解決,在 mysql 資料庫中同樣有這樣的問題,一方面為了最大程度的利用資料庫的併發訪問,另一方面又需要保證每個使用者能以一致的方式讀取和修改資料,就引入了鎖機制。全域性鎖是粒度最大的鎖,基本上也使用不上,就...