【问题标题】:Track down which resource limits index creation in PostgreSQL追踪哪些资源限制了 PostgreSQL 中的索引创建
【发布时间】:2022-01-24 12:12:30
【问题描述】:

这个索引创建速度很慢(200 万行):

CREATE UNIQUE INDEX foo_index_id ON foo (id);

我修改了几个对总时间没有显着影响的参数:

  • max_parallel_maintenance_workers
  • maintenance_work_mem

manual 指出 I/O 和 CPU 可能是瓶颈。

增加 max_parallel_maintenance_workers 可能允许更多的工人 使用,这样会减少创建索引所需的时间这么长 因为索引构建尚未受 I/O 限制。当然应该有 也有足够的 CPU 容量,否则会闲置。

如何检查哪个资源实际上是瓶颈?

我尝试运行一个解释计划,其中包含 I/O 时间来猜测,但 it is not allowed 用于此类查询。

(数据库由 DBaaS 托管,因此我无法访问服务器本身来获取操作系统指标)

【问题讨论】:

    标签: postgresql index


    【解决方案1】:

    使用top 并查看相关进程是否占用了 100% 的 CPU 内核。如果是,那么您是 CPU 密集型的,如果不是,您应该是 I/O 密集型的。

    请注意,构建索引有不同的阶段,可能会表现出不同的特征。您可以查看pg_stat_progress_create_index 以了解它在做什么以及距离有多远。

    【讨论】:

    • 好吧,我无法访问操作系统指标,如问题中所述。如果我有它们,我会在可以从 pg_stat_activity.backend_type='parallel worker' 获得的特定进程 ID 上使用实用程序(例如 iotop 用于 IO)。我所拥有的只是整个数据库上的 CPU 和内存消耗(无 I/O),所以我无法弄清楚哪些是由索引构建引起的,哪些与其他查询有关。
    • 我没看到。那你就不走运了。托管数据库的缺点之一:您受制于提供商让您看到的内容。
    猜你喜欢
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    相关资源
    最近更新 更多