testTable 테이블에 A(INT)라는 컬럼이 있고요. 기본키이자 클러스트인덱스 입니다..
해당 테이블이 조회시 KeyLook시 비용이 많이 발생해서 B(INT), 날짜, A(INT) 로 키를 바꾸었습니다..
(오로지 B 컬럼만으로 조회를 함...)
testTable1을 만들어서 데이터를 넣고 테이블 이름을 바꾸는 형식으로 작업을 했습니다.
작업시에
testTable1 <- testTable 로 인서트할때 대략 3시간 정도가 걸렸습니다. 데이터는 약 2억 5천만건 가량입니다..
아침마다 testTable로 약 30만건 정도의 데이터가 입력이 되는데 키를 바꾸기전에는 약 2분, 길어도 5분정도에 끝나는 작업이었는데..
키를 바꾼후에는 거의 50분 정도로 늘어나 버렸네요..
A 컬럼은 다른 인서트 대상테이블의 기본키(클러스터인덱스)이구요..
이렇게 시간이 걸리는 이유에 대해서 어떤 부분을 확인해 봐야 할까요 ㅠㅠ
지금 의심이 가는거는 기존에 A컬럼이 잡혀있을때는 뒤에 순차적으로 들어가서 빨리 끝났는데.
B컬럼은 막 주구난방으로 맘대로 데이터가 있거든요..
위에 작업시에 2억5천만건이 3시간만에 끝났는데 30만건이 50분이나 걸리는것도 좀 이해가 안가고요...
mdf를 분리하여 ndf에 위 테이블이 있는데 사이즈는 늘려 놓은 상태입니다..
페이지 채움은 0. 기본값을로 설정이 되어 있는데 이것과 관련이 있는지...
도움의 손길을 주세요 ㅠㅜ
Comment 1
-
맨즈밤
2013.12.19 14:26
페이지 채움이 관련 있죠.. 그렇게 중간에 들어오는 데이터로 인한 페이지분할을 줄여주는 역활을 하니까요.
테스트디비에 테이블하나 만들고 페이지채움 비율을 클러스터인덱스 뿐만 아니라 모든 넌클러스인덱스도 80%정도로 테스트해
보셨음 합니다. 2억5천만건중 30만건이면 0.12%니 한곳에 집중입력이 되지않는한 분할도 안일어날듯 합니다.
30만건 입력전에 인덱스리빌드를 통해 모든페이지가 80% 채움으로 셋팅하시구요.