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