生產背景
生產環境為主從架構,每月業務都會load幾千萬的數據到同一張表,該表的數據是按月做了分區。
現象
Mysql數據庫中通過load向一張空表中導入5000萬數據,總大小25G左右,分成87個文件依次導入,從第一個文件開始保持30秒左右,后續load時間持續增長一直到75個文件后每個load的市場基本都在1000s以上,一直到83個文件的幾個小時都無法成功load數據到mysql數據庫。
Mysql主機資源情況如下所示:
CPU:8
內存:32G
Innodb_buffer_pool_size:24G
慢查詢日志中load時長情況如下所示:
Showprocesslist狀態如下所示:
60多萬數據load了一個多小時后直接kill回退了,如下所示:
分析過程
通過表結構查看該表:
通過showcreate table table_nmae核實到該表有個聯合主鍵和聯合索引;
然后由于load的原理是跳過SQL解析,直接生成數據庫的數據文件,導入前關閉索引,導入完成后更新索引;可以得出該表的索引是影響性能的主要原因。然后通過與前臺業務溝通知道業務對該表的查詢條件只有兩個字段,然后與業務溝通后決定去掉索引重建一個聯合主鍵保證業務的查詢速度。
如下圖所示:
驗證結果:
表結構優化load5000萬數據分成68個文件后load時長都在40s以內,如下圖日志記錄所示:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129952.html
摘要:比較的是兩個對象的內容是并發編程之協程異步后端掘金引言隨著的盛行,相信大家今年多多少少都聽到了異步編程這個概念。使用進行并發編程篇二掘金我們今天繼續深入學習。 python 之機器學習庫 scikit-learn - 后端 - 掘金一、 加載sklearn中的數據集datasets from sklearn import datasets iris = datasets.load_i...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20