前言

  刚刚遇到了mysql无法插入数据,报错:the table xxx is full。

  查询原因,是xx表使用了memory engine,其中mysql的memory engine中有max_heap_table_size = 256M限制,数据稍多就满了。

  解决,修改mysql的配置文件my.ini

#根据自己需求修改大小
tmp_table_size = 256M
max_heap_table_size = 256M

关于memory engine

  1.memory表默认创建index是hash索引,虽然memory也支持btree索引,但需要指定.这里就有个值得注意的地方了,要是在程序中大量使用等值查询一类sql语句,但是如果出现大量的范围查找还是指定btree比较好.

  2.innodb表也支持把数据和索引完全加载到内存中,相比之下,memory占用的内存要小于innodb,且memory全表扫描效率略高于innodb,这应该是和innodb独特的类btree数据结构有关.当然并不能说innodb不如memory,只是读方面和全表扫描上,毕竟行级锁和事务的innodb在大规模的写操作和数据安全性上是memory不能比的.

  3,当数据量比较多的时候一定要修改max_heap_table_size系统变量,否则会限制插入.即使突破了改变的限制,memory表的大小还是会受到OS内存寻址空间,和物理内存的限制,物理内存好理解,在32位的OS上最大支持4G的内存寻址空间也很好理解.

  4.memory不支持text.blob字段类型.使用memory引擎最好不要存太大的数据,实在费内存.memory中char和varchar类型并没有什么区别.

  5.挡在MySQL Replication中使用memory的时候,如果master重启而slave没有的话,那么master自启动开始就没有数据,而slave中则依然存在数据.直到该内存在master上第一次被调用的时候,master会在binlog中写入一条deleted from语句来删除数据,所以这个时候,slave中有在master启动到执行第一条sql之间的间隔时间的过期数据.这个可以通过master上配置--init-file选项来解决

附:
A.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*))

B.建表的sql和生成测试数据的sp

root@localhost in zhwq 06:59:15>create table mem(
-> id int auto_increment not null primary key,
-> num int default 100,
-> datetime datetime,
-> index mem_num_b (num) using btree,
-> index mem_num (num),
-> index mem_dt_b (datetime) using btree,
-> index mem_dt (datetime))engine=memory character set utf8;
Query OK, 0 rows affected (0.04 sec)
root@localhost in zhwq 06:59:43>delimiter #
root@localhost in zhwq 07:03:20>create procedure insert_mem(p int)
-> begin
-> set @i = 0;
-> repeat
-> insert into mem (num,datetime) values(floor(rand()*1000),now());
-> set @i = @i+1;
-> until @i > p end repeat;
-> end
-> #
Query OK, 0 rows affected (0.03 sec) root@localhost in zhwq 07:20:02>delimiter ; root@localhost in zhwq 07:20:07>call insert_mem(1000);
Query OK, 0 rows affected (0.05 sec)

有网友测试过memory和memcache之间的性能比对,个人认为两者的场景一般不会相同,可比性不太大,有空再研究下

参考

[1] kevon_sun.解决mysql出现"the table is full"的问题 .http://blog.csdn.net/kevon_sun/article/details/7967728

[2] xiao7ng.MySQL Memory Engine Test.http://blog.csdn.net/xiao7ng/article/details/5423877

mysql memory engine的更多相关文章

  1. memcached vs MySQL Memory engine table 速度比较_XMPP Jabber即时通讯开发实践_百度空间

    memcached vs MySQL Memory engine table 速度比较_XMPP Jabber即时通讯开发实践_百度空间 memcached vs MySQL Memory engin ...

  2. mysql memory

    mysql memory engine 创建: mysql> create table mt engine = memory select * from information_schema.t ...

  3. 提高mysql memory(heap) engine内存性能的开源补丁_XMPP Jabber即时通讯开发实践_百度空间

    提高mysql memory(heap) engine内存性能的开源补丁_XMPP Jabber即时通讯开发实践_百度空间 提高mysql memory(heap) engine内存性能的开源补丁

  4. 精讚部落::MySQL 的MEMORY engine

    精讚部落::MySQL 的MEMORY engine MySQL 的MEMORY engine 無次要群組

  5. 14.1.1 InnoDB as the Default MySQL Storage Engine

    14.1 Introduction to InnoDB 14.1.1 InnoDB as the Default MySQL Storage Engine 14.1.2 Checking InnoDB ...

  6. MySQL Memory 存储引擎浅析

    原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian/ 前言 需求源自项目中的MemCache需求,開始想用MemCached(官方网站:http://memcac ...

  7. mysql memory存储引擎简单测试

    Auth: jin Date: 20140423 mysql> CREATE TABLE `t4` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` ...

  8. MySQL memory引擎 table is full 问题处理

    解决mysql的内存表“table is full”错误   101209 13:13:32 [ERROR] /usr/local/mysql/bin/mysqld: The table ‘test_ ...

  9. mysql memory表性能测试以及使用场景

    最近公司计划将风控逻辑移到slave库进行计算,因为考虑到业务表数据会比较大,此时如果还是走nest-loop的话,即使unique进行连接,因为还是需要至少2次以上LIO才能读一条记录,如果达到类似 ...

随机推荐

  1. Linux中的lo回环接口详细介绍

    1.linux的网络接口之扫盲 (1)网络接口的命名 这里并不存在一定的命名规范,但网络接口名字的定义一般都是要有意义的.例如: eth0: ethernet的简写,一般用于以太网接口. wifi0: ...

  2. java结合使用Jsonp的例子

    更多:js跨域问题解释 解决方案值使用jsonp或jQuery Jsonp和java操作例子 介绍JSONP之前,先简单的介绍一些JSON.JSON是JavaScript Object Notatio ...

  3. webpack window 安装loader

    1.安装loadernpm install css-loader style-loader --save-dev 2.配置loader,在webpack.config.js中 module: { lo ...

  4. iOS 特定时间内才做某件事,有类似奇葩需求可以参考

    我们项目启动的时候要弹出一个广告窗口,很简单的一个功能,服务器的判断一下满足条件,即返回数据,客户端判断数据部位NULL,则弹出弹窗但是老板说,这个要时间短弹出,每天的中午12点到下午2点不能弹出来这 ...

  5. 【Algorithm】快速排序(续)

    前面在常用的排序算法中,已经写过一篇关于快速排序算法的博客,但是最近看到<The C Programming Language>这本书中的快速排序算法写的不错,所以就拿过来分享一下,下面我 ...

  6. 12C的审计模式

    1.Mixed Auditing Policy 混合审计模式支持新的审计引擎和老的审计引擎一起工作数据库升级后,已有的审计设置不会受到影响.但是官方建议迁移到统一审计模式.数据库创建后,默认是使用混合 ...

  7. 删除vector指定位置的元素

    原文链接: http://www.cnblogs.com/yeahgis/archive/2012/05/29/2523476.html #include <vector>#include ...

  8. Markdown 使用教程

    前言 以前经常在 github 中看到 .md 格式的文件,一直没有注意,也不明白为什么文本文档的后缀不是 .txt ,后来无意中看到了 Markdown,看到了用这个东西写得一些web界面等特别的规 ...

  9. python标准库介绍——35 pipes 模块详解

    ==pipes 模块== (只用于 Unix) ``pipes`` 模块提供了 "转换管道 (conversion pipelines)" 的支持. 你可以创建包含许多外部工具调用 ...

  10. ext: gridpanel中的点击事件的参数是什么意思?

    listeners: {      // 当用户单击列表项时激发该函数      itemclick: function(view, record, item, index, evt)  //①    ...