mysql千萬級數(shù)據(jù)庫插入速度和讀取速度的調(diào)整記錄

一般情況下mysql上百萬數(shù)據(jù)讀取和插入更新是沒什么問題了浩销,但到了上千萬級就會出現(xiàn)很慢频轿,下面我們來看mysql千萬級數(shù)據(jù)庫插入速度和讀取速度的調(diào)整記錄吧沸停。

1)提高數(shù)據(jù)庫插入性能中心思想:盡量將數(shù)據(jù)一次性寫入到Data File和減少數(shù)據(jù)庫的checkpoint 操作肯骇。這次修改了下面四個配置項(xiàng):

1)將 innodb_flush_log_at_trx_commit 配置設(shè)定為0奋渔;按過往經(jīng)驗(yàn)設(shè)定為0,插入速度會有很大提高物臂。

0: 日志緩沖每秒一次地被寫到日志文件旺拉,并且對日志文件做到磁盤操作的刷新,但是在一個事務(wù)提交不做任何操作棵磷。

1:在每個事務(wù)提交時蛾狗,日志緩沖被寫到日志文件,對日志文件做到磁盤操作的刷新泽本。

2:在每個提交淘太,日志緩沖被寫到文件,但不對日志文件做到磁盤操作的刷新规丽。對日志文件每秒刷新一次蒲牧。

默認(rèn)值是 1,也是最安全的設(shè)置赌莺,即每個事務(wù)提交的時候都會從 log buffer 寫

到日志文件冰抢,而且會實(shí)際刷新磁盤,但是這樣性能有一定的損失艘狭。如果可以容忍在數(shù)

據(jù)庫崩潰的時候損失一部分?jǐn)?shù)據(jù)挎扰,那么設(shè)置成 0 或者 2 都會有所改善。設(shè)置成 0巢音,則

在數(shù)據(jù)庫崩潰的時候會丟失那些沒有被寫入日志文件的事務(wù)遵倦,最多丟失 1 秒鐘的事

務(wù),這種方式是最不安全的官撼,也是效率最高的梧躺。設(shè)置成 2 的時候,因?yàn)橹皇菦]有刷新

到磁盤傲绣,但是已經(jīng)寫入日志文件掠哥,所以只要操作系統(tǒng)沒有崩潰巩踏,那么并沒有丟失數(shù)據(jù) ,

比設(shè)置成 0 更安全一些续搀。

在 mysql 的手冊中塞琼,為了確保事務(wù)的持久性和復(fù)制設(shè)置的耐受性、一致性禁舷,都是

建議將這個參數(shù)設(shè)置為 1 的彪杉。

2)將 innodb_autoextend_increment 配置由于默認(rèn)8M 調(diào)整到 128M

此配置項(xiàng)作用主要是當(dāng)tablespace 空間已經(jīng)滿了后,需要MySQL系統(tǒng)需要自動擴(kuò)展多少空間牵咙,每次tablespace 擴(kuò)展都會讓各個SQL 處于等待狀態(tài)在讶。增加自動擴(kuò)展Size可以減少tablespace自動擴(kuò)展次數(shù)。

3)將 innodb_log_buffer_size 配置由于默認(rèn)1M 調(diào)整到 16M

此配置項(xiàng)作用設(shè)定innodb 數(shù)據(jù)庫引擎寫日志緩存區(qū)霜大;將此緩存段增大可以減少數(shù)據(jù)庫寫數(shù)據(jù)文件次數(shù)。

4)將 innodb_log_file_size 配置由于默認(rèn) 8M 調(diào)整到 128M

此配置項(xiàng)作用設(shè)定innodb 數(shù)據(jù)庫引擎UNDO日志的大懈锎稹战坤;從而減少數(shù)據(jù)庫checkpoint操作。

經(jīng)過以上調(diào)整残拐,系統(tǒng)插入速度由于原來10分鐘幾萬條提升至1秒1W左右途茫;注:以上參數(shù)調(diào)整,需要根據(jù)不同機(jī)器來進(jìn)行實(shí)際調(diào)整溪食。特別是 innodb_flush_log_at_trx_commit囊卜、innodb_log_buffer_size和 innodb_log_file_size 需要謹(jǐn)慎調(diào)整;因?yàn)樯婕癕ySQL本身的容災(zāi)處理错沃。

(2)提升數(shù)據(jù)庫讀取速度栅组,重數(shù)據(jù)庫層面上讀取速度提升主要由于幾點(diǎn):簡化SQL、加索引和分區(qū)枢析; 經(jīng)過檢查程序SQL已經(jīng)是最簡單玉掸,查詢條件上已經(jīng)增加索引。我們只能用武器:表分區(qū)醒叁。

數(shù)據(jù)庫 MySQL分區(qū)前準(zhǔn)備:在MySQL中司浪,表空間就是存儲數(shù)據(jù)和索引的數(shù)據(jù)文件。

將S11數(shù)據(jù)庫由于同享tablespace 修改為支持多個tablespace;

將wb_user_info_sina 和 wb_user_info_tx 兩個表修改為各自獨(dú)立表空間把沼;(Sina:1700W數(shù)據(jù)啊易,2.6G 大數(shù)據(jù)文件,Tencent 1400W饮睬,2.3G大數(shù)據(jù)文件)租谈;

分區(qū)操作:

將現(xiàn)有的主鍵和索引先刪除

重現(xiàn)建立id,uid 的聯(lián)合主鍵

