-
max_connections
允许客户端并发连接的最大数量,默认值是151。
show status like '%connections%';
设置参数值应大于Max_used_connections。如果使用连接池,可参考连接池的最大连接数和每个连接池的数量作为参考设置
-
innodb_buffe_pool_instances
InnoDB缓存池被分成的区域数。对于1GB以上大的InnoDB缓存,将缓存分成多个部分可以提高MySQL服务的并发性,减少不同线程读缓存页的读写竞争。每个缓存池有它单独的空闲列表、刷新列表、LRU列表和其他连接到内存池的数据结构,它们被mutex锁保护。这个参数只有将innodb_buffer_pool_size参数设为1GB或以上时才生效。建议将每个分成的内存区域设为1GB大小。
在一些内存以及 CPU 内核超大型的数据库服务器上,可以在保证足够大的 IBP 内存的前提下,通过以下公式,协同增加缓存实例数量以及读写线程。
( innodb_read_io_threads + innodb_write_io_threads ) = innodb_buffe_pool_instances
如果仅仅是将读写线程根据缓存实例数量对半来分,即读线程和写线程各为实例大小的一半,肯定是不合理的。
例如应用服务读取数据库的数据多于写入数据库的数据,那么增加写入线程反而没有优化效果。
一般可以通过 MySQL 服务器保存的全局统计信息,来确定系统的读取和写入比率。
可以通过以下查询来确定读写比率:
SHOW GLOBAL STATUS LIKE 'Com_select';//读取数量
SHOW GLOBAL STATUS WHERE Variable_name IN ('Com_insert', 'Com_update', 'Com_replace', 'Com_delete');//写入数量
如果读大于写,应该考虑将读线程的数量设置得大一些,写线程数量小一些;否则,反之。
-
Innodb_buffer_pool_size
用于缓存InnoDB表数据、索引、插入缓冲、数据字典等信息。常用数据可以缓存在内存处理,提高很大效率。
官方建议:该参数设置为物理内存的50%-80%,
生产建议修改参数:(目前生产数据库内存64G)
innodb_buffer_pool_size = 32G