Redshift 클러스터에 10 억 개의 행이있는 테이블이 있습니다. 일부 필터를 기반으로 일부 열 값을 업데이트하려고하는 작업이 있습니다. 이 테이블에서 무엇이든 업데이트하는 것은 매우 느립니다. 다음은 그 예이다 : 초 미만의Redshift UPDATE가 금지되어 있습니다.
SELECT col1, col2, col3
FROM SOMETABLE
WHERE col1 = 'a value of col1'
AND col2 = 12;
위의 쿼리 반환, 내가 col1
및 col2
에 sortkeys을 가지고 있기 때문에. 이 기준을 충족시키는 행은 하나뿐이므로 결과 집합은 단 하나의 행입니다. 그러나 다음을 실행하는 경우 :
UPDATE SOMETABLE
SET col3 = 20
WHERE col1 = 'a value of col1'
AND col2 = 12;
이 쿼리에는 알 수없는 시간이 걸립니다 (20 분 후에 중지했습니다). 다시 말하지만, 한 행의 한 열 값을 업데이트해야합니다.
여기에도 설명서를 따르려고했습니다 : http://docs.aws.amazon.com/redshift/latest/dg/merge-specify-a-column-list.html, 메인 테이블을 업데이트하기 위해 임시 스테이징 테이블을 만드는 방법에 대해 이야기했지만 동일한 결과를 얻었습니다.
여기에 무슨 일이 벌어지고 있는지 궁금하십니까?
해당 행에 열린 트랜잭션이 있는지 확인하십시오. SELECT * FROM pg_stat_activity를 실행 해보십시오. 업데이트가 대기 중인지 확인하십시오. – Kuberchaun
@Bob - 방금 확인한대로 대기중인 것으로 보이지 않습니다. – user37760
테이블과 인덱스 정의에 당신이 사용하는 포스트그레스의 버전과 실행하는 명령의 출력을 제공해야합니다. 테이블에 방아쇠가있어? – Kuberchaun