成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解MySQL以寫為主的系統如何進行性能監控與調優,值得收藏

系統 Windows 新聞
今天主要分享下mysql數據庫寫壓力的性能監控與調優,分成性能監控、相關調優參數兩方面來做介紹。

 概述

[[272150]]

今天主要分享下mysql數據庫寫壓力的性能監控與調優,分成性能監控、相關調優參數兩方面來做介紹。

參考:http://www.cnblogs.com/geaozhang/

一、寫壓力性能監控

1、OS層面的監控:iostat -x

  1. # iostat -x 
詳解MySQL以寫為主的系統如何進行性能監控與調優,值得收藏

說明:

  • rrqm/s:每秒進行merge的讀操作數目。
  • wrqm/s:每秒進行merge的寫操作數目。
  • r/s:每秒完成的讀I/O設備次數。
  • w/s:每秒完成的寫I/O設備次數。
  • rsec/s:每秒讀扇區數。
  • wsec/s:每秒寫扇區數。
  • rkB/s:每秒讀K字節數。
  • wkB/s:每秒寫K字節數。
  • avgrq-sz:平均每次設備I/O操作的數據大小(扇區)。
  • avgqu-sz:平均I/O隊列長度。
  • await:平均每次設備I/O操作的等待時間(毫秒)。
  • svctm:平均每次設備I/O操作的服務時間(毫秒)。
  • %util:一秒中有百分之多少的時間用于I/O操作,或者說一秒中有多少時間I/O隊列是非空的。

其實監控系統的io狀況,主要查看%util、r/s、w/s,一般繁忙度在70%,每秒寫也在理想值了;但如果系統目前繁忙度低,每秒寫很低,可以增加寫入。

2、DB層面監控:監控各種pending(掛起)

  1. mysql> show global status like '%pend%'
  2. +------------------------------+-------+ 
  3. | Variable_name | Value | 
  4. +------------------------------+-------+ 
  5. | Innodb_data_pending_fsyncs | 0 | #被掛起的fsync 
  6. | Innodb_data_pending_reads | 0 | #被掛起的物理讀 
  7. | Innodb_data_pending_writes | 0 | #被掛起的寫 
  8. | Innodb_os_log_pending_fsyncs | 0 | #被掛起的日志fsync 
  9. | Innodb_os_log_pending_writes | 0 | #被掛起的日志寫 
  10. +------------------------------+-------+ 
  11. rows in set (0.01 sec) 

 

詳解MySQL以寫為主的系統如何進行性能監控與調優,值得收藏

寫掛起次數值大于0,甭管是什么寫掛起,出現掛起的話就說明出現寫壓力,所以值最好的是保持為0。監控“掛起”狀態值,出現大于0且持續增加,報警處理。

3、寫入速度監控:日志寫、臟頁寫

3.1、日志寫入速度監控

  1. mysql> show global status like '%log%written'

 

詳解MySQL以寫為主的系統如何進行性能監控與調優,值得收藏

從 Innodb_os_log_written 可以知道 innodb 日志的寫入量,從而判斷 innodb_log_buffer_size 的大小是否合適,同時也可以估計出一個 log_file 大概能支持多長時間。innodb 當buffer滿了,事務提交或每秒1次刷新,看哪個更早發生。

3.2、臟頁寫入速度監控

  1. mysql> show global status like '%a%written'
  2. +----------------------------+---------+ 
  3. | Variable_name | Value | 
  4. +----------------------------+---------+ 
  5. | Innodb_data_written | 1073152 | #目前為止寫的總的數據量,單位字節 
  6. | Innodb_dblwr_pages_written | 7 | 
  7. | Innodb_pages_written | 58 | #寫數據頁的數量 
  8. +----------------------------+---------+ 
  9. rows in set (0.01 sec) 

 

詳解MySQL以寫為主的系統如何進行性能監控與調優,值得收藏

3.3、關注比值:Innodb_dblwr_pages_written / Innodb_dblwr_writes,表示一次寫了多少頁

  1. mysql> show global status like '%dblwr%'
  2. +----------------------------+-------+ 
  3. | Variable_name | Value | 
  4. +----------------------------+-------+ 
  5. | Innodb_dblwr_pages_written | 7 | #已經寫入到doublewrite buffer的頁的數量 
  6. | Innodb_dblwr_writes | 3 | #doublewrite寫的次數 
  7. +----------------------------+-------+ 
  8. rows in set (0.00 sec) 

1、如果該比值是64:1,說明doublewrite每次都是滿寫,寫的壓力很大。

