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行參數。

 

這裡有一篇文章詳細分析瞭每一個參數值的所代表的意思:https://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_等等都是非常有用的一些計數,由於太多這裡就沒有全部拿出來分析,文章中也給出瞭一個連接介紹瞭其它的一些計數的含義。

You May Also Like