多个会话对表加表级读锁和表级写锁后的操作权限分析(表级读锁+表级写锁)
生活随笔
收集整理的這篇文章主要介紹了
多个会话对表加表级读锁和表级写锁后的操作权限分析(表级读锁+表级写锁)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【0】README: 不論是加讀鎖還是寫鎖,必須要等到其他數據庫連接關閉后才可以進行;?
【1】添加表級讀鎖
1.1)多會話執行的時序操作分析:
?
1.2)session1執行的具體時序操作;
mysql> select * from book_tbl; +---------+------+-----------+-------+ | rcrd_id | isbn | book_name | price | +---------+------+-----------+-------+ | 1 | 1001 | 紅樓夢 | 30 | | 2 | 1002 | 西游記 | 60 | +---------+------+-----------+-------+ 2 rows in set (0.01 sec)mysql> mysql> lock table book_tbl read; Query OK, 0 rows affected (0.00 sec)mysql> select * from book_tbl; +---------+------+-----------+-------+ | rcrd_id | isbn | book_name | price | +---------+------+-----------+-------+ | 1 | 1001 | 紅樓夢 | 30 | | 2 | 1002 | 西游記 | 60 | +---------+------+-----------+-------+ 2 rows in set (0.00 sec)mysql> update book_tbl set isbn='1003' where id=2; ERROR 1054 (42S22): Unknown column 'id' in 'where clause' mysql> update book_tbl set isbn='1003' where rcrd_id=2; ERROR 1099 (HY000): Table 'book_tbl' was locked with a READ lock and can't be updated mysql> mysql> mysql> update book_tbl set isbn='1003' where rcrd_id=2; ERROR 1099 (HY000): Table 'book_tbl' was locked with a READ lock and can't be updated mysql> mysql> select * from mylock_tbl; ERROR 1100 (HY000): Table 'mylock_tbl' was not locked with LOCK TABLES mysql> mysql> mysql> mysql> mysql> unlock tables; Query OK, 0 rows affected (0.00 sec)1.3)session2執行的具體時序操作;
mysql> select * from book_tbl; +---------+------+-----------+-------+ | rcrd_id | isbn | book_name | price | +---------+------+-----------+-------+ | 1 | 1001 | 紅樓夢 | 30 | | 2 | 1002 | 西游記 | 60 | +---------+------+-----------+-------+ 2 rows in set (0.00 sec)mysql> update book_tbl set isbn='1003' where rcrd_id=2; ^C -- query aborted ERROR 1317 (70100): Query execution was interrupted mysql> mysql> select * from mylock_tbl; +---------+------+ | rcrd_id | name | +---------+------+ | 1 | a | | 2 | b | | 3 | c | | 4 | d | | 5 | e | +---------+------+ 5 rows in set (0.00 sec)mysql> mysql> update book_tbl set isbn='1003' where rcrd_id=2; Query OK, 1 row affected (7.68 sec) Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from book_tbl; +---------+------+-----------+-------+ | rcrd_id | isbn | book_name | price | +---------+------+-----------+-------+ | 1 | 1001 | 紅樓夢 | 30 | | 2 | 1003 | 西游記 | 60 | +---------+------+-----------+-------+ 2 rows in set (0.00 sec)==================================================================
【2】添加表級寫鎖
(session1)
?
(session2)
【總結】?
- 總結1:讀鎖不會阻塞讀,但阻塞寫; 寫鎖會把讀和寫都阻塞;
- 總結2: 看看哪些表被加鎖 了??show open tables;
【如何分析表鎖定?】
可以通過檢查 table_locks_waited 和 table_locks_immediate 狀態變量來分析系統上的表鎖定;?
show status like 'table%';
這里有兩個狀態變量記錄 mysql內部表級鎖定的情況,兩個變量 table_locks_immediate 和 ?table_locks_waited 說明如下:
- table_locks_immediate: 產生表級鎖定的次數,表示可以立即獲取鎖的查詢次數,每獲取鎖,則值加1;
- table_locks_waited:出現表級鎖定爭用而發生等待的次數(不能立即獲取等待鎖的次數,而是每等待一次則加1),此值高則說明存在較嚴重的表級鎖爭用問題;
【補充】
- 表鎖1: myisam存儲引擎 的讀寫鎖調度是寫優先, 這也是 myisam 不適合做寫為主的引擎。因為寫鎖后,其他線程不能對其做任何操作,大量的更新會使得查詢很難得到鎖,從而造成永遠的阻塞;
?
總結
以上是生活随笔為你收集整理的多个会话对表加表级读锁和表级写锁后的操作权限分析(表级读锁+表级写锁)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: word设置首字下沉(word设置首字下
- 下一篇: 华为移动WIFI怎么使用,随时WIFI是