精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

TiDB SQL調優案例之避免TiFlash幫倒忙

數據庫 其他數據庫
TiFlash雖然是個好東西,但是優化器還在進化當中,難免有判斷失誤的時候,那么會導致適得其反的效果,我們要及時通過人工手段介入。再給TiDB優化器一些時間。

背景

早上收到某系統的告警tidb節點掛掉無法訪問,情況十萬火急。登錄中控機查了一下display信息,4個TiDB、Prometheus、Grafana全掛了,某臺機器hang死無法連接,經過快速重啟后集群恢復,經排查后是昨天上線的某個SQL導致頻繁OOM。

于是開始亡羊補牢,來一波近期慢SQL巡檢 #手動狗頭#。。。

隨便找了一個出現頻率比較高的慢SQL,經過優化后竟然性能提升了1500倍以上,感覺有點東西,分享給大家。

分析過程

該慢SQL邏輯非常簡單,就是一個單表聚合查詢,但是耗時達到8s以上,必有蹊蹺。

脫敏后的SQL如下:

SELECT
cast( cast( CAST( SUM( num ) / COUNT( time ) AS CHAR ) AS DECIMAL ( 9, 2 )) AS signed ) speed,
... -- 此處省略n個字段
FROM
(
SELECT
DATE_FORMAT( receive_time, '%Y-%m-%d %H:%i:00' ) AS time,
COUNT(*) AS num
FROM
db1.table
WHERE
create_time > DATE_SUB( sysdate(), INTERVAL 20 MINUTE )
GROUP BY
time
ORDER BY
time
) speed;

碰到慢SQL不用多想,第一步先上執行計劃:

很明顯,這張900多萬行的表因為創建了TiFlash副本,在碰到聚合運算的時候優化器選擇了走列存查詢,最終結果就是在TiFlash完成暴力全表掃描、排序、分組、計算等一系列操作,返回給TiDB Server時基本已經加工完成,總共耗時8.02s。

咋一看好像沒啥優化空間,但仔細觀察會發現一個不合理的地方。執行計劃倒數第二排的Selection算子,也就是SQL里面子查詢的where過濾,實際有效數據1855行,卻掃描了整個表接近950W行,這是一個典型的適合索引加速的場景。但遺憾的是,在TiFlash里面并沒有索引的概念,所以只能默默地走全表掃描。

那么優化的第一步,先看過濾字段是否有索引,通常來說create_time這種十有八九都建過索引,檢查后發現確實有。

第二步,嘗試讓優化器走TiKV查詢,這里直接使用hint的方式:

SELECT /*+ READ_FROM_STORAGE(TIKV[db1.table]) */
cast( cast( CAST( SUM( num ) / COUNT( time ) AS CHAR ) AS DECIMAL ( 9, 2 )) AS signed ) speed,
... -- 此處省略n個字段
FROM
(
SELECT
DATE_FORMAT( receive_time, '%Y-%m-%d %H:%i:00' ) AS time,
COUNT(*) AS num
FROM
db1.table
WHERE
create_time > DATE_SUB( sysdate(), INTERVAL 20 MINUTE )
GROUP BY
time
ORDER BY
time
) speed;

再次生成執行計劃,發現還是走了TiFlash查詢。這里就引申出一個重要知識點,關于hint作用域的問題,也就是說hint只能在指定的查詢范圍內生效。具體到上面這個例子,雖然指定了db1.table走TiKV查詢,但是對于它所在的查詢塊來說,壓根不知道db1.table是誰直接就忽略掉了。所以正確的寫法是把hint寫到子查詢中:

SELECT
cast( cast( CAST( SUM( num ) / COUNT( time ) AS CHAR ) AS DECIMAL ( 9, 2 )) AS signed ) speed,
... -- 此處省略n個字段
FROM
(
SELECT /*+ READ_FROM_STORAGE(TIKV[db1.table]) */
DATE_FORMAT( receive_time, '%Y-%m-%d %H:%i:00' ) AS time,
COUNT(*) AS num
FROM
db1.table
WHERE
create_time > DATE_SUB( sysdate(), INTERVAL 20 MINUTE )
GROUP BY
time
ORDER BY
time
) speed;

對應的執行計劃為:

小提示:也可以通過set session tidb_isolation_read_engines = 'tidb,tikv';來讓優化器走tikv查詢。

