안녕하세요.
저희 고객사에서 아래와 같은 문의가 왔는데
제가 SQL은 완전 초보라 답변은 아직 못드리고 있습니다.
제 주위에 SQL 엔지니어분도 없어서 물어볼 곳두 없네요..ㅜㅜ
아래 내용 한번 살펴봐주시고 조언 부탁드립니다.
==========================================================
OS : MS Windows server 2003 R2
DB : MS Sql Server 2005
작업대상 DB의 MDF 파일 크기 : 78,981,632KB
현재 사용 중인 DB의 MDF 파일의 크기가 계속 증가를 하여 축소가 필요하다고 판단되어
불필요한 텍스트 내용을 삭제할 예정입니다.
(예 : 이미 지난 행사들의 일정표 등의 내용을 삭제하여 MDF 파일의 크기를 축소할 예정)
테스트 서버 작업 시 확인 결과 작업 대상의 내용 들이 연도 별로 중간 중간 생성되어져 있던 내용이라
DELETE문으로 삭제해도 MDF 파일의 크기가 바로 축소되지는 않았습니다.
테스트 서버에서 DBCC SHRINKDATABASE 또는 DBCC SHRINKFILE 명령으로 축소를 하니 거의 3일 정도가 소요되었습니다.
위의 테스트 작업 진행 후 궁금한 사항입니다.
< 질문 >
1. 라이브서버에서 불필요한 데이타 삭제 후 DBCC SHRINKDATABASE 또는 DBCC SHRINKFILE를 사용하여
DB 축소 작업 시간이 많이 걸리는 문제를 해결할 수 있는지 ( 시간 단축 가능 여부 )
2. 시간 단축이 안된다면 DB 축소 작업 시 라이브 서버의 DB 속도 저하 등 문제는 없는지
3. DB 축소 후 INDEX 관련 재생성 등의 작업이 꼭 필요한 건지 궁금합니다
Comment 1
-
minsouk
2016.05.17 20:20
1. 라이브서버에서 불필요한 데이타 삭제 후 DBCC SHRINKDATABASE 또는 DBCC SHRINKFILE를 사용하여
DB 축소 작업 시간이 많이 걸리는 문제를 해결할 수 있는지 ( 시간 단축 가능 여부 )
전체 리빌드를하고 축소를 하면 가장 빠르지만 리빌드가 오프라인이나 엔터프라이즈 만 온라인이 됩니다.
2. 시간 단축이 안된다면 DB 축소 작업 시 라이브 서버의 DB 속도 저하 등 문제는 없는지
축소 작업을 하는동안 disk i/o 가 발생하니 어느정도 느려질 수 있습니다. 그러나 읽기가 대부분이고 캐시 히트율이 99.9%인 oltp 라면 디스크를 거의 쓰지 않기 때문에 안 느려질 수 도 있겠죠?
3. DB 축소 후 INDEX 관련 재생성 등의 작업이 꼭 필요한 건지 궁금합니다
데이터베이스 축소를 위해서는 물리 데이터 파일의 이동이 필요한데요, 그럴경우 물리적 순서와 논리적 순서가 바뀔 수 있겠죠? 그럼 disk 에서 논리적 순차 읽기(index scan) 성능이 느려지겠죠? 이런 성능이 매우 중요 하다면 리빌드가 필요 하겠죠? 그런데, 데이터 1건 읽어오는 oltp 라면 할 필요 없겠죠? 네 그렇습니다.
그래서 정답은 없고 해당 데이터베이스의 특성에 따라 그 결과는 다르다 라고 말합니다.
그런데요, 고객님 데이터베이스는 너무 너무 작아서 그냥 두는게 좋을듯 합니다. 누가 무슨 말씀을 해서....이런 작업을 하려는 겁니까? 안하면 큰 일이 생기는건 아니죠? ^^;; 지난 일정을 지웠다고 했는데요, 다음 일정이 생기면 저번에 지운 공간 또 사용 합니다.