Понимание блокировок и состояния запросов в Snowflake (несколько обновлений для одной таблицы) - PullRequest
0 голосов
/ 01 мая 2020

При использовании коннектора python для снежинки с запросами вида

UPDATE X.TABLEY SET STATUS = %(status)s, STATUS_DETAILS = %(status_details)s WHERE ID = %(entry_id)s

иногда я получаю следующее сообщение:

 (snowflake.connector.errors.ProgrammingError) 000625 (57014): Statement 'X' has locked table 'XX' in transaction 1588294931722 and this lock has not yet been released.

и вскоре после этого

Your statement X' was aborted because the number of waiters for this lock exceeds the 20 statements limit

Это обычно происходит, когда несколько запросов пытаются обновить одну таблицу. Чего я не понимаю, так это того, что когда я вижу историю запросов в Snowflake, она говорит, что запрос завершился успешно (статус Succeded), но на самом деле обновление никогда не происходило, потому что таблица не изменилась.

Таким образом, в соответствии с https://community.snowflake.com/s/article/how-to-resolve-blocked-queries я использовал

SELECT SYSTEM$ABORT_TRANSACTION(<transaction_id>);

, чтобы разблокировать замок, но, тем не менее, ничего не произошло и даже с успешным статус, кажется, запрос не выполнен вообще. Итак, мой вопрос: как это действительно работает и как можно снять блокировку, не теряя при этом выполнения запроса (также, что происходит с другими 20+ запросами, которые ставятся в очередь из-за блокировки, иногда кажется, что при блокировке освобождается, следующий захватывает блокировку и также должен быть прерван).

Буду признателен, если вы поможете мне. Спасибо!

...