MySQL5 7優化InnoDB配置以及調優方案

2022-06-08 06:51:13 字數 3227 閱讀 3694

在進行優化前,我們先確認目前資料庫的配置,命令如下:

mysql> show variables like "%innodb%";
這會把所有innodb相關的引數顯示出來,接下來我們對關鍵引數進行優化。

這個是innodb最重要的引數,主要作用是快取innodb表的索引,資料,插入資料時的緩衝,預設值為128m。 如果是乙個專用db伺服器,那麼它可以佔到記憶體的70%-80%。並不是設定的越大越好。設定的過大,會導致system的swap空間被占用,導致作業系統變慢,從而減低sql查詢的效率。如果你的資料比較小,那麼可分配是你的資料大小+10%左右做為這個引數的值。例如:資料大小為50m,那麼給這個值分配innodb_buffer_pool_size=64m就夠了。

設定方法:在my.cnf檔案裡:innodb_buffer_pool_size=4g

如果是獨立的db伺服器,建議設定為物理記憶體的 80%,因為要給作業系統留有空間。

innodb_buffer_pool_size的值大於 1g時,innodb_buffer_pool_instances會把 innodb 的快取池劃分成多個例項。

多個緩衝池的好處:

多個執行緒同時訪問緩衝池時可能會遇到瓶頸,而多個緩衝池則可以最小化這個衝突

官方建議的 buffer 數量:

每個 buffer pool 例項至少要 1g

例如記憶體為32gbinnodb_buffer_pool_size25gb,那麼合適的方案就是25600m / 24 = 1.06gb

innodb_buffer_pool_instances = 24
這個引數指定在乙個日誌組中,每個log的大小。innodb的logfile就是事務日誌,用來在mysql crash後的恢復.所以設定合理的大小對於mysql的效能非常重要,直接影響資料庫的寫入速度,事務大小,異常重啟後的恢復。在mysql 5.5和5.5以前innodb的logfile最大設定為4gb,在5.6以後的版本中logfile最大的可以設為512gb。一般取256m可以兼顧效能和recovery的速度。

設定方法:在my.cnf檔案裡:innodb_log_file_size=256m

這個引數決定了innodb引擎可使用的日誌記憶體空間。只要沒有類似插入blob型別資料的操作(也不建議有這樣的操作),這個記憶體空間都不需要設定得太大。5mb-10mb是乙個推薦的設定值,不過這個引數還是要和innodb_flush_log_at_trx_commit引數配合使用

控制事務的提交方式,也就是控制log的重新整理到磁碟的方式。這個引數只有3個值(0,1,2).預設為1,效能更高的可以設定為0或是2,這樣可以適當的減少磁碟io(但會丟失一秒鐘的事務。),遊戲庫的mysql建議設定為0。主庫請不要更改了。 其中: 0:log buffer中的資料將以每秒一次的頻率寫入到log file中,且同時會進行檔案系統到磁碟的同步操作,但是每個事務的commit並不會觸發任何log buffer 到log file的重新整理或者檔案系統到磁碟的重新整理操作; 1:(預設為1)在每次事務提交的時候將logbuffer 中的資料都會寫入到log file,同時也會觸發檔案系統到磁碟的同步; 2:事務提交會觸發log buffer 到log file的重新整理,但並不會觸發磁碟檔案系統到磁碟的同步。此外,每秒會有一次檔案系統到磁碟同步操作。

該引數可以說是innodb引擎日誌操作策略部分最重要的設定引數之一。如果您將innodb_flush_log_at_trx_commit設定為0,代表著innodb引擎將會按照1秒鐘的週期進行日誌從記憶體到磁碟的同步。

這時innodb_log_buffer_size的值就不能過小,因為在乙個同步週期內如果待重新整理的日誌超過了innodb_log_buffer_size設定的大小,innodb就會強制執行同步操作。

如果您的linux作業系統使用的是帶有日誌功能的檔案系統並且日誌功能是開啟的,那麼還是建議將該引數設定為2。

說明: 這個引數的設定對innodb的效能有很大的影響,所以在這裡給多說明一下。

當這個值為1時:innodb 的事務log在每次提交後寫入日誌檔案,並對日誌做重新整理到磁碟。這個可以做到不丟任何乙個事務。

當這個值為2時:在每個提交,日誌緩衝被寫到檔案,但不對日誌檔案做到磁碟操作的重新整理,在對日誌檔案的重新整理在值為2的情況也每秒發生一次。但需要注意的是,由於程序呼叫方面的問題,並不能保證每秒100%的發生。從而在效能上是最快的。但作業系統崩潰或掉電才會刪除最後一秒的事務。

當這個值為0時:日誌緩衝每秒一次地被寫到日誌檔案,並且對日誌檔案做到磁碟操作的重新整理,但是在乙個事務提交不做任何操作。mysqld程序的崩潰會刪除崩潰前最後一秒的事務。從以上分析,當這個值不為1時,可以取得較好的效能,但遇到異常會有損失,所以需要根據自已的情況去衡量。

這個引數控制著innodb資料檔案及redo log的開啟、刷寫模式。有三個值:fdatasync(預設),o_dsync,o_direct 。

預設是fdatasync,呼叫fsync()去刷資料檔案與redo log的buffer。

為o_dsync時,innodb會使用o_dsync方式開啟和刷寫redo log,使用fsync()刷寫資料檔案。

為o_direct時,innodb使用o_direct開啟資料檔案,使用fsync()刷寫資料檔案跟redo log。在unix作業系統中,檔案的開啟方式為o_direct會最小化緩衝對io的影響,該檔案的io是直接在使用者空間的buffer上操作的,並且io操作是同步的,因此不管是read()系統呼叫還是write()系統呼叫,資料都保證是從磁碟上讀取的。

innodb_flush_method=o_direct

mysql 5.7 提供了更加合適的預設值,一般情況下只要調整下面 3 個選項就可以了,其餘引數根據實際情況再進行配置。

innodb_buffer_pool_size=8g innodb_log_file_size=256m innodb_flush_method=o_direct linux伺服器,記憶體是32g的,因為還部署了其他應用,所有這裡buffer_pool_size就設定了8g。

MySQL 5 7 優化InnoDB配置

mysql show variables like innodb 這個是innodb最重要的引數,主要作用是快取innodb表的索引,資料,插入資料時的緩衝,預設值為128m。如果是乙個專用db伺服器,那麼它可以佔到記憶體的70 80 並不是設定的越大越好。設定的過大,會導致system的swap空...

mysql5 7學習 mysql 5 7 學習

mysql uroot proot mysql5.7 mysql.user表沒有password欄位改 authentication string 一.建立使用者 命令 create user username host identified by password 例子 create user d...

mysql5 7如何開啟 mysql57怎麼開啟

開啟mysql57的方法 首先開啟winodws執行視窗 然後在開啟編輯框中輸入cmd命令 最後在終端介面中輸入 mysql hlocalhost uroot p123 即可顯示開啟mysql資料庫。windows下用命令列啟動mysql5.7 win菜單鍵即是在鍵盤左下角 ctrl控制 鍵與 al...