鎖機制優化MySQL
MyISAM表鎖優化"建議"
其使用表鎖在鎖定過程比行鎖或頁鎖級別附加成本小,鎖定本身資源也最少,但是鎖定顆粒度較大,所以,造成鎖定資源的爭用也會比其他級別要多,導致併發處理能力很低;
為了改善併發能力,如下建議:
1.縮短鎖定時間,讓query執行時間儘量的短
*減少複雜Query,將複雜Query分拆幾個小的Query分佈進行
*建立高效index,提高檢索資料速度
*讓myisam表只存放必要資訊,控制欄位型別
*合適機會優化myisam表資料檔案
2.分離並行的操作,myisam是讀寫互相阻塞的表鎖,併發插入(Concurrent Insert)特性
* value=2,表資料檔案中間部分是否存在因為刪除資料而留下空閒空間,容許資料檔案尾進行併發插入
* value=1,表資料檔案中間不存在空閒空間,可以從檔案尾進行併發插入
* value=0,表資料檔案中間部分是否存在因為刪除資料留下空閒空間,不容許併發插入;
3.合理利用讀寫優先順序
myisam表鎖中預設寫優先順序大於讀優先順序,如果一個系統以讀為主,且要優先保證查詢效能的話,設定引數:
low_priority_updates=1,告訴mysql先處理讀請求;
如果資料被刪除可能性很小,對暫時性浪費空間不在乎,可以concurrent_insert=2(嘗試)
資料檔案空間有空域空間,在浪費空間時候,還會造成查詢時間需要讀取更多資料,所以刪除資料量不是很小的,還是建議concurrent_insert=1;
InnoDB行鎖優化"建議"
InnoDB使用行級鎖,鎖定機制帶來的效能損耗可能比表級鎖更高一些,併發能力要比Myisam要好,但是也需要我們合理利用innodb鎖機制,否則也會帶來其他想不到的問題:
如下建議:
*資料檢索通過index完成,避免InnoDB無法通過index加鎖而升級為表鎖;
*合理利用index,讓Innodb在index上加鎖儘可能準確,縮小鎖定範圍,避免造成因鎖定而影響其他Query執行;
*減少基於範圍資料檢索過濾條件,避免因間隙鎖帶來負面影響而鎖定不該鎖定記錄;
*控制事務大小,減少鎖定時間和資源;
*在業務環境許可下,儘量使用低階別事務隔離,減少MySQL因實現事務隔離級別帶來附加成本;
因InnoDB行級鎖和事務性,肯定會產生死鎖,減少死鎖小建議:
*類似業務模組中,儘可能按照相同訪問順序來訪問,防止產生死鎖;
*在同一個事務中,儘可能做到一次鎖定所有資源,減少死鎖產生概率;
*對非常容易產生死鎖業務部分,可以嘗試升級鎖定顆粒度,同過表鎖減少死鎖概率;
系統資源鎖定爭用情況查詢:
1.表鎖:
mysql>show status like '%table%';
Table_locks_immediate:表級鎖次數
Table_locks_waited:出現表級鎖定爭用而發生等待次數
--2個值是從系統啟動後開始記錄,每次出現對應事件數量+1,如果table_locks_waited值高,系統表級鎖定爭用現象嚴重,需要分析原因;
2.InnoDB 行級鎖
mysql> show status like '%innodb_row_lock%';
Innodb行級鎖,記錄鎖定等待次數,還記錄鎖定總時長,每次平均時長和最大時長,此外非累積當前正在等待鎖定數量,對各個狀態說明如下:
Innodb_row_lock_current_waits:當前正在等待鎖定數量
Innodb_row_lock_time:從系統啟動到現在鎖定總時間長度
Innodb_row_lock_time_avg:每次等待所花費平均時間
Innodb_row_lock_max:從系統啟動到現在等待最長一次所花費時間
Innodb_row_lock_waits:從系統啟動到現在總共等待次數
較重要Innodb_row_lock_time_avg\Innodb_row_lock_waits\Innodb_row_lock_time 排序依次:等待次數很高,每次等待時長也不小時候,分析原因;
Innodb提供5個系統狀態變數,豐富即使狀態資訊;
1) 建立Innodb Monitor 表來開啟InnoDB的monitor功能
mysql>create table innodb_monitor(a int) engine=Innodb;
2) mysql > show innodb status 檢視細節資訊
摘自網路
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26855487/viewspace-744444/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL效能優化(九)-- 鎖機制之行鎖MySql優化
- mysql鎖機制總結,以及優化建議MySql優化
- Mysql鎖機制分析MySql
- 【MySQL】MySQL中的鎖機制MySql
- Mysql各種鎖機制MySql
- mysql myisam的鎖機制MySql
- MySql(三) MySql中的鎖機制MySql
- Mysql中的鎖機制——MyISAM表鎖MySql
- Java 併發機制底層實現 —— volatile 原理、synchronize 鎖優化機制Java優化
- MySQL InnoDB 中的鎖機制MySql
- mysql 事務,鎖,隔離機制MySql
- mysql鎖機制 讀書筆記MySql筆記
- 再談mysql鎖機制及原理—鎖的詮釋MySql
- mysql事務處理與鎖機制MySql
- 一小時搞懂Mysql鎖機制MySql
- MySQL底層概述—10.InnoDB鎖機制MySql
- 一文詳解MySQL的鎖機制MySql
- MySQL中的事務原理和鎖機制MySql
- Mysql鎖機制與最佳化實踐以及MVCC底層原理剖析MySqlMVC
- 資料庫系列:MySQL InnoDB鎖機制介紹資料庫MySql
- Mysql事務隔離級別與鎖機制MySql
- 【資料庫】MySQL鎖機制、熱備、分表資料庫MySql
- Mysql鎖機制簡單瞭解一下MySql
- Android效能優化(4):UI渲染機制以及優化Android優化UI
- PHP 鎖機制PHP
- SQLite鎖機制SQLite
- MySQL 優化六(InnoDB 下 update 資料出現表鎖之優化)MySql優化
- 全面瞭解mysql鎖機制(InnoDB)與問題排查MySql
- MySQL優化篇系列文章(二)——MyISAM表鎖與InnoDB鎖問題MySql優化
- 分散式鎖機制分散式
- AtomicLong 與 LongAdder(CAS機制的優化)優化
- JVM鎖優化JVM優化
- 鎖優化--1優化
- 詳解Mysql事務隔離級別與鎖機制MySql
- synchronized鎖機制 之 程式碼塊鎖synchronized
- 資料庫鎖機制資料庫
- MySQL資料庫InnoDB儲存引擎中的鎖機制GVMySql資料庫儲存引擎
- MySQL中InnoDB鎖機制介紹及一些測試MySql
- android記憶體管理機制與優化Android記憶體優化