《MYSQL教程淺談如何對MySQL內(nèi)核進(jìn)行深度優(yōu)化》要點:
本文介紹了MYSQL教程淺談如何對MySQL內(nèi)核進(jìn)行深度優(yōu)化,希望對您有用。如果有疑問,可以聯(lián)系我們。
所以如何用好MYSQL變得至關(guān)重要,一方面需要通過MYSQL優(yōu)化找出系統(tǒng)讀寫瓶頸,提高數(shù)據(jù)庫性能;另一方面需要合理涉及數(shù)據(jù)結(jié)構(gòu)、調(diào)整參數(shù),以提高用戶操作響應(yīng);同時還有盡可能節(jié)省系統(tǒng)資源,以便系統(tǒng)可以提供更大負(fù)荷的服務(wù).本文將為大家介紹騰訊云團(tuán)隊是如何對Mysql進(jìn)行內(nèi)核級優(yōu)化的思路和經(jīng)驗.MYSQL教程
早期的CDB主要基于開源的Oracle MySQL分支,側(cè)重于優(yōu)化運維和運營的OSS系統(tǒng).在騰訊云,因為用戶數(shù)的不斷增加,對CDB for MySQL提出越來越高的要求,騰訊云CDB團(tuán)隊針對用戶的需求和業(yè)界發(fā)展的技術(shù)趨勢,對CDB for MySQL分支進(jìn)行深度的定制優(yōu)化.優(yōu)化重點圍繞內(nèi)核性能、內(nèi)核功能和外圍OSS系統(tǒng)三個維度展開,具體的做法如下:MYSQL教程
由于騰訊云上的DB基本都需要跨園區(qū)災(zāi)備的特性,因此CDB for MySQL的優(yōu)化主要針對主從DB部署在跨園區(qū)網(wǎng)絡(luò)拓?fù)涞那疤嵯?重點去解決真實部署環(huán)境下的性能難題.經(jīng)過分析和調(diào)研,我們將優(yōu)化的思路歸納為:“消除冗余I/O、縮短I/O路徑和避免大鎖競爭”.以下是內(nèi)核性能的部分案例:MYSQL教程
如上圖所示,在原生MySQL的復(fù)制架構(gòu)中,Master側(cè)通過Dump線程不斷發(fā)送Binlog事件給Slave的I/O線程,Slave的I/O線程在接受到Binlog事件后,有兩個主要的動作:MYSQL教程
經(jīng)過分析,我們的優(yōu)化策略是:MYSQL教程
如上圖所示,經(jīng)過優(yōu)化:左圖35.79%的鎖競爭(futex)已經(jīng)被完全消除;同壓測壓力下,56.15%的文件I/O開銷被優(yōu)化到19.16%,Slave I/O線程被優(yōu)化為預(yù)期的I/O密集型線程.MYSQL教程
如上圖所示,在原生MySQL中多個事務(wù)提交線程TrxN和多個Dump線程之間會同時競爭Binlog文件資源的保護(hù)鎖,多個事務(wù)提交線程對Binlog執(zhí)行寫入,多個Dump線程從Binlog文件讀取數(shù)據(jù)并發(fā)送給Slave.所有的線程之間是串行執(zhí)行的!MYSQL教程
經(jīng)過分析,我們的優(yōu)化策略是:MYSQL教程
優(yōu)化后的示意圖如下:MYSQL教程
經(jīng)過測試,優(yōu)化后的內(nèi)核,不僅提升了事務(wù)提交線程的性能,在Dump線程較多的情況下,對主從復(fù)制性能有較大提升.MYSQL教程
如上圖所示,在原生MySQL中主備庫之間的數(shù)據(jù)發(fā)送和ACK回應(yīng)是簡單的串行執(zhí)行,在上一個事件ACK回應(yīng)到達(dá)之前,不允許繼續(xù)發(fā)送下一個事件;這個行為在跨園區(qū)(RTT 2-3ms)的情況性能非常差,而且也不能很好地利用帶寬優(yōu)勢.MYSQL教程
經(jīng)過分析,我們的優(yōu)化策略是:MYSQL教程
根據(jù)實際用例測試,優(yōu)化后的TPS提升為15%左右.MYSQL教程
在騰訊云上,不時遇到用戶APP異常或者BUG從而占滿DB的最大連接限制,這是CDB OSS帳號無法登錄以進(jìn)行緊急的運維操作.針對這個現(xiàn)狀,我們在MySQL內(nèi)核單獨開辟了一個可配置的連接數(shù)配額,即便在上述場景下,運維帳號仍然可以連接到DB進(jìn)行緊急的運維操作.極大地降低了異常情況下DB無政府狀態(tài)的風(fēng)險.該帳號僅有數(shù)據(jù)庫運維管理權(quán)限,無法獲取用戶數(shù)據(jù),也保證了用戶數(shù)據(jù)的安全性.MYSQL教程
針對一些應(yīng)用對數(shù)據(jù)的一致性要求非常高,CDB在MySQL原生半同步的基礎(chǔ)上進(jìn)行了深度優(yōu)化,確保一個事務(wù)在主庫上提交之前一定已經(jīng)復(fù)制到至少一個備庫上.確保主庫宕機時數(shù)據(jù)的一致性.MYSQL教程
除了以上提到的MySQL內(nèi)核側(cè)的部分優(yōu)化,我們也在外圍OSS平臺進(jìn)行了多處優(yōu)化.例如使用異步MySQL ping協(xié)議實現(xiàn)大量實例的監(jiān)控、通過分布式技術(shù)來加固原有系統(tǒng)的HA/服務(wù)發(fā)現(xiàn)和自動擴容等功能、在數(shù)據(jù)安全/故障切換和快速恢復(fù)方面也進(jìn)行了多處優(yōu)化.MYSQL教程
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/5748.html