我写的是收集网页的机器人,但有些页面大约1-2mb(通常很大的Ex.pantip.com)所以我现在如何加速
如果满足超过1mb的页面,则每行更新需要4-9秒。提前感谢
答案 0 :(得分:1)
你需要绝对增加max_allowed_packet并重新启动mysql。像
这样的东西[mysqld]
max_allowed_packet=256M
MySQL的一个无声杀手是MySQL数据包,由max_allowed_packet管理。
了解MySQL数据包可能会澄清这一点。
根据page 99 of "Understanding MySQL Internals" (ISBN 0-596-00957-7),以下是第1-3段解释它:
MySQL网络通信代码是 写在假设下 查询总是相当短, 因此可以发送到和 由服务器在一个块中处理, 在MySQL中称为数据包 术语。服务器分配 用于存储的临时缓冲区的内存 数据包,它请求足够 完全适合它。这种架构 需要预防措施以避免拥有 服务器耗尽内存---一个上限 关于数据包的大小,这个 选项完成。
与之相关的代码 此选项位于 的 SQL / net_serv.cc 即可。看看 my_net_read(),然后按照 my_real_read()的电话付费 特别注意 的 net_realloc()强>
此变量也限制了长度 许多字符串功能的结果。 参见 sql / field.cc 和 sql / intem_strfunc.cc 了解详情。
鉴于此解释,批量INSERT将很快加载/卸载MySQL数据包。当max_allowed_packet对于给定的数据负载而言太小时,尤其如此。
<强>结论强>
在MySQL的大多数安装中,我通常将其设置为256M或512M。您应该使用涉及BLOB和TEXT字段的数据加载来试验更大的值。
答案 1 :(得分:0)
使用LOAD DATA而不是insert for bulk insert
您是否为每条记录使用个别陈述?您可能希望查看LOAD DATA infile以进行批量更新。
快速插入的提示:
使用LOAD DATA INFILE语法让MySQL解析并插入它,即使你必须修改它并在操作后提供它。 使用此插入语法:
插入表(col1,col2)值(val1,val2),(val3,val4),...
在插入之前删除所有键/索引。
在你所拥有的最快的机器中执行它(主要是IO,但RAM和CPU也很重要)。数据库服务器,还有插入客户端,记住你将支付两倍的IO价格(一次读取,第二次插入)
答案 2 :(得分:0)
如果您向我们展示查询,表信息(SHOW CREATE TABLE
),有关服务器的信息,MySQL设置以及可能的示例数据,我们可以帮助您。
但总的来说:
BEGIN TRANSACTION
,大量插入,COMMIT
将比大量插入更快;