Mysql 优化

这篇文章会记录一些mysql优化经验,不只是sql语句的优化,还有本身mysql服务器的性能优化

多个Buffer Pool 优化并发能力

我们对mysql进行CRUD操作时,mysql会将数据文件读取到BufferPool内存缓存中,因此我们可以设当增大BufferPool的数量,和BufferPool的大小,减少mysql多线程访问的干扰,增加mysql的性能

配置再my.cnf中修改

innodb_buffer_pool_size = 8589934592
innodb_buffer_pool_instances = 4

这段配置的意思是,设置buffer_pool_size的总大小为8G,一共有4个BufferPool,每个BufferPool的大小为2G

生产环境BufferPool的大小

在生产欢环境中,一般设置BufferPool的大小为总内存的50%- 60% 比如记得机器是32G内存,此时设置BufferPool的内存大小为20G左右,就比较合适

BufferPool的总大小=(chunk的大小 * bufferpool的数量)的2倍数

每个chunk的大小为128M\

To Many Connections

  1. 查看当前mysql 数据库允许的最大连接数量
mysql> show variables like '%max_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set

  1. 查看当前mysql已经使用的连接数量
mysql> show variables like '%max_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set
  1. 修改my.cnf文件重启数据库
max_connections = 1000
  1. 修改linux 允许打开最大文件句柄数
[root@eshop-cache04 ~]# ulimit -HSn 65535

[root@eshop-cache04 ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7893
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7893
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

 

mysql 性能随机抖动

innodb_io_capacity设置为SSD固态硬盘的IOPS,让他刷缓存页尽量快,同时设置innodb_flush_neighbors为0,让他每次别刷临近缓存页,减少要刷缓存页的数量,这样就可以把刷缓存页的性能提升到最高。

索引使用规则

  1. 等值匹配规则
  2. 最左侧列匹配规则
  3. 最左前缀匹配规则
  4. 最左范围查找规则
  5. 等值匹配+范围匹配的原则
  6. 在查询中一旦一个字段的范围查询用到了索引,那么后面所有的条件就都不会用到索引了,所以范围查询字段要放在联合索引的最后

执行计划

const:常量级,说明你的查询已经使用到了索引,二级索引必须是唯一索引,才可以实现const
ref: 范围级,说明索引是普通索引,不是唯一索引,包含name is null 这种语法即使是主键索引或者唯一索引,也是ref级别,如果是二级索引同时包含is null 语法 则是 ref_or_null

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