MySQL優(yōu)化器參數(shù)derived_merge導(dǎo)致多表關(guān)聯(lián)SQL性能及其低下

    最近,MySQL維護(hù)中,遇到一個(gè)問題,通條SQL語(yǔ)句,在mysql 5.6的測(cè)試環(huán)境中執(zhí)行速度不到1秒,但是在

創(chuàng)新互聯(lián)長(zhǎng)期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為祿豐企業(yè)提供專業(yè)的成都網(wǎng)站制作、網(wǎng)站建設(shè),祿豐網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

mysql 5.7生產(chǎn)環(huán)境中執(zhí)行卻要近5分鐘,mysql 5.7中同樣的數(shù)據(jù)庫(kù)同樣的數(shù)據(jù)量,更新完表的統(tǒng)計(jì)信息后執(zhí)行

速度還是要2分鐘。本次問題的處理與sql語(yǔ)句本身沒有關(guān)系,只跟mysql數(shù)據(jù)庫(kù)自身的優(yōu)化器參數(shù)相關(guān),下面是

問題的分析排查過(guò)程,問題分析中的sql語(yǔ)句不需要顯示,可以明確sql是多表join連接并且業(yè)務(wù)不允許更改。

    1、首先,查看測(cè)試環(huán)境和生產(chǎn)環(huán)境中,mysql的sql語(yǔ)句的執(zhí)行計(jì)劃

--測(cè)試環(huán)境,執(zhí)行計(jì)劃只需顯示局部能說(shuō)明問題即可

MySQL 優(yōu)化器參數(shù)derived_merge導(dǎo)致多表關(guān)聯(lián)SQL性能及其低下

--生產(chǎn)環(huán)境,執(zhí)行計(jì)劃只需顯示局部能說(shuō)明問題即可

MySQL 優(yōu)化器參數(shù)derived_merge導(dǎo)致多表關(guān)聯(lián)SQL性能及其低下

    2、從測(cè)試與生產(chǎn)環(huán)境sql語(yǔ)句的對(duì)比可以明顯發(fā)現(xiàn),sql的執(zhí)行計(jì)劃不一致,后續(xù)排查中發(fā)現(xiàn)

a、測(cè)試環(huán)境中sql涉及的表和索引的統(tǒng)計(jì)信息都是當(dāng)天最新的,而生產(chǎn)環(huán)境中的相關(guān)表和索引的統(tǒng)計(jì)信息比較陳舊

b、測(cè)試環(huán)境 mysql大版本為5.6,生產(chǎn)環(huán)境mysql大版本為5.7

    3、問題處理

a、由于sql執(zhí)行計(jì)劃不一致,且生產(chǎn)環(huán)境統(tǒng)計(jì)信息比較舊,重新收集生產(chǎn)環(huán)境表的統(tǒng)計(jì)信息,收集后sql的執(zhí)行速度沒有

提高,相比測(cè)試依然很慢。

b、關(guān)注測(cè)試環(huán)境執(zhí)行計(jì)劃derived和<auto_key>,該特性與mysql 的參數(shù)derived_merge相關(guān),查看該參數(shù)的設(shè)置情況

--測(cè)試環(huán)境

MySQL [(none)]> show global variables like '%switch%';

+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Variable_name    | Value                                                                                                                                                                                                                                                                                                                                            |

+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| optimizer_switch | index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,....... |

+------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

MySQL [(none)]> 

--生產(chǎn)環(huán)境,為了方便說(shuō)明問題,省略了多余的參數(shù)顯示

mysql> show  variables like '%switch%';

+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Variable_name    | Value                                                                                                                                                                                                                                                                                                                                                                                                             |

+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| optimizer_switch | ......, derived_merge=on |

+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

mysql>

c、根據(jù)官方說(shuō)明參數(shù)derived_merge是在mysql5.7版本中引入的,作用就是對(duì)join (select)表連接合并,本次問題sql有

大量的join (select),導(dǎo)致sql執(zhí)行結(jié)果集合并,sql執(zhí)行速度及其緩慢。

d、通過(guò)session級(jí)別臨時(shí)取消該參數(shù),觀察sql執(zhí)行計(jì)劃,發(fā)現(xiàn)sql執(zhí)行計(jì)劃正常,且sql執(zhí)行速度不到1秒與測(cè)試環(huán)境相近

--取消優(yōu)化器derived_merge參數(shù)

mysql> set optimizer_switch="derived_merge=off";

ERROR 2006 (HY000): MySQL server has gone away

No connection. Trying to reconnect...

Connection id:    8980

Current database: mysql

Query OK, 0 rows affected (0.02 sec)

mysql> 

--觀察問題sql執(zhí)行計(jì)劃,此時(shí)生產(chǎn)環(huán)境執(zhí)行計(jì)劃與測(cè)試環(huán)境相同

MySQL 優(yōu)化器參數(shù)derived_merge導(dǎo)致多表關(guān)聯(lián)SQL性能及其低下

--問題sql執(zhí)行速度由原先的近5分鐘到現(xiàn)在的1秒左右

MySQL 優(yōu)化器參數(shù)derived_merge導(dǎo)致多表關(guān)聯(lián)SQL性能及其低下

分享名稱:MySQL優(yōu)化器參數(shù)derived_merge導(dǎo)致多表關(guān)聯(lián)SQL性能及其低下
URL標(biāo)題:http://muchs.cn/article2/pdpeic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)云服務(wù)器、網(wǎng)站導(dǎo)航、品牌網(wǎng)站制作軟件開發(fā)、微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管