我们正在使用 Amazon RDS 托管我们的 PostgreSQL 数据库。我们的生产实例 (db.t3.xlarge,单可用区) 运行顺利,直到突然Read IOPS
、Read Latency
和AWS 控制台中的指标迅速增加并随后保持高位(变化较小),而Read Throughput
和则正常。Disk Queue Depth
Write IOPS
Write Throughput
增加当天,代码没有发生变化,也没有部署。用户活动也没有显著增加。
关于我们的数据库结构,我们有一个表来保存所有数据,并且在该表中,我们有以下字段:id
UUID(主键)、type
VARCHAR、data
JSONB(保存实际数据)createdAt
和updatedAt
带时区的时间戳。我们的大多数数据列的大小都大于 2 KB,因此大多数行都存储在 TOAST 表中。我们有 20 个(BTREE)索引,这些索引是为 JSONB 中常用的字段创建的。
到目前为止,我们已经尝试VACUUM ANALYZE
并完全重建了我们的表:创建一个新表,从旧表复制所有数据,创建所有索引。它们没有改变行为。
我们还尝试增加存储,从而提高 IOPS 性能。这有点帮助,但仍然与以前不同。
这个问题的根本原因是什么?我们如何才能永久修复它(不增加存储或实例类型)?目前,我们正在寻找简单的更改,并将在未来改进我们的数据模型。