请教mysql每次存储块大小的问题~?

:D 想咨询您一下,mysql的myisam机制中,一次写到文件中的数据块时多少字节呢?有限制嘛?reclength和length的关系是什么呢?谢谢~
int _mi_write_part_record(MI_INFO info,
my_off_t filepos, /
points at empty block /
ulong length, /
length of block /
my_off_t next_filepos,/
Next empty block /
byte **record, /
pointer to record ptr /
ulong *reclength, /
length of record */
int *flag); /
*flag == 0 if header */
上面是myisam写文件的函数声明

[quote]我这里用的mysql是windows下源码编译的,用vs2005编译的,这个调试的话如何做呀?[/quote]
你既然编译了,把对应的dll,exe以及pdb文件复制到相关目录,
启动mysqld,然后attach到该进程, 在你关注的文件源码设置断点,即可跟踪。

没研究过MySQL的源码。凭感觉,这种写处通常都有缓存,MySQL配置中可以指定写入缓存有多大,当缓存数据满了就进行写入。所以这里的数据块大小很可能与MySQL的配置有关。

reclenght 代表的是 表中一个记录 可以占用的最大长度

length就是记录的实际长度

[url]http://code.google.com/p/mysql-heap-dynamic-rows/[/url]

可以看看mysql的源码实现,

当:length 比 reclength(记录实际长度) 还大 48个字节的时候,需要进行拆分。
if (length > *reclength + MI_SPLIT_LENGTH)

length应该是记录所占的块的物理长度,有适当冗余空间,以供块的合并分裂使用。而reclength是记录的实际长度。

[quote]您好,mysql在将一条记录插入到数据库的时候是insert执行一次就写一次myd试问嘛?如果是的话是不是用的buffer存储的记录呀?这个 buffer是多少字节的呢?不好意思,我刚刚开始弄,源码很多不大明白,而且搞不清楚具体什么地方的源码是写这个数据文件的,谢谢您[/quote]

这个跟引擎的实现有关。建议debug一下源码。

在安装目录下一般会有

my.ini
my-huge.ini
my-innodb-heavy-4G.ini
my-large.ini
my-medium.ini
my-small.ini

等等一系列文件供参考