MySQL INSERT 有时无法插入数据库

MySQL INSERT 有时无法插入数据库

我有一个 INSERT 查询,它将订单添加到 DB,它已在生产服务器上成功运行了几年,今天大约 10% 的 INSERT 尚未出现在 DB 表中,运行此查询的代码没有任何变化所以我假设这是基于性能的,因为服务器最近肯定承受着更重的负载。

该表是 MyISAM,在 CentOS 服务器上运行约 90,000 条记录。

是否有任何故障排除方法来查看为什么查询没有插入数据,因为我觉得服务器本身就是瓶颈?

答案1

高负载不会导致 MySQL 盲目地放弃 INSERT 查询。我猜你的应用程序在连接到数据库时可能会出错,因此 MySQL 从未真正收到 INSERT 查询。我建议检查你的代码,以确保你正确地捕获和记录数据库错误。

顺便说一句,你真的已检查查看服务器是否正在经历高负载。您说这个表有 90k 条记录(实际上非​​常小),但您没有给出服务器每秒处理的查询数。运行top以查看高峰使用期间的平均负载,不仅要注意平均负载本身,还要注意进程处于 iowait 状态的时间百分比(%wa中的值top

答案2

我还怀疑代码在执行过程中忽略了一个错误。可能的原因:

  • MySQL 连接数已达到上限(参见 ErikA 的回答)。基本上,服务器无法获取 INSERT 查询。检查连接数(“SHOW GLOBAL STATUS;”中的threads_connected 与 max_connections 进行比较)。
  • 参数错误,INSERT 失败,但错误被忽略。启用 MySQL 查询日志以查看服务器是否收到带有错误参数的查询
  • 代码在发送查询之前失败(例如由于魔术参数转换)。检查 php 错误日志/web 服务器错误日志。

相关内容