gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

干貨分享!MySQL慢查詢的實踐分析總結

MySQL的慢查詢,全名是慢查詢日志,是MySQL提供的一種日志記錄,用來記錄在MySQL中響應時間超過閥值的語句。靜態我們就來介紹介紹,有需要的可以參考參考。

一 為什么要做這個事情

1 什么是慢SQL?

這里指的是MySQL慢查詢,具體指運行時間超過long_query_time值的SQL。

我們常聽常見的MySQL中有二進制日志binlog、中繼日志relaylog、重做回滾日志redolog、undolog等。針對慢查詢,還有一種慢查詢日志slowlog,用來記錄在MySQL中響應時間超過閥值的語句。

大家不要被慢查詢這個名字誤導,以為慢查詢日志只會記錄select語句,其實也會記錄執行時間超過了long_query_time設定的閾值的insert、update等DML語句。

# 查看慢SQL是否開啟 show variables like "slow_query_log%";  # 查看慢查詢設定的閾值 單位:秒 show variables like "long_query_time";

對于我們使用的AliSQL-X-Cluster即XDB來說,默認慢查詢是開啟的,long_query_time設置為1秒。

2 慢查詢為何會導致故障?

真實的慢SQL往往會伴隨著大量的行掃描、臨時文件排序或者頻繁的磁盤flush,直接影響就是磁盤IO升高,正常SQL也變為了慢SQL,大面積執行超時。

去年雙11后,針對技術側暴露的問題,菜鳥CTO線推出多個專項治理,CTO-D各領一項作為sponsor,我所在的大團隊負責慢SQL治理這個專項。

二 要做到什么程度

1 怎么來衡量一個應用的慢SQL嚴重程度?

微平均

sum(aone應用慢SQL執行次數) ----------------------- sum(aone應用SQL執行次數)

我們認為,該值越大,影響越大;該值越小,影響可能小。

極端情況就是應用里每次執行的SQL全是慢SQL,該值為1;應用里每次執行的SQL全不是慢SQL,該值為0。

但是這個指標帶來的問題是區分度不佳,尤其是對SQL QPS很高且大多數情況下SQL都不是慢查詢的情況,偶發的慢SQL會被淹沒。

另外一個問題,偶發的慢SQL是真的慢SQL嗎?我們遇到很多被慢查詢日志記錄的SQL,實際上可能受到其他慢SQL影響、MySQL磁盤抖動、優化器選擇等原因使得常規查詢下表現顯然不是慢SQL的變成了慢SQL。

宏平均

sum(慢SQL 1執行次數)    sum(慢SQL n執行次數) -----------------  +  ------------------ sum(SQL 1執行次數)      sum(SQL n執行次數) ---------------------------------------                    n

這個算法建立在被抓到的慢SQL有一定執行次數的基礎上,可以減少假性慢SQL的影響。

當某些應用QPS很低,即一天執行SQL的次數很少,如果碰到假性SQL就會引起統計誤差。

執行次數

sum(aone應用慢SQL執行次數) -----------------------            7

統計最近一周平均每天的慢SQL執行次數,可以消除掉宏平均帶來的假性SQL問題。

慢SQL模板數量

以上維度均有個時間限定范圍,為了追溯慢SQL歷史處理情況,我們還引入了全局慢SQL模板數量維度。

count(distinct(aone應用慢SQL模板) )

2 目標

  • 核心應用:解決掉所有的慢SQL

  • 普通應用:微平均指標下降50%

3 CTO報表

以CTO-D為單位根據以上多維度指標統計匯總應用的加權平均,由低到高得出排名,突出頭尾top3,每周播報。

三 為什么由我來做

猜測可能與我的背景有關,有C/C++背景,曾在上家公司負責過公司層面異地多活架構的設計和落地,對于MySQL比較了解一些。

另外可能是利益無關,我所在小團隊業務剛起步,不存在慢SQL,這樣可以插入到各個業務線去。

四 行動支撐

1 集團MySQL規約

索引規約摘錄部分:

【強制】超過三個表禁止join。需要join的字段,數據類型保持絕對一致;多表關聯查詢時,保證被關聯的字段需要有索引。

說明:即使雙表join也要注意表索引、SQL性能。