2、如果系統的double_write比較高的話,iostat看到的wrqm/s(每秒合并寫的值)就高,因為double_write高意味著每次寫基本上都是寫2M,這時候就發生更多的合并,但wrqm/s高并不害怕,因為發生合并是好事,看wrqm/s和繁忙度能不能接受。

4、臟頁的量監控

  1. mysql> show global status like '%dirty%'
  2. +--------------------------------+-------+ 
  3. | Variable_name | Value | 
  4. +--------------------------------+-------+ 
  5. | Innodb_buffer_pool_pages_dirty | 0 | #當前buffer pool中臟頁的數量 
  6. | Innodb_buffer_pool_bytes_dirty | 0 | #當前buffer pool中臟頁的總字節數 
  7. +--------------------------------+-------+ 
  8. rows in set (0.01 sec) 
  9.   
  10. mysql> show global status like 'i%total%'
  11. +--------------------------------+-------+ 
  12. | Variable_name | Value | 
  13. +--------------------------------+-------+ 
  14. | Innodb_buffer_pool_pages_total | 8192 | #buffer pool中數據頁總量 
  15. +--------------------------------+-------+ 
  16. 1 row in set (0.01 sec) 

關注比值:Innodb_buffer_pool_pages_dirty / Innodb_buffer_pool_pages_total,臟頁占比

通過比值看臟頁是否多,比如臟頁10%的話,可以判斷系統可能不是寫為主的系統。

5、寫性能瓶頸

  1. mysql> show global status like '%t_free'
  2. +------------------------------+-------+ 
  3. | Variable_name | Value | 
  4. +------------------------------+-------+ 
  5. | Innodb_buffer_pool_wait_free | 0 | 
  6. +------------------------------+-------+ 
  7. 1 row in set (0.01 sec) 
  8.   
  9. mysql> show global status like '%g_waits'
  10. +------------------+-------+ 
  11. | Variable_name | Value | 
  12. +------------------+-------+ 
  13. | Innodb_log_waits | 0 | 
  14. +------------------+-------+ 
  15. 1 row in set (0.00 sec) 

說明:

Innodb_buffer_pool_wait_free,如果該值大于0,說明buffer pool中已經沒有可用頁,等待后臺往回刷臟頁,騰出可用數據頁,這樣就很影響業務了,hang住。

Innodb_log_waits,如果該值大于0,說明寫壓力很大,出現了日志等待。如果Innodb_log_waits狀態變量(等待日志緩沖刷出的次數)的值比較高,而且繼續增長,可以增大log buffer或者降低事務大小。

6、系統真實負載:rows增刪改查 、事務提交、事務回滾

  1. mysql> show global status like 'i%rows%'
  2. +----------------------+-------+ 
  3. | Variable_name | Value | 
  4. +----------------------+-------+ 
  5. | Innodb_rows_deleted | 0 | 
  6. | Innodb_rows_inserted | 145 | 
  7. | Innodb_rows_read | 233 | 
  8. | Innodb_rows_updated | 5 | 
  9. +----------------------+-------+ 
  10. rows in set (0.01 sec) 
  11.   
  12. mysql> show global status like '%commit%'
  13. +----------------+-------+ 
  14. | Variable_name | Value | 
  15. +----------------+-------+ 
  16. | Com_commit | 0 | 
  17. | Com_xa_commit | 0 | 
  18. | Handler_commit | 16 | 
  19. +----------------+-------+ 
  20. rows in set (0.01 sec) 
  21.   
  22. mysql> show global status like '%rollback%'
  23. +----------------------------+-------+ 
  24. | Variable_name | Value | 
  25. +----------------------------+-------+ 
  26. | Com_rollback | 0 | 
  27. | Com_rollback_to_savepoint | 0 | 
  28. | Com_xa_rollback | 0 | 
  29. | Handler_rollback | 0 | 
  30. | Handler_savepoint_rollback | 0 | 
  31. +----------------------------+-------+ 
  32. rows in set (0.01 sec) 

通過監控系統真實負載,如果業務正常,負載上升,此時,就要根據業務具體情況,進行相應的調優。

二、寫壓力調優參數

通過調整參數降低寫壓力時,一定要實時關注iostat系統的各項指標。

1、臟頁刷新的頻率

  1. mysql> show variables like 'i%depth%'

 

詳解MySQL以寫為主的系統如何進行性能監控與調優,值得收藏

默認1024,遍歷lru list刷新臟頁,值越大,說明刷臟頁頻率越高。

2、磁盤刷新臟頁的量:磁盤io能力

  1. mysql> show variables like '%io_c%'

 

