BI報表的設計,提升數(shù)據(jù)分析與決策效率">BI報表的設計,提升數(shù)據(jù)分析與決策效率
1735
2022-05-29
1 問題背景
使用sysbench對mysql5.7.21進行256并發(fā)壓測時,調(diào)優(yōu)前在Kunpeng920壓測TPS為4197,與理想數(shù)據(jù)有較大差距。
2 原因分析
2.1 Top命令查看cpu資源使用情況
執(zhí)行命令進行壓測時發(fā)現(xiàn),top命令下mysql進程cpu使用率6000%左右,其中系統(tǒng)調(diào)用占用較高,為進一步明確mysql進程在執(zhí)行哪些過程,進行perf 熱點函數(shù)和火焰圖分析。
2.2 perf命令查看熱點函數(shù)
通過在壓測過程中執(zhí)行perf top命令,查看到相關(guān)函數(shù)調(diào)用較高:
進一步明確分析函數(shù)調(diào)用棧關(guān)系,使用perf record命令抓取一段時間perf 數(shù)據(jù),進行解析后生成相應火焰圖(火焰圖生成過程可參考https://github.com/brendangregg/FlameGraph ):
分析發(fā)現(xiàn)mysql中調(diào)用的熱點函數(shù)MVCC::view_open和PolycyMutex_在底層調(diào)用的是spin_lock相關(guān)函數(shù),疑是大量線程都在進行自旋空轉(zhuǎn),消耗cpu資源。
3 解決方案
3.1 修改Mysql源碼中CacheLine(可選優(yōu)化項)
通過github上mysql-5.7.21相關(guān)issue發(fā)現(xiàn),在mysql中存在對cacheLine的硬編碼現(xiàn)象,mysql中cachline大小是適配X86平臺的為64字節(jié),Kunpeng 920下cacheLine為128字節(jié)。可參考以下issue鏈接https://github.com/mysql/mysql-server/pull/66/files對mysql源碼進行修改,此措施可獲得相應的性能提升。
Cacheline機制理解:
CPU標識Cache中的數(shù)據(jù)是否為有效數(shù)據(jù)不是以內(nèi)存位寬為單位,而是以Cacheline為單位。這個機制可能會導致偽共享(false sharing)現(xiàn)象,從而使得CPU的Cache命中率變低。出現(xiàn)偽共享的常見原因是高頻訪問的數(shù)據(jù)未按照Cacheline大小對齊,而在高并發(fā)壓測mysql時,其中加鎖的全局變量或數(shù)據(jù)一般是在高頻的訪問,這就可能導致性能的下降。(對于高頻訪問的鎖變量,實際是對鎖變量進行高頻的讀寫操作,容易發(fā)生偽共享問題)
3.2 修改mysql數(shù)據(jù)庫配置參數(shù)
Mysql中影響spin_lock相關(guān)性能參數(shù)的主要有:innodb_thread_concurrency、innodb_spin_wait_delay、innodb_sync_spin_loops。其中nnodb_thread_concurrency控制并發(fā)的線程數(shù),推薦設置為cpu的核心數(shù)。通過上調(diào)innodb_spin_wait_delay和innodb_sync_spin_loops參數(shù),同時使用perf top命令觀測MVCC::view_open和PolycyMutex_熱點函數(shù)使用率,當使用率下降到合理范圍內(nèi)時,即達到預期效果。
由于原子操作在x86和kunpeng 920平臺上的實現(xiàn)存在差異,加上kunpeng920的核心數(shù)較多,導致在mysql高并發(fā)壓測時出現(xiàn)了spin_lock相關(guān)系統(tǒng)調(diào)用較高,通過相應的mysql參數(shù)優(yōu)化即可實現(xiàn)性能提升,結(jié)合Mysql下相關(guān)自旋鎖的代碼實現(xiàn),可更好的理解這幾個參數(shù)的作用,參考鏈接如下:
https://blog.csdn.net/sun_ashe/article/details/81291347
通過對mysql的相關(guān)優(yōu)化,最終在256并發(fā)下,kunpeng 920上TPS達到了11700,達到并超過了預期的TPS值。
4 總結(jié)
遇到性能問題時,首先需要對比查看各項系統(tǒng)參數(shù)是否異常。對于cpu占用較高時,需要善于應用perf工具進行熱點函數(shù)分析,逐一進行排查。
MySQL 應用性能調(diào)優(yōu) SQL 數(shù)據(jù)庫
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。