国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

第三代DRDS分布式SQL引擎全新發(fā)布

xinhaip / 1348人閱讀

摘要:阿里云分布式關(guān)系型數(shù)據(jù)庫(kù)服務(wù),于月號(hào)發(fā)布了版本,這是一個(gè)年度大更新。無(wú)需額外付費(fèi)或者開(kāi)通,不依賴(lài)第三方組件,即可執(zhí)行分布式事務(wù)。確保分布式執(zhí)行代價(jià)的最小化。柔性事務(wù)提供的最終一致方式執(zhí)行的分布式事務(wù)稱(chēng)為柔性事務(wù)。

摘要: DRDS (阿里云分布式關(guān)系型數(shù)據(jù)庫(kù)服務(wù),https://www.aliyun.com/produc...)于 4 月 30 號(hào)發(fā)布了 5.3 版本,年度更新,具備眾多新特性,歡迎品鑒。

DRDS (阿里云分布式關(guān)系型數(shù)據(jù)庫(kù)服務(wù),https://www.aliyun.com/produc...)于 4 月 30 號(hào)發(fā)布了 5.3 版本,這是一個(gè)年度大更新。主要帶來(lái)了以下特性:

性能提升。在大多數(shù)場(chǎng)景下(拆分鍵上的等值查詢(xún)、讀寫(xiě)分離等),同規(guī)格的吞吐量(最大 QPS)可以提升到之前的300%。
原生分布式事務(wù)。無(wú)需額外付費(fèi)或者開(kāi)通,不依賴(lài)第三方組件,即可執(zhí)行分布式事務(wù)。提供柔性事務(wù)與 XA 兩種實(shí)現(xiàn)。
Outline。在無(wú)需改動(dòng)程序的情況下,即可通過(guò)創(chuàng)建 Outline 的形式改變 SQL 的執(zhí)行計(jì)劃,例如指定索引、指定走主庫(kù)或者備庫(kù)等。
明確的 SQL 邊界文檔。在 SQL 邊界內(nèi),進(jìn)行了大量的隨機(jī)測(cè)試,確保功能的穩(wěn)定可靠。
更強(qiáng)大的分布式查詢(xún)優(yōu)化器。確保分布式 SQL 執(zhí)行代價(jià)的最小化。
簡(jiǎn)潔易讀的執(zhí)行計(jì)劃。提供一種新的執(zhí)行計(jì)劃顯示格式,可以非常方便的看出 SQL 的執(zhí)行策略。

性能

DRDS 5.3,使用了 Plan Cache、協(xié)程、FastSQL 等技術(shù),大幅提升了吞吐量,在同規(guī)格下,最大 QPS 提升到了之前的 300%。
例如,對(duì)于之前的版本,8C16G 的 DRDS 最大可以提供 2W/s 的 QPS;對(duì)于 DRDS 5.3,8C16G 的 DRDS 最大可以提供 6W+/s 的 QPS。

測(cè)試場(chǎng)景:
1.實(shí)例規(guī)格為入門(mén)版 8C16G
2.測(cè)試工具為 sysbench
3.后端 RDS 不存在瓶頸
4.測(cè)試 SQL:?jiǎn)伪聿鸱宙I上的等值查詢(xún)

SELECT * FROM t1 WHERE partition_key=?

5.持續(xù)加大并發(fā),直至 DRDS CPU 接近 100%,并且 rt 在5ms左右

Plan Cache
DRDS 5.3 中,引入了 Plan Cache,大幅降低了 SQL 解析與查詢(xún)優(yōu)化的代價(jià)。DRDS 5.3 中,針對(duì)不同類(lèi)型的 SQL,分成了多級(jí) Plan Cache,其中,性能最高的是命中了一級(jí) Plan Cache 的 SQL。無(wú)論參數(shù)取值如何,一定可以被下推到單分片執(zhí)行的 SQL 會(huì)命中一級(jí) Plan Cache,常見(jiàn)的形式有以下幾種:

1.單表拆分鍵上的等值查詢(xún),例如:

SELECT * FROM t1 WHERE partition_key=?

2.拆分鍵上的等值 JOIN 查詢(xún),并且至少其中一個(gè)表帶了拆分鍵上的等值條件,例如:

SELECT * FROM t1 JOIN t2 ON t1.partition_key = t2.partition_key WHERE t1.partition_key=?

3.拆分鍵上的等值關(guān)聯(lián)子查詢(xún),并且其中內(nèi)表或者外表帶了拆分鍵上的等值條件,例如:

SELECT * FROM t1 WHERE EXSITS (SELECT 1 FROM t2 WHERE t1.partition_key = t2.partition_key) AND t1.partition_key=?

在應(yīng)用中,更多的使用能夠命中一級(jí) Plan Cache 的 SQL,能更高的提升系統(tǒng)容量。

協(xié)程
DRDS 5.3 使用了 AliJDK 的 Wisp 協(xié)程。在業(yè)務(wù)邏輯相同的情況下,使用協(xié)程模型與使用線(xiàn)程模型相比,系統(tǒng)容量提升了 30% 左右。

更快的 Parser:FastSQL
DRDS 5.3 中的 Parser 部分,換成了從 Druid(https://github.com/alibaba/druid)剝離出來(lái)的 FastSQL。相對(duì)于老的 Parser,F(xiàn)astSQL 在 SQL 解析方面,比 antlr、javacc 等自動(dòng)生成的 Parser 快了數(shù)十倍至數(shù)百倍,相對(duì) DRDS 老版本的 Parser 帶來(lái)了一倍的性能提升。FastSQL 近期會(huì)開(kāi)源。

原生分布式事務(wù)

DRDS 5.3 提供原生的分布式事務(wù)功能,有以下特點(diǎn):

提供 柔性事務(wù) 與 XA 事務(wù) 兩種事務(wù)方案供用戶(hù)在不同的場(chǎng)景下進(jìn)行選擇。
不依賴(lài)任何第三方組件,能力集成在 DRDS Server 中,專(zhuān)有云無(wú)需額外資源進(jìn)行部署。
無(wú)熱點(diǎn)情況下性能線(xiàn)性可擴(kuò),無(wú)單點(diǎn)瓶頸。
無(wú)需額外開(kāi)通,公有云上購(gòu)買(mǎi)的實(shí)例即可立即使用,不產(chǎn)生額外費(fèi)用。
DRDS 5.3 提供柔性事務(wù)和 XA 事務(wù)兩種方案,一般情況下,當(dāng) DRDS 后端的 MySQL 為 5.7 及以上版本時(shí),推薦使用 XA 事務(wù)。

柔性事務(wù)
DRDS 5.3 提供的最終一致方式執(zhí)行的分布式事務(wù)稱(chēng)為柔性事務(wù)(Flexible Transactions)。

柔性事務(wù)放棄了隔離性,減小了事務(wù)中鎖的粒度,使得應(yīng)用能夠更好的利用數(shù)據(jù)庫(kù)的并發(fā)性能,實(shí)現(xiàn)吞吐量的線(xiàn)性擴(kuò)展。異步執(zhí)行方式可以更好的適應(yīng)分布式環(huán)境,在網(wǎng)絡(luò)抖動(dòng)、節(jié)點(diǎn)故障的情況下能夠盡量保障服務(wù)的可用性(Availability)。

DRDS 5.3 中開(kāi)啟柔性事務(wù)只需要一行代碼:

SET drds_transaction_policy = "flexible";

SHOW VARIABLES LIKE "drds_transaction_policy"; 
+-------------------------+----------+
| VARIABLE_NAME           | VALUE    |
+-------------------------+----------+
| drds_transaction_policy | FLEXIBLE |
+-------------------------+----------+
1 row in set (0.07 sec)

除此之外,DRDS 柔性事務(wù)的使用方法和普通事務(wù)完全相同:應(yīng)用首先用 SET autocommit = 0 和 SET drds_transaction_policy = "flexible" 開(kāi)啟柔性事務(wù);然后在同一個(gè)會(huì)話(huà)中執(zhí)行事務(wù)的 SQL 語(yǔ)句 —— 最后當(dāng)應(yīng)用發(fā)起 commit 或 rollback 后,DRDS 將保證這些 SQL 語(yǔ)句執(zhí)行的原子性:全部成功,或者全部失敗。

XA 事務(wù)
DRDS 5.3 也支持 XA 事務(wù),在柔性事務(wù)的基礎(chǔ)上提供了強(qiáng)一致能力。由于 MySQL XA 實(shí)現(xiàn)機(jī)制的限制,我們要求只有在 DRDS 后端是 MySQL 5.7 版本以上才啟用 XA 事務(wù)功能。

SET drds_transaction_policy = "XA";

SHOW VARIABLES LIKE "drds_transaction_policy"; 
+-------------------------+-------+
| VARIABLE_NAME           | VALUE |
+-------------------------+-------+
| drds_transaction_policy | XA    |
+-------------------------+-------+
1 row in set (0.07 sec)

DRDS XA 事務(wù)使用兩階段提交協(xié)議(XA Protocol)保護(hù)子事務(wù)的提交與回滾,消除了柔性事務(wù)的異步回滾問(wèn)題。由于 XA Protocol 在提交與回滾階段始終加鎖,避免了事務(wù)結(jié)束前的臟讀和覆蓋,但是對(duì)性能有較大影響。

Outline

DRDS 5.3 提供 Outline 機(jī)制,允許用戶(hù)在不修改程序與 SQL 的情況下,對(duì)特定類(lèi)型的 SQL 的行為進(jìn)行定制。簡(jiǎn)單說(shuō),Outline 可以將一個(gè)類(lèi)型的源 SQL 在執(zhí)行時(shí)動(dòng)態(tài)的替換成另一個(gè)目標(biāo) SQL,目標(biāo) SQL 中可以帶一些 HINT。

一些典型的應(yīng)用場(chǎng)景:

使用 SLAVE HINT 將特定的SQL路由到只讀實(shí)例執(zhí)行:

CREATE OUTLINE O1 ON SELECT * FROM T1 WHERE ID=? TO SELECT /*+TDDL:SLAVE()*/ * FROM T1 WHERE ID=?    

使用 MySQL 原生的 FORCE INDEX 為特定的 SQL 指定需要選擇的索引:

CREATE OUTLINE O2 ON SELECT * FROM T1 WHERE ID=? TO SELECT * FROM T1 FORCE INDEX(index_xxx) WHERE ID=?

使用 DRDS 的 HINT 將特定的 SQL 路由到指定分片上執(zhí)行:

CREATE OUTLINE O3 ON SELECT * FROM T1 WHERE ID=? TO SELECT /*+TDDL:node("0")*/ * FROM T1 WHERE ID=?

DRDS 中的 Outline,可以對(duì)參數(shù)化的 SQL 進(jìn)行匹配,也可以對(duì)特定參數(shù)的 SQL 進(jìn)行匹配。例如,對(duì)于 SQL:

SELECT * FROM T1 WHERE ID=?

當(dāng) ID 取 1 時(shí),需求到只讀實(shí)例執(zhí)行;當(dāng) ID 取其他值時(shí),需求到主實(shí)例執(zhí)行,則可以創(chuàng)建以下兩個(gè) Outline:

CREATE OUTLINE O1 ON SELECT * FROM T1 WHERE ID=1 TO SELECT /*+TDDL:SLAVE()*/ * FROM T1 WHERE ID=1;
CREATE OUTLINE O2 ON SELECT * FROM T1 WHERE ID=? TO SELECT /*+TDDL:MASTER()*/ * FROM T1 WHERE ID=?;

DRDS 會(huì)優(yōu)先匹配帶具體參數(shù)的 Outline。

DRDS Outline 的詳細(xì)說(shuō)明:https://help.aliyun.com/docum...
DRDS Hint 說(shuō)明:https://help.aliyun.com/docum...

SQL 支持

SQL 兼容性方面,DRDS 5.3 最大的特點(diǎn)在于明確了 SQL 的邊界,也即能夠明確的說(shuō)明哪些 SQL 支持、哪些 SQL 不支持。

DRDS 5.3 SQL 邊界文檔:https://help.aliyun.com/docum...。

一些重要的 SQL 類(lèi)型:

子要查詢(xún)方面,支持 Correlated Subqueries(不要求關(guān)聯(lián)項(xiàng)一定是拆分鍵)、Derived Tables,暫不支持列子查詢(xún)。更多子查詢(xún)的支持范圍參考:https://help.aliyun.com/docum...。
支持分布式 JOIN(不要求一定要帶拆分鍵,不要求必須是拆分鍵上的 JOIN),暫不支持 STRAIGHT_JOIN 和 NATURAL JOIN。
支持大部分 MySQL 函數(shù),主要暫不支持的為:全文檢索函數(shù)、XML 函數(shù)、空間分析函數(shù)與 JSON 函數(shù)。
UPDATE/DELETE 語(yǔ)句僅支持單表操作,不支持 UPDATE/DELETE 中包含 JOIN 以及子查詢(xún)。
聚合函數(shù)支持 COUNT/SUM/MAX/MIN/AVG,GROUP BY 不要求FULL_GROUP_BY(https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sqlmode_only_full_group_by)。
支持邏輯 SQL 的 KILL 與 SHOW PROCESSLIST:https://help.aliyun.com/docum...。
支持 CREATE USER 創(chuàng)建更多用戶(hù),并使用 GRANT 語(yǔ)句對(duì)用戶(hù)權(quán)限進(jìn)行授權(quán):https://help.aliyun.com/docum...。
支持 PREPARE 協(xié)議、多語(yǔ)句與壓縮協(xié)議。

Optimizer 與執(zhí)行計(jì)劃

DRDS 5.3 中,提供了非常豐富的分布式 SQL 優(yōu)化策略,一些重要的例如:
對(duì) Filter 的上拉、下壓、推導(dǎo)等優(yōu)化,確保 DRDS 可以準(zhǔn)確的識(shí)別出 SQL 中可以下推的部分,這個(gè)能很大程度上提升 JOIN、子查詢(xún)的性能,避免應(yīng)該能下推卻無(wú)法下推帶來(lái)的性能損耗。
子查詢(xún)的 SEMI-JOIN 優(yōu)化。DRDS中,子查詢(xún)會(huì)被改寫(xiě)為 SEMI-JOIN 進(jìn)行優(yōu)化,從而使其能夠復(fù)用大量針對(duì)的 JOIN 的優(yōu)化策略,提升性能和功能穩(wěn)定性。
提供了一系列 Hint,允許調(diào)整執(zhí)行計(jì)劃的任意一個(gè)節(jié)點(diǎn),結(jié)合 Outline 機(jī)制,達(dá)到不更改 SQL 也能對(duì) SQL 進(jìn)行性能優(yōu)化的目的。
針對(duì)不同的場(chǎng)景,對(duì)排序與 Limit 進(jìn)行優(yōu)化,確保能將排序與 Limit 盡可能多的下推到存儲(chǔ)節(jié)點(diǎn)上,保證傳輸?shù)臄?shù)據(jù)量最小。
DRDS 5.3 設(shè)計(jì)了全新的執(zhí)行計(jì)劃顯示格式,相對(duì)老版本,具有以下特征:
收縮了分片的顯示,執(zhí)行計(jì)劃不會(huì)因?yàn)樯婕岸鄠€(gè)分片而臃腫龐大。
執(zhí)行計(jì)劃中包含了完整的執(zhí)行策略,不存在二義性。
執(zhí)行計(jì)劃使用了標(biāo)準(zhǔn)的算子的語(yǔ)義,易于將標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)知識(shí)應(yīng)用到 DRDS 的查詢(xún)優(yōu)化中。
執(zhí)行計(jì)劃中將同時(shí)包含分布式執(zhí)行計(jì)劃以及存儲(chǔ)分片上的執(zhí)行計(jì)劃(此特性 6 月份上線(xiàn))。
提供 Optimizer Tracing 功能,能一步一步的展示出執(zhí)行計(jì)劃的優(yōu)化過(guò)程,方便進(jìn)行 SQL 調(diào)優(yōu)。
通過(guò)執(zhí)行計(jì)劃可以清晰的判斷出:

