san*_*uda 7 mysql myisam performance
我有一张这样的桌子
CREATE TABLE IF NOT EXISTS `dnddata` (
`numbers` varchar(10) NOT NULL,
`opstype` char(1) NOT NULL,
PRIMARY KEY (`numbers`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
/*!50100 PARTITION BY KEY (numbers)
PARTITIONS 25 */;
Run Code Online (Sandbox Code Playgroud)
我必须插入 3 亿条记录。我每次使用load data in file
csv 文件插入 1000 万条记录。
第一次插入 1000 万条记录需要近 5 分钟。时间每一次都在逐渐增加。在 3000 万条记录后,它停止插入并且内存使用 100% 服务器没有响应。
在我的my.cnf
文件设置下方
bulk_insert_buffer_size = 100M
key_buffer = 100M
sort_buffer_size = 50M
read_buffer = 50M
Run Code Online (Sandbox Code Playgroud)
我正在使用具有 2 G 内存的 CPU。
3000 万条记录的详细信息
Space usage
Type Usage
Data 545.3 MiB
Index 694.8 MiB
Total 1,240.1 MiB
MySQL client version: 5.5.14
Run Code Online (Sandbox Code Playgroud)
如果没有索引,它会在 50 秒内插入 1000 万个罚款。
请告诉我需要更改什么样的设置。
根据用户回答进行编辑
我已将 my.cnf 设置更改为以下
key_buffer_size = 1G
sort_buffer_size = 4M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
join_buffer_size = 2M
bulk_insert_buffer_size = 32M
myisam_sort_buffer_size = 256M
Run Code Online (Sandbox Code Playgroud)
没用。问题没有解决。
我已经尝试过下面提到的方法来加载数据
set autocommit = 0; //for innodb
load data infile into …
COMMIT;
START TRANSACTION;
load data infile into …
COMMIT;
ALTER TABLE dnddata DISABLE KEYS;
load data infile into …
ALTER TABLE dnddata ENABLE KEYS;
Run Code Online (Sandbox Code Playgroud)
没运气..
您应该分块加载这么大的文件以更快地加载数据,这里提到了加载大Load local data
文件的问题以及如何解决它并使其更快的解决方案。
通过一些额外的工作,LOAD DATA INFILE
当表有许多索引时,可以使MyISAM 表的运行速度更快。
执行 FLUSH TABLES 语句或 mysqladmin flush-tables 命令。
使用 myisamchk --keys-used=0 -rq /path/to/db/tbl_name 删除表的所有索引使用。
使用 LOAD DATA INFILE 将数据插入到表中。这不会更新任何索引,因此速度非常快。
重新创建索引myisamchk -rq /path/to/db/tbl_name
。这会在将索引树写入磁盘之前在内存中创建索引树,这比在 LOAD DATA INFILE 期间更新索引要快得多,因为它避免了大量的磁盘搜索。生成的索引树也是完美平衡的。
执行 FLUSH TABLES 语句或 mysqladmin flush-tables 命令。
如果您插入数据的 MyISAM 表为空,LOAD DATA INFILE 会自动执行上述优化。自动优化和显式使用过程之间的主要区别在于,您可以让 myisamchk 为索引创建分配比您希望服务器在执行 LOAD DATA INFILE 语句时为索引重新创建分配的临时内存多得多。
您还可以使用以下语句而不是 myisamchk 来禁用或启用 MyISAM 表的非唯一索引。如果使用这些语句,则可以跳过 FLUSH TABLE 操作:
ALTER TABLE tbl_name DISABLE KEYS;
ALTER TABLE tbl_name ENABLE KEYS;
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅这些:
http://dev.mysql.com/doc/refman/5.5/en/optimizing-myisam-bulk-data-loading.html
归档时间: |
|
查看次数: |
15247 次 |
最近记录: |