真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysql表鎖和行鎖區(qū)別是什么

小編給大家分享一下MySQL表鎖和行鎖區(qū)別是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

在敖漢等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供做網(wǎng)站、成都網(wǎng)站制作 網(wǎng)站設計制作按需求定制設計,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,品牌網(wǎng)站建設,營銷型網(wǎng)站建設,成都外貿(mào)網(wǎng)站建設公司,敖漢網(wǎng)站建設費用合理。

一、表鎖

特點:偏向MyISAM存儲引擎,開銷小,加鎖快;無死鎖;鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)度最低。

我們在編輯表,或者執(zhí)行修改表的事情了語句的時候,一般都會給表加上表鎖,可以避免一些不同步的事情出現(xiàn),表鎖分為兩種,一種是讀鎖,一種是寫鎖。

我們可以手動給表加上這兩種鎖,語句是:

lock table 表名 read(write);

釋放所有表的鎖:

unlock tables;

查看加鎖的表:

show open tables;

加讀鎖(共享鎖):

我們給表加上讀鎖會有什么效果呢?

1、我們加讀鎖的這個進程可以讀加讀鎖的表,但是不能讀其他的表。

2、加讀鎖的這個進程不能update加讀鎖的表。

3、其他進程可以讀加讀鎖的表(因為是共享鎖),也可以讀其他表

4、其他進程update加讀鎖的表會一直處于等待鎖的狀態(tài),直到鎖被釋放后才會update成功。

加寫鎖(獨占鎖):

1、加鎖進程可以對加鎖的表做任何操作(CURD)。

2、其他進程則不能查詢加鎖的表,需等待鎖釋放

總結:

讀鎖會阻塞寫,但是不會堵塞讀。而寫鎖則會把讀和寫都堵塞。(特別注意進程)

分析:

show status like 'table%';

輸入上述命令,可得:

+----------------------------+----------+
| Variable_name        | Value |
+----------------------------+----------+
| Table_locks_immediate | 105         |
| Table_locks_waited   | 3           |
+----------------------------+----------+

Table_locks_immediate:產(chǎn)生表級鎖定的次數(shù),表示可以立即獲取鎖的查詢次數(shù),每立即獲取鎖值加1 。

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

二、行鎖

特點:偏向InnoDB存儲引擎,開銷大,加鎖慢;會出現(xiàn)死鎖;鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度也最高。

行鎖支持事務,所以  有關事務的知識下篇博客再總結。

行為:

1、當我們對一行進行更新但是不提交的時候,其他進程也對該行進行更新則需要進行等待,這就是行鎖。

2、如果我們對一行進行更新,其他進程更新別的行是不會受影響的。

行鎖升級為表鎖:

當我們的行鎖涉及到索引失效的時候,會觸發(fā)表鎖的行為。

正常情況,各自鎖定各自的行,互相不影響,一個2000另一個3000

由于在column字段b上面建了索引,如果沒有正常使用,會導致行鎖變表鎖

比如沒加單引號導致索引失效,行鎖變表鎖

被阻塞,等待。只到Session_1提交后才阻塞解除,完成更新

所以,由此,我們還是要善用索引查詢啊。

間隙鎖:

當我們用范圍條件而不是相等條件檢索數(shù)據(jù),并請求共享或排他鎖時,InnoDB會給符合條件的已有數(shù)據(jù)記錄的索引項加鎖;對于鍵值在條件范圍內(nèi)但并不存在的記錄,叫做“間隙(GAP)”,InnoDB也會對這個“間隙”加鎖,這種鎖機制就是所謂的間隙鎖(Next-Key鎖)。

因為Query執(zhí)行過程中通過過范圍查找的話,他會鎖定整個范圍內(nèi)所有的索引鍵值,即使這個鍵值并不存在。

間隙鎖有一個比較致命的弱點,就是當鎖定一個范圍鍵值之后,即使某些不存在的鍵值也會被無辜的鎖定,而造成在鎖定的時候無法插入鎖定鍵值范圍內(nèi)的任何數(shù)據(jù)。在某些場景下這可能會對性能造成很大的危害  

優(yōu)化建議:

盡可能讓所有數(shù)據(jù)檢索都通過索引來完成,避免無索引行鎖升級為表鎖。

合理設計索引,盡量縮小鎖的范圍

盡可能較少檢索條件,避免間隙鎖

盡量控制事務大小,減少鎖定資源量和時間長度

盡可能低級別事務隔離

以上是mysql表鎖和行鎖區(qū)別是什么的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


分享名稱:mysql表鎖和行鎖區(qū)別是什么
文章分享:http://weahome.cn/article/jsegij.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部