mysql效能優化 一

2021-09-13 12:24:18 字數 2177 閱讀 9510

mysql裡面的所分為表鎖和行鎖不同儲存引擎它的鎖也不一樣,innodb有表鎖和行鎖,而mysiam只有表鎖

1.set autocommit=0 取消自動提交

2.使用a,b兩個視窗分別update同一行資料,過濾條件必須是索引,因為索引是行鎖,非索引是表鎖

a視窗先update資料,b視窗後update資料,發現b阻塞了

然後使用a,b視窗update不同索引行的資料】

不同行不會被阻塞,說明innodb下的索引鎖的是行鎖,當乙個事務持有這一行的鎖時,其他的事務需要等待

a窗**是根據name這個非索引字段進行update操作的,有餘他是表鎖,當b視窗根據id進行update操作的時候,倍阻塞掉了

總結:在innodb下,索引字段使用的行鎖,非索引字段使用的表鎖,而mysiam都是使用表鎖

1.行鎖:

優點:行鎖顆粒度細

缺點:獲取,釋放工作多,

容易發生死鎖:

實現innodb

共享鎖:read,可以並行

獨佔鎖:write,要等乙個事務結束之後,下乙個事務才可以進行

間隙鎖:乙個索引的範圍鎖

鎖的優化

注意點:要commit之後,update才生效的

表級鎖的爭用狀態變數

show status like 『table%』;

行級鎖爭用狀態變數

說明一下返回的各個資訊:

依次從好到差:system,const,eq_ref,ref,fulltext,ref_or_null,uniquesubquery,indexsubquery,range,indexmerge,index,all

我們比較關注度資訊:

1.read uncommitted(讀取未提交)

事務a讀取到了事務b沒有提交的資料,那就是髒讀了

讀取未提交可能出現:1.髒讀,2.不可重複讀,3.幻讀

2.read committed(讀取提交)

關鍵:a事務讀取到的是其他執行緒commit後的最新的資料

當隔離級別設定為read committed時,避免了髒讀,但是可能會造成不可重複讀。

讀取未提交可能出現:2.不可重複讀,3.幻讀

3.repeatable read(可重複讀)

關鍵:a事務讀取資料,沒有commit,期間就算有其他事務修改了資料,並且commit了,他也不會獲取到修改後的資料。

讀取未提交可能出現:3.幻讀

mysql的預設隔離級別就是repeatable read

4.serializable(序列)

serializable是最高的事務隔離級別,同時代價也花費最高,效能很低,一般很少使用,在該級別下,事務順序執行,不僅可以避免髒讀、不可重複讀,還避免了幻像讀。(一次只執行乙個事務)

MySQL效能優化 一)

mysql是乙個開源的小型關聯式資料庫,也是目前應用最廣泛的。最近學習了mysql的效能調優,感覺一下子接觸很多之前不了解的東西,這些優化應該來說是非常實用的,所以這裡打算寫乙個系列的部落格來整理下。眾所周知,mysql能安裝在各大作業系統上,特別是對於很多個人開發者,都喜歡把開發放在windows...

MySQL效能優化一

1.檢視mysql的可以承受的最大連線數,登入到mysql伺服器後,輸入以下命令,如出現下面的頁面顯示 max connections 表示的是伺服器所能承受的最大連線數 用來設定最大連線 使用者 數。總體來說,該max connections2.檢視當前連線資料庫的使用者 show process...

mysql效能優化 mysql效能優化

優化方式 1.空間換時間 冗餘 2.時間換空間 字段優先使用型別 int date char varchar text 索引型別 btree索引 hash索引 索引的葉子下,存放乙個資訊指向所在行的資料位址。btree有利於範圍查詢,hash有利於精確查詢。btree用的更多一些。btree索引的常...