日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql的瓶颈_MySQL瓶颈分析与优化

發(fā)布時(shí)間:2024/9/15 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql的瓶颈_MySQL瓶颈分析与优化 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者:蔣樂(lè)興

簡(jiǎn)介

通過(guò)sysbench的oltp_read_write測(cè)試來(lái)模擬業(yè)務(wù)壓力、以此來(lái)給指定的硬件環(huán)境配置一份比較合理的MySQL配置文件。

環(huán)境介紹

硬件配置

軟件環(huán)境

優(yōu)化層級(jí)與指導(dǎo)思想

優(yōu)化層級(jí)

MySQL數(shù)據(jù)庫(kù)優(yōu)化可以在多個(gè)不同的層級(jí)進(jìn)行,常見(jiàn)的有:

SQL優(yōu)化

參數(shù)優(yōu)化

架構(gòu)優(yōu)化

本文重點(diǎn)關(guān)注:參數(shù)優(yōu)化

指導(dǎo)思想

日志先行 -- 一個(gè)事務(wù)能否成功提交的關(guān)鍵是日志是否成功落盤(pán),與數(shù)據(jù)沒(méi)有太大的關(guān)系;也就是說(shuō)對(duì)寫(xiě)的優(yōu)化可以表述為各方面的資源向?qū)懖僮鲀A斜。

瓶頸分析 -- 通過(guò)show global status 的各個(gè)計(jì)數(shù)器的值基本上就能分析出當(dāng)前瓶頸所在,再結(jié)合一些簡(jiǎn)單的系統(tǒng)層面的監(jiān)控工具如top iostat 就能明確瓶頸。

整體性能是“讀”&“寫(xiě)”之間的再平衡。

優(yōu)化過(guò)程

優(yōu)化前

my.cnf中的內(nèi)容(關(guān)鍵部分)

圖像地址:

http://www.sqlpy.com/mysqlz/tuninglog/result/cm16c256g4096ssd/0/

監(jiān)控?cái)?shù)據(jù)

show global status 中Innodb_data_pending_fsyncs 這個(gè)status比較高;

iostat的util項(xiàng)有比較明顯的波峰,峰值使用率高達(dá)85%;

監(jiān)控?cái)?shù)據(jù)分析與優(yōu)化思路

對(duì)監(jiān)控?cái)?shù)據(jù)有兩種可能的解釋:

由于最小化的安裝的buffer_pool_size比較小,所以會(huì)頻繁的觸發(fā)innodb_buffer_pool的最大臟頁(yè)的限制,使得innodb進(jìn)入暴力刷盤(pán)的模式,這種情況下io使用率會(huì)明顯上升。

redo日志重用。 最終的影響可能是兩者的疊加,這里先從buffer_pool開(kāi)始優(yōu)化。

優(yōu)化緩沖池

my.cnf中的內(nèi)容(關(guān)鍵部分)

圖像地址:

http://www.sqlpy.com/mysqlz/tuninglog/result/cm16c256g4096ssd/1/

監(jiān)控?cái)?shù)據(jù)

show global status 中Innodb_data_pending_fsyncs 這個(gè)status減小到了 1;

iostat的util項(xiàng)峰值有所下降;

從性能圖像可以看出增大innodb_buffer_pool_size的值后、性能的峰值所對(duì)應(yīng)的并發(fā)更高了(當(dāng)innodb_buffer_pool_size默認(rèn)的128M調(diào)整到200G時(shí)innodb_buffer_pool_instances自動(dòng)增大到了8)

調(diào)整innodb_buffer_pool_size前后的性能對(duì)比

性能大概提高3倍

圖像地址:

http://www.sqlpy.com/mysqlz/tuninglog/compare/cm16c256g4096ssd/0/1/

監(jiān)控?cái)?shù)據(jù)分析與優(yōu)化思路

針對(duì)innob_buffer_pool_size的調(diào)整取得了一定的收獲,下面將要調(diào)整的就是針對(duì)redo重用的情況了,也就是說(shuō)我們要增大innodb_log_files_in_group和innodb_log_file_size到一個(gè)合適的值。

innob_buffer_pool_size取得的收獲還可以進(jìn)一步擴(kuò)大,那就是增大innodb_buffer_pool_instances的值。

優(yōu)化日志文件

根據(jù)對(duì)之前測(cè)試的記錄每完成一組測(cè)試LSN增大4.5G、測(cè)試持續(xù)時(shí)間大概是5分鐘;理論上把redo文件增大到5G可以做到整個(gè)測(cè)試的過(guò)程中不發(fā)生日志重用、這樣的話測(cè)試的跑分會(huì)更高、曲也線更平滑,不過(guò)這個(gè)會(huì)影響數(shù)據(jù)庫(kù)宕機(jī)恢復(fù)的時(shí)間。MySQL在默認(rèn)配置下innodb_log_files_in_group=2,innodb_log_file_size=48M也就是說(shuō)跑完一組測(cè)試redo日志要刷新48輪(1024*4.5/96 ==48)?先看一下把日志刷新減少到9輪的情況。

