MySql调优

centos -> mysql -> my.cnf配置修改

# 注:增加和减少buffer pool的大小都是以大块的方式,块的大小由参数innodb_buffer_pool_chunk_size决定,默认为128M。

#      Innodb_buffer_pool_size的大小可以自行设定,但必须是innodb_buffer_pool_chunk_size 乘以 innodb_buffer_pool_instances的整数倍,如果不是,则buffer pool会被调整成大于设定值且最接近的一个值,如下例:

#      默认 128MB * 16 = 2048 MB (2G) 但是 buffer_pool_size = 9G ,不是整倍数,因此调整为10G
# 查看mysql版本信息
select version();
# 查看引擎缓存池信息
show variables like 'innodb_buffer_pool%';
# 查看引擎日志信息
show variables like 'innodb_log%';
# 并发线程的数量信息
show variables like 'innodb_thread_concurrency';
# 查看引擎缓存池大小
show variables like 'innodb_buffer_pool_size';
# 查看已经被占用的和空闲的page
show global status like '%innodb_buffer_pool_pages%';
# 缓冲区LRU淘汰算法
show variables like 'innodb_old_blocks_pct';
# 引擎状态信息
show engine innodb status;

设置方式

# 计算结果查询
select 321992 / 284424899 * 100;

-- 默认配置下 Buffer Pool 只有 128MB,一般建议设置成可用物理内存的 60%~80%。 5G
set global innodb_buffer_pool_size = 1073741824;
set global innodb_buffer_pool_chunk_size = 8053063680;
set global innodb_buffer_pool_instances = 8;

# 查看innodb数据文件及redo log的打开、刷写模式,有三个值:fdatasync(默认),O_DSYNC,O_DIRECT
show variables like 'innodb_flush_method';
# O_DSYNC方式表示以同步io的方式打开文件,任何写操作都将阻塞到数据写入物理磁盘后才返回
# O_DIRECT方式表示在unix操作系统中会最小化缓冲对io的影响,该文件的io是直接在用户空间的buffer上操作的,并且io操作是同步的,因此不管是read()系统调用还是write()系统调用,数据都保证是从磁盘上读取的
# FDATASYNC(int filedes)方式表示类似于fsync,但它只影响文件的数据部分。而除数据外,fsync还会同步更新文件的元信息到磁盘。
set global  innodb_flush_method = O_DIRECT;

# 最佳的值是小于并接近虚拟CPU的CORES个数
set global innodb_thread_concurrency = CORES * 2

# 根据innodb_buffer_pool_size的值处于2~4的参数结果设置innodb_log_file_size和innodb_log_buffer_size乘于8~5的结果
(innodb_buffer_pool_size=2G) / 2~4 = (innodb_log_file_size=1073741824) = (innodb_log_buffer_size=134217728) * 8~5

centos命令查询cpu信息

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每颗物理CPU中Core个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看逻辑CPU个数
cat /proc/cpuinfo| grep "processor"| wc -l
# 查看CPU信息(型号)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

你可能感兴趣的:(mysql,数据库)