【強制】在varchar字段上建立索引時,必須指定索引長度,沒必要對全字段建立索引,根據實際文本區分度決定索引長度。

說明:索引的長度與區分度是一對矛盾體,一般對字符串類型數據,長度為20的索引,區分度會高達90%以上,可以使用count(distinct left(列名, 索引長度))/count(*)的區分度來確定。

【強制】頁面搜索嚴禁左模糊或者全模糊,如果需要請走搜索引擎來解決。

說明:索引文件具有B-Tree的最左前綴匹配特性,如果左邊的值未確定,那么無法使用此索引。

【推薦】防止因字段類型不同造成的隱式轉換,導致索引失效。

【參考】創建索引時避免有如下極端誤解:

1) 索引寧濫勿缺

認為一個查詢就需要建一個索引。

2) 吝嗇索引的創建

認為索引會消耗空間、嚴重拖慢更新和新增速度。

3) 抵制唯一索引

認為唯一索引一律需要在應用層通過“先查后插”方式解決。

2 DB變更標準

DDL需要控制變更速度,注意灰度和并發控制,變更發布需要在規定的變更發布窗口內。

五 分享一些我參與優化的例子

1 數據分布不均勻

干貨分享!MySQL慢查詢的實踐分析總結

干貨分享!MySQL慢查詢的實踐分析總結

1)分庫分表不合理

該業務數據分了8個庫,每個庫分了16張表,通過查看表空間可以看到數據幾乎都分布在各個庫的某2張表中。分庫分表的策略有問題,另外過高預估了業務增量,這個持保留意見。

2)索引不合理

單表創建了idx_logistics_corp_id_special_id的聯合索引,但即便這樣區分度依然太低,根據實驗及業務反饋(logistics_corp_id,transport_type_id)字段組合區分度非常高,且業務存在transport_type_id的單查場景。

干貨分享!MySQL慢查詢的實踐分析總結

2 索引問題

SELECT   COUNT(0) AS `tmp_count` FROM(     SELECT       `table_holder`.`user_id`,       `table_holder`.`sc_item_id`,       SUM(         CASE           `table_holder`.`inventory_type`           WHEN 1 THEN `table_holder`.`quantity`           ELSE 0         END       ) AS `saleable_quantity`,       SUM(         CASE           `table_holder`.`inventory_type`           WHEN 1 THEN `table_holder`.`lock_quantity`           ELSE 0         END       ) AS `saleable_lock_quantity`,       SUM(         CASE           `table_holder`.`inventory_type`           WHEN 401 THEN `table_holder`.`quantity`           ELSE 0         END       ) AS `transfer_on_way_quantity`,       `table_holder`.`store_code`,       MAX(`table_holder`.`gmt_modified`) AS `gmt_modified`     FROM       `table_holder`     WHERE(`table_holder`.`is_deleted` = 0)       AND(`table_holder`.`quantity` > 0)       AND `table_holder`.`user_id` IN(3405569954)       AND `table_holder`.`store_code` IN('ZJJHBHYTJJ0001', '...1000多個')     GROUP BY       `table_holder`.`user_id`,       `table_holder`.`sc_item_id`     ORDER BY       `table_holder`.`user_id` ASC,       `table_holder`.`sc_item_id` ASC   ) `a`;

這個case對應的表有store_code索引,因此認為沒問題,沒辦法優化了。實則通過執行計劃,我們發現MySQL選擇了全表掃描。針對該case實踐發現,當范圍查詢的個數超過200個時,索引優化器將不再使用該字段索引。

最終經過拉取最近一段時間的相關查詢SQL,結合業務的數據分布,我們發現采用(is_deleted,quantity)即可解決。

判斷執行計劃采用的索引長度:key_len的長度計算公式(>=5.6.4)

char(10)允許NULL      =  10 * ( character set:utf8mb4=4,utf8=3,gbk=2,latin1=1) + 1(NULL) char(10)不允許NULL    =  10 * ( character set:utf8mb4=4,utf8=3,gbk=2,latin1=1) varchr(10)允許NULL    =  10 * ( character set:utf8mb4=4,utf8=3,gbk=2,latin1=1) + 1(NULL) + 2(變長字段) varchr(10)不允許NULL  =  10 * ( character set:utf8mb4=4,utf8=3,gbk=2,latin1=1) + 2(變長字段) int允許NULL           =  4 + 1(NULL) int不允許NULL         =  4 timestamp允許NULL     =  4 + 1(NULL) timestamp不允許NULL   =  4 datatime允許NULL      =  5 + 1(NULL) datatime不允許NULL    =  5

