Chinaunix首页 | 论坛 | 博客
  • 博客访问: 153625
  • 博文数量: 12
  • 博客积分: 226
  • 博客等级: 二等列兵
  • 技术积分: 221
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-10 23:15
文章分类

全部博文(12)

分类: Mysql/postgreSQL

2013-03-05 17:52:31


Innodb的代码相对于mysql server层代码漂亮多了,风格统一,逻辑清晰,而且模块划分得很好:

srv_sys
log_sys
trx_sys
lock_sys
dict_sys
recv_sys
btr_search_sys
fil_system

读代码时可以按照子模块(子系统)来各个击破

本文介绍最后一个子模块:fil_system,材料基本是读代码时记下的一些笔记,出于分享和整理的想法,把它写成了一篇博文

fil_system是在内存中维护的表文件/表空间信息,对应的数据结构是fil_system_t,其对象全局只有一个: fil_system,与其相关的数据结构有fil_space_tfil_node_t

fil_space_t代表一个表空间(tablespace),Innodb在将innodb_file_per_table设置为1时会为每个innodb表创建一个独立的表空间(table_name.idb),否则所有的表共享系统表空间(ibdata1

fil_node_t代表某个表空间中的一个文件,可以是表数据/索引数据/日志数据

数据库管理了多个表空间,因而fil_system_t与fil_space_t是一对多的关系,fil_system_t中使用两个hash table(分别以id和name作为key)和两个list维护了表空间(其中一个list只维护了存在脏数据所有表空间),同时,fil_system_t维护了所有打开的fil_node_t的LRU链表

fil_space_t与fil_node_t也是一对多的关系fil_space_t维护了内存中打开的所有fil_node_t的一个链表,因此fil_node_t中有两个UT_LIST_NODE_T(fil_node_t)成员,fil_system_t维护LRU,fil_space_t维护chain,为了更加直观的表达它们之间的联系,画了一张图:



阅读(3889) | 评论(0) | 转发(0) |
0

上一篇:Innodb lock wait 源码分析

下一篇:没有了

给主人留下些什么吧!~~