跳转到主要内容
纯技术服务

InnoDB配置参数

目前查看公共文档。请登录访问完整的文档范围。

InnoDB是MySQL部署的通用和默认存储引擎。当表创建时没有引擎子句,InnoDB被用作它们的存储引擎。

有关的更多信息InnoDB存储引擎可以在MySQL文档中找到。

如果InnoDB当前未设置为默认存储引擎,则可以通过将下面添加到MySQL Server选项文件的[MySQLD]部分来将其设置为默认值:

Default-Storage-Engine = InnoDB

InnoDB配置参数

InnoDB有许多参数可以控制各种功能方面和性能。

参数名称 描述 默认值 建议值
innodb_checksum_algorithm 表空间页面校验和算法。 crc32 crc32
innodb_doublewrite 在写入数据文件之前,将数据写入doublewrite缓冲区。

数据完整性 - 设置为ON

性能 - 放置

innodb_flush_log_at_trx_commit 控制日志刷新和写入。 1

数据完整性-设置为1

性能 - 设置为2

innodb_flush_neighbors 相同的区段缓冲池和其他脏页刷新。Extent是表空间中的一组页面。 0(0) -禁用) 0(零) - 禁用
Innodb_Flush_Method.

数据(缓冲池)和日志文件(重做,撤消)写入磁盘(刷新)方法;在每次写入操作后刷新IO跳过FSYNC()期间使用O_Direct。

fsync

Linux

≤8.0.14使用o_direct

≥8.0.13使用O_DIRECT_NO_FSYNC

微软Windows

O_DIRECT

innodb_idle_flush_pct 在空闲期间刷新缓冲池作为InnoDB_IO_Capacity的百分比。当InnoDB空闲时,值100的值不会限制页面刷新。 One hundred. One hundred.
innodb_io_capacity 用于后台任务的可用IOP数(凌乱页面刷新,从更改缓冲区合并数据) 200 ≥10000.
innodb_io_capacity_max 到背景任务的最大可用IOP数。 One hundred. ≥20000
innodb_log_compression_pages. 重做日志页压缩(仅用于表压缩)。 离开
innodb_log_file_size. 日志文件的大小。 50 MB(503331648字节)

≥1 GB

innodb_log_files_in_group. 日志组中的日志文件个数。 2

≥16

innodb_use_native_aio. 使用异步I/O -仅Linux。
基于 MySQL安装基本目录的路径。

微软Windows- c:\ programdata \ mysql \ mysql server \

Linux- / var / lib /

只有当
datadir MySQL Server数据目录的路径。

微软WindowsMySQL - C: \ ProgramData \ \ <版本> \ MySQL服务器数据

Linux——/var/lib/mysql

如果使用,只会改变这个数据、二进制和事务日志目录的单独布局
innodb_data_home_dir. innodb系统表空间文件目录路径的公共部分。 MySQL datadir。 如果使用,只会改变这个数据、二进制和事务日志目录的单独布局
innodb_data_file_path. 定义InnoDB系统表空间文件的属性。 创建一个名为ibdata1的自动扩展数据文件。 如果使用数据、二进制和事务日志目录的单独布局和/或设置不同的innodb_page_size。
Innodb_log_group_home_dir. 包含InnoDB重做日志文件的目录。 在Datadir中创建两个文件名Ib_logfile0和ib_logfile1。 如果使用,只会改变这个数据、二进制和事务日志目录的单独布局
innodb_undo_directory InnoDB创建撤消表空间的路径。 撤消表空间是在Datadir中创建的。 如果使用,只会改变这个数据、二进制和事务日志目录的单独布局
innodb_page_size

指定InnoDB表空间的页面大小。只能在初始化MySQL实例之前指定,并且不能以后更改。

影响最大行长度。

默认大小为16K。

该建议是将此设置置于默认值。

由于块大小将随着较大页面大小增加,存储I / O的性能配置文件(较少的IOPS更多带宽)可能会改变。