再以 uid 為鍵值進(jìn)行分區(qū)。這時候到/var/data/mysql 查看數(shù)據(jù)文件续捂,可以看到兩個大表各自獨(dú)立表空間已經(jīng)分割成若干個較少獨(dú)立分區(qū)空間垦垂。(這時候若以uid 為檢索條件進(jìn)行查詢宦搬,并不提升速度;因?yàn)殒I值只是安排數(shù)據(jù)存儲的分區(qū)并不會建立分區(qū)索引劫拗。我非常郁悶這點(diǎn)比Oracle 差得不是一點(diǎn)半點(diǎn)间校。)

再以 uid 字段上進(jìn)行建立索引。再次到/var/data/mysql 文件夾查看數(shù)據(jù)文件页慷,非常郁悶地發(fā)現(xiàn)各個分區(qū)Size竟然大了憔足。MySQL還是老樣子將索引與數(shù)據(jù)存儲在同一個tablespace里面。若能index 與 數(shù)據(jù)分離能夠更加好管理酒繁。

經(jīng)過以上調(diào)整滓彰,暫時沒能體現(xiàn)出系統(tǒng)讀取速度提升;基本都是在 2~3秒完成5K數(shù)據(jù)更新州袒。

MySQL數(shù)據(jù)庫插入速度調(diào)整補(bǔ)充資料:

MySQL 從最開始的時候 1000條/分鐘的插入速度調(diào)高至 10000條/秒揭绑。 相信大家都已經(jīng)等急了相關(guān)介紹,下面我做調(diào)優(yōu)時候的整個過程郎哭。提高數(shù)據(jù)庫插入性能中心思想:

1他匪、盡量使數(shù)據(jù)庫一次性寫入Data File

2、減少數(shù)據(jù)庫的checkpoint 操作

3夸研、程序上盡量緩沖數(shù)據(jù)邦蜜,進(jìn)行批量式插入與提交

4、減少系統(tǒng)的IO沖突

根據(jù)以上四點(diǎn)內(nèi)容亥至,作為一個業(yè)余DBA對MySQL服務(wù)進(jìn)行了下面調(diào)整:

修改負(fù)責(zé)收錄記錄MySQL服務(wù)器配置悼沈,提升MySQL整體寫速度;具體為下面三個數(shù)據(jù)庫變量值:innodb_autoextend_increment姐扮、innodb_log_buffer_size絮供、innodb_log_file_size;此三個變量默認(rèn)值分別為 5M溶握、8M杯缺、8M,根據(jù)服務(wù)器內(nèi)存大小與具體使用情況睡榆,將此三只分別修改為:128M萍肆、16M、128M胀屿。同時塘揣,也將原來2個 Log File 變更為 8 個Log File。此次修改主要滿足第一和第二點(diǎn)宿崭,如:增加innodb_autoextend_increment就是為了避免由于頻繁自動擴(kuò)展Data File而導(dǎo)致 MySQL 的checkpoint 操作亲铡;

將大表轉(zhuǎn)變?yōu)楠?dú)立表空并且進(jìn)行分區(qū),然后將不同分區(qū)下掛在多個不同硬盤陣列中。

完成了以上修改操作后奖蔓;我看到下面幸福結(jié)果:

獲取測試結(jié)果:

Query OK, 2500000 rows affected (4 min 4.85 sec)

Records: 2500000 Duplicates: 0 Warnings: 0

Query OK, 2500000 rows affected (4 min 58.89 sec)

Records: 2500000 Duplicates: 0 Warnings: 0

Query OK, 2500000 rows affected (5 min 25.91 sec)份額為

Records: 2500000 Duplicates: 0 Warnings: 0

Query OK, 2500000 rows affected (5 min 22.32 sec)

Records: 2500000 Duplicates: 0 Warnings: 0

最后表的數(shù)據(jù)量:

+————+

| count(*) |

+————+

| 10000000|

+————+

從上面結(jié)果來看赞草,數(shù)據(jù)量增加會對插入性能有一定影響。不過吆鹤,整體速度還是非常面議厨疙。一天不到時間,就可以完成4億數(shù)據(jù)正常處理疑务。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沾凄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子知允,更是在濱河造成了極大的恐慌撒蟀,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件温鸽,死亡現(xiàn)場離奇詭異保屯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)涤垫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門配椭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人雹姊,你說我怎么就攤上這事『饫悖” “怎么了吱雏?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瘾境。 經(jīng)常有香客問我歧杏,道長,這世上最難降的妖魔是什么迷守? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任犬绒,我火速辦了婚禮,結(jié)果婚禮上兑凿,老公的妹妹穿的比我還像新娘凯力。我一直安慰自己,他們只是感情好礼华,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布咐鹤。 她就那樣靜靜地躺著,像睡著了一般圣絮。 火紅的嫁衣襯著肌膚如雪祈惶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機(jī)與錄音捧请,去河邊找鬼凡涩。 笑死,一個胖子當(dāng)著我的面吹牛疹蛉,可吹牛的內(nèi)容都是我干的活箕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼氧吐,長吁一口氣:“原來是場噩夢啊……” “哼讹蘑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起筑舅,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤座慰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后翠拣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體葫掉,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年仪芒,在試婚紗的時候發(fā)現(xiàn)自己被綠了穆咐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡谜慌,死狀恐怖然想,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情欣范,我是刑警寧澤变泄,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站恼琼,受9級特大地震影響妨蛹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晴竞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一蛙卤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧噩死,春花似錦颤难、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至衣摩,卻和暖如春昂验,著一層夾襖步出監(jiān)牢的瞬間捂敌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工既琴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留占婉,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓甫恩,卻偏偏與公主長得像逆济,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子磺箕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容