MySQL innodb_buffer_pool_size和innodb_additional_mem_pool的用法(附带实例)
对于数据库系统,内存设置会直接影响到系统的性能,因为内存的读写速度要远远高于磁盘的速度,所以应尽量让数据的读写直接在内存中进行。然而,由于系统内存资源的限制,过多地使用内存空间必将降低系统的整体性能,因此内存的设置需要兼顾服务器的配置。
该参数的默认值是 128MB,建议不要将该参数设置过大,设置该参数应该遵循以下分配原则:
对于一个相对稳定的应用,这个参数的大小也是相对稳定的,没有必要预留非常大的值。如果 InnoDB 用光了这个池内的内存,就开始从操作系统分配内存,并且往 MySQL 错误日志中写警告信息。其默认值是 1MB,当发现错误日志中已经有相关的警告信息时,就应该适当增加该参数的大小。
管理员也可以使用 show engine innodb status\G;查询运行中的数据库的状态,如下所示:
MySQL innodb_buffer_pool_size的设置
在 [mysqld] 中,对innodb_buffer_pool_size 参数的定义如下:[root@localhost ~]# mysqld --verbose --help|grep "\-\-innodb_buffer_pool_size" -A 2 --innodb_buffer_pool_size= # The size of the memory buffer InnoDB uses to cache data and indexes of its tables.该参数的作用是缓存 InnoDB 表和索引数据。这个值设置得越高,访问表中数据需要的磁盘 I/O 就越少。
该参数的默认值是 128MB,建议不要将该参数设置过大,设置该参数应该遵循以下分配原则:
- 如果数据库服务器是一个独立的服务器,可以考虑使用物理内存的 70%~80%;
- 由于该参数不能动态更改,因此要修改这个值,需要重启 mysqld 服务;
- 不要把该参数设置太大,如果分配过大,会导致操作系统的虚拟空间被占用,导致操作系统变慢,从而减低 SQL 查询的效率。
MySQL innodb_additional_mem_pool的设置
在 [mysqld] 中,对 innodb_additional_mem_pool 参数的定义如下:[root@localhost~]# mysqld --verbose --help|grep "\-\-innodb_additional_mem_pool" -A 3 --innodb_additional_mem_pool_size=# Size of a memory pool InnoDB uses to store data dictionary information and other internal data structures.这个参数用来设置 InnoDB 存储的数据目录信息和其他内部数据结构的内存池大小。应用程序里的表越多,就需要在这里分配越多的内存。
对于一个相对稳定的应用,这个参数的大小也是相对稳定的,没有必要预留非常大的值。如果 InnoDB 用光了这个池内的内存,就开始从操作系统分配内存,并且往 MySQL 错误日志中写警告信息。其默认值是 1MB,当发现错误日志中已经有相关的警告信息时,就应该适当增加该参数的大小。
管理员也可以使用 show engine innodb status\G;查询运行中的数据库的状态,如下所示:
mysql> show engine innodb status\G; ... ---------------------- BUFFER POOL AND MEMORY ---------------------- Total memory allocated 17445316; in additional pool allocated 869760 Dictionary memory allocated 25752 Buffer pool size 512 Free buffers 488 Database pages 24 Modified db pages 0 Pending reads 0 Pending writes: LRU 0, flush list 0, single page 0 Pages read 24, created 0, written 0 0.00 reads/s, 0.00 creates/s, 0.00 writes/s No buffer pool page gets since the last printout ...这些信息有助于了解 InnoDB 缓冲池的使用情况和性能。根据这些数据,可以调整 innodb_buffer_pool_size 参数以优化数据库性能。