: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
等等一系列文件供参考