Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

digdagでPostgreSQLのVACUUM ANALYZEを実行する

Posted at

digdagからPostgreSQLのクエリを実行するときに、
大量データをtruncate, insertで中間テーブルを作ってから、すぐに次の処理で使いたい場合、統計情報がうまく更新されずにクエリが劣化する場合がある。
対処方法として次の処理を行う前にvacuum analyzeをかけてクエリが重くならないようにする方法があるが、digdagのトランザクション設定をオプションで指定する必要がある。

検証環境

PostgreSQL 13.4
digdag 0.9.41

実行ファイル

pg_query.dig

pg_query.dig
#PostgreSQLクエリ実行
+pg:
  _export:
    pg:
      host: ${env.postgres_host}
      port: ${env.postgres_port}
      user: ${env.postgres_user}
      password: ${env.postgres_pass}
      database: ${env.postgres_database}
#      strict_transaction: false
      schema: "schema"
  +query:
    pg>: sql/query.sql

query.sql

query.sql
/*******************************************************
大量データ処理のため、中間テーブルを作成して、最終テーブルを作成する
*******************************************************/

--中間テーブルのクリア
TRUNCATE
 schema.wrk_table
;

--data_tableなので中間テーブルを作成する
INSERT INTO
 schema.wrk_table
SELECT
 colA
,colB
FROM
 schema.data_table
WHERE
 colC = 'C'
;

--VACUUM ANALYZE
VACUUM ANALYZE schema.wrk_table;

--最終テーブルを作成
INSERT INTO
 schema.final_table
SELECT
 t1.colA
,t2.colD
FROM
 schema.wrk_table t1
INNER JOIN 
 schema.name_mst t2
 ON t2.colB = t1.colB 
;

実行すると以下エラーが発生した
Failed to execute given SQL script [ERROR: VACUUM cannot run inside a transaction block]
VACUUMは同一トランザクション内で使えない。

以下の通り、strict_transactionをflase指定すると問題なく実行できた
クエリが途中で失敗した場合、ロールバックされずに途中まで更新されるので注意すること。

pg_query.dig
#PostgreSQLクエリ実行
+pg:
  _export:
    pg:
      host: ${env.postgres_host}
      port: ${env.postgres_port}
      user: ${env.postgres_user}
      password: ${env.postgres_pass}
      database: ${env.postgres_database}
      strict_transaction: false
      schema: "schema"
  +query:
    pg>: sql/query.sql

参考:
公式ページ

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Comments

No comments

Let's comment your feelings that are more than good

Qiita Advent Calendar is held!

Qiita Advent Calendar is an article posting event where you post articles by filling a calendar 🎅

Some calendars come with gifts and some gifts are drawn from all calendars 👀

Please tie the article to your calendar and let's enjoy Christmas together!

1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Login to continue?

Login or Sign up with social account

Login or Sign up with your email address