2016-08-11 5 views
1

イムを待って索引を作成します。PostgreSQLはCONCURRENTLY大きなテーブルの上にインデックスを作成しようとしている列

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);+ 

は、このクエリの作業ですか?私は '待っている'列が心配です=== 'それはロックやsthを待っているという意味ですか?

+0

形式でお願いします。 – e4c5

+1

形式は何ですか?ここで大丈夫だよ/ –

+1

本当に?誰もが大規模な水平方向のスクロールが大丈夫だとは思わない – e4c5

答えて

5

同時にインデックスを作成すると、テーブルが書き込みからロックされず、他のトランザクションが完了するまで待機するため、時間がかかることがあります。ただし、トランザクションでアイドル状態の接続がある場合(たとえば、クライアントまたはアプリケーションがロールバック/コミットせずにオープン接続を維持している場合など)、永遠に待機することがあります。

トランザクション内にアイドル状態の接続がいくつか存在するかどうかを確認します(プロセスリストで確認できるはずです)。また、PostgreSQLのログをチェックすることもできます。

Section about creating index concurrently PostgreSQLのマニュアルが役に立ちます。このlinkの下にある同時インデックスについての素晴らしい記事もあります。

+0

ありがとうございます。このインデックスの現在の状態(大きさはどれくらいですか)を調べる方法はありますか?トランザクションでアイドル状態の接続が表示されません。/ –

+0

@DreamCatch afaikは、プロセス全体の現在の状態を確認することはできません。 – smefju

関連する問題