如何估计在 PostgreSQL 中重新索引整个表所需的总时间?
我有一个大型 PostgreSQL 数据库,其主表有 1500 万行、100 列和 200 个索引。
我发现一个问题,经过一整夜的进程将数据加载到表中后,在加载结束后大约 3-6 小时内,对表的查询非常慢。然而,这些查询在加载后 6 小时后奇迹般地再次变快。
这种暂时的缓慢是否是由 Postgres 在后台更新索引引起的?如何加快此处理速度?我找不到任何控制这个的参数。
我正在考虑REINDEX加载结束后立即在桌子上运行 a ,但我不确定这需要多长时间,而且我担心它可能需要比原始加载更长的时间,并且只会恶化性能。
我的表存储了有关客户的数十个描述符,索引(其中许多是部分索引)用于加速用户运行的常规查询。
该数据库接近 1 TB,因此我很少将整个数据库加载到开发环境中。相反,我有一个复制几千条记录的脚本。
小智 1
由于您有 200 个索引,因此比真空需要更长的时间。重新索引始终取决于您的 OI。看起来还要一个多小时。
我的建议是:
摆脱一些索引。100 列 200 没有意义。看看您 90% 的时间都在使用其中的多少个。
1.1. 其他查询将沿着其他索引找到它们的路径
1.2. 您的记录记录索引所需的时间比记录行的时间多,我应该会减慢您的夜间更新速度
您可以重新索引您最常使用的索引
2.1. 使用 REINDEX INDEX 索引名;
2.2. 如果您可以并行运行一些重新索引,它将更好地利用您的服务器核心
| 归档时间: |
|
| 查看次数: |
9068 次 |
| 最近记录: |