特別要注意的是,主鍵索引的創(chuàng)建目前也是不支持并行的,因此如果一個(gè)并行創(chuàng)建索引的SQL語句包含創(chuàng)建主鍵索引,或者前面提及的spatial index與fulltext index,那么客戶端將會(huì)收到一個(gè)告警,提示該操作不支持并行創(chuàng)建索引,同時(shí)該語句會(huì)采用單線程創(chuàng)建索引的方式執(zhí)行完成 。
從SQL語句的角度,如前所述,創(chuàng)建索引可以采用不同的算法,由于COPY算法(ALGORITHM=COPY)不是采用批量插入的方式,因此不會(huì)受益于該并行創(chuàng)建索引優(yōu)化 。而對(duì)于INPLACE算法,如果創(chuàng)建索引用的是非rebuild的方式,都可以受益于該優(yōu)化;一旦需要使用rebuild的方式創(chuàng)建索引,因?yàn)樯婕暗街麈I索引的建立,將無法使用并行創(chuàng)建索引的算法 。
示例下面我們通過幾個(gè)實(shí)例來了解一下如何使用并行創(chuàng)建索引算法加快創(chuàng)建速度,以及我們的條件約束是如何生效的 。
1.我們使用sysbench的表,表內(nèi)有1億條數(shù)據(jù)

文章插圖
2.在該表的k字段建索引,采用社區(qū)默認(rèn)單線程,耗時(shí)146.82s

文章插圖
3.通過設(shè)置innodb_rds_parallel_index_creation_threads= 4啟用4個(gè)線程建索引,可以看到建索引耗時(shí)38.72s,速度提升3.79倍 。

文章插圖
4. 假設(shè)我們要修改主鍵索引,雖然指定了多線程,但是會(huì)收到一個(gè)warning,實(shí)際上只能通過單線程建索引

文章插圖
注意事項(xiàng)首先對(duì)innodb_rds_parallel_index_creation_threads這個(gè)參數(shù)進(jìn)行一下說明,它控制了系統(tǒng)中所有并行DDL可以使用的總線程數(shù),取值范圍是[1-128] 。該參數(shù)取值為1表示使用原始的單線程創(chuàng)建索引,取值為N,表示接下來的DDL使用N個(gè)線程創(chuàng)建 。如果一個(gè)DDL使用了100個(gè)線程在執(zhí)行,那么另外一個(gè)也要使用并行的DDL且最多只能使用剩下的28個(gè)線程;而如果128個(gè)線程都被并行DDL語句占用了,新來的DDL只能走原始的單線程創(chuàng)建的邏輯 。
雖然該并行創(chuàng)建索引加快了索引的創(chuàng)建速度,但是在具體使用場景下,還是需要有審慎的評(píng)估 。我們知道在并行算法應(yīng)用之后,該DDL對(duì)硬件資源的使用會(huì)盡可能的充分,這也意味著其它操作就得不到太多的資源了 。因此,針對(duì)不同的場景需要具體地分析,它決定了我們?nèi)绾蝿?chuàng)建索引 。
對(duì)于遷移場景,由于這時(shí)候還沒有任何業(yè)務(wù)接入,用戶希望盡快完成所有索引的創(chuàng)建,因此可以盡量設(shè)置多線程數(shù),比如我們是16核規(guī)格的實(shí)例,那么我們就可以把并行線程的數(shù)量指定為16,加速完成操作 。
如果是用戶業(yè)務(wù)運(yùn)行階段要?jiǎng)?chuàng)建索引,我們還是不希望DDL操作,對(duì)正在運(yùn)行的業(yè)務(wù)如DML操作等有太多的影響 。因此,這時(shí)候創(chuàng)建索引可以指定相對(duì)少一些的線程數(shù)量,比如2-4(或者根據(jù)CPU規(guī)格以及負(fù)載決定,同時(shí)不鼓勵(lì)并發(fā)地執(zhí)行多個(gè)DDL操作) 。這樣既能相對(duì)地加速創(chuàng)建索引的進(jìn)程,也能保證DML的正常進(jìn)行 。
綜上所述,GaussDB(for MySQL)支持了并行創(chuàng)建索引,通過縮短創(chuàng)建索引使用的時(shí)間,很好地解決了客戶關(guān)切的兩類問題,提升了客戶的體驗(yàn) 。但技術(shù)無止境,在創(chuàng)建索引領(lǐng)域,還有其它的問題需要我們優(yōu)化解決,例如如何減少創(chuàng)建索引步驟對(duì)IO的影響等等 。我們后續(xù)會(huì)針對(duì)這些點(diǎn)進(jìn)行優(yōu)化,給客戶帶來更多的驚喜 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 吃橙子會(huì)引起上火嗎 能增加機(jī)體抵抗力
- 北京五中哪個(gè)區(qū) 北京五中怎么樣?
- 健身 讓你強(qiáng)體加瘦身
- 加班族 健身有好處
- 遠(yuǎn)程查看別人微信聊天記錄 怎么把對(duì)方微信盜了
- 我的婆婆太迷信了 我應(yīng)該怎么辦
- 遇見這樣的婆婆我該怎么辦呢?
- 第一次談戀愛該怎么談?5個(gè)方面必須了解!
- 內(nèi)向的人怎么談戀愛?學(xué)會(huì)四個(gè)技巧
- 男朋友異性緣太好 沒有安全感怎么辦
