代码改变世界

MySQL源码:为什么INNODB数据页面中最少存储2条记录?

2012-11-13 17:24 by 竹 石, 3856 阅读, 1 推荐, 收藏, 编辑
摘要:写在前面:我一直认为数据库中已经规定,一个页面中至少要存储2条记录,但是前几天碰到一个问题:为什么INNODB数据页面中最少存储2条记录?一下子把我问住了,知道是这样,但从没有问过自己这是为什么,所以我一直想这个问题,现在刨根问底,终于知道为什么了,下面就把这个问题的原因说一下吧。在INNODB中,底层数据的存储是通过B+树实现的,一个页面的大小一般设置为16K,不同页面之间通过父子、兄弟挂链,形成B+树结构。为了说明为什么一个数据页面至少要存储2条记录,下面就先简单叙述一下B树的一个记录插入过程,下面图示中的方框用来表示一个页面,左边和右边的小方框表示最小虚记录及最大虚记录,下面是表示内节点 阅读全文

MySQL源码:Innobase文件系统管理

2012-08-01 23:12 by 竹 石, 1899 阅读, 1 推荐, 收藏, 编辑
摘要:前言:很久没有写一些东西了,这次把一些以前写好的贴上来,可能其中有些不对或者不准确的地方请朋友指正,这里先谢谢大家了。2012-5-13 by whuai QQ:329570985 欢迎指正!1.表空间文件 Innodb存储引擎在存储设计上模仿了Oracle的存储结构,其数据是按照表空间进行存储的,默认情况下,在Innodb存储引擎会初始化一个名为ibdata1的表空间文件,同时这个文件会存储所有表的数据,包括系统表SYS_TABLES、SYS_COLUMNS、SYS_INDEXES、SYS_FIELDS等。 Innodb存储引擎的设计很灵活,可以通过参数innodb_file_per_t.. 阅读全文

MySQL源码:innobase日志生成与管理

2012-08-01 20:08 by 竹 石, 1556 阅读, 0 推荐, 收藏, 编辑
摘要:前言:很久没有写一些东西了,这次把一些以前写好的贴上来,可能其中有些不对或者不准确的地方请朋友指正,这里先谢谢大家了。2012-5-13 by whuai QQ:329570985 欢迎指正! Innodb存储引擎中的一个很重要的用来保证持久性的机制就是mini事务,在源码中用mtr(Mini-transaction)来表示,本书把它称做“物理事务”,这样叫是相对逻辑事务而言的,对于逻辑事务,做熟悉数据库的人都很清楚,它是数据库区别于文件系统的最重要特性之一,它具有四个特性ACID,用来保证数据库的完整性——要么都做修改,要么什么都没有做。物理事务从名字来看,是物理的,因为在innodb存储引 阅读全文

MySQL源码:Innobase字典管理及索引

2012-05-20 13:31 by 竹 石, 2019 阅读, 1 推荐, 收藏, 编辑
摘要:前言:最近在重温innobase的B树及记录模块,发现对之前已经看过的字典管理及索引内容竟然忘却了,所以重新看了一遍并将它记录下来,防止哪天又给忘了。不过还是那句话,如果哪些有问题还请指正。谢谢。 在innobase中,最基本的有四个系统表,用来存储用户定义的表、列、索引及索引列等信息,这些表分别为SYS_TABLES、SYS_COLUMNS、SYS_INDEXES、SYS_FIELDS。每一个表的列分别如下: 1)、SYS_TABLES,用来存储所有的以innobase为存储引擎的表,每条记录对应已经定义的一个表。 NAME:表示一个表的表名。 ID:表示这个表的ID号(8个字节)。... 阅读全文

MySQL源码:Innobase缓冲池

