操作系统和MyISAM存储引擎限制
OS: CentOS 32bit
File System: ext3
Mysql Version: 5.5.3m3 source code
今天做了数据插入测试,遇到mysql报错
1. OLTP测试的时候MyISAM引擎插入数据最多只能4719889条,Innodb则没有问题
报错:ALERT: Error 1114 The table 'sbtest' is full
FATAL: failed to create test table!
网上查了一下,有几个可能性,一一尝试:
(1) 设置SQL_BIG_TABLES
mysql> show variables like 'SQL_BIG_TABLES'; mysql> set SQL_BIG_TABLES ON;
没用!
(2) 修改系统/tmp 目录大小,参考http://dev.mysql.com/doc/refman/5.1/zh/problems.html A4.4
修改mysqld的 —tmpdir参数(bingo)
插入的行增加到512W,然后数据不增加,也不报错,Show Processlist 显示插入仍在运行
(3)MyISAM数据指针只有4Byte=32位,寻址范围=4G,所以MYD文件不能大于4294967296Byte
我实际的MYD文件大小5490000000Byte,已经超过这个范围了
官方文档显示:
● Large files (up to 63-bit file length) are supported on file systems and operating systems that support large files.
● There is a limit of (232)2 (1.844E+19) rows in a MyISAM table.
所以虽然可能和MyISAM有关系,但是应该也不是MyISAM的限制。
(4)操作系统单文件大小限制
查了ext3文件系统,默认block设置为1KByte的时候,单文件最大可达到16GByte,所以也排除这个可能性
总结:最后发现虽然数据目录还有空间,但是slow.log 和 binlog的磁盘空间占用到100%,所以无法继续插入,清除日志文件,重新测试!