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

歡迎訪問 生活随笔!

生活随笔

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

数据库

腾讯数据库内核团队资深架构师:TXSQL Internals @2018

發(fā)布時間:2024/2/28 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 腾讯数据库内核团队资深架构师:TXSQL Internals @2018 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.



在ODF2018開源數(shù)據(jù)庫論壇暨首屆MariaDB中國用戶者大會上,來自騰訊技術(shù)工程事業(yè)群TEG基礎(chǔ)架構(gòu)部數(shù)據(jù)庫內(nèi)核團(tuán)隊資深架構(gòu)師王少華,做了主題為「TXSQL Internals@2018」的分享。


我們同步了嘉賓現(xiàn)場沙龍分享視頻,請點擊下方「騰訊技術(shù)課小程序」卡片即可查看:

同時附上整理好的演講稿:




CDB作為公司規(guī)模最大的關(guān)系型數(shù)據(jù)庫服務(wù)平臺,為公司內(nèi)部業(yè)務(wù)和騰訊云提供native MySQL服務(wù)。從最初重點支持社交、游戲等場景業(yè)務(wù),到今天覆蓋了游戲、移動互聯(lián)網(wǎng)和金融等全場景業(yè)務(wù),CDB在架構(gòu)、基礎(chǔ)管控平臺和垂直行業(yè)服務(wù)等維度不斷的演進(jìn)和升華。

在CDB一次次業(yè)務(wù)和技術(shù)突破的背后,CDB的內(nèi)核:Tencent MySQL(TXSQL)宛如威力巨大的核彈頭,擊潰來犯的性能、功能和穩(wěn)定性等各種高難度挑戰(zhàn)。

本次分享將圍繞性能優(yōu)化、企業(yè)級特性和線上穩(wěn)定性等多個維度,結(jié)合云上數(shù)據(jù)庫特征,和您一起來探討TXSQL如何支撐全場景業(yè)務(wù)。



王少華,現(xiàn)為TEG基礎(chǔ)架構(gòu)部數(shù)據(jù)庫內(nèi)核團(tuán)隊資深架構(gòu)師,負(fù)責(zé)TXSQL技術(shù)架構(gòu)與核心開發(fā)。

2007年華中科技大學(xué)數(shù)據(jù)庫所研究生畢業(yè)后,先后在達(dá)夢,Teradata,Oracle等公司從事數(shù)據(jù)庫內(nèi)核研發(fā),專注于數(shù)據(jù)庫10+年。其中在Oracle MySQL全球研發(fā)團(tuán)隊工作4+年,作為InnoDB核心成員,設(shè)計和開發(fā)了批量建立索引,數(shù)據(jù)緩沖區(qū)mutex分拆,全文索引插件支持,SKIP LOCKED/NO WAIT以及8.0中DDL的原子性等重要功能。


一、TXSQL的介紹?



騰訊云是中國領(lǐng)先的云服務(wù)提供商,QQ和微信兩大即時通訊工具都是騰訊云的客戶,騰訊云為QQ和微信提供計算,存儲,數(shù)據(jù)庫以及安全等等服務(wù)。目前,騰訊云被來自各行各行業(yè)的超過1百萬開發(fā)者所信賴。


CDB是Cloud Database的簡稱,是騰訊云上提供的關(guān)系數(shù)據(jù)庫服務(wù)。CDB提供了關(guān)系數(shù)據(jù)庫服務(wù),實現(xiàn)了全平臺管控和用戶0運維,提供了良好的應(yīng)用兼容性,以及對多數(shù)據(jù)庫存儲引擎的支持。

目前,CDB在騰訊云和公司內(nèi)部廣泛使用,已經(jīng)成為國內(nèi)TOP的MySQL集群服務(wù)。

在騰訊云上,主要服務(wù)于游戲、互聯(lián)網(wǎng)和金融等數(shù)以萬計的外部企業(yè)客戶;在公司內(nèi)部,CDB對SNG、CDG、OMG和IEG等很多內(nèi)部業(yè)務(wù)場景進(jìn)行了支撐。


CDB是整個數(shù)據(jù)庫云服務(wù)的平臺,而TXSQL則是這個平臺里的數(shù)據(jù)庫內(nèi)核,提供數(shù)據(jù)庫引擎和復(fù)制這兩個核心功能。TXSQL是TengXun MySQL的簡稱,也叫Tecent MySQL,是由TEG基礎(chǔ)架構(gòu)部維護(hù)的MySQL分支。

