. 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 #单位秒