最后参考http://blog.sina.com.cn/s/blog_6942a1590101429h.html 来解决,摘录下核心

后来GOOGLE得知,需要重建该表才可以。

1. 设置新的参数

mysql> set global max_heap_table_size=1048576000

mysql> set global tmp_table_size=1048576000

2. 修改mysql配置文件,使得mysql重新启动时变动能够持续生效。

3. 最后,你需要重新连上MYSQL,重新创建相关的内存表。

mysql> ALTER TABLE zaojiao_sessions ENGINE MEMORY;

4. 最后,当应用重新连接到mysql数据库时,这些变更就生效了。

我自家加的:

centos下,my.cnf在/etc下,大概需要修改下那个文件,可以在mysqld重启后也能使用了。

ip地址库,根据ip查到具体的国家省市,经纬度,

采用内存表的方式,大概需要0.95秒;如果提前载入到有序列表,用内存换取时间,采用折半查找法,

列表的长度是:3767093,查到一个具体的值'207.46.250.101'的时间,分别试了两次:68纳秒,72纳米。在忙碌的windows机上是1000纳秒左右。很简单的程序,windows下消耗的内存是1.5G。

下面说说用内存表的情况:

先做设置:

set global max_heap_table_size=1048576000;
set global tmp_table_size=1048576000;

drop table ipv4_zh_mem;
CREATE TABLE `ipv4_zh_mem` (
`Start_Num` bigint(20) DEFAULT NULL,
`End_Num` bigint(20) DEFAULT NULL,
`country_name` varchar(256) COLLATE utf8_unicode_ci,
`subdivision_1_name` varchar(64) COLLATE utf8_unicode_ci,
`city_name` varchar(256) COLLATE utf8_unicode_ci,
`latitude` varchar(64),
`longitude` varchar(64)
) engine = memory;
create index memIndex on ipv4_zh_mem(Start_Num, End_Num);
insert into ipv4_zh_mem select Start_Num, End_Num, country_name, subdivision_1_name, city_name, latitude, longitude from ipv4_zh_full;

select * from ipv4_zh_mem limit 10;
select country_name, subdivision_1_name, city_name, latitude, longitude from ipv4_zh_mem where 3475962469 between Start_Num and End_Num;

最后一行执行的时间,为1.7s左右。之前没有用COLLATE utf8_unicode_ci的时候,执行的时间是0.95s。

说明: ipv4_zh_full的体积大概是600多M。系统缺省配置的内存表的限制是512M,所以必须更改限制。

编码方面的内容参考:http://blog.sina.com.cn/s/blog_6dbcbffc0100wvk3.html,为了处理中文的情况,需要修改my.cnf或者my.ini(windows下)

[mysqld]
default-character-set=utf8
default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
[mysql]
default-character-set=utf8