my.cnf中的內(nèi)容(關(guān)鍵部分)

圖像地址:

http://www.sqlpy.com/mysqlz/tuninglog/result/cm16c256g4096ssd/2/

調(diào)整innodb_log_files_in_group&innodb_log_file_size前后的性能對(duì)比

性能大概提高2倍

圖像地址:

http://www.sqlpy.com/mysqlz/tuninglog/compare/cm16c256g4096ssd/1/2/

現(xiàn)在看一下日志重用控制在一輪(5G)之內(nèi)的性能表現(xiàn)

my.cnf中的內(nèi)容(關(guān)鍵部分)

圖像地址:

http://www.sqlpy.com/mysqlz/tuninglog/result/cm16c256g4096ssd/3/

調(diào)整innodb_log_files_in_group&innodb_log_file_size前后的性能對(duì)比

性能大概提高2倍

圖像地址:

http://www.sqlpy.com/mysqlz/tuninglog/compare/cm16c256g4096ssd/2/3/

監(jiān)控?cái)?shù)據(jù)分析與優(yōu)化思路

增大redo到5G的情況下由于整個(gè)測(cè)試過(guò)程中幾乎沒(méi)有日志文件重用的問(wèn)題,這樣也就規(guī)避由些引發(fā)的大量數(shù)據(jù)刷盤(pán)行為,所以性能曲線也就更平滑了。

通過(guò)show global status 發(fā)現(xiàn)Table_open_cache_overflows=200W+、Thread_created=2k+

%Cpus : 80.5 us, 13.8 sy, 0.0 ni, 5.4 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st?95%的使用率cpu資源成了大問(wèn)題,這個(gè)使用率下能調(diào)整的參數(shù)不多了

對(duì)磁盤(pán)的監(jiān)控?cái)?shù)據(jù)表明util的峰值已經(jīng)下降到14%、磁盤(pán)已經(jīng)不在是問(wèn)題;所以針對(duì)innodb_buffer_pool_size、innodb_log_files_in_group&innodb_log_file_size 這兩次優(yōu)化的進(jìn)入一步優(yōu)化innodb_buffer_pool_instances、innodb_log_buffer_size 先不進(jìn)行;在些采用“抓大放小”的方式先調(diào)整表緩存與線程緩存。

優(yōu)化其它已知項(xiàng)

cpu使用率達(dá)到了95%,看到這個(gè)數(shù)值有一種發(fā)自?xún)?nèi)心的無(wú)力感,所以打算所目前status中能明確的一些問(wèn)題直接一起調(diào)整了;增大table_open_cache&table_open_cache_instances用于優(yōu)化表緩存、增大thread_cache_size使cpu不用頻繁的創(chuàng)建銷(xiāo)毀線程。

my.cnf中的內(nèi)容(關(guān)鍵部分)

圖像地址:

http://www.sqlpy.com/mysqlz/tuninglog/result/cm16c256g4096ssd/4

調(diào)整前后的比較

圖像地址:

http://www.sqlpy.com/mysqlz/tuninglog/compare/cm16c256g4096ssd/3/4/

總結(jié)

一、考慮到cpu使用率已經(jīng)達(dá)到95%且增加物理cpu不現(xiàn)實(shí)的情況下,決定MySQL參數(shù)優(yōu)化到此為止;最后來(lái)看一眼這次優(yōu)化成果。

圖像地址:

http://www.sqlpy.com/mysqlz/tuninglog/compare/cm16c256g4096ssd/0/4/

二、前面由于篇幅只給出配置文件的一部分、現(xiàn)在我們來(lái)看一下完整的配置文件。

說(shuō)明

之所以max_prepared_stmt_count要調(diào)整到這么是因?yàn)閟ysbench的oltp_read_write這個(gè)測(cè)試會(huì)用于prepare語(yǔ)句、如果這個(gè)值不夠大的話我們測(cè)試不了800+并發(fā),你測(cè)試sysbench其它oltp用例可能不用這么做,同理max_connections的配置也是如此(不過(guò)它確實(shí)設(shè)置的大了點(diǎn))

有些參數(shù)在優(yōu)化過(guò)程中我并沒(méi)有調(diào)整主要原因有兩個(gè):

①.這是有方法論指導(dǎo)的優(yōu)化、它更像定向爆破,所以沒(méi)用的我不去動(dòng)、在關(guān)鍵參數(shù)上調(diào)整后已經(jīng)解決問(wèn)題的情況下,其它相關(guān)的參數(shù)我更加傾向不動(dòng)。

②.對(duì)于從show global status 中能看出非常明確指向的我也會(huì)采取多個(gè)參數(shù)一起調(diào)整的策略。

總結(jié)

以上是生活随笔為你收集整理的mysql的瓶颈_MySQL瓶颈分析与优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。