小编saf*_*fts的帖子

在 PostgreSQL 中随机更新大表花费的时间太长

我想弄清楚为什么一个UPDATE语句需要太长时间(> 30 秒)。

这是随机的,即在大多数情况下,它在 100 毫秒内完成。但是,有时(随机)需要> 30 秒才能完成。

一些细节:

  • 我使用的是 PostgreSQL 12(实际上是 AWS Aurora)
  • 我正在一个没有流量的数据库中尝试这个,所以它不会受到同时运行的任何其他查询的影响。我也在监视日志以查看是否还有其他内容正在运行,但我什么也没看到。
  • 我试过REINDEXing、VACUUMing(和VACUUM ANALYZE),但没有任何改进
  • 我检查了锁,( log_lock_waits) 但我什么也没看到。
  • 查询在循环中执行(来自 Python 应用程序)。它执行大约 5000 次查询,在某些时候,其中一些查询似乎没有遵循某种模式,需要花费大量时间才能完成。
  • 我试过分批运行它们,但同样,有些批次随机运行时间太长。
  • 表的大小有点大,约 10000000 行和约 25 个索引。

查询:

UPDATE "my_table" SET "match_request_id" = 'c607789f-4816-4a38-844b-173fa7bf64ed'::uuid WHERE "my_table"."id" = 129624354;
Run Code Online (Sandbox Code Playgroud)

的输出 EXPLAIN (ANALYZE VERBOSE BUFFERS COSTS)

 Update on public.my_table  (cost=0.56..8.58 rows=1 width=832) (actual time=34106.965..34106.966 rows=0 loops=1)
   Buffers: shared hit=431280 read=27724
   I/O Timings: read=32469.021
   ->  Index Scan using my_table_pkey on …
Run Code Online (Sandbox Code Playgroud)

postgresql vacuum update aws-aurora

10
推荐指数
1
解决办法
577
查看次数

标签 统计

aws-aurora ×1

postgresql ×1

update ×1

vacuum ×1