记一次MySQL运维

[root@b2btest ~]# free -h
total used free shared buffers cached
Mem: 125G 124G 780M 13M 28K 238M
-/+ buffers/cache: 124G 1.0G
Swap: 30G .5G 22G

分析现象;

首先,可以看到,free部分已经严重不足,swap被大量启用。

而另一方面,cached部分的数据量非常低,而几乎所有的内存资源都被-/+ buffers/cache部分used,

初步分析:

buffer pool的设置过高,所有的数据都默认存储进了buffer pool中。在我的另一篇文章中,介绍了上面各个参数的含义,第一行的buffer指的是未被使用的量。

这导致了两个问题;

一个是内存资源被大量占用,free部分严重不足。

另一个是缓存区没有得到使用,因为所有数据都优先导入了buffer pool中。

因为缓存区没有被使用,所以即使内存的free部分已经不够用了,系统缓存也无法自动释放空间。

当这个矛盾产生后,系统就开始启用swap分区。

解决思路:

将数据,从buffer pool与swap里,全部挤压出来到cached中。再将 cached中的数据释放到磁盘内。使得内存中的空间得到释放。

先找到占用的具体进程

top - :: up  days, :,   users,  load average: 2.67, 2.04, 1.97
Tasks: total, running, sleeping, stopped, zombie
%Cpu(s): 10.2 us, 0.6 sy, 0.0 ni, 89.2 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem: +total, +used, free, buffers
KiB Swap: total, used, free. cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
mysql .130t .117t S 129.1 95.3 : mysqld

这是台mysql专用服务器,系统资源全部被MySQL占用,要释放内存,就业从MySQL内部解决;

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES

默认存储引擎为innodb,

mysql> show engine innodb status;
截取以下段落
----------------------
BUFFER POOL AND MEMORY
----------------------
Total large memory allocated
Dictionary memory allocated
Buffer pool size
Free buffers
Database pages
Old database pages 2657374

找到原因。开始处理

mysql>  show variables like "%innodb_buffer_pool%";

截取以下参数
+-------------------------------------+----------------+
| Variable_name | Value |
+-------------------------------------+----------------+
| innodb_buffer_pool_chunk_size | |
| innodb_buffer_pool_instances | |
| innodb_buffer_pool_size | |
+-------------------------------------+----------------+
rows in set (0.00 sec) mysql> select -**;
计划释放50倍的数据块
+-----------------------------+
| -** |
+-----------------------------+
| |
+-----------------------------+
row in set (0.00 sec) mysql> SET GLOBAL innodb_buffer_pool_size=;
Query OK, rows affected (0.00 sec)
将112G的内存降低至60G

之后查看下系统内存。free -h。确认下修改是否生效

[root@b2btest ~]# free -h
total used free shared buffers cached
Mem: 125G 124G 839M 15M 40K 47G
-/+ buffers/cache: 77G 48G
Swap: 30G .4G 22G

从这里已经可以看到,可用缓存空间已经增加了50G左右,接下来释放SWAP文件

[root@b2btest ~]# swapoff -a

7.5G的swap文件,释放需要5个小时!!,从这里也可以明显体会到swap文件系统运行的缓慢。

[root@b2btest ~]# free -h
total used free shared buffers cached
Mem: 125G 124G 742M 459M 60K 41G
-/+ buffers/cache: 83G 41G
Swap: 0B 0B 0B

现在所有的数据,都已经被转移到cached中,接下来,释放缓存。

[root@b2btest ~]# sync
[root@b2btest ~]# echo > /proc/sys/vm/drop_caches
[root@b2btest ~]# free -h
total used free shared buffers cached
Mem: 125G 83G 42G 459M 0B 42M
-/+ buffers/cache: 83G 42G
Swap: 0B 0B 0B

从缓存区释放40G数据,用时10秒左右。

[root@b2btest ~]# swapon -a
[root@b2btest ~]# swapon -s
文件名 类型 大小 已用 权限
/dev/sda3 partition -

重启swap分区。

在数据库保持正常运行的情况下,系统资源释放结束。

