
课程咨询: 400-996-5531
投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都在学习达内Java编程等互联网技术课程,今天我们就通过案例分析来简单了解一下,MySQL学习需要掌握哪些知识点。
MySQL的内部构造一般可以分为哪两个部分
可以分为服务层和存储引擎层两部分,其中:
服务层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。现在常用的存储引擎是InnoDB,它从MySQL5.5.5版本开始成为了默认的存储引擎。
undolog、redolog、binlog有什么用
redolog是InnoDB引擎特有的,只记录该引擎中表的修改记录。binlog是MySQL的Server层实现的,会记录所有引擎对数据库的修改。
redolog是物理日志,记录的是在具体某个数据页上做了什么修改;binlog是逻辑日志,记录的是这个语句的原始逻辑。
redolog是循环写的,空间固定会用完;binlog是可以追加写入的,binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。
补充
1、redolog记录修改内容(哪一页发生了什么变化),写于事务开始前,用于数据未落磁盘,但数据库挂了后的数据恢复
2、binlog记录修改SQL,写于事务提交时,可用于读写分离
3、undolog记录修改前记录,用于回滚和多版本并发控制
什么是Bufferpool
Innodb存储引擎设计了一个缓冲池(*BufferPool*),来提高数据库的读写性能。
当读取数据时,如果数据存在于BufferPool中,客户端就会直接读取BufferPool中的数据,否则再去磁盘中读取。
当修改数据时,先是修改BufferPool中数据所在的页,然后将其页设置为脏页,后由后台线程将脏页写入到磁盘。
缓存什么
InnoDB会把存储的数据划分为若干个「页」,以页作为磁盘和内存交互的基本单位,一个页的默认大小为16KB。因此,BufferPool同样需要按「页」来划分。
在MySQL启动的时候,InnoDB会为BufferPool申请一片连续的内存空间,然后按照默认的16KB的大小划分出一个个的页,BufferPool中的页就叫做缓存页。此时这些缓存页都是空闲的,之后随着程序的运行,才会有磁盘上的页被缓存到BufferPool中。
Innodb通过三种链表来管理缓页:
FreeList(空闲页链表),管理空闲页;
FlushList(脏页链表),管理脏页;
LRUList,管理脏页+干净页,将近且经常查询的数据缓存在其中,而不常查询的数据就淘汰出去。;
InnoDB对LRU做了一些优化,我们熟悉的LRU算法通常是将近查询的数据放到LRU链表的头部,而InnoDB做2点优化:
将LRU链表分为young和old两个区域,加入缓冲池的页,优先插入old区域;页被访问时,才进入young区域,目的是为了解决预读失效的问题。
当「页被访问」且「old区域停留时间超过innodb_old_blocks_time阈值(默认为1秒)」时,才会将页插入到young区域,否则还是插入到old区域,目的是为了解决批量数据访问,大量热数据淘汰的问题。
可以通过调整innodb_old_blocks_pct参数,设置young区域和old区域比例。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。