原文地址:http://software.intel.com/zh-cn/blogs/2010/09/01/mysql5innodb/
Innodb缓存系统
1.buffer操作
(1)根据tbl_test文件的space id和offset检查buffer pool中是否已经有缓存,若有则直接读取该page信息,并返回结果;
(2)若没有缓存则会先分配一个空白的page,然后读取磁盘上的数据加载进内存,并将结果返回。当Sql级别命令执行到Innodb的buffer层时就对应到在buf_pool上的对buffer block的读写等操作。
例如客户端输入以下查询语句:
select * from tbl_test;
层层解析执行至缓存系统中将产生如下动作:(没写全)
2.Innodb buffer pool 系统简介
buf_pool->free, 空闲块链表
buf_pool->flush_list, 待写块链表
buf_pool->LRU, LRU块链表
buf_pool->unzip_LRU, 解压后的LRU块链表
buf_pool->zip_clean, 干净的压缩块链表
buf_pool->zip_free[BUF_BUDDY_SIZE],空闲的压缩块链表
buf0buf.c 是整个buffer系统的核心部分,提供了磁盘文件与内存交互的接口。整个buffer pool主要通过这几个链表来进行组织。
Buf0lru.c是buffer系统中负责缓存替换的算法,主要操作对象是LRU链表,目的是为了更好的使用缓存。
Buf0flu.c是系统中负责写数据到磁盘的部分。为了节省系统的IO开销,Innodb实现该部分时,还考虑当前系统中脏的页数、当前系统的负载等因素。
Buf0rea.c是系统中负责读数据的部分,包括普通的读、预读取、insert buffer、恢复。
Buf0buddy.c二进制伙伴分配算法,在分配压缩过的内存块时使用,避免系统中出现内存碎片。
此外,还包含了mem0pool.c来处理一些底层的数据。
3.读操作(从磁盘上加载数据到内存中)
当数据库文件未使用压缩格式存储时,innodb直接通过buf_LRU_get_free_block获得一个空闲的控制块。而当MySQL配置了压缩格式存储时,系统会通过二进制伙伴算法分配得到一个大小合适的控制块,防止出现内存碎片。主要调用流程如下:
Buf_page_get_gen是InnoDB缓存系统封装给外部系统调用的一个主要API。该函数用途是获得一个包含数据的page,并返回给调用函数。在实际使用时调用栈如下图所示:
4.写操作(从buffer pool中删除page并flush到磁盘上)
入口函数是buf_page_release,用以释放buffer pool中的page,该函数会把脏的数据标记到flush队列中。
在Innodb中有一个主控线程(srv_master_thread),主要负责定时写数据到磁盘文件上,其刷新频率的理论值为1秒或10秒,具体参照服务器当前的负载及buffer pool中脏页的比例动态调整,其主要的代码调用过程如下:
- 大小: 34.2 KB
- 大小: 143.8 KB
- 大小: 6.4 KB
- 大小: 27 KB
分享到:
相关推荐
总的来说,"MySQL之InnoDB源码分析之page结构解析"是一个深入探讨数据库内部运作机制的主题,涵盖了数据库管理、数据存储、查询优化等多个方面。通过学习和理解这部分内容,不仅可以提升数据库的维护能力,也为...
### Innodb存储引擎浅析—...通过以上分析可以看出,InnoDB存储引擎不仅提供了强大的事务处理能力,还通过一系列的优化措施,确保了系统的高可用性和数据的可靠性。这对于需要高性能、高可靠性的应用场景而言至关重要。
标题“MySQL的InnoDB引擎架构设计与分析”中涉及的知识点主要围绕MySQL数据库的InnoDB存储引擎,其中“架构设计与分析”指示我们对InnoDB的内部结构和工作机制进行深入的探讨。具体来说,以下为InnoDB存储引擎的核心...
5. MySQL缓存实验报告 实验报告会记录实施的缓存优化实践,包括修改配置、监控性能变化、对比优化前后的差异。通过实验,可以验证理论知识并提供实际操作指导。 6. 课题研究结论 研究结论通常会总结优化缓存对MySQL...
MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,其源码包提供了深入了解系统内部运作...总的来说,MySQL源码分析对于数据库开发者、运维人员或希望深入学习数据库原理的人来说,都是一个极其有价值的实践项目。
通过深入阅读MySQL 5.5.25的源码,我们可以了解到数据库系统的底层运作,这对于提升数据库性能调优能力,解决实际问题,以及进行数据库设计和架构优化具有极大的帮助。同时,这也有助于我们理解其他开源数据库系统的...
"高性能MySQL源码"指的是MySQL数据库系统的内部实现细节,通过分析源码,我们可以深入理解其工作原理,优化数据库操作,提升系统性能。源码分析通常涉及以下几个关键知识点: 1. **存储引擎**:MySQL支持多种存储...
MySQL源码中包含了各种性能调优选项,如查询缓存、表分区、并行查询等。理解这些机制有助于优化数据库性能。 10. **复制与集群** MySQL支持主从复制,源码中可以查看复制协议的实现。此外,MySQL Cluster提供了一...
《MySQL技术大全:开发、优化与运维实战实例源代码》是一本深入探讨MySQL数据库系统的技术书籍,涵盖了开发、性能优化和运维等多个方面的实践内容。这本书的源代码包含了丰富的实例,帮助读者更好地理解和应用书中...
MySQL源码分析: 1. **SQL解析**:MySQL的解析器负责将SQL语句转化为可执行的抽象语法树(AST)。源码中,你可以看到词法分析和语法分析的过程,这对于理解SQL如何被处理至关重要。 2. **存储引擎**:MySQL支持多种...
MySQL是一种广泛使用的开源关系型数据库管理系统,其源码分析对于理解数据库的工作原理和技术细节非常有帮助。以下将根据提供的文件信息,围绕MySQL源码、配置、驱动、开发应用及数据库内容进行深入探讨。 1. **...
MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,其5.7.16版本是一个重要的里程碑,引入了许多增强功能和性能优化。"mysql-boost-5.7.16.tar.gz"是一个包含MySQL 5.7.16源代码的压缩包,特别强调了与Boost库...
MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,其5.7版本是一个重要的里程碑,提供了许多增强功能和性能优化。在本文中,我们将深入探讨MySQL 5.7.42源码包,了解其核心概念、架构和关键特性。 MySQL 5.7...
1. **获取MySQL源码**:首先,你需要下载MySQL的源代码,例如版本MySQL-5.1.38或其他你正在使用的版本。 2. **定位并修改源码**:在源代码的`storage/innobase/include/univ.i`文件中,找到定义页面大小的常量`UNIV...
在Windows平台上,由于某些特定的系统调用和文件系统差异,编译MySQL源码可能需要额外的适配工作,通常涉及`my_win32_...`开头的文件。对于初学者来说,这个源码版本提供了很好的学习材料,了解数据库系统的内部运作...
《深入理解MySQL核心技术》这本书是MySQL数据库技术领域的一部经典之作,它旨在帮助读者深入了解MySQL的内部机制和工作原理,从而更好地优化和管理MySQL数据库系统。以下是对书中的主要知识点的详细阐述: 1. **...
MySQL数据库源码分析 ...通过对MySQL源码的深入学习,你可以掌握数据库设计的底层逻辑,更好地理解和解决数据库中的问题,从而提升系统性能和稳定性。同时,这也为参与MySQL的开发或定制提供了基础。
8. **源码分析**:对于开发人员来说,分析MySQL源码有助于理解其内部工作原理,学习如何设计和实现高性能的数据库系统,以及如何优化SQL查询。 9. **编译与安装**:解压后,用户需要按照指定的步骤编译和安装MySQL...
通过分析和研究MySQL Community Server 5.6.25的源码,开发者可以了解其内部操作流程,实现自定义功能,或针对特定应用场景进行优化。同时,这也是学习数据库设计、事务处理、锁机制、查询优化等数据库核心概念的...
7. **内存管理与缓冲池**:MySQL有精心设计的内存管理和缓冲池机制,如InnoDB的Buffer Pool,用于缓存数据页和索引页,减少磁盘I/O。源码中可以研究这些内存管理策略,以优化数据库性能。 8. **日志系统**:MySQL的...