php - 每秒大量插入导致大量 CPU 负载

标签 php mysql performance nosql

我有一个 PHP 脚本,它在每次运行时都会向 Mysql 数据库插入一个新行(数据量相对较小..) 我每秒有超过 20 个请求,这导致我的 CPU 尖叫求救..

我正在使用带有 MyISAM 引擎的 sql INSERT DELAYED 方法(尽管我只是注意到 INSERT DELAYED 不适用于 MyISAM)。

我主要担心的是我的 CPU 负载,我开始寻找使用对 CPU 更友好的解决方案来存储这些数据的方法。

我的第一个想法是将这些数据写入每小时一次的日志文件,然后每小时一次从日志中检索数据并将其立即插入到数据库中。

也许更好的主意是使用 NoSQL DB 而不是日志文件,然后每小时一次将数据从 NoSQL 插入 Mysql..

我还没有测试任何这些想法,所以我真的不知道这是否会设法减少我的 CPU 负载。我想问问是否有人可以帮助我找到对我的 CPU 影响最小的正确解决方案。

最佳答案

我最近遇到了一个非常相似的问题,我的解决方案是简单地批处理请求。由于减少了 mysql 连接的开销以及重建索引的数量大大减少,这加快了大约 50 倍。将它们存储到一个文件中,然后立即执行一个更大的(100-300 个单独的插入)语句可能是一个好主意。为了加快速度,请在插入期间关闭索引

ALTER TABLE tablename DISABLE KEYS
insert statement
ALTER TABLE tablename ENABLE KEYS

执行批量插入将减少运行的 php 脚本的实例数,将减少当前打开的 mysql 句柄的数量(大改进),并将减少索引量。

关于php - 每秒大量插入导致大量 CPU 负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9330734/

相关文章:

php - 无法使用 cURL PHP 解码 gzip

具有整数分数的Mysql舍入特例

android - SQLite 查询性能

c++ - 英特尔编译器生成的代码比 MSVC 慢 68%(提供了完整示例)

php - 仅获取/var/www/html 文件夹中的文件列表

php - 使用 in() 获取前 x 行

php - 当输入格式为 YYYY 且值大于 1999 时,strtotime 返回当前年份

php - 当我在 php 中运行此分页页面演示时出现错误?

php - 导出 CSV 会跳过第一行结果

java - 使用代理与进程附加 jvm 分析器之间的区别