Смягчить замки Redshift? - PullRequest
       24

Смягчить замки Redshift?

0 голосов
/ 31 августа 2018

Привет, я использую ETL через Python. У меня есть простой файл sql, который я запускаю из Python, как

truncate table foo_stg;
insert into foo_stg
(
 select blah,blah .... from tables 
);

truncate table foo;
insert into foo 
(
select * from foo_stg
);

Этот запрос иногда блокирует таблицу, которую он не освобождает. Из-за чего другие процессы ставятся в очередь.

Теперь я проверяю, какая таблица имеет блокировку, и завершаю процесс, вызвавший блокировку.

Я хочу знать, какие изменения я могу внести в свой код для смягчения таких проблем?

Заранее спасибо !!!

1 Ответ

0 голосов
/ 04 сентября 2018

TRUNCATE, вероятно, нарушает вашу логику транзакции. Рекомендую делать все укороченные заранее. Я также рекомендовал бы добавить некоторую логику обработки, чтобы каждый экземпляр процесса ETL: A) имел эксклюзивный доступ к промежуточным таблицам или B) использовал отдельный набор промежуточных таблиц.

TRUNCATE в Redshift (и многих других БД) подразумевает COMMIT.

… имейте в виду, что TRUNCATE фиксирует транзакцию, в которой она выполняется.

Redshift пытается прояснить это, возвращая следующее сообщение INFO для подтверждения успеха: TRUNCATE TABLE and COMMIT TRANSACTION. Однако это сообщение INFO может не отображаться клиентским инструментом SQL. Запустите SQL в psql, чтобы увидеть его.

...