my28_mysql内存占用过高降低的方法

对mysql做压力测试,测试完之后,mysql的内存一直不下降

$ free -m
              total        used        free      shared  buff/cache   available
Mem:         128669      107316        2821         649       18531       19970
Swap:             0           0           0
# top -u mysql

top - 16:21:21 up 6 days, 23:41,  5 users,  load average: 0.00, 0.85, 2.93
Tasks: 427 total,   1 running, 425 sleeping,   1 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 13175748+total,  2238988 free, 11056342+used, 18955080 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 19794852 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                 
 6059 mysql     20   0  0.154t 0.102t   8888 S   0.0 82.9   4033:55 mysqld 

使用了0.102*1024=104G,需要0.154*1024=157G,buffer_pool占用了80G,一直不释放,调整buffer_pool_size到70G

mysql> show variables like '%pool_size%';
+-------------------------+-------------+
| Variable_name           | Value       |
+-------------------------+-------------+
| innodb_buffer_pool_size | 85899345920 |
+-------------------------+-------------+
1 row in set (0.00 sec)

mysql> select 70*1024*1024*1024;
+-------------------+
| 70*1024*1024*1024 |
+-------------------+
|       75161927680 |
+-------------------+
1 row in set (0.00 sec)

mysql> set global innodb_buffer_pool_size=75161927680;
Query OK, 0 rows affected (0.01 sec)

调整后,内存立即就释放了;free和available两项都有增加

$ free -m
              total        used        free      shared  buff/cache   available
Mem:         128669       96811       13326         649       18531       30476
Swap:             0           0           0

之后又调整buffer_pool_size到80G,发现mysql占用的内存又慢慢上来了,看来mysql的buffer_pool_size会占用固定的内存大小。最后将buffer_pool_size设置为了物理内存的一半。

原文地址:https://www.cnblogs.com/perfei/p/10335547.html