2017-12-13 16 views
2

現時点では、いくつかのデータベース(ポストグル)の問題に直面しており、私たちが持っている情報が新しい洞察につながるわけではありません。うまくいけば、誰かがここで私たちを助けることができます。私たちが取り組んでいるPostgres:無関係なテーブルのSELECTブロックINSERT

いくつかの文脈

ツールは、基本的には、一般的なデータベースシステムです。したがって、ユーザーは表と列を動的に追加できます。 テーブルの1つにエントリを挿入した後、エントリの「フル」バージョンを返します。たとえば、ユーザーの列(ユーザーIDの配列として表される)がエントリに含まれている場合、これらのユーザーに関する情報をクエリし、クライアントに送信する前にエントリに追加します。情報を追加するにはJavaScriptを使用し、JOINでは使用しないでください。 ユーザーテーブルの上に

問題

SELECTクエリがいくつか生成されたテーブルの挿入を阻止しているようです。 2つのテーブルの間には、外部キーの関係はありません(エントリ内のユーザーIDは整数配列として格納されます)。 また、INSERTは互いにブロックしているようです。しかし、これは最初の問題が原因でしょうか?

SELECT 
    blockeda.pid AS blocked_pid, 
    blockeda.query as blocked_query, 
    blockinga.pid AS blocking_pid, 
    blockinga.query as blocking_query, 
    blockedl.mode as blocked_mode, 
    blockeda.query_start as blocked_query_start, 
    blockinga.query_start as blocking_query_start 
FROM 
    pg_catalog.pg_locks blockedl 
JOIN 
    pg_stat_activity blockeda 
ON 
    blockedl.pid = blockeda.pid 
JOIN 
    pg_catalog.pg_locks blockingl 
ON 
    (blockingl.transactionid=blockedl.transactionid AND blockedl.pid != blockingl.pid) 
JOIN 
    pg_stat_activity blockinga 
ON 
    blockingl.pid = blockinga.pid 
WHERE NOT 
    blockedl.granted 
LIMIT 
    10; 

結果は(私は、テーブル名とカラム名ビットを変更したことを除いて)次のようになります:

クエリはどの他のクエリをブロックしているかを確認するために

は、我々は次の文を実行しました

