MySQL 8.0新特性 -- innodb_dedicated_server


在8.0中,innodb_dedicated_server默認是不開啟的。開啟后,innodb可以自動配置下面的參數:
·innodb_buffer_pool_size
·innodb_log_file_size
·innodb_flush_method
·innodb_log_files_in_group (MySQL 8.0.14)

官方只是建議在可以使用全部的系統資源的專用服務器上配置開啟該參數。比如用於mysql的docker容器或專用的虛擬機上開啟。
如果mysql和其它應用共享資源的話,是不建議開啟該參數的。

自動配置原則:
·innodb_buffer_pool_size
根據專用內存大小進行配置。

專用內存大小 innodb_buffer_pool_size
小於1GB 128mb(默認值)
1GB--4GB detected server memory * 0.5
大於4GB detected server memory * 0.75

 

 

 

 

 

 

·innodb_log_file_size
從mysql8.0.14開始,根據buffer pool size的大小進行配置

buffer pool size log file size
小於8GB 512mb
8GB--128GB 1024mb
大於128GB 2048mb

 



 

 

 

·innodb_log_files_in_group
MySQL 8.0.14中,根據buffer pool size的大小進行自動配置(單位是GB)。

buffer pool size log file number
小於8GB ROUND(buffer pool size)
8GB--128GB ROUND(buffer pool size * 0.75)
大於128GB 64

 

 

 

 

 

如果buffer pool size小於2GB,innodb_log_files_in_group最小值是2。

 

·innodb_flush_method
開啟innodb_dedicated_server開啟后,innodb_flush_method 被設置為 O_DIRECT_NO_FSYNC;如果O_DIRECT_NO_FSYNC不可用,innodb_flush_method就使用默認值。
InnoDB使用O_DIRECT刷新i/o,會略過操作系統的fsync()系統調用。

在mysql 8.0.14之前,該設置不適用於xfs、ext4文件系統,因為需要系統調用fsync()同步文件系統元數據。
從8.0.14開始,創建一個新的文件后、增加文件大小后、或關閉文件后,就會調用fsync(),確保文件系統元數據被同步。但是沒次寫操作仍然會略過fsync()系統調用。

Data loss is possible if redo log files and data files reside on different storage devices, and a crash occurs before data file writes are flushed from a device cache that is not battery-backed. If you use or intend to use different storage devices for redo log files and data files, and your data files reside on a device with a cache that is not battery-backed, use O_DIRECT instead.

  

 如果開啟了自動配置的同時,顯式配置上面的參數,在啟動的時候會給出下面的提醒信息:

[Warning] [000000] InnoDB: Option innodb_dedicated_server is ignored for innodb_buffer_pool_size because innodb_buffer_pool_size=134217728 is specified explicitly.

一個選項的顯式配置並不會阻止其他選項的自動配置。

 

如果開啟了innodb_dedicated_server,同時顯式配置了innodb_buffer_pool_size。
innodb_log_file_size和innodb_log_files_in_group仍然根據buffer pool size的大小進行配置,但是這里的buffer pool size仍然是根據專用內存的大小估算的,哪怕實際配置給buffer pool的大小不是專用內存的大小。

每次重啟后,mysql會根據需要自動重新配置變量的值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM