![MySQL 和 WordPress 延迟插入](https://linux22.com/image/547962/MySQL%20%E5%92%8C%20WordPress%20%E5%BB%B6%E8%BF%9F%E6%8F%92%E5%85%A5.png)
我有一台服务器,上面运行着多个 WordPress 网站。服务器配置相当标准:CentOS、Apache、MySQL、cPanel。
我注意到,我经常在不同的 WP 数据库的 mysqladmin 进程列表中看到以下几行:
| Id | User | Host | db | Command | Time | State | Info
+---------+------------------+-----------+------------------+----------------+------+----------------------+---------
| 4688637 | DELAYED | localhost | salr4e1_wrdp2 | Delayed insert | 208 | Waiting for INSERT |
我不明白为什么插入显示为延迟?如果进程列表中有多个这样的数据库,则负载正在增加。这让我的服务器感觉不舒服。
我正在尝试mysqlcheck -aro
修复此类数据库。有时它有用,但通常没有用,我不得不终止此类进程以减少服务器负载。
答案1
请注意您的用户名是 DELAYED。这是 mysqld 处理任何插入延迟语句,仅适用于 MyISAM、MEMORY、ARCHIVE 和 BLACKHOLE 表。
现在可能是将你的 WordPress 数据库从 MyISAM 切换到 InnoDB。如果您确实切换到 InnoDB,请将所有 INSERT DELAYED 语句更改为 INSERT,否则语句将产生错误。
更新
您有多种选择
选项 1)将每个 WP 数据库移动到单独的 DB 服务器(裸机或虚拟)
您可以根据特定 WP 数据库的需求配置每个数据库。当然,还有超出本问题范围的预算考虑。
选项 2)在同一 DB 服务器上创建多个 MySQL 实例,每个 WP 数据库一个
您可以根据特定 WP 数据库的需求配置每个数据库,但每个 WP 数据库的数据目录都应驻留在单独的磁盘卷上。
选项 3)扩展数据库服务器
添加更多 RAM 并使用更快的磁盘卷。然后,配置 MySQL 实例以尽可能多地利用 MyISAM 的 RAM请记住,MyISAM 缓存仅适用于索引页,而不适用于数据。
选项 4)选项 2 和 3 的组合
选项5)延迟选项的配置
延迟插入限制:执行这么多的 INSERT DELAYED 语句之后,待处理的 SELECT 语句将优先运行,然后才允许运行新的 INSERT DELAYED 语句。
延迟插入超时:处理程序线程在超时之前等待的秒数。
延迟队列大小:每个表的行数限制。如果队列已满,则任何新的 INSERT DELAYED 语句都将暂停,直到队列有空间为止。
选项 6) 我原来的建议。将所有内容转换为 InnoDB !!! 您可以在 InnoDB 缓冲池中缓存数据页和索引页。