MySQL 千萬級數(shù)據(jù)表 partition 實戰(zhàn)應用

目前系統(tǒng)的 Stat 表以每天 20W 條的數(shù)據(jù)量增加,盡管已經把超過3個月的數(shù)據(jù) dump 到其他地方避乏,但表中仍然有接近 2KW 條數(shù)據(jù),容量接近 2GB。

Stat 表已經加上索引慧脱,直接 select … where … limit 的話,速度還是很快的贺喝,但一旦涉及到 group by 分頁菱鸥,就會變得很慢宗兼。

據(jù)觀察,7天內的 group by 需要 35~50s 左右氮采。運營反映體驗極其不友好殷绍。
于是上網(wǎng)搜索 MySQL 分區(qū)方案。發(fā)現(xiàn)網(wǎng)上的基本上都是在系統(tǒng)性地講解 partition 的概念和種類鹊漠,以及一些實驗性質的效果主到,并不貼近實戰(zhàn)。

通過參考 MySQL手冊以及自己的摸索躯概,最終在當前系統(tǒng)中實現(xiàn)了分區(qū)登钥,因為記錄一下。

分區(qū)類型的選擇

Stat 表本身是一個統(tǒng)計報表娶靡,所以它的數(shù)據(jù)都是按日期來存放的牧牢,并且熱數(shù)據(jù)一般只限于當天,以及7天內姿锭。所以我選擇了 Range 類型來進行分區(qū)塔鳍。

為當前表創(chuàng)建分區(qū)

因為是對已有表進行改造,所以只能用 alter 的方式:

ALTER TABLE stat
    PARTITION BY RANGE(TO_DAYS(dt)) (
        PARTITION p0 VALUES LESS THAN(0),
        PARTITION p190214 VALUES LESS THAN(TO_DAYS('2019-02-14')),
        PARTITION pm VALUES LESS THAN(MAXVALUE)
    );

這里有2點要注意:

一是 p0 分區(qū)呻此,這是因為 MySQL(我是5.7版) 有個 bug轮纫,就是不管你查的數(shù)據(jù)在哪個區(qū),它都會掃一下第一個區(qū)焚鲜,我們每個區(qū)的數(shù)據(jù)都有幾十萬條蜡感,掃一下很是肉疼啊,所以為了避免不必要的掃描恃泪,直接弄個0數(shù)據(jù)分區(qū)就行了郑兴。

二是 pm 分區(qū),這個是最大分區(qū)贝乎。假如不要 pm情连,那你存 2019-02-15 的數(shù)據(jù)就會報錯。所以 pm 實際上是給未來的數(shù)據(jù)一個預留的分區(qū)览效。

定期擴展分區(qū)

由于 MySQL 的分區(qū)并不能自己動態(tài)擴容却舀,所以我們要寫個代碼為它動態(tài)的增加分區(qū)。

增加分區(qū)需要用到 REORGANIZE 命令锤灿,它的作用是對某個分區(qū)重新分配挽拔。
比如明天是 15 號,那我們要給 15 號也增加個分區(qū)但校,實際上就是把 pm 分區(qū)拆分成2個分區(qū):

ALTER TABLE stat
    REORGANIZE PARTITION pm INTO (
        PARTITION p190215 VALUES LESS THAN(TO_DAYS('2019-02-15')),
        PARTITION pm VALUES LESS THAN(MAXVALUE)
    );

這里就涉及到一個問題螃诅,即如何獲得當前表的所有分區(qū)?網(wǎng)上有挺多方法,但我試了下感覺還是先 show create table stat 然后用正則匹配出所有分區(qū)更方便一點术裸。

定期刪除分區(qū)

隨著數(shù)據(jù)庫越來越大倘是,我們肯定是要清除舊的數(shù)據(jù),同時也要清除舊的分區(qū)袭艺。
這個也比較簡單:

ALTER TABLE stat DROP PARTITION p190214, p190215
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末搀崭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子猾编,更是在濱河造成了極大的恐慌瘤睹,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件答倡,死亡現(xiàn)場離奇詭異轰传,居然都是意外死亡,警方通過查閱死者的電腦和手機苇羡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門绸吸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鼻弧,“玉大人设江,你說我怎么就攤上這事∪列” “怎么了叉存?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長度帮。 經常有香客問我歼捏,道長,這世上最難降的妖魔是什么笨篷? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任瞳秽,我火速辦了婚禮,結果婚禮上率翅,老公的妹妹穿的比我還像新娘练俐。我一直安慰自己,他們只是感情好冕臭,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布腺晾。 她就那樣靜靜地躺著,像睡著了一般辜贵。 火紅的嫁衣襯著肌膚如雪悯蝉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天托慨,我揣著相機與錄音鼻由,去河邊找鬼。 笑死,一個胖子當著我的面吹牛嗡靡,可吹牛的內容都是我干的跺撼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼讨彼,長吁一口氣:“原來是場噩夢啊……” “哼歉井!你這毒婦竟也來了?” 一聲冷哼從身側響起哈误,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤哩至,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蜜自,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菩貌,經...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年重荠,在試婚紗的時候發(fā)現(xiàn)自己被綠了箭阶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡戈鲁,死狀恐怖仇参,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情婆殿,我是刑警寧澤诈乒,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站婆芦,受9級特大地震影響怕磨,放射性物質發(fā)生泄漏。R本人自食惡果不足惜消约,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一肠鲫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧或粮,春花似錦导饲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至浓体,卻和暖如春泡挺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背命浴。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工娄猫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贱除,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓媳溺,卻偏偏與公主長得像月幌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子悬蔽,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345