我是靠谱客的博主 漂亮小天鹅,最近开发中收集的这篇文章主要介绍mysql负载高排查_mysql负载突然增大,网站无法访问,排查处理方案,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、开启慢查询日志记录

1、vi /etc/my.cnf

a4c26d1e5885305701be709a3d33442f.png

#slow_query

slow_query_log

=

on

long_query_time

=

1

slow_query_log_file

= /data/mysql_query/mysql-slow.log

注意事项:配置需要写到[mysqld_safe]上面,日志文件需要有读写权限

service mysqld restart

重启数据库才会生效

开启慢日志查询,非常有利于优化mysql的性能。

二、针对执行花费时间较多的语句,进行优化。

1、查询较多的字段开启索引,将大大提升查询的效率

2、开发程序时可以将数据库的计算,放到应用层可以大大减少数据库的压力。

三、进入mysql后,使用show

processlist;

使用此命令可以看到花费时间较多的语句,并针对性的进行优化,例如添加索引。

四、如果开启了缓存,需要及时清理缓存碎片,

查询缓存使用情况

mysql> show status like

‘%qcache%’;

+————————-+———-+

| Variable_name | Value |

+————————-+———-+

| Qcache_free_blocks | 1041 |

| Qcache_free_memory | 83003648 |

| Qcache_hits | 76534835 |

| Qcache_inserts | 7677916 |

| Qcache_lowmem_prunes | 1516232 |

| Qcache_not_cached | 330027 |

| Qcache_queries_in_cache | 173376 |

| Qcache_total_blocks | 347796 |

+————————-+———-+

8 rows in set (0.00 sec)

Qcache_free_blocks

目前还处于空闲状态的Query

cache内存block的数目 这个值比较大,意味着内存碎片比较多,可以使用flush query

cache清理内存碎片

Qcache_free_blocks

Qcache_free_memory

目前还处于空闲状态的Query Cache内存总量

Qcache_hits查询缓存区的命中个数,也就是直接从查询缓存区作出响应处理的查询个数

Qcache_inserts

向Query Cache中插入新的Query Cache的次数,也就是没有命中的次数

Qcache_lowmem_prunes

其代表的意义为:查询缓存去因内存不足而不得不从查询缓存区删除的查询缓存信息,删除算法为LRU; 当query内存容量不足,需要从中删除老的Query

Cache已给新的Cache对象使用的次数 该参数值对于检测查询缓存区的内存大小设置是否,有非常关键性的作用

Qcache_not_cached

没有被Cache的SQL数,包括无法被Cache的SQL以及由于Query_cache_type设置的不会被Cache的sql

Qcache_queries_in_cache

目前在Query Cache中的SQL数量,当前缓存的查询(和响应)的数量

Qcache_total_blocks

Query Cache中block的总数量

以下有几个概念:

碎片率

查询缓存内存碎片率:Qcache_free_blocks / Qcache_total_blocks * 100%

如果查询缓存碎片率超过20%,

1、可以用flush query

cache;可以清理缓存碎片

2、或者试试减小query_cache_min_res_unit,

如果你的查询都是小数据量的话,这样就可以降低Qcache_free_block。

mysql>SHOW VARIABLES

LIKE '%query_cache%';

a4c26d1e5885305701be709a3d33442f.png

( query_cache_size -

Qcache_free_memory )除以 Qcache_queries_in_cache

就是 (134217728 -

119423544)/13205=1120.34

所以在设置的的时候

query_cache_min_res_unit

可以设置成2k 在my.cnf中

query_cache_min_res_unit=

2k

命中率

查询缓存命中率:Qcache_hits/(Qcache_hits +

Qcache_inserts) * 100%

缓存利用率

查询缓存内存使用率:(query_cache_size –

Qcache_free_memory) / query_cache_size *

100%

查询缓存利用率在25%以下的话说明query_cache_size设置的过大,可适当减小;查询缓存利用率在80%以上而且Qcache_lowmem_prunes

> 50的话说明query_cache_size可能有点小,要不就是碎片太多。

四、MySQL调优之innodb_buffer_pool_size大小设置

相关查看命令

sql> show global variables like 'innodb_buffer_pool_size';

sql> show global status

like 'Innodb_buffer_pool_pages_data';

sql> show global status

like 'Innodb_page_size';

sql> use mysql;

sql> select

@@innodb_buffer_pool_size;

....

MariaDB [(none)]> show

global variables like 'innodb_buffer_pool_size';

+-------------------------+-----------+

| Variable_name

|

Value

|

+-------------------------+-----------+

| innodb_buffer_pool_size | 268435456 |

+-------------------------+-----------+

1 row in set (0.00 sec)

MariaDB [(none)]> show global status like

'Innodb_buffer_pool_pages_data';

+-------------------------------+-------+

| Variable_name

|

Value |

+-------------------------------+-------+

| Innodb_buffer_pool_pages_data | 6082  |

+-------------------------------+-------+

1 row in set (0.00 sec)

MariaDB [(none)]> show global status like

'Innodb_buffer_pool_pages_total';

+--------------------------------+-------+

| Variable_name

|

Value |

+--------------------------------+-------+

| Innodb_buffer_pool_pages_total | 16383 |

+--------------------------------+-------+

1 row in set (0.00 sec)

MariaDB [(none)]> show global status like

'Innodb_page_size';

+------------------+-------+

| Variable_name

| Value

|

+------------------+-------+

| Innodb_page_size | 16384 |

+------------------+-------+

1 row in set (0.00 sec)

MariaDB [(none)]> 官方对这个几个参数的解释:

Innodb_buffer_pool_pages_data

The number of pages in the InnoDB buffer pool containing data. The

number includes both dirty and

clean pages.

Innodb_buffer_pool_pages_total

The total size of the InnoDB buffer pool, in pages.

Innodb_page_size

InnoDB page size (default 16KB). Many values are counted in pages;

the page size enables them to be

easily converted to bytes

调优参考计算方法:

val = Innodb_buffer_pool_pages_data /

Innodb_buffer_pool_pages_total * 100%

val > 95% 则考虑增大

innodb_buffer_pool_size, 建议使用物理内存的75%

val < 95% 则考虑减小

innodb_buffer_pool_size, 建议设置为:Innodb_buffer_pool_pages_data

* Innodb_page_size * 1.05 / (1024*1024*1024)

设置命令:set global innodb_buffer_pool_size =

2097152; //缓冲池字节大小,单位kb,如果不设置,默认为128M

五、如果不同的系统都在访问一个数据库,最好使用不同的账号来访问数据库,方便排查那个系统访问导致数据库卡顿了。

最后

以上就是漂亮小天鹅为你收集整理的mysql负载高排查_mysql负载突然增大,网站无法访问,排查处理方案的全部内容,希望文章能够帮你解决mysql负载高排查_mysql负载突然增大,网站无法访问,排查处理方案所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部