詳解MySQL以寫為主的系統如何進行性能監控與調優,值得收藏

根據磁盤io能力進行調整,值越大,每次刷臟頁的量越大。

3、redolog調優

  1. mysql> show variables like 'innodb_log%'

 

詳解MySQL以寫為主的系統如何進行性能監控與調優,值得收藏

logfile大小和組數可能會導致寫抖動:日志切換頻率需要監控(文件系統層面技巧)。

4、redolog的刷新機

  1. mysql> show variables like '%flush%commit'

 

詳解MySQL以寫為主的系統如何進行性能監控與調優,值得收藏

這里我優化了一下

默認MySQL的刷盤策略是1,最安全的,但是安全的同時,自然也就會帶來一定的性能壓力。在寫壓力巨大的情況下,根據具體的業務場景,犧牲安全性的將其調為0或2。

詳解MySQL以寫為主的系統如何進行性能監控與調優,值得收藏

5、定義每次日志刷新的時間

  1. mysql> show variables like 'innodb_flush_log_at_timeout'

 

詳解MySQL以寫為主的系統如何進行性能監控與調優,值得收藏

默認是1,也就是每秒log刷盤,配合innodb_flush_log_at_trx_commit來設置,為了充分保證數據的一致性,一般innodb_flush_log_at_trx_commit=1,這樣的話,innodb_flush_log_at_timeout的設置也就沒有意義了。因此,該參數的設置只針對innodb_flush_log_at_trx_commit為0/2起作用。

6、內存臟頁占比控制

  1. mysql> show variables like '%dirty%pct%'

 

詳解MySQL以寫為主的系統如何進行性能監控與調優,值得收藏

在內存buffer pool空間允許的范圍下,可以調大臟頁允許在內存空間的占比,可解燃眉之急,降低寫壓力。

7、關閉doublewrite降低寫壓力

  1. mysql> show variables like '%doub%'
詳解MySQL以寫為主的系統如何進行性能監控與調優,值得收藏

兩次寫特性,默認開啟,靜態參數。

以上就是針對mysql在以寫為主的情況下的相關參數監控及調優,如何調整(靜態參數、動態參數)最好都要根據官方文檔來調整。后面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注一下~

責任編輯:華軒 來源: 今日頭條
相關推薦

2012-03-26 10:55:03

JavaJava EE

2011-03-10 14:40:54

LAMPMysql

2019-11-01 08:49:07

JVM監控性能

2022-11-30 08:17:41

JVM調優技巧

2024-05-21 09:08:57

JVM調優面試

2023-11-15 16:35:31

SQL數據庫

2018-11-12 14:53:09

Redis性能調優數據庫

2019-09-12 08:03:56

MySQL索引數據庫

2019-09-04 08:13:53

MySQLInnodb事務系統

2019-09-26 08:59:39

DockerGoogle軟件

2020-11-09 07:34:49

JVM性能監控

2011-03-18 11:21:48

2011-04-07 16:15:31

MySQL服務器調優

2023-11-28 08:43:48

2011-03-21 09:35:38

LAMP調優網絡文件

2011-03-10 14:40:52

2014-09-22 13:31:46

Linux

2009-04-01 11:17:52

內存分配調優Oracle

2019-02-19 10:25:28

JVM性能工具

2013-09-24 13:06:56

AngularJS性能優化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费观看毛片 | 99这里只有精品视频 | 日韩在线观看网站 | 久久亚洲欧美日韩精品专区 | 国产福利91精品一区二区三区 | 日韩欧美中文字幕在线观看 | 日本不卡免费新一二三区 | 日本久久久一区二区三区 | 欧美日韩亚洲一区 | 久久久久国产精品午夜一区 | 欧美 中文字幕 | 色成人免费网站 | 国产精品一区二区久久精品爱微奶 | 国产亚洲一区二区三区 | 国产欧美精品 | 久久精品色欧美aⅴ一区二区 | 999视频| 嫩草影院黄| 亚洲色综合 | wwwxxx日本在线观看 | 国产在线观看 | caoporn免费| 亚洲每日更新 | 久色视频在线观看 | 日韩三区在线 | 久久国产精品一区二区三区 | 一级做a爰片性色毛片16 | 成人av网页 | 精品91视频 | 久久人人爽人人爽 | 亚洲欧美一区二区三区1000 | 午夜欧美a级理论片915影院 | 在线亚洲精品 | 精品国产精品三级精品av网址 | 亚洲成人精品国产 | 色婷婷久久久久swag精品 | 最新91在线 | 久精品久久 | 国产精品美女 | 99热在线播放 | 日本aⅴ中文字幕 |