MySql主要關注效能指標

2021-10-23 21:49:14 字數 4514 閱讀 1453

在專案當中資料庫一般都會成為主要的效能與負載瓶頸,那麼針對資料庫各項效能指標的監控與對應的優化是開發與運維人員需要面對的主要工作,而且這部分的工作會貫穿專案從開發到執行的整個週期裡。

在mysql中通過show global status可以得到很多的效能指標項,從中我們可以可以抽取需要關注的指標項:

優先順序如下:

1、cpu、記憶體使用率、磁碟占用空間

cpu、記憶體、磁碟這三項是我們能夠看到的最直觀的指標,也是mysql執行狀態的整體體現,一旦我們的資料庫伺服器這三項出現不正常的波動,必然會影響專案的穩定與效能,從而就需要我們對專案與mysql進行合理配置與優化。

2、鎖定狀態、慢查詢、全表掃瞄次數

鎖定狀態:

mysql> show global  status like '%lock%';

table_locks_waited/table_locks_immediate=0.3%  如果這個比值比較大的話,說明表鎖造成的阻塞比較嚴重

innodb_row_lock_waits innodb行鎖,太大可能是間隙鎖造成的

全表掃瞄次數:

handeler_read%

平均每秒全表掃瞄次數 show global status like 「handler_read%」

隨著業務量的增加,全表掃瞄的次數也隨之增加。sql要盡量避免全表掃瞄

3 、建立的連線數、連線的連線數、連線快取數、連線活躍數

threads_created:

通過show global status like "threads_created"可以檢視已經建立的連線數,這個顧名思義就是mysql已經建立的總連線數;

threads_connectd:

通過show global status like "threads_connectd"可以檢視已經連線的連線數,這個值等於show processlist;

threads_catched:

通過show global status like "threads_catched"可以檢視當前mysql當前快取的連線數,我們知道mysql建立連線非常消耗資源,當已有連線不再使用之後,mysql不會直接斷開連線,而是將連線快取到快取池中,以便下次在有create thread的需求時,從而達到復用連線,提高效能的目標,所以threads_catched中的值就是當前快取池中可用連線數量,由此我們可以得出 threads_created的值應該是threads_connectd與threads_catched之和, 當然如果已經有了中介軟體或者其他的連線池管理,那麼這個引數就沒有那麼重要了,但是如果沒有其他的連線池管理,那麼優化這個引數還是有一定必要的。

threads_running:

通過show global status like "threads_running"可以檢視當前活躍的連線數,這個值代表處於當前啟用狀態的連線線程個數,這個值必定是小於threads_connectd的。

4、iops、qps、tps

iops:(input/output operations per second,既每秒處理i/o的請求次數)

我們知道資料庫的處理本質上是io的讀寫處理,你可以簡單的把iops理解為儲存介質(一般是磁碟)在單位時間內能處理的io讀寫請求數量,因為所有對mysql資料庫的訪問與操作最後都會落在對磁碟的讀寫上,那麼iops的數值越高自然在一定時間內能接受的資料庫處理請求就越多,iops的計算公式:iops=1000ms/(尋道時間+旋轉延遲時間),可以看到這個指標的計算跟你儲存介質的效能是息息相關的,所以把普通機械硬碟替換為ssd固態硬碟是提高mysql處理能力的一種比較有效的手段。

qps(query per second,既每秒請求查詢次數)

qps是mysql資料庫的乙個十分重要指標,它代表mysql資料庫每秒接收的請求查詢次數,我們可以通過show global status like "questions" 來檢視資料庫當前的questions也就是查詢請求的次數,但要注意的是這個值是乙個全域性的累計值,也就是自mysql服務啟動後所有查詢次數。如果我們計算的是資料庫服務qps效能的乙個均值,可以直接採用下面的計算方式:

questions = show global status like "questions"; -- mysql啟動後查詢請求的總數量

uptimes = show global status like "uptime"; -- mysql本次啟動後的執行時間(單位:秒)

qps = questions/uptimes

如果你要計算的是系統峰值時qps指標,這就需要我們手動去計算了,我們可以相隔單位時間通過show global status like "questions"命令查詢下這個值,並將相鄰的兩值相減除以相隔的時間,得到的就是精確的每一秒的實際請求數了。

tps(transcantion per second,既每秒事務數)

既然是每秒事務資料,在innodb引擎下才會有這個指標資料,tps涉及到事務的提交與回滾,所以計算tps時需要把show global status like "com_commit" 與 show global status like "com_rollback",計算方法同樣需要我們每間隔一段時間進行一次取樣,然後把com_commit與com_rollback值相加除以單位時間就是tps值了,公式如下:

commit = show global status like "com_commit";

rollback =  show global status like "com_rollback";

tps= (commit+rollback)/seconds(單位時間,單位:秒)

5、innodb快取讀命中率、使用率、髒塊率(%)

在mysql的使用中,由於innodb引擎的優點與特性,我們一般都會選擇其做為mysql的資料引擎,innodb擁有的快取特性可以很大程度的提高mysql的查詢效能,因為innodb 不僅僅快取索引,同時還會快取實 際的資料,通過配置我們可以在innodb 儲存引擎中使用更多的記憶體來快取資料,那麼在這個過程中其快取的命中率、使用率與髒塊率必然是重要的效能指標。

關於innodb有很多引數指標:

複製**

//innodb檔案讀寫次數

innodb_data_reads:innodb平均每秒從檔案中讀取的次數

innodb_data_writes:innodb平均每秒從檔案中寫入的次數

innodb_data_fsyncs:innodb平均每秒進行fsync()操作的次數

//innodb讀寫量

innodb_data_read:innodb平均每秒鐘讀取的資料量,單位為kb

innodb_data_written:innodb平均每秒鐘寫入的資料量,單位為kb

//innodb緩衝池狀態

innodb_buffer_pool_reads: 平均每秒從物理磁碟讀取頁的次數 

innodb_buffer_pool_read_requests: 平均每秒從innodb緩衝池的讀次數(邏輯讀請求數)

innodb_buffer_pool_write_requests: 平均每秒向innodb緩衝池的寫次數

innodb_buffer_pool_pages_dirty: 平均每秒innodb快取池中髒頁的數目

innodb_buffer_pool_pages_flushed: 平均每秒innodb快取池中重新整理頁請求的數目

複製**

而innodb快取讀命中率、使用率、髒塊率(%)主要就是根據上面引數計算出來的

innodb緩衝池的讀命中率 = ( 1 - innodb_buffer_pool_reads/innodb_buffer_pool_read_requests) * 100

innodb緩衝池的利用率 =  ( 1 - innodb_buffer_pool_pages_free / innodb_buffer_pool_pages_total) * 100

innodb緩衝池的髒塊的百分率 = (innodb_buffer_pool_pages_dirty / innodb_buffer_pool_pages_total) * 100

6、 網路流量(平均每秒的輸入輸出量)

mysql資料的網路流量監控可通過計算單位時間內bytes_received與bytes_sent獲取。

bytes_received/s:平均每秒從所有客戶端接收到的位元組數,單位kb

bytes_sent/s:平均每秒傳送給所有客戶端的位元組數,單位kb

7、mysql中innodb引擎每秒鐘查詢次數、插入次數、刪除次數、更新次數的統計

mysql資料庫全域性的查詢、插入、刪除、更新次數可通過show  global status like "%innodb_rows%"命令來檢視,而計算單位時間內的上述各項指標即可獲取innodb引擎每秒鐘查詢次數、插入次數、刪除次數、更新次數

innodb引擎每秒鐘查詢次數 = innodb_rows_read/s

innodb引擎每秒鐘插入次數 = innodb_rows_inserted/s

innodb引擎每秒鐘刪除次數 = innodb_rows_deleted/s

innodb引擎每秒鐘刪除次數 = innodb_rows_updated/s

mysql詳細效能指標:

效能指標之資源指標 磁碟 關注指標

對於業務伺服器的使用者來說,看到的是檔案系統或裸裝置,從檔案系統到物理磁碟大概是下圖的樣子。業務伺服器的作業系統作為儲存的使用者只能看到disk 儲存層面的lun 而儲存管理員才知道儲存內部的具體raid方式 條帶化方式等等,在關注系統效能的活動 效能測試 效能調優 中,一般很少直接關注磁碟io的指...

mysql 效能指標

qps每秒處理的查詢數 tps每秒處理的事務數 iops每秒磁碟進行的i o操作次數 一 tps transactions per second 每秒傳輸的事物處理個數 即伺服器每秒處理的事務數。tps包括一條訊息入和一條訊息出,加上一次使用者資料庫訪問。業務tps caps 每個呼叫平均tps t...

鏡頭的主要效能指標

1 焦距 焦距的大小決定著視場角的大小,焦距數值小,視場角大,所觀察的範圍也大,但距離遠的物體分辨不很清楚 焦距數值大,視場角小,觀察範圍小,只要焦距選擇合適,即便距離很遠的物體也可以看得清清楚楚。由於焦距和視場角是一一對應的,乙個確定的焦距就意味著乙個確定的視場角,所以在選擇鏡頭焦距時,應該充分考...