mysql磁盘占用100%_mysql 100%占用的解决

早上客户反应,其网站无法访问,无限转圈

上服务器,查看磁盘空间df -h,内存使用率free -m,网络流量iftop均正常

然后使用top查看时,发现mysql的cpu使用率上升到200%。

解决过程回放

进入mysql

查看正在执行的sql

mysql> use information_schema;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> select * from PROCESSLIST where info is not null;

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

| ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO |

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

| 291 | root | localhost | information_schema | Query | 0 | executing | select * from PROCESSLIST where info is not null |

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

1 row in set (0.00 sec)

mysql>

并没有发现有任何的异样,没有出现锁表状况

然后查看tmp_table_size的大小

mysql> show variables like '%table_size%';

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

| Variable_name | Value |

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

| max_heap_table_size | 16777216 |

| tmp_table_size | 16777216 |

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

2 rows in set (0.00 sec)

确认两个值大小均为16M(安装的是mariadb 5.5)

查看free -m还有4G大小的内存,此处显得过小,将其一个值提升到500M,一个值提升至200M

[root@iZbp16s0cap5fnfk6bjvw1Z ~]# grep -v ^# /etc/my.cnf | grep -v ^$

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

tmp_table_size=200M

max_heap_table_size=500M

然后重启mysql

发现top的中mysql的cpu占用率使用已经大大下降,已经恢复至20%左右

事后总结

mysql cpu占用率很高,很有可能是因为查询时死表,或者说大量多表查询,导致cpu飚高。

另外也有可能是因为tmp_table_size过大,超出了mysql的内存大小使用设定,mysql会将一些table写入到磁盘中,这样也会大大引起cpu的使用率增大

在select * from PROCESSLIST where info is not null中没有发现异样时,即可以推断另外一种的可能。

在mysql的官方文档中是这样写的

Storage Engines Used for Temporary Tables

An internal temporary table can be held in memory and processed by the MEMORY storage engine, or stored on disk and processed by the MyISAM storage engine.

If an internal temporary table is created as an in-memory table but becomes too large, MySQL automatically converts it to an on-disk table. The maximum size for in-memory temporary tables is determined from whichever of the values of tmp_table_size and max_heap_table_size is smaller. This differs from MEMORY tables explicitly created with CREATE TABLE: For such tables, only the max_heap_table_size system variable determines how large the table is permitted to grow and there is no conversion to on-disk format.

翻译过来的大意是,当tmp_table变得越来越大的时候,msql tmp_table使用内存最大值为tmp_table_size与max_heap_table_size两者中较小的值。

而最后一句话特别的重要,当create table的时候(mysql临时表使用内存肯定会增加),max_heap_table_size才是决定临时表能创建多少的值。

所以一般max_heap_table_size要大于tmp_table_size

mysql> show global status like "%created_tmp%";

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

| Variable_name | Value |

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

| Created_tmp_disk_tables | 1654 |

| Created_tmp_files | 6 |

| Created_tmp_tables | 1791 |

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

3 rows in set (0.00 sec)

查看临时tables的实时数量

每次创建临时表,Created_tmp_tables增加,如果临时表大小超过tmp_table_size,则是在磁盘上创建临时表,但是其大小不能超过max_heap_table_size

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL占用磁盘空间的大小取决于数据库中存储的数据量以及表结构、索引等因素。以下是一些可能导致MySQL占用大量磁盘空间的原因和解决方法: 1. 数据库中存储的大量数据:如果数据库中存储了大量数据,那么MySQL占用磁盘空间也会相应增加。可以通过删除不必要的数据,或者对数据进行压缩等方式来减少占用磁盘空间。 2. 索引占用的空间:MySQL中的索引也会占用磁盘空间。如果表中有大量的索引,那么它们可能会占用相当大的磁盘空间。可以通过删除不必要的索引、优化索引等方式来减少索引占用磁盘空间。 3. 未正确清除日志:MySQL中的日志文件也会占用磁盘空间。如果未正确清除日志文件,它们可能会占用相当大的磁盘空间。可以通过定期清除日志文件、设置合适的日志文件大小等方式来控制日志文件占用磁盘空间。 4. 慢查询日志:如果开启了慢查询日志,那么它们也会占用磁盘空间。可以通过定期清除慢查询日志、设置合适的日志文件大小等方式来减少慢查询日志占用磁盘空间。 5. 数据库备份:如果定期备份数据库,那么备份文件也会占用磁盘空间。可以通过删除不必要的备份文件、压缩备份文件等方式来减少备份文件占用磁盘空间。 综上所述,可以通过删除不必要的数据和索引,定期清除日志和慢查询日志,删除不必要的备份文件等方式来减少MySQL占用磁盘空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值