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