ablog

不器用で落着きのない技術者のメモ

Redshift で SELECT が順次実行される中で DDL を発行した場合の実行順を確認した

Redshift で SELECT を順次実行中に、DDL(ALTER TABLE) を発行した場合、DDL 実行後に発行した SELECT は DDL を待機することを確認した。

SQL スクリプト

  • lineorder.sql(SELECT)
\timing on
\pset pager
--\set FETCH_COUNT 1000
set enable_result_cache_for_session=off;
select * from dev.public.lineorder;
  • alter_lineorder.sql(ALTER TABLE)
alter table dev.public.lineorder add column added_col int default NULL;

検証手順

  • ロングクエリ(SELECT)を実行する。
nohup psql "host=redshift-cluster-poc-central.********.ap-northeast-1.redshift.amazonaws.com user=awsuser dbname=dev port=5439" -f lineorder.sql  > select1.log 2>&1 &
  • DDL を実行する。
nohup psql "host=redshift-cluster-poc-central.********.ap-northeast-1.redshift.amazonaws.com user=awsuser dbname=dev port=5439" -f alter_lineorder.sql 
  • 立て続けにロングクエリ(SELECT)を3本実行する。
nohup psql "host=redshift-cluster-poc-central.********.ap-northeast-1.redshift.amazonaws.com user=awsuser dbname=dev port=5439" -f lineorder.sql  > select2.log 2>&1 &
nohup psql "host=redshift-cluster-poc-central.********.ap-northeast-1.redshift.amazonaws.com user=awsuser dbname=dev port=5439" -f lineorder.sql  > select3.log 2>&1 &
nohup psql "host=redshift-cluster-poc-central.********.ap-northeast-1.redshift.amazonaws.com user=awsuser dbname=dev port=5439" -f lineorder.sql  > select4.log 2>&1 &
  • DDL 発行後に実行した SELECT はロック待ちしている。
$ wget https://raw.githubusercontent.com/awslabs/amazon-redshift-utils/refs/heads/master/src/AdminScripts/lock_wait.sql
$ psql "host=redshift-cluster-poc-central.********.ap-northeast-1.redshift.amazonaws.com user=awsuser dbname=dev port=5439" -f lock_wait.sql
    xid    |    pid     | username | dbname | relation | schemaname | objectname |        mode         | granted | obj_type |         txn_start          | block_sec | block_min | block_hr | waiting | max_sec_blocking | num_blocking |  pidlist
-----------+------------+----------+--------+----------+------------+------------+---------------------+---------+----------+----------------------------+-----------+-----------+----------+---------+------------------+--------------+------------
 177187852 | 1073938652 | awsuser  | dev    |   133863 | public     | lineorder  | AccessShareLock     | True    | relation | 2025-09-01 10:41:39.157932 |    259.58 |      4.33 |     0.07 |         |           213.58 |            1 | 1073938665
 177187936 | 1073938665 | awsuser  | dev    |   133863 | public     | lineorder  | AccessExclusiveLock | False   | relation | 2025-09-01 10:42:25.994057 |           |           |          |  213.58 |                  |              |
 177187973 | 1073840564 | awsuser  | dev    |   133863 | public     | lineorder  | AccessShareLock     | False   | relation | 2025-09-01 10:42:41.396287 |           |           |          |  197.58 |                  |              |
 177188005 | 1073897936 | awsuser  | dev    |   133863 | public     | lineorder  | AccessShareLock     | False   | relation | 2025-09-01 10:42:45.621279 |           |           |          |  193.58 |                  |              |
(4 rows)