当前位置:网站首页>MySQL實戰優化高手08 生產經驗:在數據庫的壓測過程中,如何360度無死角觀察機器性能?
MySQL實戰優化高手08 生產經驗:在數據庫的壓測過程中,如何360度無死角觀察機器性能?
2022-07-06 09:59:00 【辦公模板庫 素材蛙】
1、除了QPS和TPS以外,我們還需要觀察機器的性能
上一篇文章我們給大家講解了如何使用sysbench這個工具非常方便的去對數據庫進行壓測,壓測過後其實大家就會看到自己的數據庫大概能抗下多少QPS和TPS了。
但是這裏還得給大家說另外一個壓測時的技巧,就是上一篇文章裏我們是使用了10個線程去壓測數據庫,如果你的機器性能很高,然後你覺得10個線程沒法壓測出來數據庫真實的最高負載能力,你其實可以在sysbench中不停的增加線程的數量,比如使用20個線程,甚至100個線程去並發的訪問數據庫,直到發現數據庫的QPS和TPS上不去了。
當然,這個不停的提高線程數量,不停的讓數據庫承載更高的QPS的過程,還需要配合我們對機器性能錶現的觀察來做,不能盲目的不停的增加線程去壓測數據庫。
這篇文章,我們就是要講解在壓測過程中,如何同時觀察機器的性能錶現,從而來决定是否要繼續增加線程數量去壓測數據庫。
2、為什麼在不停增加線程數量的時候,要密切關注機器性能?
我們先來解答一個問題,就是在壓測的時候我們需要不停的增加線程的數量去讓數據庫承載更高的QPS,一直到最後看看數據庫到底最高可以承載多高的QPS。
那麼在這個過程中,為什麼必須要密切的關注機器的性能呢?
我們來給大家舉兩個例子,相信大家看完就明白這個問題了。
首先,假設數據庫當前抗下了每秒2000的QPS,同時這個時候機器的CPU負載、內存負載、網絡負載、磁盤IO負載,都在正常的範圍內,負載相對較高一些,但是還沒有達到這些硬件的極限,那麼我們可以認為這臺數據庫在高峰期抗到每秒2000的QPS,是沒有問題的。
但是如果你一直不停的在壓測過程中增加sysbench的線程數量,然後數據庫此時勉强抗到了每秒5000的QPS了,但是這個時候你發現機器的CPU已經滿負荷運行了,內存使用率特別高,內存都快要不够了,然後網絡帶寬幾乎被打滿了,磁盤IO的等待時間特別長,這個時候說明機器已經到了極致了,再搞下去,機器都快掛了。
所以這個時候你壓測出來的5000 QPS是沒什麼代錶性的,因為在生產環境根本不可能讓數據庫抗下這麼高的QPS,因為到這麼高的QPS就說明你的數據庫幾乎已經快要掛掉了,這是不現實的。
所以說,在壓測的過程中,必須是不停的增加sysbench的線程數量,持續的讓數據庫承載更高的QPS,同時密切關注機器的CPU、內存、磁盤和網絡的負載情况,在硬件負載情况比較正常的範圍內,哪怕負載相對較高一些,也還是可以繼續增加線程數量和提高數據庫的QPS的。
然後當你不停的增加線程數量,發現在數據庫抗下一個QPS的數值的同時,機器的CPU、內存、網絡和磁盤的負載已經比較高了,到了一個有一定風險的臨界值的了,此時就不能繼續增加線程數量和提高數據庫抗下的QPS了。
接著我們今天就來給大家分析一下,在壓測的過程中,需要使用哪些linux命令去觀察機器的性能情况,以及機器的CPU、內存、磁盤和網絡在什麼樣的負載下是正常的,在什麼樣的負載下就是比較危險的了。
3、壓測時如何觀察機器的CPU負載情况?
先來看一個最最常用的監測linux機器性能的命令,就是top命令,直接在linux命令行只能够輸入top指令就可以了,然後我們這裏來給大家解釋一下,top指令展示出來的各種信息都是什麼意思。
首先我們會看到如下一行信息:
top - 15:52:00 up 42:35, 1 user, load average: 0.15, 0.05, 0.01
先來解釋一下這行信息,這行信息是最直觀可以看到機器的cpu負載情况的,首先15:52:00指的是當前時間,up 42:35指的是機器已經運行了多長時間,1 user就是說當前機器有1個用戶在使用。
最重要的是load average: 0.15, 0.05, 0.01這行信息,他說的是CPU在1分鐘、5分鐘、15分鐘內的負載情况。
這裏要給大家著重解釋一下這個CPU負載是什麼意思,假設我們是一個4核的CPU,此時如果你的CPU負載是0.15,這就說明,4核CPU中連一個核都沒用滿,4核CPU基本都很空閑,沒啥人在用。
如果你的CPU負載是1,那說明4核CPU中有一個核已經被使用的比較繁忙了,另外3個核還是比較空閑一些。要是CPU負載是1.5,說明有一個核被使用繁忙,另外一個核也在使用,但是沒那麼繁忙,還有2個核可能還是空閑的。
如果你的CPU負載是4,那說明4核CPU都被跑滿了,如果你的CPU負載是6,那說明4核CPU被繁忙的使用還不够處理當前的任務,很多進程可能一直在等待CPU去執行自己的任務。
這個就是CPU負載的概念和含義。
所以大家現在知道了,上面看到的load average實際上就是CPU在最近1分鐘,5分鐘,15分鐘內的平均負載數值,上面都是0.15之類的,說明CPU根本就沒怎麼用。
但是如果你在壓測的過程中,發現4核CPU的load average已經基本達到3.5,4了,那麼說明幾個CPU基本都跑滿了,在滿負荷運轉,那麼此時你就不要再繼續提高線程的數量和增加數據庫的QPS了,否則CPU負載太高是不合理的。
4、壓測時如何觀察機器的內存負載情况?
在你執行top命令之後,中間我們跳過幾行內容,可以看到如下一行內容:
Mem: 33554432k total, 20971520k used, 12268339 free, 307200k buffers
這裏說的就是當前機器的內存使用情况,這個其實很簡單,明顯可以看出來就是總內存大概有32GB,已經使用了20GB左右的內存,還有10多G的內存是空閑的,然後有大概300MB左右的內存用作OS內核的緩沖區了。
對於內存而言,同樣是要在壓測的過程中緊密的觀察,一般來說,如果內存的使用率在80%以內,基本都還能接受,在正常範圍內,但是如果你的機器的內存使用率到了70%~80%了,就說明有點危險了,此時就不要繼續增加壓測的線程數量和QPS了,差不多就可以了。
5、壓測時如何觀察機器的磁盤IO情况?
接著我們說說如何在壓測的時候觀察機器的磁盤IO的情况?
這裏會使用dstat命令,我們之前給大家講過幾個磁盤IO相關的指標,包括存儲的IO吞吐量、IOPS這些,我們下面就看看這裏是如何查看的。
使用dstat -d命令,會看到如下的東西:
-dsk/total - read writ 103k 211k
0 11k
在上面可以清晰看到,存儲的IO吞吐量是每秒鐘讀取103kb的數據,每秒寫入211kb的數據,像這個存儲IO吞吐量基本上都不算多的,因為普通的機械硬盤都可以做到每秒鐘上百MB的讀寫數據量。
使用命令:dstat -r,可以看到如下的信息
--io/total- read writ 0.25 31.9
0 253
0 39.0
他的這個意思就是讀IOPS和寫IOPS分別是多少,也就是說隨機磁盤讀取每秒鐘多少次,隨機磁盤寫入每秒鐘執行多少次,大概就是這個意思,一般來說,隨機磁盤讀寫每秒在兩三百次都是可以承受的。
所以在這裏,我們就需要在壓測的時候密切觀察機器的磁盤IO情况,如果磁盤IO吞吐量已經太高了,都達到極限的每秒上百MB了,或者隨機磁盤讀寫每秒都到極限的兩三百次了,此時就不要繼續增加線程數量了,否則磁盤IO負載就太高了。
6、壓測時觀察網卡的流量情况
接著我們可以使用dstat -n命令,可以看到如下的信息:
-net/total- recv send 16k 17k
這個說的就是每秒鐘網卡接收到流量有多少kb,每秒鐘通過網卡發送出去的流量有多少kb,通常來說,如果你的機器使用的是千兆網卡,那麼每秒鐘網卡的總流量也就在100MB左右,甚至更低一些。
所以我們在壓測的時候也得觀察好網卡的流量情况,如果網卡傳輸流量已經到了極限值了,那麼此時你再怎麼提高sysbench線程數量,數據庫的QPS也上不去了,因為這臺機器每秒鐘無法通過網卡傳輸更多的數據了。
7、今天的一點總結和作業
今天的文章我們來做一點總結,今天給大家介紹了在數據庫壓測的過程中,你必須不停的增加sysbench的線程數量,增加數據庫抗下的QPS,同時通過各種命令觀察機器的CPU、內存、磁盤和網絡的負載情况,如果你發現某個硬件負載已經很高了,此時就可以不再提高數據庫的QPS了。
在硬件的一定合理的負載範圍內,把數據庫的QPS提高到最大,這就是數據庫壓測的時候最合理的一個極限QPS值,而不是不管機器的各個硬件的負載,盲目的不停的增加sysbench的線程數量,不停的讓數據庫增加可以抗下的QPS的數值。
今天同樣給大家布置一個小作業,大家可以自己本地筆記本電腦裝一個數據庫,然後基於sysbench去壓測,不停的提高線程數量,不停的提高數據庫抗下的QPS,同時觀察你的機器的CPU、內存、磁盤和網絡的各項負載
边栏推荐
- C杂讲 浅拷贝 与 深拷贝
- Several ways of MySQL database optimization (pen interview must ask)
- 33岁可以学PLC吗
- VH6501学习系列文章
- CANoe不能自动识别串口号?那就封装个DLL让它必须行
- 嵌入式开发中的防御性C语言编程
- Hugo blog graphical writing tool -- QT practice
- The 32 year old programmer left and was admitted by pinduoduo and foreign enterprises. After drying out his annual salary, he sighed: it's hard to choose
- Several silly built-in functions about relative path / absolute path operation in CAPL script
- Installation de la pagode et déploiement du projet flask
猜你喜欢
Popularization of security knowledge - twelve moves to protect mobile phones from network attacks
14 医疗挂号系统_【阿里云OSS、用户认证与就诊人】
CANoe仿真功能之自动化序列(Automation Sequences )
听哥一句劝,按这套嵌入式的课程内容和课程体系去学习
Several silly built-in functions about relative path / absolute path operation in CAPL script
16 医疗挂号系统_【预约下单】
tn-c为何不可用2p断路器?
C杂讲 浅拷贝 与 深拷贝
Take you back to spark ecosystem!
17 医疗挂号系统_【微信支付】
随机推荐
Zsh configuration file
Hugo blog graphical writing tool -- QT practice
通过bat脚本配置系统环境变量
The real future of hardware engineers may not be believed by you if I say so
Cooperative development in embedded -- function pointer
学习单片机对社会的帮助是很大的
Hero League rotation chart manual rotation
Safety notes
Canoe cannot automatically identify serial port number? Then encapsulate a DLL so that it must work
How can I take a shortcut to learn C language in college
Hero League rotation map automatic rotation
西南大学:胡航-关于学习行为和学习效果分析
Target detection -- yolov2 paper intensive reading
A wave of open source notebooks is coming
在CANoe中通过Panel面板控制Test Module 运行(高级)
Contest3145 - the 37th game of 2021 freshman individual training match_ C: Tour guide
[untitled]
Single chip microcomputer realizes modular programming: Thinking + example + system tutorial (the degree of practicality is appalling)
Why can't TN-C use 2p circuit breaker?
[deep learning] semantic segmentation: thesis reading (neurips 2021) maskformer: per pixel classification is not all you need