發現這次雖然走了TiKV查詢,但還是用的TableFullScan算子,整體時間不降反升,和我們預期的有差距。

沒走索引那肯定是和查詢字段有關系,分析上面SQL的邏輯,開發是想查詢table表創建時間在最近20分鐘的數據,用了一個sysdate()函數獲取當前時間,問題就出在這。

獲取當前時間常用的函數有now()和sysdate(),但這兩者是有明顯區別的。引用自官網的解釋:

  • now()得到的是語句開始執行的時間,是一個固定值
  • sysdate()得到的是該函數實際執行的時間,是一個動態值

聽起來比較饒,來個栗子一看便知:

mysql> select now(),sysdate(),sleep(3),now(),sysdate();
+---------------------+---------------------+----------+---------------------+---------------------+
| now() | sysdate() | sleep(3) | now() | sysdate() |
+---------------------+---------------------+----------+---------------------+---------------------+
| 2023-03-16 15:55:18 | 2023-03-16 15:55:18 | 0 | 2023-03-16 15:55:18 | 2023-03-16 15:55:21 |
+---------------------+---------------------+----------+---------------------+---------------------+
1 row in set (3.06 sec)

這個動態時間就意味著TiDB優化器在估算的時候并不知道它是個什么值,走索引和不走索引哪個成本更高,最終導致索引失效。

從業務上來看,這個SQL用now()和sysdate()都可以,那么就嘗試改成now()看看效果:

SELECT
cast( cast( CAST( SUM( num ) / COUNT( time ) AS CHAR ) AS DECIMAL ( 9, 2 )) AS signed ) speed,
... -- 此處省略n個字段
FROM
(
SELECT /*+ READ_FROM_STORAGE(TIKV[db1.table]) */
DATE_FORMAT( receive_time, '%Y-%m-%d %H:%i:00' ) AS time,
COUNT(*) AS num
FROM
db1.table
WHERE
create_time > DATE_SUB( now(), INTERVAL 20 MINUTE )
GROUP BY
time
ORDER BY
time
) speed;

最終結果4.43ms搞定,從8.02s到4.43ms,1800倍的提升。

濫用函數,屬于是開發給自己挖的坑了。

解決方案

經過以上分析,優化思路已經很清晰了,甚至都是常規優化不值得專門拿出來講,但前后效果差異太大,很適合作為一個反面教材來提醒大家認真寫SQL。

其實就兩點:

  • 讓優化器不要走TiFlash查詢,改走TiKV,可通過hint或SQL binding解決
  • 非必須不要使用動態時間,避免帶來索引失效的問題

深度思考

優化完成之后,我開始思考優化器走錯執行計劃的原因。

在最開始的執行計劃當中,優化器對Selection算子的估算值estRows和實際值actRows相差非常大,再加上本身計算和聚合比較多,這可能是導致誤走TiFlash的原因之一。不清楚TiFlash的estRows計算原理是什么,如果在估算準確的情況并且索引正常的情況下會不會走TiKV呢?

另外,我還懷疑過動態時間導致優化器判斷失誤(認為索引失效才選擇走TiFlash),但是在嘗試只修改sysdate()為now()的情況下,發現依然走了TiFlash,說明這個可能性不大。

在索引字段沒問題的時候,按正常邏輯來說,我覺得一個成熟的優化器應該要能夠判斷出這種場景走TiKV更好。

總結

TiFlash雖然是個好東西,但是優化器還在進化當中,難免有判斷失誤的時候,那么會導致適得其反的效果,我們要及時通過人工手段介入。再給TiDB優化器一些時間。

良好的SQL習慣至關重要,這也是老生常談的問題了,再好的數據庫也扛不住亂造的SQL。?

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2017-07-21 08:55:13

TomcatJVM容器

2011-01-21 08:38:20

2023-11-10 09:29:30

MySQLExplain

2011-09-02 14:05:25

SQL Server性能調優

2009-01-08 19:14:37

服務器應用程序SQL Server

2021-11-07 23:49:19

SQL數據庫工具

2009-11-17 13:45:12

Oracle SQL調

2011-03-21 09:35:38

LAMP調優網絡文件

2012-01-10 14:35:08

JavaJVM

2019-09-25 15:09:30

MySQL索引SQL

2009-01-08 19:06:13

服務器應用程序SQL Server

2009-01-08 19:11:39

服務器應用程序SQL Server

2020-06-10 10:40:03