3 被人影響

用到了索引卻依然被爆出掃描2千萬行:

干貨分享!MySQL慢查詢的實踐分析總結

索引字段區分度很高:

干貨分享!MySQL慢查詢的實踐分析總結

同時期常規SQL變為了慢查詢:

干貨分享!MySQL慢查詢的實踐分析總結

DB數據盤訪問情況:

干貨分享!MySQL慢查詢的實踐分析總結

排查共用物理機其他實例的情況,發現有個庫在問題時間附近有很多慢sql需要排序,寫臨時文件剛好寫入了2GB:

干貨分享!MySQL慢查詢的實踐分析總結

多個MySQL實例leader節點混合部署在同一臺物理機,雖然通過docker隔離了CPU、MEM等資源,但目前還沒有做到buffer io的隔離。

干貨分享!MySQL慢查詢的實踐分析總結

4 無法解決

通過匯總分析高頻的查詢并結合業務得出合適的索引往往能夠解決日常遇到的慢查詢,但這并不是萬能的。

比如有可能索引越加越多,乃至成了這樣:

干貨分享!MySQL慢查詢的實踐分析總結

有些場景,比如支持多個字段組合查詢,又沒有必填項,如果都要通過索引來支持顯然是不合理的。

干貨分享!MySQL慢查詢的實踐分析總結

查詢場景下,將區分度較高的字段設定為必填項是個好習慣;查詢組合很多的情況下考慮走搜索支持性更好的存儲或者搜索引擎。

六 日?;幚?/h2>

隨著各個CTO-D線的深入治理,各項指標較之前均有非常大的改觀,比如核心應用完成慢查詢清零,影響最大的一些慢SQL被得以解決,而我所在的團隊排名也由最初的尾部top3進入到頭部top3。
慢SQL治理進入日常化,通過每周固定推送慢SQL工單、owner接手處理、結單,基本形成了定期清零的習慣和氛圍,慢SQL治理專項也被多次點名表揚。

七 小結