SQL 需要在哪些分片上執(zhí)行,是否跨分片
JOIN、子查詢(xún)、聚合、排序等操作是否能夠下推
JOIN、排序等所使用的算法是什么
例如,針對(duì)以下 SQL 的執(zhí)行計(jì)劃:

mysql> explain SELECT count(*), name FROM drds GROUP BY name ORDER BY count(*);
+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
| LOGICAL PLAN                                                                                                                                              |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Project(count(*)="count(*)", name="name")                                                                                                                 |
|   MemSort(sort="count(*) ASC")                                                                                                                            |
|     Aggregate(group="name", count(*)="SUM(count(*))")                                                                                                     |
|       MergeSort(sort="name ASC")                                                                                                                          |
|         LogicalView(tables="[00-03].drds", shardCount=4, sql="SELECT `name`, COUNT(*) AS `count(*)` FROM `drds` GROUP BY `name` ORDER BY `name`")         |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
5 rows in set (0.13 sec)

從此執(zhí)行計(jì)劃中,我們可以獲得以下信息:
需要在 00-03 供 4 個(gè)分片上執(zhí)行物理 SQL (LogicalView 算子):SELECT name, COUNT() AS count() FROM drds GROUP BY name ORDER BY name。
Group By 操作基于排序?qū)崿F(xiàn),需要對(duì) name 進(jìn)行排序。由于每個(gè)分片上已經(jīng)完成了 Order By 操作,因此分布式層需要對(duì)各個(gè)分片的數(shù)據(jù)做歸并排序(MergeSort 算子)。
每個(gè)分組內(nèi),對(duì) COUNT() 的結(jié)果做 SUM 操作,以匯總每個(gè)分片 COUNT() 的結(jié)果(Aggregate 算子)。
使用內(nèi)存排序,對(duì) Aggregate 節(jié)點(diǎn)輸出的 count(*) 進(jìn)行排序(MemSort 算子)。
最終結(jié)果集輸出的是 count(*) 與 name 兩列(Project 算子)。
更多關(guān)于 DRDS 5.3 執(zhí)行計(jì)劃的介紹,請(qǐng)關(guān)注后續(xù)的文章。

