GreatSQL社区

搜索

[已解决] MYSQL 为什么数据库层面看到的内存远大于系统的内存?

545 2 2022-12-8 18:39
空LINUX 系统
  1. <p>[root@localhost ~]# free -m</p><p>              total        used        free      shared  buff/cache   available</p><p>Mem:           7821          96        7577           8         147        7304</p><p>Swap:          8063           0        8063</p>
复制代码


MYSQL 参数文件


  1. <div>#Global Memon Set######  innodb buf 2048MB, binlog_cache=16MB;logbuf=16MB
  2. innodb_buffer_pool_size = 2048M
  3. innodb_log_buffer_size= 16M
  4. key_buffer_size = 8M
  5. max_heap_table_size =16M
  6. ###innodb buffer subordinate
  7. innodb_sort_buffer_size = 4M  #插入排序 1M
  8. innodb_ddl_buffer_size = 4M
  9. innodb_adaptive_hash_index = OFF #来禁用

  10. innodb_buffer_pool_dump_at_shutdown = ON
  11. innodb_buffer_pool_load_at_startup  = ON

  12. #### Thread Memon Set  8+8+8+8+16+16+8=72+1=73MB
  13. join_buffer_size=8388608  #8M
  14. sort_buffer_size=8388608   #8M
  15. read_buffer_size=8388608    #8M
  16. read_rnd_buffer_size=8388608  #8M
  17. net_buffer_length = 16384    #16K max 1M   
  18. tmp_table_size   =16777216   #16M
  19. binlog_cache_size =16777216   #16M
  20. bulk_insert_buffer_size=8388608  #8M
  21. thread_cache_size                  = 32
  22. thread_stack                       = 256K


  23. #limit
  24. max_allowed_packet                 = 16M
  25. interactive_timeout                = 600
  26. lock_wait_timeout                  = 300
  27. max_execution_time                 = 100000
  28. max_connections=500</div>
复制代码



启动MYSQL


  1. <div>root@localhost ~]# free -m
  2.               total        used        free      shared  buff/cache   available
  3. Mem:           7821        1590        5988           8         242        5762
  4. Swap:          8063           0        8063


  5. [root@localhost ~]#  ps -o rss,command -C mysqld
  6.   RSS COMMAND
  7. 1523928 /usr/sbin/mysqld

  8. [root@localhost ~]# top -p 4322
  9.   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                      
  10. 4322 root      20   0 5522936   1.5g  17748 S   0.0 19.0   0:09.15 mysqld  </div>
复制代码



物理内存使用了 1590  对比MYSQL使用1494MB



2.1 从MYSQL层统计内存使用

  1. <div><font color="#000000">mysql>  SELECT * FROM sys.memory_global_total;</font>
  2. <font color="#000000">+-----------------+</font>
  3. <font color="#000000">| total_allocated |</font>
  4. <font color="#000000">+-----------------+</font>
  5. <font color="#000000">| 2.79 GiB        |</font>
  6. <font color="#000000">+-----------------+</font>
  7. <font color="#000000">1 row in set (0.02 sec)</font></div>
复制代码





mysql>  SELECT SUBSTRING_INDEX(event_name,'/',2) AS code_area, FORMAT_BYTES(SUM(current_alloc)) AS current_alloc
        FROM sys.x$memory_global_by_current_bytes
        GROUP BY SUBSTRING_INDEX(event_name,'/',2)
        ORDER BY SUM(current_alloc) DESC;


+---------------------------+---------------+
| code_area                 | current_alloc |
+---------------------------+---------------+
| memory/innodb             | 2.15 GiB      |
| memory/performance_schema | 606.30 MiB    |
| memory/mysys              | 40.88 MiB     |
| memory/sql                | 12.20 MiB     |
| memory/temptable          | 1.00 MiB      |
| memory/mysqld_openssl     | 134.76 KiB    |
| memory/mysqlx             | 2.67 KiB      |
| memory/vio                | 2.12 KiB      |
| memory/myisam             |  696 bytes    |
| memory/csv                |   88 bytes    |
| memory/blackhole          |   88 bytes    |
+---------------------------+---------------+
11 rows in set (0.00 sec)




  1. <div><b><font color="#000000">mysql> show engine innodb status;</font></b>
  2. <b><font color="#000000"> ----------------------
  3. BUFFER POOL AND MEMORY
  4. ---------------------- </font></b>
  5. <b><font color="#000000">Total large memory allocated 0 </font></b>
  6. <b><font color="#000000">Dictionary memory allocated 489415</font></b>
  7. <b><font color="#000000">Buffer pool size   131056 </font></b>
  8. <b><font color="#000000">Buffer pool size, bytes 2147221504 </font></b>
  9. <b><font color="#000000">Free buffers       99486 </font></b>
  10. <b><font color="#000000">Database pages     31570 </font></b>
  11. <b><font color="#000000">Old database pages 11810 </font></b>
  12. <b><font color="#000000">Modified db pages  0 </font></b>
  13. <b><font color="#000000">Pending reads      0 </font></b></div>
复制代码
show engine innodb status; 显示属于真实分配的内存吗?




全部回复(2)
fander 2023-6-16 08:47:20
我没有仔细阅读你的提问,但我想说我不太相信mysql的sys视图统计内存使用情况这个功能,我认为他的统计是不准确或者有缺陷的。之前我有发现过这方面的bug,是一张sys库里的统计内存使用相关的视图,和你的案例不是完全一样的视图,官方验证确认了是bug,但没有打算修复的意思,所以我很失望,链接如下:
https://bugs.mysql.com/bug.php?id=105969
yejr 2023-6-16 09:44:49
show engine innodb status; 显示属于真实分配的内存吗?
==
这个只能看到部分innodb引擎使用的内存,像redo log buffer之类的就看不到了。

即便是查看sys视图,也没办法统计到全部内存消耗情况,有些没纳入统计。

mysqld进程消耗更重要的是关注有无内存泄漏发生,有无swap产生。
InnerCodeDBA

7

主题

0

博客

36

贡献

新手上路

Rank: 1

积分
47

2022年度求知人物2022年度活跃用户

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-4-16 14:44 , Processed in 0.020346 second(s), 14 queries , Redis On.
快速回复 返回顶部 返回列表