文章目录
- 缓冲池的配置
- 介绍一张表 INNODB_BUFFER_POOL_PAGES
- 字段解释
缓冲池的配置
以下配置的意思,缓冲池在内存中的大小为20M;只有1个缓冲池实例;每一块的大小,插入缓冲占的百分比
# InnoDB 缓存池配置
innodb_buffer_pool_size = 20M
innodb_buffer_pool_instances = 1
innodb_buffer_pool_chunk_size = 2M# InnoDB 插入缓冲配置
innodb_change_buffer_max_size = 25
在我们启动mysqld
的时候,日志中会打印InnoDB
的初始化信息
介绍一张表 INNODB_BUFFER_POOL_PAGES
它是InnoDB
存储引擎的一个缓存池页的信息表,用于显示 InnoDB 缓冲池中各页的信息,是一个临时表,没有主键,生产上别随便用。
查询这个表的数量1280个数据,算一下,InnoDB
的一页是 16k,1280 * 16k = 20480k;刚好就我们配置的 20M;在MySQL启动的时候,它就会把配置的所有的缓存池空间分成页,放到这个数据表里面。
字段解释
POOL_ID: 缓冲池的 ID。指缓冲池的编号。是代表当前这个页属于哪一个缓存池实例,innodb_buffer_pool_instances
如果设置为2,就能看到这个字段值有0和1;我们设置了只有1个缓冲池实例,所以只有一个缓冲池实例0
BLOCK_ID: 缓冲池中的块 ID。看我的数据库,一个块有 10 页,现在有 1280 页,块ID最大 127。
SPACE: 表示页所属的表空间 ID。0 通常表示系统表空间,就是data
目录下的ibdata1
文件,ID代表的信息,可以在 INNODB_SYS_TABLESPACES
中查询到,表空间就代表那个文件存储了这个页的信息,一般每张表都会有一个 *.ibd 文件存放该表的数据信息,这个就代表一下两个页的信息是存在test/test7.ibd
这个文件里面的。
PAGE_NUMBER: 页号,在其所在的表空间中的编号,一般表空间的表空间头信息页、插入缓冲的位图信息页是在前面的,后面是段索引页,再后面就都是数据页,共享表空间没有存储表的数据信息,存储的事其他的信息。
PAGE_TYPE: 页的类型。可能的类型包括:
INDEX
: B-tree 索引页也是存放数据的页,innodb 是聚簇索引存储的方式,主键索引和数据都在叶子节点上。FILE_SPACE_HEADER
: 表空间头页。IBUF_BITMAP
: 插入缓冲位图页。IBUF_FREE_LIST
: 插入缓冲空闲列表页。IBUF_INDEX
: 插入缓冲池/ insert buffer。INODE
: INODE 页。SYSTEM
: 系统页,可能包含数据字典、系统元数据…UNKNOWN
: 未知页类型,这个一般是未分配的页的类型。- …
查看当前我们的缓冲池中有哪些页。
SELECT POOL_ID, PAGE_TYPE, COUNT(*) AS PAGES FROM INNODB_BUFFER_PAGE GROUP BY POOL_ID, PAGE_TYPE;
这里是我执行了一条insert
语句之后产生的,这就是是我们的插入操作用上了插入缓冲池;如果我们插入的表没有索引,那么不管怎么尝试都不会有这个类型的页面。所以 change buffer
只对非唯一索引有用,其他的没用
FLUSH_TYPE: 页的刷新类型。缓冲池的刷新行为;代表该页的刷新是怎么产生的,比如,后台线程刷新的,用户查询刷新的FIX_COUNT: 页的固定计数。表示有多少事务当前固定了这个页,防止其从缓冲池中被驱逐,暂时还不知道用途。
IS_HASHED: 表示页是否在缓冲池哈希表中。可能的值有 YES
或 NO
,暂时还不知道用途。
NEWEST_MODIFICATION: 页的最新修改 LSN
(日志序列号)。修改了数据之后,该值会有改动,数据库重启的时候就是0。
OLDEST_MODIFICATION: 页的最早修改 LSN。一般为0,暂时还不知道用途。
ACCESS_TIME: 页的最后访问时间。在某些配置中,这个值可能总是为 0。
TABLE_NAME: 表的名称。如果页不属于任何表,此值为 NULL
,这个页是那张表的页信息。
INDEX_NAME: 索引的名称。如果页不属于任何索引,此值为 NULL
如果是INDEX
页会有该信息。
NUMBER_RECORDS: 页中的记录数,这一页存了多少个记录。
DATA_SIZE: 页中的数据大小(字节数),这个页存了多少数据。
COMPRESSED_SIZE: 页的压缩大小(如果页被压缩),暂时还不知道用途。
PAGE_STATE: 页的状态。常见的值有:
NOT_USED
: 页未使用。FREE
: 页空闲。DIRTY
: 脏页。CLEAN
: 干净页。FILE_PAGE
文件页,这个页面对应的是某个表空间 .ibd 文件里面的页
IO_FIX: 页的 IO 修复状态。常见的值有:
IO_NONE
: 没有 IO 操作。IO_READ
: 读取操作。IO_WRITE
: 写入操作。
IS_OLD: 页是否是旧的。可能的值有 YES
或 NO
。
FREE_PAGE_CLOCK: 页的空闲页面时钟计数,暂时还不知道用途。