What"s NEXT
6 月底,DRDS 將發(fā)布 5.3.2,將會(huì)提供以下特性:
帶計(jì)算能力的 DRDS 只讀實(shí)例。可以直接在RDS主實(shí)例或者只讀實(shí)例上,進(jìn)行最高可提供 READ COMMITTED 級(jí)別的復(fù)雜 SQL(例如千萬(wàn)級(jí)的表的 JOIN 等)執(zhí)行能力,并且隨規(guī)格的提升,響應(yīng)時(shí)間能進(jìn)行近線(xiàn)性的擴(kuò)展。
回收站,可對(duì) DROP TABLE 操作進(jìn)行閃回,方便在誤刪表的場(chǎng)景下快速對(duì)數(shù)據(jù)進(jìn)行恢復(fù)。
基于事務(wù)的廣播表寫(xiě)入。廣播表將不再依賴(lài)任何第三方組件,可自行創(chuàng)建使用。
跨實(shí)例、機(jī)房、單元依然能保證全局唯一的主鍵服務(wù)。

原文鏈接

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/17757.html

相關(guān)文章

  • 阿里云發(fā)布POLARDB,未來(lái)3年無(wú)自研數(shù)據(jù)庫(kù)的云計(jì)算玩家將被淘汰

    摘要:近日,阿里云正式對(duì)外發(fā)布了全新一代自研關(guān)系型數(shù)據(jù)庫(kù)。而他認(rèn)為,在未來(lái)年內(nèi),沒(méi)有自研數(shù)據(jù)庫(kù)的云計(jì)算廠商將會(huì)被逐漸淘汰出局。 近日,阿里云正式對(duì)外發(fā)布了全新一代自研關(guān)系型數(shù)據(jù)庫(kù)POLARDB。值得注意的是,POLARDB并不是基于開(kāi)源數(shù)據(jù)庫(kù)MySQL之上研發(fā)的分支,而且基于第三代分布式共享存儲(chǔ)架構(gòu),創(chuàng)新實(shí)現(xiàn)企業(yè)級(jí)...

    yexiaobai 評(píng)論0 收藏0
  • 阿里云發(fā)布POLARDB,未來(lái)3年無(wú)自研數(shù)據(jù)庫(kù)的云計(jì)算玩家將被淘汰

    摘要:近日,阿里云正式對(duì)外發(fā)布了全新一代自研關(guān)系型數(shù)據(jù)庫(kù)。而他認(rèn)為,在未來(lái)年內(nèi),沒(méi)有自研數(shù)據(jù)庫(kù)的云計(jì)算廠商將會(huì)被逐漸淘汰出局。 近日,阿里云正式對(duì)外發(fā)布了全新一代自研關(guān)系型數(shù)據(jù)庫(kù)POLARDB。值得注意的是,POLARDB并不是基于開(kāi)源數(shù)據(jù)庫(kù)MySQL之上研發(fā)的分支,而且基于第三代分布式共享存儲(chǔ)架構(gòu),創(chuàng)新實(shí)現(xiàn)企業(yè)級(jí)OLTP與OLAP一體化數(shù)據(jù)庫(kù)系統(tǒng)整體設(shè)計(jì)。這意味著,在行業(yè)還在使用第一代,第二代架...

    FingerLiu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<