自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解MySQL以寫(xiě)為主的系統(tǒng)如何進(jìn)行性能監(jiān)控與調(diào)優(yōu),值得收藏

系統(tǒng) Windows 新聞
今天主要分享下mysql數(shù)據(jù)庫(kù)寫(xiě)壓力的性能監(jiān)控與調(diào)優(yōu),分成性能監(jiān)控、相關(guān)調(diào)優(yōu)參數(shù)兩方面來(lái)做介紹。

 概述

[[272150]]

今天主要分享下mysql數(shù)據(jù)庫(kù)寫(xiě)壓力的性能監(jiān)控與調(diào)優(yōu),分成性能監(jiān)控、相關(guān)調(diào)優(yōu)參數(shù)兩方面來(lái)做介紹。

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

一、寫(xiě)壓力性能監(jiān)控

1、OS層面的監(jiān)控:iostat -x

  1. # iostat -x 
詳解MySQL以寫(xiě)為主的系統(tǒng)如何進(jìn)行性能監(jiān)控與調(diào)優(yōu),值得收藏

說(shuō)明:

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

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

2、DB層面監(jiān)控:監(jiān)控各種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 | #被掛起的寫(xiě) 
  8. | Innodb_os_log_pending_fsyncs | 0 | #被掛起的日志fsync 
  9. | Innodb_os_log_pending_writes | 0 | #被掛起的日志寫(xiě) 
  10. +------------------------------+-------+ 
  11. rows in set (0.01 sec) 

 

詳解MySQL以寫(xiě)為主的系統(tǒng)如何進(jìn)行性能監(jiān)控與調(diào)優(yōu),值得收藏

寫(xiě)掛起次數(shù)值大于0,甭管是什么寫(xiě)掛起,出現(xiàn)掛起的話就說(shuō)明出現(xiàn)寫(xiě)壓力,所以值最好的是保持為0。監(jiān)控“掛起”狀態(tài)值,出現(xiàn)大于0且持續(xù)增加,報(bào)警處理。

3、寫(xiě)入速度監(jiān)控:日志寫(xiě)、臟頁(yè)寫(xiě)

3.1、日志寫(xiě)入速度監(jiān)控

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

 

詳解MySQL以寫(xiě)為主的系統(tǒng)如何進(jìn)行性能監(jiān)控與調(diào)優(yōu),值得收藏

從 Innodb_os_log_written 可以知道 innodb 日志的寫(xiě)入量,從而判斷 innodb_log_buffer_size 的大小是否合適,同時(shí)也可以估計(jì)出一個(gè) log_file 大概能支持多長(zhǎng)時(shí)間。innodb 當(dāng)buffer滿了,事務(wù)提交或每秒1次刷新,看哪個(gè)更早發(fā)生。

3.2、臟頁(yè)寫(xiě)入速度監(jiān)控

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

 

詳解MySQL以寫(xiě)為主的系統(tǒng)如何進(jìn)行性能監(jiān)控與調(diào)優(yōu),值得收藏

3.3、關(guān)注比值:Innodb_dblwr_pages_written / Innodb_dblwr_writes,表示一次寫(xiě)了多少頁(yè)

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

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

2、如果系統(tǒng)的double_write比較高的話,iostat看到的wrqm/s(每秒合并寫(xiě)的值)就高,因?yàn)閐ouble_write高意味著每次寫(xiě)基本上都是寫(xiě)2M,這時(shí)候就發(fā)生更多的合并,但wrqm/s高并不害怕,因?yàn)榘l(fā)生合并是好事,看wrqm/s和繁忙度能不能接受。

4、臟頁(yè)的量監(jiān)控

  1. mysql> show global status like '%dirty%'
  2. +--------------------------------+-------+ 
  3. | Variable_name | Value | 
  4. +--------------------------------+-------+ 
  5. | Innodb_buffer_pool_pages_dirty | 0 | #當(dāng)前buffer pool中臟頁(yè)的數(shù)量 
  6. | Innodb_buffer_pool_bytes_dirty | 0 | #當(dāng)前buffer pool中臟頁(yè)的總字節(jié)數(shù) 
  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中數(shù)據(jù)頁(yè)總量 
  15. +--------------------------------+-------+ 
  16. 1 row in set (0.01 sec) 

關(guān)注比值:Innodb_buffer_pool_pages_dirty / Innodb_buffer_pool_pages_total,臟頁(yè)占比

通過(guò)比值看臟頁(yè)是否多,比如臟頁(yè)10%的話,可以判斷系統(tǒng)可能不是寫(xiě)為主的系統(tǒng)。

5、寫(xiě)性能瓶頸

  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) 

說(shuō)明:

Innodb_buffer_pool_wait_free,如果該值大于0,說(shuō)明buffer pool中已經(jīng)沒(méi)有可用頁(yè),等待后臺(tái)往回刷臟頁(yè),騰出可用數(shù)據(jù)頁(yè),這樣就很影響業(yè)務(wù)了,hang住。

Innodb_log_waits,如果該值大于0,說(shuō)明寫(xiě)壓力很大,出現(xiàn)了日志等待。如果Innodb_log_waits狀態(tài)變量(等待日志緩沖刷出的次數(shù))的值比較高,而且繼續(xù)增長(zhǎng),可以增大log buffer或者降低事務(wù)大小。

6、系統(tǒng)真實(shí)負(fù)載:rows增刪改查 、事務(wù)提交、事務(wù)回滾

  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) 

通過(guò)監(jiān)控系統(tǒng)真實(shí)負(fù)載,如果業(yè)務(wù)正常,負(fù)載上升,此時(shí),就要根據(jù)業(yè)務(wù)具體情況,進(jìn)行相應(yīng)的調(diào)優(yōu)。