解决mysql的内存表“table is full”错误的更多相关文章

  1. mysql之内存表

    一.引言 昨天下午老大让我查资料看一下mysql的内存表在主从备份中是否能被复制,我还没听说过内存表呢,于是上网查资料,记录一下,以便查阅.学习 二.进展 参考: http://www.cnblogs ...

  2. MySQL的内存表(转)

    说明:MySQL内存表可以提升一些临时业务的查询,比如做Session的共享,一些类似缓存的数据等. “内存表”顾名思义创建在内存中的表,真是这样吗?其实不然,MySQL的内存表,表结构创建在磁盘上, ...

  3. 解决mysql开启GTID主从同步出现1236错误问题【转】

    最近遇到mysql开启gtid做复制时,从库出现1236错误,导致同步无法进行,本文就这问题记录下处理步骤,有关gtid知识在这里不做介绍,mysql版本为5.7.16. 一.错误原因分析 错误信息如 ...

  4. 解决mysql开启GTID主从同步出现1236错误问题

    解决mysql开启GTID主从同步出现1236错误问题     最近遇到mysql开启gtid做复制时,从库出现1236错误,导致同步无法进行,本文就这问题记录下处理步骤,有关gtid知识在这里不做介 ...

  5. mysql的内存表和临时表

    内存表: session $ mysql -uroot root@(none) ::>use test Database changed root::>CREATE TABLE tmp_m ...

  6. linux设置虚拟内存(swap)解决mysql因内存不足挂掉的故障

    mysql错误日志显示: InnoDB: mmap(137363456 bytes) failed; errno 122016-03-01 01:38:42 13064 [ERROR] InnoDB: ...

  7. 解决mySQL占用内存超大问题

    为了装mysql环境测试,装上后发现启动后mysql占用了很大的虚拟内存,达8百多兆.网上搜索了一下,得到高人指点my.ini.再也没见再详细的了..只好打开my.ini逐行的啃,虽然英文差了点,不过 ...

  8. 解决Mysql因内存不足启动失败的问题

    参考:https://www.jb51.net/article/136432.htm 一.查看内存 free -h free -m 二.解决方法: 1.增加swap交换空间解决问题: dd if=/d ...

  9. [mysql] 修复问题表Table '.xxxx' is marked as crashed and should be repaired

    程序执行的过程中,出现   Table '.xxxx' is marked as crashed and should be repaired 错误,上网查了一下,原来是表遭到损坏所致,具体修复办法如 ...

随机推荐

  1. 关于启动VS2012时,提示Web4.0尚未在网络服务器上注册的解决办法!

    VS2012在没有Web服务器上注册的问题,网上有很多博客. 开始我就是遇到这个问题,在网上试了几个办法,确实都还可以.但是相比之下有的需要设置DOS,进行安装.exe. 这种方法其实相比直接安装补丁 ...

  2. Codeforces 1132D - Stressful Training - [二分+贪心+优先队列]

    题目链接:https://codeforces.com/contest/1132/problem/D 题意: 有 $n$ 个学生,他们的电脑有初始电量 $a[1 \sim n]$,他们的电脑每分钟会耗 ...

  3. GPU安装小结

    今天一起安装了4块1080的卡.也算有一些坑吧,记录一下. 1)1080显卡,驱动型号,tensorflow,cuda, cudnn 版本一定要一致.我的清单如下: ################# ...

  4. HTML响应状态码

    https://www.restapitutorial.com/httpstatuscodes.html

  5. centos 安装oracle 报Checking swap space: 0 MB available, 150 MB required. Failed <<<<

    1 系统环境 centos 6.5 oracle 11g 内存 16G 硬盘 ssd 250G 2 运行安装命令: [oracle@localhost database]$ ./runInstalle ...

  6. iOS引用类型

    强引用, 默认引用类型.被强引用指向的内存不被释放.强引用会对被引用对象的引用计数器+1,从而扩展对象的生命周期. 弱引用, 弱引用是医用特殊的引用类型.它不会增加引用计数器,因而不会扩展对象的生命周 ...

  7. MySQL数据类型之字符串类型

    CHAR(M) 分配固定长度的空间建(字节) VARCHAR(M)按照实际长度存储(占用的字节数是实际的长度加上1或者2)当M的值小于255时,加一.    当M的值大于255时,小于65532时,加 ...

  8. [daily] pandoc

    学了LaTeX之后,你就会很自然的接触的另一种观点: LaTeX是专注于排版的,你需要专注于内容. 于是,请使用pandoc. 简单的说, pandoc就是可以将各种个样格式的文档转换成各种各样格式的 ...

  9. jquery-- json字符串没有自动包装为 json对象

    jquery 的一个坑 页面使用 ajax ,回调函数中获取后端返回的 json 格式数据(ajax 未显式指定返回值类型),后端controller方法标注 @ResponseBody 并返回一个 ...

  10. TFA(Trace File Analyzer)的安装与使用(ORACLE版本12C)

    TFA是Oracle从11.2版本开始推出的一种类似diagcollection的一个oracle 集群日志收集器,而且TFA比diagcollection集中和自动化的诊断信息收集能力更强大.TFA ...