mysql - 数据库表中的更新操作问题
问题描述
我在数据库表中面临更新操作的问题。有时更新查询没有成功,网关端的 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;
请注意,这里没有互联网连接问题,因为每次插入查询都执行正常,只有更新查询失败。
我无法找到其背后的任何根本原因。如果有人对我做错了什么有建议/想法,请告诉我。
解决方案
推荐阅读
- javascript - 多个值的换色器
- azure-log-analytics - 从 Databricks 将日志推送到 Log Analytics
- java - 如何使用来自迭代器和 for 循环的流/过滤器/lambda?
- go - 如何编组数据并在 websocket 上发送?
- html - IE11 上的置顶页脚
- java - 类型 TouchActions 的方法 tap(TapOptions) 未定义
- spring-boot - Spring Boot MVC 允许控制器中的任何类型的内容类型
- javascript - 当我动态添加包含 div 的行时,为什么我的 HTML 表格列会调整大小?
- powershell - 从类型为 system.string 的变量中读取值
- python - 如何拆分字符串?