目前的一个a.php程序将采集其他网站中的a链接,采集回来去重后插入数据库,多的时候a链接可达上千条,用top查看linux发现当这个程序运行的时候mysql占用cpu达到了90%多。
该怎么改善一下insert程序呢?
insert delayed 会让insert优先级变低,查询优先。
把每个页面的无数条insert语句合并成一句,能让插入时间减少一个数量级(10倍或更少),用括号把每条语句的数据分组即可。不会的话,用mysqldump导出一个表,然后看看生成的SQL就知道了。
你也可以考虑异步插入。如果你数据不需要实时反馈的。用PHP生成dump restore(SQL)文件,cron job在网站低峰时(比如每天晚上2点)启动。检查指定位置是否有SQL文件存在,存在就把它们执行掉。
或者每单位时间触发Cron,单位时间执行JOB限制数量,执行到指定JOB数量后,退出。等待下一个JOB时间触发发生。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。