17Million 레코드가있는 테이블에 think-sphinx delta 열을 추가해야합니다. 그런 다음 해당 필드를 인덱싱해야합니다.다운 타임없이 열 추가
DB는 포스트그레스입니다.이 열을 추가하면 노출 시간이 1 시간 정도 줄어들어 테이블 전체를 잠글 수 없도록 테이블을 변경할 수있는 제안/아이디어가 생깁니다.
17Million 레코드가있는 테이블에 think-sphinx delta 열을 추가해야합니다. 그런 다음 해당 필드를 인덱싱해야합니다.다운 타임없이 열 추가
DB는 포스트그레스입니다.이 열을 추가하면 노출 시간이 1 시간 정도 줄어들어 테이블 전체를 잠글 수 없도록 테이블을 변경할 수있는 제안/아이디어가 생깁니다.
긴 테이블 잠금을 피할 수있는 유일한 해결책은 원하는 구조로 새 테이블을 만드는 것입니다. 그런 다음 INSERT INTO ... SELECT
을 사용하여 해당 테이블을 채우고 새 인덱스를 포함하여 모든 인덱스를 다시 만든 다음 새 테이블의 이름을 이전 테이블로 바꿉니다.
트랜잭션의 테이블 이름을 바꾸면 클라이언트가이를 알 수 없도록 할 수 있습니다 (단, RENAME은 배타적 잠금을 얻을 때까지 기다릴 것으로 생각되기 때문에 다소 시간이 걸릴 수 있습니다).
해당 테이블을 참조하는 외래 키를 다시 만들어야합니다 (그와 관련된 잠금 수준에 대한 확신이 없음).
물론 테이블의 전체 복사본을 유지할 수있는 충분한 공간이있는 경우에만 가능합니다.
그리고 이런 일이 발생하는 동안 아무도 원래 테이블을 업데이트하지 않으면 – xordon
왜 업데이트하는 데 시간이 걸릴 것이라고 생각하십니까? 방금 3,400,000 행의 생산 테이블에 대한 테스트를 수행했습니다. 새 열을 추가하는 데 소요 된 시간은 4.366ms, 색인 생성 시간은 8725.777ms였습니다. – strkol