InnoDB内存配置
MySQL将内存分配给各种缓存和缓冲区,以提高数据库操作的性能。当为InnoDB分配内存时,总是考虑操作系统需要的内存,分配给其他应用程序的内存,以及分配给其他MySQL缓冲区和缓存的内存。例如,如果您使用MyISAM表,请考虑分配给键缓冲区的内存量(key_buffer_size)。
InnoDB特定的缓冲区使用以下参数配置:
.innodb_buffer_pool_size定义缓冲池的大小,缓冲池是存放InnoDB表、索引和其他辅助缓冲区缓存数据的内存区域。缓冲池的大小对系统性能很重要,通常建议将innodb_buffer_pool_size配置为系统内存的50%到75%。默认的缓冲池大小是128MB。
在具有大量内存的系统上,可以通过将缓冲池划分为多个缓冲池实例来提高并发性。缓冲池实例的数量由innodb_buffer_pool_instances选项控制。默认情况下,InnoDB创建一个缓冲池实例。缓冲池实例的数量可以在启动时配置。
.innodb_log_buffer_size以字节为单位定义InnoDB所要写入磁盘日志文件中的日志缓存区大小。默认大小为16MB。大型日志缓冲区允许运行大型事务,而不需要在事务提交之前将日志写入磁盘。如果有更新、插入或删除许多行的事务,可以考虑增加日志缓冲区的大小以节省磁盘I/O。Innodb_log_buffer_size可以在启动时配置
警告:
在32位GNU/Linux x86上,注意不要将内存占用设置得太高。glibc可能允许进程堆堵塞线程堆栈,这会导致服务器崩溃。如果分配给mysqld进程的全局和每个线程的缓冲区和缓存的内存接近或超过2GB,这是一个风险。
一个类似于下面的公式,计算MySQL的全局和每个线程的内存分配,可以用来估计MySQL的内存使用。您可能需要修改公式,以考虑到MySQL版本和配置中的缓冲区和缓存。
innodb_buffer_pool_size+ key_buffer_size+ max_connections*(sort_buffer_size+read_buffer_size+binlog_cache_size)+ max_connections*2MB
每个线程使用一个堆栈(通常是2MB,但在Oracle公司提供的MySQL二进制文件中只有256KB),在最坏的情况下还使用sort_buffer_size +read_buffer_size的额外内存
在Linux上,如果内核启用了大页支持,InnoDB可以使用大页为其缓冲池分配内存。