JavaJMH字符串

2021-03-17 11:35:11

JVM代碼Java

2010-07-19 09:39:53

SQL Server

2010-07-19 13:35:51

SQL Server性

2010-04-12 17:30:44

Oracle SQL調

2021-07-15 08:00:47

系統性能調優cpunuma架構

2023-11-28 08:43:48

2021-03-04 08:39:21

SparkRDD調優
點贊
收藏

51CTO技術棧公眾號

99香蕉国产精品偷在线观看 | 成人av国产| 在线观看亚洲精品| 青青草免费在线视频观看| 女人18毛片一区二区三区| 免费视频一区| 欧美另类99xxxxx| 久久久精品人妻无码专区| 少妇精品视频在线观看| 欧美日韩国产页| 在线国产精品网| 青春有你2免费观看完整版在线播放高清 | 中文字幕精品久久| 国产大学生视频| 国内精品伊人| 欧美日韩一区二区三区在线免费观看 | 亚洲一区二区黄色| 亚洲一区3d动漫同人无遮挡 | 国产精品国产一区| 亚洲精品电影在线观看| 污污视频网站在线| yw.尤物在线精品视频| 亚洲国产成人porn| 日本黄xxxxxxxxx100| 黄色国产在线| 波多野结衣在线一区| 成人国产精品av| 精品一区二区无码| 99热这里只有精品8| 欧美另类极品videosbest最新版本| 中文字幕免费高清| 欧美精品中文| 亚洲国产精品久久| 久久久久亚洲av片无码v| 欧美综合影院| 欧美精品一二三区| 久久99999| 欧美特大特白屁股xxxx| 高潮白浆女日韩av免费看| 欧美久久在线观看| 91桃色在线| 亚洲电影激情视频网站| 91亚洲精品国产| 手机av免费在线| 亚洲猫色日本管| 黑人巨大国产9丨视频| 日本成人在线播放| 国产精品欧美综合在线| 色一情一乱一伦一区二区三区丨| 国产永久免费高清在线观看 | 日韩高清在线| 在线免费观看不卡av| 别急慢慢来1978如如2| 日韩精品一区二区三区| 一本色道综合亚洲| 成人黄色一区二区| 草莓视频成人appios| 欧美视频你懂的| www.cao超碰| 四虎地址8848精品| 91精品福利在线一区二区三区| 在线观看免费视频污| 欧美黄色一级| 亚洲国产精品久久久| 国产网站无遮挡| 欧美美女在线| 日韩视频永久免费观看| 五月天色婷婷丁香| 欧美日韩久久| 久久久久久久久久久免费 | 亚洲mv在线看| 黄色在线播放网站| 亚洲一区二区三区四区不卡| 奇米精品一区二区三区| 日本欧美韩国| 欧美电影免费提供在线观看| 大乳护士喂奶hd| 久草成人在线| 久久久www成人免费精品| 久草国产在线视频| 六月天综合网| 91青草视频久久| 三级在线观看网站| 国产片一区二区三区| 亚洲最新免费视频| 白浆视频在线观看| 欧美三区在线视频| 久久精品无码专区| 欧美色女视频| 欧美精品videos| 日韩欧美国产另类| 成人国产精品免费网站| 五月天国产一区| 国产三线在线| 日本久久一区二区| 久久精品aⅴ无码中文字字幕重口| 国产尤物久久久| 欧美另类99xxxxx| 中文字幕一区二区三区四区欧美| 国产呦精品一区二区三区网站| 国产免费一区二区| 欧美精品电影| 欧美日韩在线视频首页| 尤物网站在线看| 极品美女一区二区三区| 欧美黄色www| 一区不卡在线观看| 久久久久久久一区| 99国产精品白浆在线观看免费| 日本美女久久| 亚洲国产91色在线| 欧美做爰爽爽爽爽爽爽| 日韩精品三区四区| 久久波多野结衣| 羞羞网站在线免费观看| 欧美日韩一区二区三区在线| 三叶草欧洲码在线| 国产精品久久| 成人美女av在线直播| 精品无吗乱吗av国产爱色| 性感美女极品91精品| 日韩av影视大全| 日本道不卡免费一区| 2020久久国产精品| 涩涩视频免费看| 亚洲自拍偷拍网站| 色欲欲www成人网站| 91综合视频| 国产精品尤物福利片在线观看| 激情小视频在线观看| 欧美日韩国产一中文字不卡 | 啪啪国产精品| 97精品免费视频| 秋霞网一区二区| 亚洲精品ww久久久久久p站| 中文字幕永久有效| 99九九热只有国产精品| 成人黄色激情网| 亚洲视频tv| 欧美日韩精品一区二区三区蜜桃| 日韩欧美黄色网址| 日本最新不卡在线| 午夜欧美性电影| 成人在线高清| 日韩在线小视频| 亚洲一区二区三区网站| 国产精品污www在线观看| 国产理论在线播放| 手机在线一区二区三区| 成人免费观看网址| 欧美激情二区| 欧美一区二区免费观在线| 亚洲综合视频网站| 国产福利一区二区三区视频在线| 国产制服91一区二区三区制服| 国产精品麻豆| 欧美激情视频给我| 天堂在线中文资源| 在线观看国产日韩| 开心激情五月网| 国产综合久久久久久久久久久久| 亚洲小视频在线播放| 中文字幕一区二区三区中文字幕| 久久久中精品2020中文| 香蕉视频免费在线看| 欧美综合在线视频| 玖玖爱这里只有精品| 成人av在线影院| 国产男女无遮挡| 日韩三级在线| 97影院在线午夜| 亚洲妇女成熟| 日韩中文字幕免费看| 精品国产乱码久久久久久蜜臀网站| 亚洲综合免费观看高清完整版在线 | 国产亚洲人成a在线v网站 | 日本人妻伦在线中文字幕| 精品国产午夜肉伦伦影院| 国产成人极品视频| 九义人在线观看完整免费版电视剧| 精品日韩欧美在线| 久久久久久久久久成人| 亚洲少妇最新在线视频| 污片免费在线观看| 精品亚洲成av人在线观看| 日韩黄色片在线| 欧美精品一区二区三区精品| 91精品综合久久| 欧美成人黑人| 欧美男插女视频| 国产中文字幕在线观看| 欧美一级片免费看| 久久99国产综合精品免费| 亚洲欧美另类图片小说| 国产精品1000部啪视频| 狠狠色综合播放一区二区| 免费av手机在线观看| 爽成人777777婷婷| 免费精品视频一区| 日韩免费高清视频网站| 国产精品久久久久久五月尺| 俺来也官网欧美久久精品| 色yeye香蕉凹凸一区二区av| 99久久久久久久| 欧美在线制服丝袜| 亚洲精品国产精品乱码| 亚洲精品中文在线观看| 免费在线观看a视频| av在线综合网| 麻豆网站免费观看| 蜜臀av在线播放一区二区三区| 黄色www网站| 午夜精品久久99蜜桃的功能介绍| 无遮挡亚洲一区| 国产精品嫩草影院在线看| 操一操视频一区| 亚洲香蕉久久| 国产精品情侣自拍| 日韩pacopacomama| 91精品国产免费久久久久久| 亚洲精品白浆| 久久综合亚洲社区| 日本精品在线| 少妇高潮久久77777| 国产美女性感在线观看懂色av| 日韩国产精品视频| 香蕉av一区二区三区| 亚洲一区二区偷拍精品| 久久久精品国产sm调教网站| 亚洲日本丝袜连裤袜办公室| 综合 欧美 亚洲日本| 日本一区二区视频在线| 四虎国产精品成人免费入口| 久久亚洲捆绑美女| 泷泽萝拉在线播放| 91麻豆文化传媒在线观看| 国产人妻人伦精品1国产丝袜| 成人av在线看| 制服丝袜av在线| 成人一级黄色片| 视频免费在线观看| 不卡欧美aaaaa| 亚洲高清不卡| 久久99精品久久久久久秒播放器| 哺乳挤奶一区二区三区免费看| 99视频在线免费观看| 一区二区三区视频播放| 国产精选在线观看91| avtt综合网| 国产在线播放一区二区| 欧美大奶一区二区| 欧美一区二区三区成人久久片| 久久最新网址| 亚洲国产精品一区二区第一页| 欧美午夜精彩| 中文字幕第一页亚洲| 国产精品videosex极品| 我的公把我弄高潮了视频| 亚洲深夜av| 日韩肉感妇bbwbbwbbw| 精品一区二区三区日韩| 亚洲精品中文字幕乱码无线| 国产宾馆实践打屁股91| 中文字幕影片免费在线观看| 久久久噜噜噜久久中文字幕色伊伊| 白丝女仆被免费网站| 国产精品入口麻豆九色| 麻豆天美蜜桃91| 午夜精品在线看| 一级特黄免费视频| 91麻豆精品国产91| 污视频网站在线播放| 亚洲天堂第一页| 黄在线免费看| 欧美亚洲激情在线| 久久91视频| 国产99在线播放| 精品国产精品国产偷麻豆| 亚洲成年人专区| 9久re热视频在线精品| 手机在线成人免费视频| 成人自拍视频在线观看| 日韩精品电影一区二区| 亚洲你懂的在线视频| 久久国产视频播放| 欧美高清一级片在线| 男人天堂综合网| 中文字幕精品在线| av在线资源| 成人av电影天堂| 视频福利一区| 在线观看污视频| 日韩黄色免费网站| 韩国三级在线看| 国产精品麻豆网站| 亚洲另类欧美日韩| 日韩午夜在线观看| 黄色视屏网站在线免费观看| 久久久久久国产精品美女| 久久婷婷五月综合色丁香| 国产日韩三区| 亚洲草久电影| 一本久道中文无码字幕av| 床上的激情91.| 希岛爱理中文字幕| 91成人网在线| 亚洲成熟女性毛茸茸| 少妇激情综合网| 欧美xxxx做受欧美护士| 精品国产区在线| 激情综合在线| 色婷婷综合在线观看| 国产午夜精品福利| 久久久午夜影院| 日韩精品一区二区三区在线观看| h视频网站在线观看| 欧洲中文字幕国产精品| 91综合精品国产丝袜长腿久久| 中文字幕黄色大片| 蜜臀久久久久久久| 男人操女人动态图| 日韩欧美高清视频| 天天操天天干天天插| 欧美国产日韩中文字幕在线| 24小时成人在线视频| 亚洲精品成人三区| 日韩精品亚洲一区| 娇妻被老王脔到高潮失禁视频| 日韩欧中文字幕| 青青久草在线| 欧美中文字幕在线| 日本欧美三级| koreanbj精品视频一区| 成人黄页毛片网站| 妺妺窝人体色www在线下载| 91精品国产品国语在线不卡| 免费在线观看av| 国产一区二区在线免费| 青青一区二区三区| 日本黄大片一区二区三区| 欧美激情综合五月色丁香小说| 色av性av丰满av| 亚洲欧美国产制服动漫| 女人高潮被爽到呻吟在线观看| 国产亚洲欧美另类一区二区三区| 午夜精品久久99蜜桃的功能介绍| 青青草精品在线| 亚洲一区二区三区四区在线免费观看 | 亚洲一卡二卡| 久久超碰97人人做人人爱| 国产主播av在线| 91精品国产日韩91久久久久久| av免费看在线| 成人xxxxx色| 亚洲精品系列| 国产交换配乱淫视频免费| 欧美在线制服丝袜| 麻豆视频在线播放| 亚洲a∨日韩av高清在线观看| 欧美黄色精品| 天天躁日日躁狠狠躁av麻豆男男 | 国产精品久久久久天堂| 国产精品久久久久久免费| 欧美成人自拍视频| 美女一区二区在线观看| 欧美色图另类小说| 中文字幕精品一区二区精品绿巨人| 国产又粗又猛又黄| 久久不射热爱视频精品| 国产精品视屏| 又色又爽又高潮免费视频国产| 国产精品久久久久久久午夜片| 国内精品偷拍视频| 97香蕉久久超级碰碰高清版| 国产麻豆精品久久| 99热这里只有精品2| 日韩精品a在线观看91| 欧美主播一区二区三区美女 久久精品人| 日韩国产欧美三级| caoporn91| 亚洲国产欧美一区二区三区同亚洲| 精品3atv在线视频| 激情视频小说图片| 久久久亚洲精品一区二区三区 | 国产又黄又爽免费视频| 粉嫩av一区二区三区粉嫩| 蜜臀99久久精品久久久久小说 | 国产在线麻豆精品观看| 日本一级淫片免费放| 在线视频中文亚洲| 精品精品国产毛片在线看| 中文字幕亚洲乱码| 五月综合激情日本mⅴ| 日本在线播放| 精品中文字幕一区| 国产精一区二区三区| 波多野结衣视频观看| 久久久欧美一区二区| 久久影视一区| 人妻一区二区视频|