我正在尝试将大约 5 亿行垃圾数据插入数据库进行测试。现在我有一个 PHP 脚本循环遍历一个SELECT/INSERT
内部的几个语句TRANSACTION
——显然这不是最好的解决方案。这些表是 InnoDB(行级锁定)。
我想知道我是否(正确)分叉了这个过程,这会加快这个INSERT
过程吗?按照目前的速度,完成需要 140 个小时。我担心两件事:
如果
INSERT
语句必须获得写锁,那么它是否会使分叉变得无用,因为多个进程不能同时写入同一个表?我正在使用
SELECT...LAST_INSERT_ID()
(在 a 内TRANSACTION
)。当多个进程INSERT
进入数据库时,这个逻辑会中断吗?我可以为每个分叉创建一个新的数据库连接,所以我希望这可以避免这个问题。我应该使用多少个进程?查询本身很简单,我有一个普通的双核开发盒,有 2GB 内存。我将我的 InnoDB 设置为使用 8 个线程 (
innodb_thread_concurrency=8
),但我不确定我是否应该使用 8 个进程,或者这是否是考虑匹配的正确方法。
谢谢你的帮助!