现在的位置: 首页 > 综合 > 正文

Memory存储引擎使用问题

2013年10月22日 ⁄ 综合 ⁄ 共 691字 ⁄ 字号 评论关闭

我有个数据表,要求插入,更新和查询效率高(只是根据主键查询),最好毫秒以下速度。于是我尝试了下Memory存储引擎,发现每次只能插入2000多条记录,同时报错,the table is full.我知道这个是因为表满了,我修改了max_heap_table_size(默认16M),然后alter table mytable max_rows = xxx ,通过如下方式测试了下:

show variables like '%heap_table_size%';

发现更改结果生效,不再是默认值,改为我设置的值。

show create table mytable;

发现 max_rows 也是我设置的值。

满以为解决问题了,重新测试,结果还是没有效果,跟没有修改时一样,只能插入2000多条记录,然后就报错the table xxx is full。

究竟是什么原因呢?

这些参数我设置的值都够大,不可能只能插入2000多条数据呀。再百度继续搜索,找到了如何计算一行数据占多少内存的算法

在MEMORY表中,一行需要的内存使用下列表达式来计算:

 

SUM_OVER_ALL_BTREE_KEYS(max_length_of_key + sizeof(char*) * 4)

+ SUM_OVER_ALL_HASH_KEYS(sizeof(char*) * 2)

 + ALIGN(length_of_row+1, sizeof(char*))

ALIGN()代表round-up因子,它使得行的长度为char指针大小的确切倍数。sizeof(char*)在32位机器上是4,在64位机器上是8。

决定找个时间好好研究下Memory存储引擎,也许是用法不太明白。

 

抱歉!评论已关闭.