概述
很多时候我们看到mysql数据库内存用的很高,这个时候我们应该如何知道mysqld进程究竟什么原因消耗掉内存的,都用哪里去了呢?下面介绍几个mysql数据库常用的查看内存消耗情况的命令~
一、linux观察mysql线程内存消耗情况
top -p mysqlpid -H
然后使用pmap -d 分析一下进程的内存情况
二、查看mysql实例内存具体分配情况
1、共享内存
共享内存中的内存空间是实例创建时即分配的内存空间,并且是所有连接共享的。
全局共享内容主要是MySQL Instance以及底层存储引擎用来暂存各种全局运算及可共享的暂存信息,如
- 存储查询缓存的 Query Cache,
- 缓存连接线程的 Thread Cache,
- 缓存表文件句柄信息的 Table Cache,
- 缓存二进制日志的 BinLog Buffer,
- 缓存MyISAM存储引擎索引键的 Key Buffer
- 存储InnoDB数据和索引的 InnoDB Buffer Pool
等等。
show variables where variable_name in ( 'innodb_buffer_pool_size','innodb_log_buffer_size','innodb_additional_mem_pool_size','key_buffer_size','query_cache_size' );
参数说明:
- innodb_buffer_pool该部分缓存是 Innodb 引擎最重要的缓存区域,是通过内存来弥补物理数据文件的重要手段。其中主要包含数据页、索引页、undo 页、insert buffer、自适应哈希索引、锁信息以及数据字典等信息。在进行 SQL 读和写的操作时,首先并不是对物理数据文件操作,而是先对 buffer_pool 进行操作,然后再通过 checkpoint 等机制写回数据文件。该空间的优点是可以提升数据库的性能、加快 SQL 运行速度,缺点是故障恢复速度较慢。
- innodb_