TXSQL是基于ORACLE官方的MySQL內(nèi)核版本進(jìn)行深度定制。在可用性,性能優(yōu)化,企業(yè)級特性等等方面進(jìn)行了很大的改進(jìn)和提升。

二、TXSQL可用性


異步刪除表

在運維過程中,當(dāng)用戶刪除一個大表時,如果文件特別大,比如2G。在刪除這個大文件的過程中,文件系統(tǒng)IO達(dá)到峰值,持續(xù)1-2秒,這樣會導(dǎo)致文件系統(tǒng)無法響應(yīng)其他數(shù)據(jù)庫實例的IO請求,對上層應(yīng)用表現(xiàn)為數(shù)據(jù)庫無發(fā)響應(yīng)。在有些業(yè)務(wù)中,如果有2秒數(shù)據(jù)庫沒有響應(yīng),就是很嚴(yán)重的事故。為了讓刪除大文件的IO更平滑,我們實現(xiàn)了這個異步刪除表的功能。


基本原理如下:

1. 刪除文件時,將數(shù)據(jù)文件重命名為一個臨時文件;

2. 后臺每隔一段時間,將文件截斷固定的大小,如128M;

3. 當(dāng)文件足夠小的時候,刪除之。

修改表結(jié)構(gòu)DDL的NO_WAIT和WAIT選項

在運維中,經(jīng)常需要在線修改表的結(jié)構(gòu)。這個操作有時會因為一些增刪改查操作占用Metadata Lock(MDL)鎖的時間較長而被阻塞。為了避免這種情況,我們在修改表結(jié)構(gòu)的DDL語句中增加了NO_WAIT和WAIT選項。當(dāng)使用NO_WAIT選項時,如果DDL語句無法立刻獲取到MDL鎖,則返回失敗;當(dāng)使用WAIT [n] 選項時,如果DDL語句在等待MDL鎖n秒后依然無法獲得鎖,則返回失敗。

目前支持的DDL語句如下:

ALTER TABLE

DROP TABLE

TRUNCATE TABLE

OPTIMIZE TABLE

RENAME TABBLE

CREATE INDEX

CREATE FULLTEXT INDEX

CREATE SPATITAL INDEX

DROP INDEX


Information schema中metadata lock信息視圖

MySQL中通過information schema或者performance schema可以獲取到很多系統(tǒng)內(nèi)部的監(jiān)控和狀態(tài)信息。可是無法獲得metadata lock的信息,導(dǎo)致運維過程中進(jìn)行系統(tǒng)診斷非常不便。有了該視圖之后,就很方便的了解到MDL鎖相關(guān)的占用和等待等信息。

三、TXSQL優(yōu)化特性?


下面講從復(fù)制,優(yōu)化器和存儲引擎三個方面來講一下TXSQL所做的優(yōu)化特性。

復(fù)制優(yōu)化主要有三條:

1. Slave中鎖拆分

2. Slave中IO優(yōu)化

3. 并行復(fù)制


Slave鎖拆分

Slave中有一個mutex叫Lock_log,是用來同步SQL線程和IO線程對binlog文件的訪問。在圖中藍(lán)線可以看到,隨著系統(tǒng)壓力變大,SQL線程的吞吐量直線降低(注:用更新行衡量),導(dǎo)致主從延遲逐漸拉大。主要原因是Lock_log被IO thread的占用量變大。

實際上,SQL線程和IO線程只有在訪問同一個binlog文件,而且文件偏移重疊的情況下才會有沖突。因此在大多數(shù)情況下,兩個線程不沖突。為了解決這問題,我們對Lock_log mutex進(jìn)行了拆分。如圖橙線可以看到SQL 線程的吞吐量非常穩(wěn)定。


Slave IO優(yōu)化

通常IO線程在收到一個event之后,會寫入到binlog,并sync到磁盤中。由于sync操作代價很高,所以IO線程的吞吐量很容易到瓶頸(如圖藍(lán)線所示)。為了減小sync的次數(shù),我們對event進(jìn)行緩存,當(dāng)收到一個事務(wù)(transaction)的所有event之后,一并寫入binlog,再sync到磁盤中。

如圖橙線所示,吞吐量得到了很大的提升(>50%)。


并行復(fù)制

