首页 > 解决方案 > 数据库表中的更新操作问题

问题描述

我在数据库表中面临更新操作的问题。有时更新查询没有成功,网关端的 MySql 库(MySQL_MariaDB_Generic)显示错误“MySQL_Packet::read_packet: ERROR: Timeout waiting for client”。

我正在为 MYSQL 数据库使用 AWS RDS 服务器。MYSQL 版本是 8.0.20。查询是从 ESP32 Wi-Fi 模块执行的。

从我的网关应用程序中,由于数据量很大(大约 10k),我分 3 步为 3 个数据字段插入数据。首先我插入一条记录,然后通过更新查询添加更多数据。插入查询每次都成功,但更新查询有时会失败,即使我连续重试 10 次。

这个问题并不总是发生。它是随机发生的。有时它可以正常工作大约 7 到 8 个小时,然后才会再次出现异常行为。

服务器似乎没有响应。出于调试目的,我通过执行查询“show processlist;”检查了数据库服务器上的进程列表;我发现同一查询有多个进程,状态为“updating”。这可能是由于网关多次重试所致。我无法理解它是否是预期的行为(多个相同的查询,状态为“更新”)。请参阅随附的屏幕截图。

[数据库服务器进程列表][1]

我们想了解为什么这种情况只是有时而不是总是发生,它是如何恢复的?服务器端是否有任何促成此行为的因素?我们需要做任何配置吗?对此的任何指导表示赞赏。

供您参考:

我使用 ESP32 Wi-Fi 模块上的 MySQL_MariaDB_Generic 库将数据发送到数据库。数据库表包含 7 个数据字段,如 Id、Timestamp、P1、P2、P3、P4 和 P5。这里'Id'是主键和自动增量属性。

此处数据字段 P3、P4 和 P5 的数据类型为 MEDIUMBLOB。

查询插入数据字段 Timestamp、P1、P2、P3:

INSERT INTO TabelXYZ(Timestamp, P1, P2, P3)VALUES ('TimestampValue','P1Value','P2Value','P3Value');

查询插入数据字段 P4:

UPDATE TabelXYZ SET P4 = 'P4Value' WHERE Timestamp = 'TimestampValue' ORDER BY Timestamp;

查询插入数据字段 P4:

UPDATE TabelXYZ SET P5 = 'P5Value' WHERE Timestamp = 'TimestampValue' ORDER BY Timestamp;

请注意,这里没有互联网连接问题,因为每次插入查询都执行正常,只有更新查询失败。

我无法找到其背后的任何根本原因。如果有人对我做错了什么有建议/想法,请告诉我。

标签: mysqlarduinoesp32

解决方案


推荐阅读