這是一篇遲到的總結,現在回頭看覺得這里面的策略制定、問題分析和解決的過程還是蠻值得拿出來和大家分享下。

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
国产喷水theporn| 搡的我好爽在线观看免费视频| 一区二区三区国产好的精华液| 国产 日韩 亚洲 欧美| 成人在线观看www| 伊人网在线综合| 国产精品无码av无码| 国产淫片免费看| 大陆av在线播放| 粉嫩av一区二区三区天美传媒| 亚洲天堂伊人网| 欧美一级特黄a| 麻豆三级在线观看| 国产a级一级片| 日韩av一二三四区| 欧美日韩二三区| 欧美日本视频在线观看| 欧洲黄色一级视频| 北条麻妃在线视频观看| 国产精品裸体瑜伽视频| 男女啪啪免费视频网站| 免费无码不卡视频在线观看| www.av中文字幕| 阿v天堂2017| 亚洲中文字幕无码av永久| 欧美又粗又长又爽做受| 久久亚洲中文字幕无码| 国模吧无码一区二区三区| 大肉大捧一进一出好爽视频| 日韩精品视频一区二区在线观看| 东京热加勒比无码少妇| 欧美日韩亚洲自拍| 日韩va在线观看| 性生活免费观看视频| 欧美黄网在线观看| 国产l精品国产亚洲区久久| 欧美一级黄色片视频| 五月激情五月婷婷| 国产又粗又爽又黄的视频| 国产无限制自拍| 玩弄japan白嫩少妇hd| 日本中文字幕观看| 黄色一级片黄色| wwwwww.色| av磁力番号网| 欧美日韩亚洲第一| www.桃色.com| 国模无码视频一区二区三区| 天天爱天天操天天干| 波多野结衣三级在线| 黄页免费在线观看视频| 91日韩视频在线观看| 免费观看国产视频在线| aⅴ在线免费观看| 欧美专区第二页| 一本大道熟女人妻中文字幕在线| 亚洲精品手机在线观看| 中文字幕无码精品亚洲资源网久久| 97公开免费视频| 特级西西人体www高清大胆| 欧美日韩国产精品激情在线播放| 免费网站在线观看黄| 久久国产精品视频在线观看| 超碰人人草人人| 中文字幕日本最新乱码视频| 日本网站在线看| 老司机午夜av| www.国产在线播放| 天天做天天干天天操| 99久久久无码国产精品6| 男女啪啪免费观看| 国产传媒免费观看| 国产第一页视频| 黄色一级视频在线播放| 成年人黄色在线观看| 日韩精品你懂的| 国产精品50p| 久久精品无码中文字幕| 日韩在线一区视频| 波多结衣在线观看| 国产又黄又大又粗视频| 国产美女主播在线| 国内精品国产三级国产99| 亚洲欧美aaa| 天天干在线影院| 国产裸体舞一区二区三区| 97在线国产视频| 日本黄大片在线观看| 黄色网址在线免费看| 91热视频在线观看| 中文字幕 日韩 欧美| 婷婷激情四射五月天| 日本新janpanese乱熟| 久章草在线视频| 国产l精品国产亚洲区久久| www.99热这里只有精品| av免费观看国产| 成人午夜免费在线| 国产原创popny丨九色| 日韩国产欧美亚洲| 久色视频在线播放| 国产精品333| 99久久国产宗和精品1上映| 日韩精品一区中文字幕| 亚洲五月天综合| 久久人人爽av| www.午夜色| 日日噜噜夜夜狠狠久久丁香五月| 在线观看成人免费| 日本一级黄视频| 久久精品视频16| 性生交免费视频| 一区二区三区国产好的精华液| 日本女人高潮视频| www.xxx麻豆| 日韩av播放器| 婷婷中文字幕在线观看| 日本xxxxx18| 欧美 日韩 亚洲 一区| 亚洲人成色77777| 天堂av在线8| 国产制服91一区二区三区制服| 91亚洲精品国产| www日韩视频| 国产精品嫩草影视| 成人性生活视频免费看| 午夜激情福利在线| 热这里只有精品| 国产老熟妇精品观看| 天天干天天综合| 69精品丰满人妻无码视频a片| 男人日女人视频网站| 男女污污的视频| 成人在线免费高清视频| 国产九九九九九| 日本中文字幕观看| 国产日本在线播放| 视频二区在线播放| 成人区一区二区| 亚洲三级视频网站| 99在线免费视频观看| 亚洲va综合va国产va中文| 日本中文字幕亚洲| 中文字幕国产高清| 久久无码高潮喷水| 日韩中文字幕在线不卡| www日韩在线观看| 成人免费观看在线| 国产精品区在线| 亚洲欧洲日产国码无码久久99| 亚欧精品在线视频| 国产精品亚洲αv天堂无码| 91大学生片黄在线观看| 一区二区三区国产免费| 国产自产在线视频| 亚洲欧美一二三| 亚洲综合欧美在线| av动漫在线看| 国产免费一区二区视频| 99中文字幕在线| 少妇一级淫免费放| 日韩毛片在线免费看| 91午夜在线观看| 黄色一级视频播放| 爱豆国产剧免费观看大全剧苏畅| 久久精品午夜福利| 热99这里只有精品| 国产夫妻自拍一区| 欧美极品少妇无套实战| 艳母动漫在线观看| 中文字幕一区久久| 日韩一区二区三区久久| 天天爽天天爽夜夜爽| 日韩视频免费播放| 野外做受又硬又粗又大视频√| 异国色恋浪漫潭| 手机在线观看日韩av| 羞羞的视频在线| 日本美女视频一区| 91看片破解版| 91插插插影院| 日本成人性视频| 看一级黄色录像| 久久99国产精品一区| 欧美 另类 交| av日韩在线看| 国产精品999视频| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 日本阿v视频在线观看| 激情视频小说图片| 国产av熟女一区二区三区| 国内少妇毛片视频| 蜜桃传媒一区二区三区| 91传媒久久久| 丁香婷婷激情网| 天天影视色综合| 可以在线看黄的网站| 九九热只有这里有精品| 久久精品国产精品亚洲色婷婷| 无码人妻丰满熟妇区毛片18|