innodb_file_per_table 如果在每个表的基础上创建已启用的表。在系统表空间中创建禁用的表时。 如果试图使用,建议将此属性保留为ON数据、二进制和事务日志目录的单独布局
innodb_max_dirty_pages_pct 建立冲洗活动的目标。页面将从缓冲池中刷新,以便脏页的总量不超过此值。 90. 更常常使这个值更小。
innodb_max_dirty_pages_pct_lwm. 一个低水印,表示能够控制脏页面的脏页的百分比来控制脏页比率。 10. 始终确保该值小于innodb_max_dirty_pages_pct。
innodb_read_io_threads InnoDB中读取操作的I / O线程数。 4. 如果MySQL服务器有足够的内核,增加这个值以增加IO吞吐量。
innodb_write_io_threads InnoDB中写入操作的I / O线程数。 4. 如果MySQL服务器有足够的内核,增加这个值以增加IO吞吐量。

innodb_log_file_size和innodb_log_files_in_group.

MySQL重做日志的大小和数量由innodb_log_file_size.innodb_log_files_in_group.参数。重做日志的大小是我的产品nnodb._log_file_sizeinnodb_log_files_in_group.应该小于的值512 GB.。默认情况下,组中有两个48 GB重做日志文件总共96 GB。重做日志文件的大小可以像缓冲池一样大,不超过512 GB。此外,配置大重做日志文件可能会降低检查点频率。一般建议是有足够的重做记录空间来处理超过一小时的写入活动。另一方面,配置大型日志文件将导致崩溃恢复时间增加。

MySQL选项文件示例

Linux

此选项文件将允许与任何接口的连接。二进制日志,事务日志,撤消文件和数据文件将存储在单独的位置。InnodB_Page_size将设置为16k,32GB缓冲池将分为16个单独的实例。

# Server Management bind-address = 0.0.0.0 port = 3306 socket=/var/lib/mysql/mysql/var/log/mysqld.log pid-file=/var/run/mysqld .logpid back_log = 1500 table_open_cache = 8000 table_open_cache_instances = 16 max_prepared_stmt_count = 512000 #数据和日志管理basedir = / mysql /基地datadir innodb_data_home_dir = = / mysql /底/数据/ mysql /基地/数据innodb_data_file_path = ibdata1:12M: autoextend innodb_log_group_home_dir = / mysql /日志innodb_undo_directory = / mysql /撤销log-bin =/ mysql / binlog / binlog # innodb设置innodb_page_size = 16 k通过innodb_buffer_pool_size = 32 g innodb_buffer_pool_instances = 16 innodb_log_buffer_size = 32 m innodb_file_per_table innodb_log_file_size = 1024 innodb_log_files_in_group = 32 innodb_open_files = 4000 innodb_log_compressed_pages = innodb_doublewrite = 0 innodb_thread_concurrency = 0innodb_flush_log_at_trx_commit = 2 innodb_max_dirty_pages_pct = 90 innodb_max_dirty_pages_pct_lwm = 10 innodb_use_native_aio = 1 innodb_stats_persistent = 1 innodb_spin_wait_delay = 6 innodb_max_purge_lag_delay = 300000 innodb_max_purge_lag = 0 innodb_flush_method = O_DIRECT_NO_FSYNC innodb_checksum_algorithm = crc32 innodb_io_capacity = 10000innodb_io_capacity_max = 30000 innodb_lru_scan_depth = 9000 innodb_change_buffering =没有innodb_read_only = 0 innodb_page_cleaners = 4 innodb_undo_log_truncate =从innodb_adaptive_flushing = 1 innodb_flush_neighbors = 0 innodb_read_io_threads = 16 innodb_write_io_threads = 16 innodb_purge_threads = 4 innodb_adaptive_hash_index = 0 innodb_monitor_enable =‘%’#错误# lc_messages_dir = /mysql/lcmessages # lc_messages = en_US #other binlog_expire_logs_seconds=300

微软Windows

此选项文件将允许与任何接口的连接。二进制日志,事务日志,撤消文件和数据文件将存储在单独的位置。InnodB_Page_size将设置为16k,32GB缓冲池将分为16个单独的实例。

