立即学习:https://edu.csdn.net/course/play/10084/221705?utm_source=blogtoedu
系统变量设置方法
动态设置(立即生效,实例重启后失效)
set [global | session] system_var_name= exp
示例:
set GLOBAL innodb_buffer_pool_size=2g;
静态设置(实例重启后生效)
#vi /etc/my.cnf
innodb_buffer_pool_instances=2;
--2、关于innodb_buffer_pool_size的设置
在mysql版本大于等于5.7.5之后,innodb_buffer_pool_size可以动态设置。
动态调整时会以参数innodb_buffer_pool_chunk_size作为调整粒度,缺省值为128.
Buffer pool size的大小应当总是等于innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances或者这个乘积的倍数如果设置的值不是innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的乘积或者倍数,则innodb_buffer_pool_size会被调整。
set global innodb_buffer_pool_size=1024*1024*1024*2;
show variables like 'innodb_buffer_pool_size';
--监控innoDB_buffer_pool大小调整
show status where Variable_name='InnoDB_buffer_pool_resize_status';
--修改参数文件使其永久生效
#vim /etc/my.cnf
innodb_buffer_pool_size=2g
#systemctl restart mysqld
---b、参数innodb_buffer_pool_instances
此选项仅在将innodb_buffer_pool_size设置为1GB或更多时生效。用于指定InnoDB缓存池分配的实例个数或区域数。
总缓存池大小在所有缓冲池之间划分。
将缓冲池划分为单独的实例可以减少不同线程读取或写入缓存页面时的争用来提高并发性。
存储在缓冲池中或从缓冲池读取的每个页面都使用散列函数随机分配给其中一个缓冲池实例。
每个缓冲池管理自己的空闲列表,刷新列表,LRU以及连接到缓冲池的所有其他数据结构,并受其自己的缓冲池互斥锁保护。
如果innodb_buffer_pool_size大于1.3GB,则默认为innodb_buffer_pool_instances是innodb_buffer_pool_size / 128MB
在所有其他平台上,当innodb_buffer_pool_size大于或等于1GB时,默认值为8。否则,默认值为1.
为了获得最佳效率,请指定innodb_buffer_pool_instances和innodb_buffer_pool_size的组合,以便每个缓冲池实例至少为1GB。
--以下启用静态设置
#vim /etc/my.cnf
innodb_buffer_pool_size=2g
#systemctl restart mysqld
-- 此时innodb_buffer_pool_instances自动设置为8
--结论
--无论global级别如何设置,不会影响到当前session级别的设置
--global级别设置后仅影响后续登录的会话
--session级别设置后立即生效
--innodb_buffer_pool_size参数设置为OS内存的50%至70%%
--建议使用多个子池