二、寫(xiě)壓力調(diào)優(yōu)參數(shù)

通過(guò)調(diào)整參數(shù)降低寫(xiě)壓力時(shí),一定要實(shí)時(shí)關(guān)注iostat系統(tǒng)的各項(xiàng)指標(biāo)。

1、臟頁(yè)刷新的頻率

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

 

詳解MySQL以寫(xiě)為主的系統(tǒng)如何進(jìn)行性能監(jiān)控與調(diào)優(yōu),值得收藏

默認(rèn)1024,遍歷lru list刷新臟頁(yè),值越大,說(shuō)明刷臟頁(yè)頻率越高。

2、磁盤(pán)刷新臟頁(yè)的量:磁盤(pán)io能力

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

 

詳解MySQL以寫(xiě)為主的系統(tǒng)如何進(jìn)行性能監(jiān)控與調(diào)優(yōu),值得收藏

根據(jù)磁盤(pán)io能力進(jìn)行調(diào)整,值越大,每次刷臟頁(yè)的量越大。

3、redolog調(diào)優(yōu)

  1. mysql> show variables like 'innodb_log%'

 

詳解MySQL以寫(xiě)為主的系統(tǒng)如何進(jìn)行性能監(jiān)控與調(diào)優(yōu),值得收藏

logfile大小和組數(shù)可能會(huì)導(dǎo)致寫(xiě)抖動(dòng):日志切換頻率需要監(jiān)控(文件系統(tǒng)層面技巧)。

4、redolog的刷新機(jī)

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

 

詳解MySQL以寫(xiě)為主的系統(tǒng)如何進(jìn)行性能監(jiān)控與調(diào)優(yōu),值得收藏

這里我優(yōu)化了一下

默認(rèn)MySQL的刷盤(pán)策略是1,最安全的,但是安全的同時(shí),自然也就會(huì)帶來(lái)一定的性能壓力。在寫(xiě)壓力巨大的情況下,根據(jù)具體的業(yè)務(wù)場(chǎng)景,犧牲安全性的將其調(diào)為0或2。

詳解MySQL以寫(xiě)為主的系統(tǒng)如何進(jìn)行性能監(jiān)控與調(diào)優(yōu),值得收藏

5、定義每次日志刷新的時(shí)間

  1. mysql> show variables like 'innodb_flush_log_at_timeout'

 

詳解MySQL以寫(xiě)為主的系統(tǒng)如何進(jìn)行性能監(jiān)控與調(diào)優(yōu),值得收藏

默認(rèn)是1,也就是每秒log刷盤(pán),配合innodb_flush_log_at_trx_commit來(lái)設(shè)置,為了充分保證數(shù)據(jù)的一致性,一般innodb_flush_log_at_trx_commit=1,這樣的話,innodb_flush_log_at_timeout的設(shè)置也就沒(méi)有意義了。因此,該參數(shù)的設(shè)置只針對(duì)innodb_flush_log_at_trx_commit為0/2起作用。

6、內(nèi)存臟頁(yè)占比控制

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

 

詳解MySQL以寫(xiě)為主的系統(tǒng)如何進(jìn)行性能監(jiān)控與調(diào)優(yōu),值得收藏

在內(nèi)存buffer pool空間允許的范圍下,可以調(diào)大臟頁(yè)允許在內(nèi)存空間的占比,可解燃眉之急,降低寫(xiě)壓力。

7、關(guān)閉doublewrite降低寫(xiě)壓力

  1. mysql> show variables like '%doub%'
詳解MySQL以寫(xiě)為主的系統(tǒng)如何進(jìn)行性能監(jiān)控與調(diào)優(yōu),值得收藏

兩次寫(xiě)特性,默認(rèn)開(kāi)啟,靜態(tài)參數(shù)。

以上就是針對(duì)mysql在以寫(xiě)為主的情況下的相關(guān)參數(shù)監(jiān)控及調(diào)優(yōu),如何調(diào)整(靜態(tài)參數(shù)、動(dòng)態(tài)參數(shù))最好都要根據(jù)官方文檔來(lái)調(diào)整。后面會(huì)分享更多devops和DBA方面的內(nèi)容,感興趣的朋友可以關(guān)注一下~

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2012-03-26 10:55:03

JavaJava EE

2011-03-10 14:40:54

LAMPMysql

2019-11-01 08:49:07

JVM監(jiān)控性能

2022-11-30 08:17:41

JVM調(diào)優(yōu)技巧

2024-05-21 09:08:57

JVM調(diào)優(yōu)面試

2023-11-15 16:35:31

SQL數(shù)據(jù)庫(kù)

2018-11-12 14:53:09

Redis性能調(diào)優(yōu)數(shù)據(jù)庫(kù)

2019-09-12 08:03:56

MySQL索引數(shù)據(jù)庫(kù)

2019-09-04 08:13:53

MySQLInnodb事務(wù)系統(tǒng)

2019-09-26 08:59:39

DockerGoogle軟件

2020-11-09 07:34:49

JVM性能監(jiān)控

2011-04-07 16:15:31

MySQL服務(wù)器調(diào)優(yōu)

2011-03-18 11:21:48

2023-11-28 08:43:48

2011-03-21 09:35:38

LAMP調(diào)優(yōu)網(wǎng)絡(luò)文件

2014-09-22 13:31:46

Linux

2011-03-10 14:40:52

2009-04-01 11:17:52

內(nèi)存分配調(diào)優(yōu)Oracle

2013-09-24 13:06:56

AngularJS性能優(yōu)化

2017-07-21 08:55:13

TomcatJVM容器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)