近數(shù)據(jù)處理(NDP),為GaussDB(for MySQL)性能提升“加冕”

      網(wǎng)友投稿 794 2025-03-31

      在上一篇文章《首席科學(xué)家為您揭秘:我們介紹了GaussDB(for MySQL)的體系架構(gòu),這篇文章我們將重點(diǎn)介紹GaussDB(for MySQL)如何將查詢處理卸載到存儲(chǔ)層,我們將這一特性稱之為近數(shù)據(jù)處理(Near Data Processing),簡(jiǎn)稱NDP。


      NDP出現(xiàn)的契機(jī)

      在計(jì)算節(jié)點(diǎn)實(shí)例上執(zhí)行查詢操作首先需要將數(shù)據(jù)頁(yè)面加載到InnoDB緩沖池(buffer pool)。相對(duì)傳統(tǒng)數(shù)據(jù)庫(kù)使用本地存儲(chǔ),云數(shù)據(jù)庫(kù)需要通過(guò)網(wǎng)絡(luò)獲取數(shù)據(jù),因此從存儲(chǔ)節(jié)點(diǎn)讀取頁(yè)面數(shù)據(jù)的延遲要高得多。相比社區(qū)版MySQL,GaussDB(for MySQL)支持并行查詢,可通過(guò)多線程并行將數(shù)據(jù)讀取到緩沖池中,但當(dāng)表數(shù)據(jù)量較大(包含數(shù)百萬(wàn)甚至更多的數(shù)據(jù)行),分析查詢需要掃描大量數(shù)據(jù)時(shí),將所需數(shù)據(jù)全部加載到緩沖池中,IO成本將變得非常高。因此,我們需要一種更優(yōu)的方法來(lái)解決此問(wèn)題。

      我們的解決方案是基于GaussDB(for MySQL) 計(jì)算節(jié)點(diǎn)與存儲(chǔ)節(jié)點(diǎn)之間的緊密集成,將部分查詢處理操作下推至靠近數(shù)據(jù)的分布式存儲(chǔ)系統(tǒng),數(shù)據(jù)庫(kù)術(shù)語(yǔ)中稱為算子下推。通過(guò)這種方式,我們可以利用多存儲(chǔ)節(jié)點(diǎn)的總帶寬。在云環(huán)境中,存儲(chǔ)系統(tǒng)包含數(shù)百節(jié)點(diǎn),我們希望充分利用存儲(chǔ)系統(tǒng)的可擴(kuò)展性,同時(shí)避免網(wǎng)絡(luò)成為性能瓶頸點(diǎn)。NDP允許部分查詢處理以大規(guī)模并行的方式在存儲(chǔ)節(jié)點(diǎn)執(zhí)行,并顯著的減少網(wǎng)絡(luò)IO。

      NDP有諸多好處,包括:

      利用多租戶大規(guī)模分布式云存儲(chǔ)系統(tǒng),在多節(jié)點(diǎn)并行處理數(shù)據(jù)

      顯著減少網(wǎng)絡(luò)IO,只返回滿足WHERE條件的行(過(guò)濾)和查詢涉及的列(投影)或聚合操作的結(jié)果,而不是將完整的數(shù)據(jù)頁(yè)面從存儲(chǔ)節(jié)點(diǎn)返回至計(jì)算節(jié)點(diǎn)

      近數(shù)據(jù)處理(NDP),為GaussDB(for MySQL)性能提升“加冕”

      避免大數(shù)量掃描導(dǎo)致經(jīng)常訪問(wèn)的數(shù)據(jù)頁(yè)面從緩存池中移除

      那么存儲(chǔ)層是如何處理的呢?

      算子下推通常適用于

      全表掃描、索引掃描、范圍查詢

      等場(chǎng)景。WHERE條件可下推至存儲(chǔ)層,當(dāng)前支持的數(shù)據(jù)類型包括:

      數(shù)值類型(numeric, integer, float, double)

      時(shí)間類型(date, time, timestamp)

      字符串類型(char, varchar)等

      算子下推可以與計(jì)算節(jié)點(diǎn)的并行查詢完美結(jié)合,從概念上講,一個(gè)查詢首先在計(jì)算層(垂直擴(kuò)展)拆分為多個(gè)worker線程并行處理,每個(gè)worker線程均可觸發(fā)算子下推。由于分布式存儲(chǔ)中數(shù)據(jù)分布的策略,每個(gè)worker線程的負(fù)載將分配至存儲(chǔ)系統(tǒng)的多個(gè)節(jié)點(diǎn)上(水平擴(kuò)展),每個(gè)存儲(chǔ)節(jié)點(diǎn)都有線程池處理算子下推請(qǐng)求。

      查詢是否啟用算子下推,是在查詢優(yōu)化階段,優(yōu)化器根據(jù)統(tǒng)計(jì)信息和執(zhí)行計(jì)劃自動(dòng)決策的。此外用戶還可以使用 hint 來(lái)控制查詢操作是否開(kāi)啟算子下推。

      算子下推可以很好地處理冷數(shù)據(jù),然而,GaussDB(for MyQL)是一個(gè)OLTP系統(tǒng),通常包含并發(fā)更新操作。當(dāng)前計(jì)算下推實(shí)現(xiàn),MVCC處理僅在計(jì)算節(jié)點(diǎn)進(jìn)行,存儲(chǔ)節(jié)點(diǎn)只處理可見(jiàn)的行,針對(duì)無(wú)法判斷可見(jiàn)性的行,原樣返回至計(jì)算節(jié)點(diǎn),通過(guò)undo-log回放出對(duì)應(yīng)的數(shù)據(jù)。

      通過(guò)算子下推,我們將獲得怎樣的收益呢?

      以TPC-H標(biāo)準(zhǔn)測(cè)試集(scale factor: 100)為例,CPU:16核,內(nèi)存: 128GB,計(jì)算節(jié)點(diǎn)數(shù)據(jù)庫(kù)緩沖池大小設(shè)置為80GB,采用冷數(shù)據(jù)進(jìn)行驗(yàn)證。

      下圖展示了TPC-H Q6, Q12, Q14,? Q15? 4 個(gè)Query的查詢結(jié)果,均有20-40倍的性能提升。以Q12為例,只開(kāi)啟NDP,借助分布式存儲(chǔ)算力和網(wǎng)絡(luò)IO縮減,性能提升5倍,同時(shí)在計(jì)算節(jié)點(diǎn)開(kāi)啟并行查詢,又獲得7倍性能提升,總體提升約35倍,這個(gè)提升效果是非常顯著的。

      本文中提到的這些功能都可在實(shí)際生產(chǎn)環(huán)境中使用,而這只是開(kāi)始,隨著我們將更多計(jì)算推送到存儲(chǔ)層,更多的查詢將從此優(yōu)化中受益,我們可以期待更大的性能提升。

      如何啟用NDP?

      開(kāi)啟NDP開(kāi)關(guān),對(duì)當(dāng)前Session生效,優(yōu)化器自動(dòng)判斷是否進(jìn)行計(jì)算下推。

      mysql> show variables like 'ndp_mode'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | ndp_mode | ON | +---------------+-------+ 1 row in set (0.00 sec) mysql> explain select count(*) from lineitem; +----+-------------+----------+------------+-------+---------------+---------+---------+------+-----------+----------+-------------------------------------------------------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+----------+------------+-------+---------------+---------+---------+------+-----------+----------+-------------------------------------------------------------------+ | 1 | SIMPLE | lineitem | NULL | index | NULL | PRIMARY | 8 | NULL | 594000899 | 100.00 | Using pushed NDP columns; Using pushed NDP aggregate; Using index | +----+-------------+----------+------------+-------+---------------+---------+---------+------+-----------+----------+-------------------------------------------------------------------+ 1 row in set, 1 warning (0.00 sec)

      通過(guò)hint方式,使NDP對(duì)當(dāng)前Query生效。

      mysql> show variables like 'ndp_mode'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | ndp_mode | OFF | +---------------+-------+ 1 row in set (0.00 sec) mysql> explain select count(*) from lineitem; +----+-------------+----------+------------+-------+---------------+---------+---------+------+-----------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+----------+------------+-------+---------------+---------+---------+------+-----------+----------+-------------+ | 1 | SIMPLE | lineitem | NULL | index | NULL | PRIMARY | 8 | NULL | 594000899 | 100.00 | Using index | +----+-------------+----------+------------+-------+---------------+---------+---------+------+-----------+----------+-------------+ 1 row in set, 1 warning (0.00 sec) mysql> explain select/*+ ndp_pushdown() */ count(*) from lineitem; +----+-------------+----------+------------+-------+---------------+---------+---------+------+-----------+----------+-------------------------------------------------------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+----------+------------+-------+---------------+---------+---------+------+-----------+----------+-------------------------------------------------------------------+ | 1 | SIMPLE | lineitem | NULL | index | NULL | PRIMARY | 8 | NULL | 594000899 | 100.00 | Using pushed NDP columns; Using pushed NDP aggregate; Using index | +----+-------------+----------+------------+-------+---------------+---------+---------+------+-----------+----------+-------------------------------------------------------------------+ 1 row in set, 1 warning (0.00 sec)

      挑戰(zhàn)與今后方向

      NDP有諸多好處,但它也有一些技術(shù)挑戰(zhàn)需要我們解決。如分布式存儲(chǔ)系統(tǒng)為多租戶共享,為了避免不同租戶對(duì)資源爭(zhēng)搶使用,我們需要實(shí)現(xiàn)單租戶級(jí)的資源管控。另外是優(yōu)化器決策使用NDP的時(shí)機(jī),需結(jié)合觸發(fā)網(wǎng)絡(luò)IO讀取的數(shù)據(jù)量以及已緩存在緩沖池中的數(shù)據(jù)量綜合考慮。

      GaussDB(for MySQL)是一款云原生數(shù)據(jù)庫(kù),該體系結(jié)構(gòu)支持極其強(qiáng)大和靈活的NDP框架。未來(lái),我們計(jì)劃利用此框架不僅僅是做查詢處理,還將進(jìn)一步擴(kuò)展存儲(chǔ)層中的數(shù)據(jù)庫(kù)功能,這些功能可以與查詢下推結(jié)合使用。我們相信,云堆棧的深度集成是釋放云數(shù)據(jù)庫(kù)力量的關(guān)鍵,華為云在實(shí)現(xiàn)這一目標(biāo)方面處于領(lǐng)先地位,正如GaussDB(for MySQL)所證明的那樣。

      請(qǐng)大家保持關(guān)注,我們后續(xù)將會(huì)給大家?guī)?lái)更多精彩技術(shù)分享。也歡迎大家前往華為云官網(wǎng),了解更多GaussDB(for MySQL)詳情:https://www.huaweicloud.com/product/gaussdb_mysql.html

      MySQL 云數(shù)據(jù)庫(kù) MySQL

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:延慶庫(kù)存商品進(jìn)銷存管理(1分鐘之前已更新)
      下一篇:excel中統(tǒng)計(jì)人數(shù)的教程
      相關(guān)文章
      亚洲综合一区无码精品| 国产亚洲精品免费视频播放| 亚洲欧洲自拍拍偷精品 美利坚 | 亚洲区精品久久一区二区三区| 亚洲第一中文字幕| 亚洲精品成人av在线| 亚洲精品自产拍在线观看动漫| 午夜影视日本亚洲欧洲精品一区| 亚洲日韩av无码| 毛茸茸bbw亚洲人| 亚洲乱亚洲乱妇无码麻豆| 亚洲无线码一区二区三区| 亚洲情XO亚洲色XO无码| 亚洲精品无码精品mV在线观看 | 亚洲人成图片网站| 亚洲色少妇熟女11p| 亚洲国产精品精华液| mm1313亚洲国产精品无码试看| 亚洲AV成人精品一区二区三区| 亚洲av中文无码字幕色不卡| 激情无码亚洲一区二区三区 | 日韩精品亚洲专区在线影视 | 久久青青草原亚洲av无码app| 久久久久亚洲AV无码网站| 亚洲综合免费视频| 亚洲国产精品综合一区在线| 亚洲中文字幕久久精品无码VA| 亚洲成a人片在线观看天堂无码| 亚洲av无码一区二区三区四区| 国产精品亚洲综合网站| 亚洲七七久久精品中文国产| 亚洲中文字幕无码久久综合网| 亚洲av无码潮喷在线观看| 久久亚洲精品国产精品| 色婷五月综激情亚洲综合| 亚洲人成77777在线播放网站不卡 亚洲人成77777在线观看网 | 久久亚洲国产伦理| 亚洲欧洲在线播放| 国产亚洲精品bv在线观看| 日本亚洲高清乱码中文在线观看| 91麻豆精品国产自产在线观看亚洲 |