MySQL 調整MySQL引數提高寫入速度

2021-07-09 11:47:24 字數 1199 閱讀 9067

我用的是zip版的mysql,所以在根目錄下只有乙個初始的my-default.ini,如果要修改配置引數,需要將待修改的引數複製進去,然後改名為my.ini,重啟mysql服務即可生效。

言歸正傳,之前為了結局磁碟讀寫的瓶頸問題,使用redis作為快取。然而隨著資料的增多,漸漸地單純的寫入操作也越來越慢。現在的表中大概2500w行左右的資料,但是每次儲存都會占用大量的時間,以至於影響到了伺服器的響應速度。為了解決這個問題,我修改了一些引數,擴大了資料庫的快取,顯著加快了寫入速度。

innodb_buffer_pool_size

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

innodb_log_file_size

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

innodb_log_buffer_size

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

innodb_flush_log_at_trx_commit

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

mysql 引數調整

mysql 預設連線數 最大連線數100 最大錯誤連線數10 檢視最大連線數 show variables like connections 或者 show status like thread 修改最大連線數 方式1 臨時修改,重啟就失效 最大連線數 set global max connecti...

mysql 優化 調整mysql 併發相關引數

引數控制允許連線到mysql 資料庫的最大數量.預設值151.如果狀態變數connection errors max connections 不為零,並且一直在增長,說明不斷有連線請求因資料庫已達到最大允許的值而失敗.應考慮增大max connections 值.在增大max connections...

調整 MySQL 併發相關的引數

mysql server 是多執行緒結構,包括後台執行緒和客戶服務執行緒。多執行緒可以有效利用伺服器資源,提高資料庫的併發效能。在 mysql 中,控制併發連線和執行緒的主要引數包括 max connections back log thread cache size 以及 table open c...