【问题标题】:PostgreSQL CREATE INDEX CONCURRENTLY waiting columnPostgreSQL CREATE INDEX CONCURRENTLY 等待列
【发布时间】:2016-08-11 07:04:54
【问题描述】:

我正在尝试在大表上创建索引:

 datid  |       datname        |  pid  | usesysid |         usename         |       application_name       | client_addr  | client_hostname | client_port |          backend_start         |          xact_start           |          query_start           |         state_change          | waiting | state  | backend_xid | backend_xmin  |                                           query                                           
 -------+----------------------+-------+----------+-------------------------+---  --------------------------+--------------+-----------------+-------------+------ -------------------------+-------------------------------+---------------------- ---------+-------------------------------+---------+--------+-------------+----- ---------+---------------------------------------------------------------------- ---------------------
  25439 | messengerdb          | 30692 |    25438 | messengerdb_rw          |  pgAdmin III - Przegl??darka | 10.167.12.52 |                 |       50593 | 2016-08-11 05:27:12.101452+02  | 2016-08-11 05:28:01.535943+02 | 2016-08-11 05:28:01.535943+02 | 2016-08-11 05:28:01.535958+02 | t       | active  |             |   1173740991 | CREATE INDEX CONCURRENTLY user_time_idx                                                   +
        |                      |       |          |                         |                              |              |                 |             |                               |                                |                               |                               |         |         |             |              |    ON core.conversations (user_id ASC NULLS LAST,  last_message_timestamp ASC NULLS LAST);+

这个查询有效吗?我担心 'waiting' 列 === 't' 是否意味着它正在等待锁定或某事?

【问题讨论】:

  • 请格式化。谢谢
  • 格式化什么?这里看起来不错;/
  • 真的不知道如何做得更好 :( 给您带来的不便,请见谅

标签: postgresql indexing


【解决方案1】:

同时创建索引可能需要很长时间,因为它不会锁定表以防止写入,它会等待其他事务完成。但是,如果您的连接在事务中保持空闲(例如,当客户端或应用程序保持打开的连接而没有回滚/提交时),它可能会永远等待。

检查事务中是否有一些空闲连接(您应该能够在进程列表中看到它们)。您还可以查看 PostgreSQL 日志。

PostgreSQL 文档中的

Section about creating index concurrently 可能会有所帮助。这个link下面还有一篇关于并发索引的好文章。

【讨论】:

  • 非常感谢。有没有办法找出这个索引创建的当前状态(有多大)?我没有看到任何“事务中的空闲连接”;/
  • @DreamCatch afaik 无法检查整个过程的当前状态。
猜你喜欢
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 2022-08-09
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多