標籤:MYSQL/資料庫/效能優化/調優
概述
文章簡單介紹了通過一些查詢命令分析當前伺服器的狀態。
目錄
步驟
獲取伺服器整體的效能狀態
首先對一個資料庫伺服器進行效能優化需要先知道伺服器當前主要的效能問題出現在哪裡,在這點sql server也是類似,sql server首先會分析當前伺服器的等待型別的情況。
我們可以使用show [session|global] status命令來獲取想要的資訊,預設是顯示當前連線的所有統計引數值,還可以直接查詢information_schema資料庫中的session_status表。
show status; #或者使用 use information_schema; select * from SESSION_STATUS;
我當前的mysql版本是5.6.21,總共查詢出了341行引數。
這裡有一篇文章詳細分析了每一個引數值的所代表的意思:http://blog.sina.com.cn/s/blog_68baf43d0100vu2x.html
SQL操作計數
接下來我們主要分析裡面的com_引數,com_引數各種SQL對資料庫執行的操作。
show status like 'com_%'; #或者使用 use information_schema; select * from SESSION_STATUS WHERE variable_name like 'com_%';
各種SQL操作計數總共有142個,不同的版本結果不一樣,接下來就來測試一下,表中的alter table的當前連線的操作次數為0,現在我修改一下表看看結果。
ALTER TABLE test ADD Name CHAR(10) NOT NULL; show status like 'com_%';
可以看到alter_table計數增加了1。
com_計數裡面有幾個比較重要的引數,其它的一些引數也經常用來做參考。
com_delete:執行delete操作的次數。
com_select:執行select操作的次數。
com_insert:執行insert操作的次數,對應批量插入操作無論裡面迴圈多少次都只算一次。
com_update:執行update操作的次數。
com_commit:執行事務提交的次數。
com_rollback:執行事務回滾的次數。
上面的計數包括所有的儲存引擎,有幾個引數是單獨針對innodb儲存引擎,記錄了read,inserted,updated,deleted每種操作的行數。
show status like 'innodb_rows%'; #或者使用 use information_schema; select * from SESSION_STATUS WHERE variable_name like 'innodb_rows%';
定位效率低的SQL語句
1.可以通過慢查詢日誌來定位,慢查詢只能查詢已經執行結束的語句,如果要查詢當前正發生的問題無法做到,這個方法在後面一篇文章介紹mysql日誌會詳細介紹。
由於我將慢查詢的時間設為0.01秒,所以超過這個值的都會記錄下來,上面的截圖就是慢查詢日誌裡面的一條SQL操作記錄,記錄中記錄了在什麼時候執行的操作,執行操作的使用者資訊,執行花了0.19秒,鎖花了0.001秒,返回了0行,查詢了1行。
2.使用show processlist命令查詢當前進行執行緒,該命令經常用來分析當前伺服器的狀況。
上圖中有後四個欄位需要理解,其中
command:記錄了當前查詢的一個狀態,休眠(sleep),查詢(query),連線(connect)。
Time:持續的時間,單位是秒,經常會使用這個值來做分析操作。
state:當前語句的狀態,這個狀態值很重要,這個狀態值很多,大家可以去了解一下,上圖就是等待表解鎖。
info:記錄操作語句
3.藉助第三方監控工具
總結
文章的知識點涉及的內容其實很多,這裡只是簡單的寫了一下,包括伺服器裡的很多狀態都是很重要的,文章只是單單拿出了SQL操作的計數來講,其它的一些包括connections,slow_queries,innodb_data_,innodb_buffer_pool_等等都是非常有用的一些計數,由於太多這裡就沒有全部拿出來分析,文章中也給出了一個連線介紹了其它的一些計數的含義。
備註: 作者:pursuer.chen 部落格:http://www.cnblogs.com/chenmh 本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結,否則保留追究責任的權利。 《歡迎交流討論》 |
---恢復內容結束---