释放innodb空间的更多相关文章

  1. Mysql InnoDB彻底释放磁盘空间

    Innodb数据库对于已经删除的数据只是标记为删除,并不真正释放所占用的磁盘空间,这就导致InnoDB数据库文件不断增长. 如果需要彻底释放磁盘空间,则需要先导出数据,然后删除数据文件,最后导入数据. ...

  2. [记录]一则清理MySQL大表以释放磁盘空间的案例

    一则清理MySQL大表以释放磁盘空间的案例 一.基本情况: 1.dbtest库554G,先清理st_online_time_away_ds(37G)表的数据,保留半年的数据: 1)删除的数据:sele ...

  3. MySQL删除数据几种情况以及是否释放磁盘空间【转】

    MySQL删除数据几种情况以及是否释放磁盘空间: 1.drop table table_name 立刻释放磁盘空间 ,不管是 Innodb和MyISAM ; 2.truncate table tabl ...

  4. 【转】利用optimize、存储过程和系统表对mysql数据库表进行批量碎片清理释放表空间

    本文收集于本人的笔记本,由于找不到原文出处.在此省略,如哪位知道可以联系我加上. 核心是利用mysql系统表和“optimize table 表名”命令,对mysql数据表进行空间的释放.由于dele ...

  5. oracle 删除表、表空间、用户时,如何释放磁盘空间

    truncate table tablename DROP STORAGE; drop 执行drop table xx 语句drop后的表被放在回收站(user_recyclebin)里,而不是直接删 ...

  6. Oracle中关于清除数据和释放表空间

    一.表的重命名 flashback table test2 to before drop rename to test3;--[to test3]将表重命名 drop table test3 purg ...

  7. [转]oracle在删除表\表空间\用户时,如何释放磁盘空间

    一.drop表 执行drop table xx 语句 drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉.这样,回收站里的表信息就可以被恢复,或彻底清除. 通过查询回收站 ...

  8. Mac - 苹果电脑mac系统释放硬盘空间方法汇总

    硬盘空间是大家最头痛的一个问题,大家在硬盘空间变小的时候怎么腾空间的呢?下面为大家分享7个mac系统释放空间的高级方法,大家赶紧来收了! mac系统释放硬盘空间方法: 方法一:删除Emacs--可以节 ...

  9. mongodb拷贝数据库copyDatabase()。实现释放磁盘空间的方法。

    下面我们一起来看看关于mongodb拷贝数据库copyDatabase().实现释放磁盘空间的方法,希望文章对各位同学会有所帮助. db.copyDatabase("from",& ...

随机推荐

  1. Java提供的JDBC标准- 六大步骤

    JDBC 1.//加载驱动 class.forname 2.//创建连接connection 3.//创建 管道流 statement或  preparestatement预处理4.//执行sql语句 ...

  2. $bzoj3872\ [Poi2014]\ Ant\ colony$ 二分+$dp$

    正解:二分+$dp$ 解题报告: 传送门$QwQ$ 一年过去了依然没有头绪,,,$gql$的$NOIp$必将惨败了$kk$. 考虑倒推,因为知道知道除数和答案,所以可以推出被除数的范围,然后一路推到叶 ...

  3. linux MySQL 5.7+keepalived 主备服务器自主切换

    一.环境准备1.关闭防火墙与selinux systemctl stop firewalld setenforce 0 sed -i 's/SELINUX=.*/SELINUX=disabled/g' ...

  4. HDU3394 Railway 题解(边双连通分量)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3394 题目大意: 给定一个无向图,如果从一个点出发经过一些点和边能回到该点本身,那么一路走过来的这些点 ...

  5. .NET Core 3.0 System.Text.Json 和 Newtonsoft.Json 行为不一致问题及解决办法

    行为不一致 .NET Core 3.0 新出了个内置的 JSON 库, 全名叫做尼古拉斯 System.Text.Json - 性能更高占用内存更少这都不是事... 对我来说, 很多或大或小的项目能少 ...

  6. 【转】python及其工具包安装基本流程

    昨天晚上在家里的旧电脑上安装了<利用python进行数据分析>的部分环境,遇到若干问题,在此予以记录. 部分细节转:http://blog.csdn.net/huanbia/article ...

  7. PHP实现取得HTTP请求的原文【转】

    本文实例讲述了PHP实现取得HTTP请求的原文的方法,具体步骤如下: 1. 取得请求行:Method.URI.协议 可以从超级变量$_SERVER中获得,三个变量的值如下: $_SERVER['REQ ...

  8. RabbitMQ入门之Hello World

    RabbitMQ简介   在介绍RabbitMQ之前,我们需要了解一些最基础的概念,相信使用过或者听说过RabbitMQ的人都不会陌生,但笔者还是不厌其烦地在这里讲述,因为笔者的理念是self con ...

  9. 【Magicodes.IE 2.0.0-beta1版本发布】已支持数据表格、列筛选器和Sheet拆分

    为了更好的完善Magicodes.IE,春节期间我们会进行一次大的重构.由于精力有限,急缺文档和翻译(将文档翻译为英文文档)支持,诚邀各位加入.同时在功能方便也做了相关规划,有兴趣的朋友可以参与提交P ...

  10. <s:select>自动加标签

    在使用<s:select>标签时,发现页面位置不对,查看页面源码发现 <tr> <td class="tdLabel"></td> ...