5.MySql缓冲池学习

根据存储介质的不同,一般将数据库分为三种:
1)基于磁盘的数据库系统(最慢)
2)基于内存的数据库系统(最快,最贵)
3)混合型数据库系统(折中选择)

1.基于磁盘的数据库系统

最为常见,比如Mysql, Oracle,SQL Server等数据库都是基于磁盘的数据库系统。
毫无疑问,基于内存的数据库系统的访问速度非常之快,所以为了让内存在数据库中发挥作用,基于磁盘的数据库系统中存在一个机制:缓冲池

1)何为缓冲池?

就是一块内存区域,其作用是将磁盘上读取的指定大小数据(块),放入这个内存区域中,当再此查询该数据时,直接从内存中取而不是访问磁盘。
对于写操作,数据库将页读入缓冲池中,然后在缓冲池中对其进行写操作,之后由系统异步同步到磁盘上即可。对于缓冲池的维护一般采用最近最少使用算法进行维护。

由此可见:缓冲池的大小决定了数据库的性能,若数据库中的数据可以完全存放于缓冲池中,则可以认为这时数据库的性能是最优的!!

所以,对于缓冲池大小的确定非常之重要!!!

2)如何查看mysql的缓冲池大小?

mysql> show variables like 'innodb_buffer_pool_size'\G;

5.MySql缓冲池学习_第1张图片
可以看到此时mysql的缓冲池大小为8MB

如果需要以G为单位查看可以用下面语句:
5.MySql缓冲池学习_第2张图片

3)如何修改缓冲池大小?

缓冲池大小必须总是等于innodb_buffer_pool_chunk_size* innodb_buffer_pool_instances或为其倍数。如果将innodb_buffer_pool_size配置为不等于innodb_buffer_pool_chunk_size *innodb_buffer_pool_instances或不为其倍数,则缓冲池大小自动调整为等于innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances或不小于指定缓冲池大小的该乘积的倍数。

如果想查看innodb_buffer_pool_instances的大小或innodb_buffer_pool_chunk_size大的小可以:
5.MySql缓冲池学习_第3张图片

我们可以直接用下面语句设置缓冲池大小:

SET GLOBAL innodb_buffer_pool_size = 2147483648  #2G

5.MySql缓冲池学习_第4张图片

修改完后记得同步配置文件,防止重启mysql时恢复到原来的大小:

C:\ProgramData\MySQL\MySQL Server 8.0下的my.ini文件
[mysqld]
innodb_buffer_pool_size = 2147483648  #设置2G

4)热点数据分析

在现实的生产环境中,在大多数情况下经过线上的一段运行时间后,数据库大小可能通常大于内存大小,这时,我们则有必要确定热点数据,将热点数据存入内存中。
Innodb buffer pool采用LRU的方式管理和淘汰数据,根据LRU算法,热点数据都会优先放入内存。
LRU是Least Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的,是根据页面调入内存后的使用情况进行决策了。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU算法就是将最近最久未使用的页面予以淘汰。

你可能感兴趣的:(MySql进阶,mysql,数据库,sql)