mysql innodb儲存引擎的優化

2022-08-30 00:15:17 字數 1467 閱讀 6788

採用innodb作為儲存引擎時的優化

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 (這個很管用)

抱怨 innodb 比 myisam 慢 100 倍?那麼你大概是忘了調整這個值。預設值 1 的意思是每一次事務提交或事務外的指令都需要把日誌寫入(flush)硬碟,這是很費時的。特別是使用電池供電快取(battery backed up cache)

時。設成 2 對於很多運用,特別是從myisam 表轉過來的是可以的,它的意思是不寫入硬碟而是寫入系統快取。日誌仍然會每秒 flush 到硬碟,所以你一般不會丟失超過 1-2 秒的更新。設成 0 會更快一點,但安全方面比較差,即使 mysql 掛了也可能會丟失事務的資料。而值 2 只會在整個作業系統掛了時才可能丟資料。

vim /etc/my.cnf

innodb_flush_log_at_trx_commit=2

也可以在 mysqld 執行時執行 :

set global innodb_flush_log_at_trx_commit = 2

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)。

mysql InnoDB儲存引擎

innodb的組成部分 1.後台執行緒 2.儲存引擎記憶體池 innodb儲存引擎記憶體緩衝池 1.記憶體緩衝池 innodb是基於磁碟儲存的,並將其中的記錄按照頁的方式進行管理。因此,可將其視為基礎磁碟的資料庫系統。在資料庫系統中,由於cpu速度與磁碟速度之間的紅狗,基於磁碟的資料庫系統通常使用緩...

Mysql Innodb儲存引擎

鎖 參考資料 參考資料 行鎖 innodb的鎖是對索引加鎖,如果查詢到並沒有用到索引就會對錶進行加鎖 record lock 對單條記錄加上鎖 gap lock 間隙鎖,鎖定乙個範圍,但是不包含記錄本身 next key lock record lock gap lock,鎖定乙個方位並鎖定記錄本身...

MYSQL INNODB 儲存引擎

innodb 是事務安全的mysql儲存引擎,設計上採用了類似於oracle的架構。一般而言,在oltp的應用中,innodb應該作為核心應用表的首選儲存引擎。同時,也是因為innodb的存在,才使得mysql變得更有魅力。第一 innodb儲存引擎概述 innodb由innobase oy 公司開...