2012-05-15 21:19 by 竹 石, 989 阅读, 1 推荐, 收藏, 编辑
摘要:Innodb的缓冲池主要是用来存储访问过的数据页的,它就是一块连续的内存,通过一定的算法使这块内存得到有效的管理。它是数据库系统中拥有最大块内存的系统。Innodb存储引擎中数据的访问是按照页(默认为16K)的方式从数据库文件中读取到缓冲区中,然后在内存中用同样大小的内存空间来做一个映射,为了提高数据访问效率,数据库系统预先就分配很多这样的空间,用来与文件中的数据进行交换。访问时按照最近最少使用(LRU)算法来实现缓冲区页面的管理,经常访问的在最前面,最不经常的在最后面,如果缓冲区中没有空闲的页面来做文件数据的映射时,就从缓冲池中找到最后面的且不使用的将它淘汰然后拿来映射新数据文件页面,同时将 阅读全文

mysql集群在WIN32下的配置

2012-05-15 21:18 by 竹 石, 309 阅读, 0 推荐, 收藏, 编辑
摘要:mysql集群在WIN32下的配置折腾了好几个晚上,终于把MYSQL在WINDOWS下的集群配置起来了,挺高兴的,在这里与大家分享一下。准备工作:可以在http://www.mysql.com/downloads/cluster/上下载MYSQL cluster的安装版,安装之后即可开始配置,或者直接编它的源码,在经过编译之后再找到编译好的执行码来配置,不过直接从网上下载下来的源码还需要修改一些地方才能编译通过并且运行起来,这需要注意一下了。本人是用源码来编译配置的。下载的MYSQL版本最好是7.2.5的,本人之前下载了一个版本为7.2.4的,看了源码之后发现配置很复杂,好像它的配置文件是打包 阅读全文

MySQL源码:MYSQL表对象的字典缓存

2012-05-15 21:16 by 竹 石, 800 阅读, 0 推荐, 收藏, 编辑
摘要:前言:很久又没有写一些东西了,现在又有些空想把我对表对象缓存的一些理解记下来,可能其中有些不对或者不准确的地方请朋友指正,这里先谢谢大家了。2012-5-13 by whuai QQ:329570985 欢迎指正! 在MYSQL中,同样有很多类型的系统对象,包括表、视图、存储过程、存储函数等,但由于MYSQL的插件式存储引擎及其它实现方面的特点,其每一种对象的缓存方式都不同,或者说这些对象的缓存不是通过一种统一的方式来管理的,每一种对象的缓存都是有自己的特点,并且缓存的内容也有很大的差异,下面先只叙述一下表对象的缓存方式。表字典对象缓存,顾名思义,是将某个表对象的字典信息(定义内容)缓存到内. 阅读全文

MySQL源码:MYSQL存储过程/函数的分析原理及缓存机制

2012-05-15 21:09 by 竹 石, 3067 阅读, 0 推荐, 收藏, 编辑
摘要:前言:我个人认为,有关MYSQL存储过程/函数在MYSQL中的实现比较粗糙,可扩展性不够好,其实现的耦合性太高,所以主要讲一些它的原理方面的内容,但有可能在某些方面理解不够好或者有些不正确的地方,欢迎指正,谢谢!2012-5-14 by whuai QQ:329570985 欢迎指正! 在MYSQL中,同样有很多类型的系统对象,包括表、视图、存储过程、存储函数等,但由于MYSQL的插件式存储引擎及其它实现方面的特点,其每一种对象的缓存方式都不同,或者说这些对象的缓存不是通过一种统一的方式来管理的,每一种对象的缓存都是有自己的特点,并且缓存的内容也有很大的差异,下面再叙述一下存储过程(PLSQ. 阅读全文

一致代码段和非一致代码段

2009-03-26 09:58 by 竹 石, 1549 阅读, 0 推荐, 收藏, 编辑
摘要:一致代码段和非一致代码段 阅读全文

SQLite内存使用情况分析

2009-03-26 09:49 by 竹 石, 4874 阅读, 0 推荐, 收藏, 编辑
摘要:SQLite内存分析研究 阅读全文