在MySQL 5.6的版本中,首次引入了并行復(fù)制功能。系統(tǒng)架構(gòu)是由SQL線程來進(jìn)行binlog的解析以及任務(wù)的分發(fā)和同步,多個工作線程來執(zhí)行任務(wù)。SQL線程是基于庫(database)來進(jìn)行分發(fā)的,也就是說不同數(shù)據(jù)庫的事務(wù)是并發(fā)執(zhí)行的。

但是在線上環(huán)境中,很多用戶往往只有一個庫,按庫的并行復(fù)制和單線程復(fù)制效果一樣。因此,我們開發(fā)了按表(table)的分發(fā)算法,即不同表的事務(wù)由不同的工作線程來執(zhí)行。在我們的性能測試中,按表的測試效果和按logic clock不相上下。


查詢優(yōu)化

在應(yīng)用中,分頁操作以及聚集操作如sum,count是非常常見的。可是在大數(shù)據(jù)量的條件下,這些查詢效率不夠高,或者有時候非常差。為了解決這個問題,我們將這些操作下推到存儲引擎執(zhí)行,極大地提高了查詢執(zhí)行效率。

原因有兩個:

其一避免了server層和存儲引擎層的過多的交互和函數(shù)調(diào)用;

其二避免了行數(shù)據(jù)格式在server層和存儲引擎層的轉(zhuǎn)換。

InnoDB存儲引擎的read view優(yōu)化

我們對事務(wù)系統(tǒng)做了深度的優(yōu)化,包括mutex,read view等方面,并且取得了不錯的效果。如圖中藍(lán)線所示,隨著并發(fā)的增大,寫性能一直很穩(wěn)定。

經(jīng)過優(yōu)化后,橙線所示,寫性能得到大幅提升,達(dá)2倍之多。

四、TXSQL企業(yè)特性



TXSQL企業(yè)級特性


TXSQL審計功能

審計功能是一個很重要的企業(yè)級特性,在線上用戶也有強(qiáng)烈的需求。而MySQL社區(qū)版本不提供審計功能,只提供了審計插件的接口。因為我們在TXSQL中開發(fā)了獨立的審計插件。

在審計插件中,審計記錄首先寫入緩沖區(qū)中,由一個flush線程負(fù)責(zé)將緩沖區(qū)中的記錄寫到磁盤的審計文件里。在一臺物理機(jī)上,有一個審計代理,負(fù)責(zé)將審計文件中的記錄讀取并發(fā)送到后臺存儲,后臺存儲則是CTSDB集群。CTSDB是騰訊云上提供的時序數(shù)據(jù)庫服務(wù),擁有強(qiáng)大的查詢性能和壓縮功能。

在當(dāng)前架構(gòu)下,審計功能開啟后對性能的影響能低至5%。



TXSQL加密功能

MySQL社區(qū)版本提供透明加密功能(Transparent Data Encryption),密鑰在keyring里面。目前只提供keyring_file插件,即密碼保存在本地文件中,而且是明文。商業(yè)版本中則提供keyring_okv插件,與Oracle Key Vault工具進(jìn)行了深度集成。

TXSQL與騰訊云平臺的KMS和CAM進(jìn)行集成,開發(fā)了keyring_kms插件。密鑰在騰訊提供的密鑰管理服務(wù)中保護(hù),安全可靠。


TXSQL線程池

TXSQL線程池功能吸收了其他開源社區(qū)如percona等的一些優(yōu)點,并解決了其中一些痛點。比如在percona版本中存在的由于持有鎖的低優(yōu)先級事務(wù)餓死導(dǎo)致的死鎖問題。

在調(diào)度算法上,如果持有鎖的低優(yōu)先級事務(wù)與高優(yōu)先級事務(wù)可以獲得同等的調(diào)度機(jī)會,從而避免死鎖。

通過上圖可以看到,在并發(fā)線程大于500時,開啟線程池功能,性能更好更穩(wěn)定。



五、TXSQL未來發(fā)展方向:



1. AI和查詢的結(jié)合,開發(fā)更智能的查詢優(yōu)化器;

2. 分布式數(shù)據(jù)庫;

3. 新硬件支持,尤其是非易逝性內(nèi)存,如NVMe;

4. 存儲和計算分離的結(jié)構(gòu)。




總結(jié)

以上是生活随笔為你收集整理的腾讯数据库内核团队资深架构师:TXSQL Internals @2018的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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