blocked_pid |                                                blocked_query                             | blocking_pid |                                               blocking_query                             | blocked_mode |  blocked_query_start  |  blocking_query_start  
-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
     96170 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  99736 | select "id", "display_name", "user_name", "initials", "image_link", "is_image_preferred" from "users" where "id" in ($1) and "deprecated_at" is null                                          | ShareLock | 2017-12-13 15:41:07.707156+00 | 2017-12-13 15:40:27.217027+00 
     96341 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  99033 | select "id", "display_name", "user_name", "initials", "image_link", "is_image_preferred" from "users" where "id" in ($1) and "deprecated_at" is null                                          | ShareLock | 2017-12-13 15:39:04.585587+00 | 2017-12-13 15:13:19.079758+00 
     96341 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  99427 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * | ShareLock | 2017-12-13 15:39:04.585587+00 | 2017-12-13 15:13:27.534743+00 
     96341 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  99439 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * | ShareLock | 2017-12-13 15:39:04.585587+00 | 2017-12-13 15:13:22.371772+00 
     96667 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  99127 | select "id", "display_name", "user_name", "initials", "image_link", "is_image_preferred" from "users" where "id" in ($1) and "deprecated_at" is null                                          | ShareLock | 2017-12-13 15:39:00.840949+00 | 2017-12-13 15:36:17.303978+00 
     96667 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  97108 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * | ShareLock | 2017-12-13 15:39:00.840949+00 | 2017-12-13 15:36:35.485022+00 
     96667 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  96822 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * | ShareLock | 2017-12-13 15:39:00.840949+00 | 2017-12-13 15:38:57.932188+00 
     96677 | insert into "generated_table_2" ("generated_column_2_searchText", "generated_column_2_text", "generated_column_5_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  96338 | select "id", "display_name", "user_name", "initials", "image_link", "is_image_preferred" from "users" where "id" in ($1) and "deprecated_at" is null                                          | ShareLock | 2017-12-13 15:12:22.040108+00 | 2017-12-13 15:11:36.813946+00 
     96822 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  99127 | select "id", "display_name", "user_name", "initials", "image_link", "is_image_preferred" from "users" where "id" in ($1) and "deprecated_at" is null                                          | ShareLock | 2017-12-13 15:38:57.932188+00 | 2017-12-13 15:36:17.303978+00 
     96822 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  96667 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * | ShareLock | 2017-12-13 15:38:57.932188+00 | 2017-12-13 15:39:00.840949+00 
     96822 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  97108 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * | ShareLock | 2017-12-13 15:38:57.932188+00 | 2017-12-13 15:36:35.485022+00 
     97110 | insert into "generated_table_3" ("generated_column_3_searchText", "generated_column_3_text", "generated_column_3_textType", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  96422 | select "id", "display_name", "user_name", "initials", "image_link", "is_image_preferred" from "users" where "id" in ($1) and "deprecated_at" is null                                          | ShareLock | 2017-12-13 15:47:12.530821+00 | 2017-12-13 15:42:08.271596+00 
     97108 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  99127 | select "id", "display_name", "user_name", "initials", "image_link", "is_image_preferred" from "users" where "id" in ($1) and "deprecated_at" is null                                          | ShareLock | 2017-12-13 15:36:35.485022+00 | 2017-12-13 15:36:17.303978+00 
     97108 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  96667 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * | ShareLock | 2017-12-13 15:36:35.485022+00 | 2017-12-13 15:39:00.840949+00 
     97108 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  96822 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * | ShareLock | 2017-12-13 15:36:35.485022+00 | 2017-12-13 15:38:57.932188+00 
     99427 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  99033 | select "id", "display_name", "user_name", "initials", "image_link", "is_image_preferred" from "users" where "id" in ($1) and "deprecated_at" is null                                          | ShareLock | 2017-12-13 15:13:27.534743+00 | 2017-12-13 15:13:19.079758+00 
     99427 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  99439 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * | ShareLock | 2017-12-13 15:13:27.534743+00 | 2017-12-13 15:13:22.371772+00 
     99427 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  96341 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * | ShareLock | 2017-12-13 15:13:27.534743+00 | 2017-12-13 15:39:04.585587+00 
     99439 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  99033 | select "id", "display_name", "user_name", "initials", "image_link", "is_image_preferred" from "users" where "id" in ($1) and "deprecated_at" is null                                          | ShareLock | 2017-12-13 15:13:22.371772+00 | 2017-12-13 15:13:19.079758+00 
     99439 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  99427 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * | ShareLock | 2017-12-13 15:13:22.371772+00 | 2017-12-13 15:13:27.534743+00 
     99439 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * |  96341 | insert into "generated_table_1" ("generated_column_1_searchText", "generated_column_1_text", "generated_column_4_categories", "created_at", "created_by", "display_string", "listId", "shortId", "sort_order", "updated_at", "updated_by", "uuid") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) returning * | ShareLock | 2017-12-13 15:13:22.371772+00 | 2017-12-13 15:39:04.585587+00 

これらのクエリが互いにブロックされる理由を知っている人はいますか? 質問に答えるためにさらに情報が必要な場合は、私にお知らせください。

ご協力いただければ幸いです。事前に

どうもありがとう、

ジェシー

編集

生成されたテーブル(静的部品)の表のdefintion:

id: integer 
shortId: character varying(255) 
uuid: uuid 
display_string: text 
sort_order: numeric 
parent_id: integer 
created_by: integer 
updated_by: integer 
deprecated_by: integer 
created_at: timestamp with time zone 
updated_at: timestamp with time zone 
deprecated_at: timestamp with time zone 

回避策

30秒を超えるトランザクションを手動で強制終了することで、この問題を回避することができました。解決されていないトランザクションがほんのわずかしかないように見えるため、新たな取引がブロックされ積み重なったようです。

その後、これらのトランザクションを開始する関連コードをコールバックの代わりに約束を使用するように変更しました。これ以降、エラーは発生しませんでした。だから、エラーケースの1つでコールバックを呼び出すことを忘れたかもしれません。 さらに調査し、実際にこの問題が修正されているかどうかを確認します。これまでのご協力ありがとうございます!

+0

セレクトに 'FOR UPDATE'節が含まれていない限り、' SELECT'はDML文をブロックしません –

答えて

1

あなたが実行しているクエリは、ブロッキングトランザクションによって実行さ最新文を返しますが、それは必ずしもロックの原因となったステートメントではありません(とSELECTの場合には、それが最も可能性が高いではありません)。

最初に理解しておくべきことは、実際に実行されているSQL文です。

log_statements='all'を設定して問題を再現できます。
log_line_prefix%cが含まれていることを確認して、セッションを識別できるようにします。
次に、関連するトランザクションが実行されているステートメントを調べます。

外部キーまたはトリガーが関係する場合、関係のない表は、ステートメントによってロックされる可能性があることに注意してください。

+0

ありがとうございます! どのステートメントがブロックを引き起こしているか正確にわかる方法でクエリを変更する方法はありますか? ロギングと再現の問題は、プロダクションでのみ発生し、いつわかるのかということです。それは、同時に働くユーザーの数に関係しているようです。 – Jesse

+0

セッション上の過去のステートメントを照会する方法はありません。テストシステムにログオンすると、少なくともトランザクションによって発行されたステートメントを調べることができます。また、あなたは長いトランザクションを実行しているようです。それはそれ自体の問題です。それらを取り除こうとすると、おそらく問題がなくなるかもしれません。 –

+0

よろしくお願いいたします。私たちは今、より多くを発見するためにロギングシステムを設定しています。 長時間実行されるトランザクションの場合:長時間自然に実行されているのと同じではありませんが、ブロックされているため長時間実行されています。/ – Jesse

関連する問題