#其他默认调谐值#mysql server实例配置文件#--------------------------------------------------------------------由MySQL Server实例配置向导###安装说明#------------------------------------------------------------------------------------ ##在Linux上,您可以将此文件复制到/etc/my.cnf设置全局选项,#mysql-data-dir / my.cnf设置特定于服务器的选项#(@ localstatedir @ for此安装)或设置特定用户特定选项的#〜/ .my.cnf。##在Windows上,您应该将此文件保留在安装目录中您的服务器(例如C:\ Program Files \ MySQL \ MySQL Server x.y)中的安装目录#。到#确保服务器读取配置文件使用Startup选项#“--defaults-file”。##从命令行运行服务器,请在#命令行shell中执行此操作,例如##mysqld --defaults-file =“c:\ program files \ mysql \ mysql server x.y \ my.ini”##手动将服务器安装为Windows服务,在#命令行shell中执行此操作,例如:#mysqld --install mysqlxy --defaults-file =“c:\ program files \ mysql \ mysql server x.y \ my.ini”##然后在命令行shell中执行它以启动服务器,例如,#net start mysqlxy ###指南编辑此文件#-------------------------------------------------------------------- # # In this file, you can use all long options that the program supports. # If you want to know the options a program supports, start the program # with the "--help" option. # # More detailed information about the individual options can also be # found in the manual. # # For advice on how to change settings please see # https://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html # # # CLIENT SECTION # ---------------------------------------------------------------------- # # The following options will be read by MySQL client applications. # Note that only client applications shipped by MySQL are guaranteed # to read this section. If you want your own MySQL client program to # honor these values, you need to specify it as an option during the # MySQL client library initialization. # [client] # pipe= # socket=MYSQL port=3306 [mysql] no-beep # default-character-set= # SERVER SECTION # ---------------------------------------------------------------------- # # The following options will be read by the MySQL Server. Make sure that # you have installed the server correctly (see above) so it reads this # file. # # server_type=1 [mysqld] # Data ,undo and log management basedir = C:/MySQL/Base datadir = C:/MySQL/Base/Data innodb_data_home_dir = C:/MySQL/Base/Data innodb_data_file_path = ibdata1:12M:autoextend innodb_log_group_home_dir = C:/MySQL/Log/Data innodb_undo_directory = C:/MySQL/Undo/Data log-bin = C:/MySQL/BinLog/Data # innodb settings innodb_buffer_pool_size=32G innodb_buffer_pool_instances=16 innodb_log_buffer_size=32M innodb_file_per_table innodb_log_file_size=1024M innodb_log_files_in_group=32 innodb_open_files=4000 innodb_log_compressed_pages=off innodb_doublewrite=0 innodb_thread_concurrency=0 innodb_flush_log_at_trx_commit=2 innodb_max_dirty_pages_pct=90 innodb_max_dirty_pages_pct_lwm=10 innodb_use_native_aio=1 innodb_stats_persistent=1 innodb_spin_wait_delay=6 innodb_max_purge_lag_delay=300000 innodb_max_purge_lag=0 innodb_checksum_algorithm=crc32 innodb_io_capacity=10000 innodb_io_capacity_max=30000 innodb_lru_scan_depth=9000 innodb_change_buffering=none innodb_read_only=0 innodb_page_cleaners=4 innodb_undo_log_truncate=off innodb_adaptive_flushing=1 innodb_flush_neighbors=0 innodb_read_io_threads=16 innodb_write_io_threads=16 innodb_purge_threads=4 innodb_adaptive_hash_index=0 innodb_monitor_enable='%' # The next three options are mutually exclusive to SERVER_PORT below. # skip-networking # enable-named-pipe # shared-memory # shared-memory-base-name=MYSQL # The Pipe the MySQL Server will use # socket=MYSQL # The TCP/IP Port the MySQL Server will listen on port=3306 # Path to installation directory. All paths are usually resolved relative to this. # basedir="C:/Program Files/MySQL/MySQL Server 8.0/" # Path to the database root # datadir=C:/ProgramData/MySQL/MySQL Server 8.0\Data # datadir=C:/MySQL/Data_01/Data # The default character set that will be used when a new schema or table is # created and no character set is defined # character-set-server= # The default authentication plugin to be used when connecting to the server default_authentication_plugin=caching_sha2_password # The default storage engine that will be used when create new tables when default-storage-engine=INNODB # Set the SQL mode to strict sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" # General and Slow logging. log-output=FILE general-log=0 general_log_file="MYSQL-WINDOWS.log" slow-query-log=1 slow_query_log_file="MYSQL-WINDOWS-slow.log" long_query_time=10 # Error Logging. log-error="MYSQL-WINDOWS.err" # ***** Group Replication Related ***** # Specifies the base name to use for binary log files. With binary logging # enabled, the server logs all statements that change data to the binary # log, which is used for backup and replication. log-bin="MYSQL-WINDOWS-bin" # ***** Group Replication Related ***** # Specifies the server ID. For servers that are used in a replication topology, # you must specify a unique server ID for each replication server, in the # range from 1 to 2^32 - 1. “Unique” means that each ID must be different # from every other ID in use by any other source or replica. server-id=1 # ***** Group Replication Related ***** # The host name or IP address of the replica to be reported to the source # during replica registration. This value appears in the output of SHOW REPLICAS # on the source server. Leave the value unset if you do not want the replica to # register itself with the source. # report_host=0.0 # NOTE: Modify this value after Server initialization won't take effect. lower_case_table_names=1 # Secure File Priv. secure-file-priv="C:/ProgramData/MySQL/MySQL Server 8.0/Uploads" # The maximum amount of concurrent sessions the MySQL server will # allow. One of these connections will be reserved for a user with # SUPER privileges to allow the administrator to login even if the # connection limit has been reached. max_connections=151 # The number of open tables for all threads. Increasing this value # increases the number of file descriptors that mysqld requires. # Therefore you have to make sure to set the amount of open files # allowed to at least 4096 in the variable "open-files-limit" in # section [mysqld_safe] table_open_cache=2000 # Maximum size for internal (in-memory) temporary tables. If a table # grows larger than this value, it is automatically converted to disk # based table This limitation is for a single table. There can be many # of them. tmp_table_size=9G # How many threads we should keep in a cache for reuse. When a client # disconnects, the client's threads are put in the cache if there aren't # more than thread_cache_size threads from before. This greatly reduces # the amount of thread creations needed if you have a lot of new # connections. (Normally this doesn't give a notable performance # improvement if you have a good thread implementation.) thread_cache_size=10 #*** MyISAM Specific options # The maximum size of the temporary file MySQL is allowed to use while # recreating the index (during REPAIR, ALTER TABLE or LOAD DATA INFILE. # If the file-size would be bigger than this, the index will be created # through the key cache (which is slower). myisam_max_sort_file_size=100G # The size of the buffer that is allocated when sorting MyISAM indexes # during a REPAIR TABLE or when creating indexes with CREATE INDEX # or ALTER TABLE. myisam_sort_buffer_size=18G # Size of the Key Buffer, used to cache index blocks for MyISAM tables. # Do not set it larger than 30% of your available memory, as some memory # is also required by the OS to cache rows. Even if you're not using # MyISAM tables, you should still set it to 8-64M as it will also be # used for internal temporary disk tables. key_buffer_size=16M # Size of the buffer used for doing full table scans of MyISAM tables. # Allocated per thread, if a full scan is needed. read_buffer_size=64K read_rnd_buffer_size=256K #*** INNODB Specific options *** # innodb_data_home_dir= # Use this option if you have a MySQL server with InnoDB support enabled # but you do not plan to use it. This will save memory and disk space # and speed up some things. # skip-innodb # If set to 1, InnoDB will flush (fsync) the transaction logs to the # disk at each commit, which offers full ACID behavior. If you are # willing to compromise this safety, and you are running small # transactions, you may set this to 0 or 2 to reduce disk I/O to the # logs. Value 0 means that the log is only written to the log file and # the log file flushed to disk approximately once per second. Value 2 # means the log is written to the log file at each commit, but the log # file is only flushed to disk approximately once per second. innodb_flush_log_at_trx_commit=1 # The size of the buffer InnoDB uses for buffering log data. As soon as # it is full, InnoDB will have to flush it to disk. As it is flushed # once per second anyway, it does not make sense to have it very large # (even with long transactions). innodb_log_buffer_size=1M # InnoDB, unlike MyISAM, uses a buffer pool to cache both indexes and # row data. The bigger you set this the less disk I/O is needed to # access data in tables. On a dedicated database server you may set this # parameter up to 80% of the machine physical memory size. Do not set it # too large, though, because competition of the physical memory may # cause paging in the operating system. Note that on 32bit systems you # might be limited to 2-3.5G of user level memory per process, so do not # set it too high. innodb_buffer_pool_size=8M # Size of each log file in a log group. You should set the combined size # of log files to about 25%-100% of your buffer pool size to avoid # unneeded buffer pool flush activity on log file overwrite. However, # note that a larger logfile size will increase the time needed for the # recovery process. innodb_log_file_size=48M # Number of threads allowed inside the InnoDB kernel. The optimal value # depends highly on the application, hardware as well as the OS # scheduler properties. A too high value may lead to thread thrashing. innodb_thread_concurrency=33 # The increment size (in MB) for extending the size of an auto-extend InnoDB system tablespace file when it becomes full. innodb_autoextend_increment=64 # The number of regions that the InnoDB buffer pool is divided into. # For systems with buffer pools in the multi-gigabyte range, dividing the buffer pool into separate instances can improve concurrency, # by reducing contention as different threads read and write to cached pages. innodb_buffer_pool_instances=8 # Determines the number of threads that can enter InnoDB concurrently. innodb_concurrency_tickets=5000 # Specifies how long in milliseconds (ms) a block inserted into the old sublist must stay there after its first access before # it can be moved to the new sublist. innodb_old_blocks_time=1000 # It specifies the maximum number of .ibd files that MySQL can keep open at one time. The minimum value is 10. innodb_open_files=300 # When this variable is enabled, InnoDB updates statistics during metadata statements. innodb_stats_on_metadata=0 # When innodb_file_per_table is enabled (the default in 5.6.6 and higher), InnoDB stores the data and indexes for each newly created table # in a separate .ibd file, rather than in the system tablespace. innodb_file_per_table=1 # Use the following list of values: 0 for crc32, 1 for strict_crc32, 2 for innodb, 3 for strict_innodb, 4 for none, 5 for strict_none. innodb_checksum_algorithm=0 # The number of outstanding connection requests MySQL can have. # This option is useful when the main MySQL thread gets many connection requests in a very short time. # It then takes some time (although very little) for the main thread to check the connection and start a new thread. # The back_log value indicates how many requests can be stacked during this short time before MySQL momentarily # stops answering new requests. # You need to increase this only if you expect a large number of connections in a short period of time. back_log=80 # If this is set to a nonzero value, all tables are closed every flush_time seconds to free up resources and # synchronize unflushed data to disk. # This option is best used only on systems with minimal resources. flush_time=0 # The minimum size of the buffer that is used for plain index scans, range index scans, and joins that do not use # indexes and thus perform full table scans. join_buffer_size=256K # The maximum size of one packet or any generated or intermediate string, or any parameter sent by the # mysql_stmt_send_long_data() C API function. max_allowed_packet=4M # If more than this many successive connection requests from a host are interrupted without a successful connection, # the server blocks that host from performing further connections. max_connect_errors=100 # Changes the number of file descriptors available to mysqld. # You should try increasing the value of this option if mysqld gives you the error "Too many open files". open_files_limit=4161 # If you see many sort_merge_passes per second in SHOW GLOBAL STATUS output, you can consider increasing the # sort_buffer_size value to speed up ORDER BY or GROUP BY operations that cannot be improved with query optimization # or improved indexing. sort_buffer_size=256K # The number of table definitions (from .frm files) that can be stored in the definition cache. # If you use a large number of tables, you can create a large table definition cache to speed up opening of tables. # The table definition cache takes less space and does not use file descriptors, unlike the normal table cache. # The minimum and default values are both 400. table_definition_cache=1400 # Specify the maximum size of a row-based binary log event, in bytes. # Rows are grouped into events smaller than this size if possible. The value should be a multiple of 256. binlog_row_event_max_size=8K # If the value of this variable is greater than 0, a replica synchronizes its master.info file to disk. # (using fdatasync()) after every sync_master_info events. sync_master_info=10000 # If the value of this variable is greater than 0, the MySQL server synchronizes its relay log to disk. # (using fdatasync()) after every sync_relay_log writes to the relay log. sync_relay_log=10000 # If the value of this variable is greater than 0, a replica synchronizes its relay-log.info file to disk. # (using fdatasync()) after every sync_relay_log_info transactions. sync_relay_log_info=10000 # Load mysql plugins at start."plugin_x ; plugin_y". # plugin_load # The TCP/IP Port the MySQL Server X Protocol will listen on. loose_mysqlx_port=33060