mysql 优化

2020-04-19  本文已影响0人  xiaoer0128

. show full processlist;查看所有连接的状态,有没有异常的状态

一、SQL语句优化

 . 不要select * 

 . 谨慎使用模糊查询。只有 s% (%在后面)才走索引

 . 对order by 加索引

 . 少用IS NULL和IS NOT NULL 不走索引 可以使用>或者<代替

 . 少用!=运算符 可以使用>和< 代替

 . 少用OR; OR前面会使用索引,后面不会,可以使用UNION ALL来代替
        select * from temp where age=20 or age=30;不走索引,可以使用下面的代替
        select * from temp where age=20
         UNION ALL
        select * from temp where age=30

. 少用 IN 和NOT IN
    select * from user where age in(20,30); 可以使用下面的代替
    select * from user where age= 20
    UNION ALL
    select * from user where age=20

. 避免条件语句中的数据类型转换
  如果数据类型是整型,不要加引号

. 在表达式左侧使用运算符和函数会是索引失效

二、优化数据库参数

1、 优化最大连接数 MAX_CONNECTIONS mysql 的最大并发连接数,默认151 最大上限 16284

实际连接数是最大连接数的85%最为合适

  1 #查看设置的连接数
show variables like '%max_connections%';
  SHOW VARIABLES LIKE 'MAX_USER_CONNECTIONS'; # 每个用户的连接数
  

MySQL 为每个连接创建缓冲区,所以不能盲目的上调最大连接数

  max_connection=3000 #消耗大约800内存

2、优化请求的堆栈

back_log 是存放执行请求的堆栈大小,默认50;就是达到了最大连接数,有多少连接可以排队
设置成最大连接数的20~30%比较好

3、优化并发线程数

innodb_thread_concurrency 并发线程数,默认是0;合理的应该是cpu核心数的2倍

4、连接超时时间

wait_timeout 超时时间,单位秒。默认是8小时,长期不用又不销毁,浪费资源
wait_timeout =600 #10分钟

5、修改InnoDB缓存大小

innodb_buffer_pool_size是InnoDB的缓存容量,默认128M,设置成内存的70%-80%比较合适,如果还有其他服务比如Redis缓存,那么值要修改的小些

三、利用慢查询日志

  show variables like 'slow_query%'; #查询慢查询是否开启以及位置
打开配置文件,【mysqld】添加
slow_query_log = ON 
long_query_time = 1 #单位秒
上一篇下一篇

猜你喜欢

热点阅读