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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多个会话对表加表级读锁和表级写锁后的操作权限分析(表级读锁+表级写锁)

發布時間:2023/12/3 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多个会话对表加表级读锁和表级写锁后的操作权限分析(表级读锁+表级写锁) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【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> show status like 'table%'; +----------------------------+-------+ | Variable_name ? ? ? ? ? ? ?| Value | +----------------------------+-------+ | Table_locks_immediate ? ? ?| 267 ? | | Table_locks_waited ? ? ? ? | 0 ? ? | | Table_open_cache_hits ? ? ?| 126 ? | | Table_open_cache_misses ? ?| 29 ? ?| | Table_open_cache_overflows | 0 ? ? | +----------------------------+-------+

這里有兩個狀態變量記錄 mysql內部表級鎖定的情況,兩個變量 table_locks_immediate 和 ?table_locks_waited 說明如下:

  • table_locks_immediate: 產生表級鎖定的次數,表示可以立即獲取鎖的查詢次數,每獲取鎖,則值加1;
  • table_locks_waited:出現表級鎖定爭用而發生等待的次數(不能立即獲取等待鎖的次數,而是每等待一次則加1),此值高則說明存在較嚴重的表級鎖爭用問題;

【補充】

  • 表鎖1: myisam存儲引擎 的讀寫鎖調度是寫優先, 這也是 myisam 不適合做寫為主的引擎。因為寫鎖后,其他線程不能對其做任何操作,大量的更新會使得查詢很難得到鎖,從而造成永遠的阻塞;

?

總結

以上是生活随笔為你收集整理的多个会话对表加表级读锁和表级写锁后的操作权限分析(表级读锁+表级写锁)的全部內容,希望文章能夠幫你解決所遇到的問題。

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