MySQL分析服務器狀態
概述
文章簡單介紹了通過一些查詢命令分析當前服務器的狀態。
目錄
概述
獲取服務器整體的性能狀態
SQL操作計數
總結
步驟
獲取服務器整體的性能狀態
首先對一個數據庫服務器進行性能優化需要先知道服務器當前主要的性能問題出現在哪裡,在這點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_等等都是非常有用的一些計數,由於太多這裡就沒有全部拿出來分析,文章中也給出了一個連接介紹了其它的一些計數的含義。