MySQL寫入插入資料最佳化配置

來源:互聯網
上載者:User

標籤:

*innodb_buffer_pool_size

如果用Innodb,那麼這是一個重要變數。相對於MyISAM來說,Innodb對於buffer size更敏感。MySIAM可能對於大資料量使用預設的key_buffer_size也還好,但Innodb在大資料量時用預設值就感覺在爬了。 Innodb的緩衝池會快取資料和索引,所以不需要給系統的緩衝留空間,如果只用Innodb,可以把這個值設為記憶體的70%-80%。和 key_buffer相同,如果資料量比較小也不怎麼增加,那麼不要把這個值設太高也可以提高記憶體的使用率

*innodb_additional_pool_size

這個的效果不是很明顯,至少是當作業系統能合理分配記憶體時。但你可能仍需要設成20M或更多一點以看Innodb會分配多少記憶體做其他用途

*innodb_log_file_size

對於寫很多尤其是大資料量時非常重要。要注意,大的檔案提供更高的效能,但資料庫恢複時會用更多的時間。我一般用64M-512M,具體取決於伺服器的空間

*innodb_log_buffer_size

預設值對於多數中等寫操作和事務短的運用都是可以的。如果經常做更新或者使用了很多blob資料,應該增大這個值。但太大了也是浪費記憶體,因為1秒鐘總會 flush(這個詞的中文怎麼說呢?)一次,所以不需要設到超過1秒的需求。8M-16M一般應該夠了。小的運用可以設更小一點

innodb_flush_log_at_trx_commit (www.111cn.net這個很管用

抱怨Innodb比MyISAM慢 100倍?那麼你大概是忘了調整這個值。預設值1的意思是每一次事務提交或事務外的指令都需要把日誌寫入(flush)硬碟,這是很費時的。特別是使用電 池供電緩衝(Battery backed up cache)時。設成2對於很多運用,特別是從MyISAM錶轉過來的是可以的,它的意思是不寫入硬碟而是寫入系統緩衝。日誌仍然會每秒flush到硬 盤,所以你一般不會丟失超過1-2秒的更新。設成0會更快一點,但安全方面比較差,即使MySQL掛了也可能會丟失事務的資料。而值2隻會在整個作業系統 掛了時才可能丟資料。

上面是網上看的,我發現慢查詢日誌內有很多update和insert的查詢,就把innodb_flush_log_at_trx_commit改成了2,效果很明顯,改成0會更明顯,但安全性比較差。做下面的操作啟動mysqld就生效

vim /etc/my.cn

innodb_flush_log_at_trx_commit=2

也可以在mysqld運行時執行

set GLOBAL innodb_flush_log_at_trx_commit = 2

下面是mysql手冊上innodb_flush_log_at_trx_commit的解釋

如果innodb_flush_log_at_trx_commit設定為0,log buffer將每秒一次地寫入log file中,並且log file的flush(刷到磁碟)操作同時進行;但是,這種模式下,在事務提交的時候,不會有任何動作。如果 innodb_flush_log_at_trx_commit設定為1(預設值),log buffer每次事務提交都會寫入log file,並且,flush刷到磁碟中去。如果innodb_flush_log_at_trx_commit設定為2,log buffer在每次事務提交的時候都會寫入log file,但是,flush(刷到磁碟)操作並不會同時進行。這種模式下,MySQL會每秒一次地去做flush(刷到磁碟)操作。注意:由於進程調度策 略問題,這個“每秒一次的flush(刷到磁碟)操作”並不是保證100%的“每秒”

預設值1是為了ACID (atomicity, consistency, isolation, durability)原子性,一致性,隔離性和持久化的考慮。如果你不把innodb_flush_log_at_trx_commit設定為1,你將獲得更好的效能,但是,你在系統崩潰的情況,可能會丟失最多一秒鐘的交易資料。當你把innodb_flush_log_at_trx_commit設定 為0,mysqld進程的崩潰會導致上一秒鐘所有交易資料的丟失。如果你把innodb_flush_log_at_trx_commit設定為2,只有在作業系統崩潰或者系統掉電的情況下,上一秒鐘所有交易資料才可能丟失。InnoDB的crash recovery崩潰恢複機制並不受這個值的影響,不管這個值設定為多少,crash recovery崩潰恢複機制都會工作。

另外innodb_flush_method參數也值得關注,對寫操作有影響

innodb_flush_method: 設定InnoDB同步IO的方式

1) Default – 使用fsync()

2) O_SYNC 以sync模式開啟檔案,通常比較慢

3) O_DIRECT,在Linux上使用Direct IO。可以顯著提高速度,特別是在RAID系統上。避免額外的資料複製和double buffering(mysql buffering 和OS buffering)。

更多詳細內容請查看:http://www.111cn.net/database/mysql/56376.htm

MySQL寫入插入資料最佳化配置

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.