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索引的常...