나는 Redshift에서 여러 SQL 스크립트 (하나씩 차례로)를 실행하는 python 스크립트를 가지고 있습니다. 이 SQL 스크립트의 일부 테이블은 여러 번 쿼리 할 수 있습니다. 예를 들어. 테이블 t1은 한 스크립트에서 선택 될 수 있으며 다른 스크립트에서 삭제/재 작성 될 수 있습니다. 이 전체 프로세스는 하나의 트랜잭션으로 실행됩니다. 이제 때때로, 교착 상태 감지 오류가 발생하고 전체 트랜잭션이 롤백됩니다. 테이블에 교착 상태가있는 경우 테이블이 해제 될 때까지 기다렸다가 SQL 실행을 다시 시도하고 싶습니다. 다른 유형의 오류에 대해서는 트랜잭션을 롤백하고 싶습니다. 설명서에서 트랜잭션이 끝날 때까지 테이블 잠금이 해제되지 않은 것처럼 보입니다. 모든 또는 전혀 데이터 변경 (트랜잭션을 사용하여 수행되는) 달성하고 싶습니다 또한 교착 상태 처리 할 싶습니다. 이것이 어떻게 달성 될 수 있는지에 대한 제안?redshift에서 핸들 잠금
1
A
답변
0
재시도 루프를 사용하여 하나의 트랜잭션에서 참조하는 모든 SQL을 실행합니다. 아래는 동시성 문제를 처리하고 다시 시도하는 데 사용하는 논리입니다 (간결성을 위해 의사 코드). 잠금을 해제하기 위해 시스템을 무기한 대기 할 필요는 없습니다. 대신 시간이 지남에 따라 다시 시도하여 응용 프로그램에서 처리합니다.
begin transaction
while not successful and count < 5
try
execute sql
commit
except
if error code is '40P01' or '55P03'
# Deadlock or lock not available
sleep a random time (200 ms to 1 sec) * number of retries
else if error code is '40001' or '25P02'
# "In failed sql transaction" or serialized transaction failure
rollback
sleep a random time (200 ms to 1 sec) * number of retries
begin transaction
else if error message is 'There is no active transaction'
sleep a random time (200 ms to 1 sec) * number of retries
begin transaction
increment count
주요 구성 요소는 경우가 롤백이 필요한 알고, 모든 type of error 잡기 및 exponential backoff for retries을 가지고있다.
관련 문제
- 1. MySQLdb 핸들 행 잠금
- 2. SQL Server에서 핸들 잠금 수동으로?
- 3. 핸들 잠금 및 잠금 해제 게임 레벨 android
- 4. 아마존 redshift에서 아파치 로그로드하기
- 5. redshift에서 정규 표현식 사용
- 6. 데이터를 Redshift에서 BigQuery로 마이그레이션
- 7. Redshift에서 JSON 필드 쿼리
- 8. redshift에서 스키마를 설정하는 방법
- 9. Redshift에서 종료되는 쿼리
- 10. Python이 Redshift에서 S3으로 데이터를로드합니다.
- 11. Redshift에서 ElasticSearch로 데이터 복사
- 12. Redshift에서 실행 횟수
- 13. redshift에서 Base64 디코드
- 14. 관리 코드의 파일에 대한 프로세스 핸들 및 잠금 확인
- 15. Redshift에서 잘못된 데이터 오류가 발생했습니다
- 16. 취소시 Redshift에서 삭제 명령문이 롤백됩니다.
- 17. Redshift에서 대형 테이블의 업데이트 최적화
- 18. AWS Redshift에서 여러 테이블 언로드
- 19. Redshift에서 JSON 배열을 쿼리 하시겠습니까?
- 20. Amazon Redshift에서 행을 결합하는 방법
- 21. Redshift에서 stl_load_errors 테이블을 지우려면 어떻게해야합니까?
- 22. Redshift에서 획기적인 시간을 얻는 방법?
- 23. Redshift에서 열의 부분 문자열 삽입
- 24. redshift에서 여러 테이블의 데이터 업데이트
- 25. Redshift에서 문자의 ASCII 값을 가져옵니다.
- 26. 창 핸들 핸들 (c)
- 27. 핸들
- 28. 핸들
- 29. Matlab 핸들 클래스 핸들 크기
- 30. jQuery resizable 핸들 핸들 위치
제대로 이해하면 모든 SQL 스크립트를 완료 한 후 커밋하고 오류가 발생한 스크립트 만 롤백하는 것이 좋습니다. 교착 상태 오류가 발생하면 모든 SQL 스크립트가 하나의 트랜잭션에서 실행되도록하는 방법이 있습니까? – stech
하나의 트랜잭션 내에서 모든 SQL을 실행할 것을 제안합니다 ('execute sql' 행). 교착 상태에 빠지거나 실패하면 다시 시도하십시오. savepoints에 관심이 있을지 모르지만, 직접 사용한 적이 없으며 redshift에서 사용할 수 있는지 여부는 알 수 없습니다. https://www.postgresql.org/docs/current/static/sql-savepoint.html –
무시 savepoints 사용에 대한 나의 코멘트. redshift에서는 세이브 포인트 롤백을 사용할 수 없습니다. http://docs.aws.amazon.com/redshift/latest/dg/c_unsupported-postgresql-functions.html –