zoukankan      html  css  js  c++  java
  • 解决mysql的内存表“table is full”错误

    最后参考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
  • 相关阅读:
    Mac pycharm专业版安装以及破解方法
    Django 错误之 No module named ‘MySQLdb’
    archery部署
    MySQL监控内容
    mac安装神器brew
    4. 寻找两个有序数组的中位数
    7.整数反转
    2.两数相加
    1. 两数之和
    141. 环形链表
  • 原文地址:https://www.cnblogs.com/tangxiaosheng/p/8144600.html
Copyright © 2011-2022 走看看