SQL Server 자동 축소 기능을 켜도 안전합니까?


44

데이터베이스에 대해 활성화 할 수있는 많은 SQL Server 옵션이 있으며 가장 잘못 이해되는 옵션 중 하나는 자동 축소입니다. 안전 해요? 그렇지 않다면 왜 안됩니까?

답변:


70

(원래 정기적으로 질문했지만 올바른 방법을 찾았습니다-감사합니다 BrentO)

아뇨.

나는 지금 ServerFault 에서이 문제를 여러 번 보았으며 좋은 조언을 통해 많은 사람들에게 다가 가고 싶습니다. 사람들이 이런 식으로 일을한다면 눈물을 흘리면 기꺼이 제거하겠습니다.

자동 축소는 활성화 된 매우 일반적인 데이터베이스 설정입니다. 데이터베이스에서 여분의 공간을 제거하는 것이 좋습니다. 자동 축소가 긍정적으로 악하다는 것을 모르는 많은 '무의식적 DBA'가 있습니다 (TFS, SharePoint, BizTalk 또는 기존의 오래된 SQL Server를 생각하십시오).

Microsoft에서 SQL Server 저장소 엔진을 소유하고 자동 축소 기능을 제거하려고했지만 이전 버전과의 호환성을 유지해야했습니다.

자동 수축이 왜 그렇게 나쁩니 까?

데이터베이스가 다시 커질 것이므로 왜 축소해야합니까?

  1. Shrink-grow-shrink-grow는 파일 시스템 수준 조각화를 유발하고 많은 리소스를 사용합니다.
  2. 시작되는 시점을 제어 할 수 없습니다 (일반적인 경우에도)
  3. 많은 리소스를 사용합니다. 데이터베이스에서 페이지를 이동하면 CPU와 많은 IO가 필요하며 많은 트랜잭션 로그가 생성됩니다.
  4. 실제 키커는 다음과 같습니다. 데이터 파일 축소 (자동 또는 축소 여부)로 인해 대규모 인덱스 조각화가 발생하여 성능이 저하됩니다.

나는 블로그 포스트를 잠시 동안 수행했는데, 여기에는 SQL 스크립트의 원인이되는 문제를 보여주고 좀 더 자세히 설명하는 예제 스크립트가 있습니다. 자동 축소를 참조하십시오 – 끄십시오! (내 블로그에는 광고 나 정크가 없습니다). 때때로 유용하고 필요한 로그 파일 축소와 혼동하지 마십시오.

데이터베이스 설정을보고 자동 축소 기능을 해제하십시오. 정확히 같은 이유로 유지 관리 계획도 축소해서는 안됩니다. 동료들에게 말씀을 전하십시오.

편집 : 두 번째 대답을 상기 시켜서 이것을 추가해야합니다. 축소 작업을 중단하면 손상을 일으킬 수 있다는 일반적인 오해가 있습니다. 아닙니다. 예전에는 SQL Server에서 축소 코드를 소유했습니다. 중단 된 경우 현재 페이지 이동을 롤백합니다.

도움이 되었기를 바랍니다!


축소 직후에 다시 색인을 생성 할 수있는 방법이 있습니까?
랜스 로버츠

4
파일을 다시 늘리기 때문에 (인덱스를 삭제하기 전에 새 인덱스를 작성) 다시 인덱스를 작성하지는 않지만 (이전 DBCC INDEXDEFRAG 또는 새로운 ALTER INDEX ... REORGANIZE를 통해) 재구성을 수행하면 조각화가 발생하지만 더 IO, CPU, 로그 ...
폴 랜달

자동 축소를 제거한 후 srrver의 메모리 사용량이 더 높다는 것을 알았습니다.
user193655

4

물론 바울이 옳습니다.

모든 DB 및 해당 자동 축소 설정을 참조하십시오. 데이터베이스가 많으면 몰래 들어갑니다.

sp_msforeachdb  @command1 = 'Select ''[?]'',DATABASEPROPERTYEX(''?'',''IsAutoShrink'')'

이것은 dmv의 어딘가에 있습니다 .... 궁금합니다.


2
하려면 sys.databases는 필드 is_auto_shrink (및 is_auto 닫기, is_auto_update_stats 등)이
폴 랜달

great im googling :
autoshrink로 구성된

2

"안전하지 않은"것은 아닙니다. 아무것도 손상시키지 않습니다.

그러나 요청이 오래 걸리기 전에 데이터베이스가 중단되고 값 비싼 재배치 연습을 시작하기로 결정할 수있는 프로덕션 환경에는 권장되지 않습니다. 백업과 같은 다른 유지 관리 작업과 함께 일정 축소 작업을 사용하는 것이 훨씬 좋습니다 (실제로 백업 후에는 트랜잭션 로그에서 더 많이 발생 함). 또는 확장 문제가없는 한 전혀 축소되지 않습니다. 사용하지 않은 할당 된 공간이 특정 비율이나 고정 크기를 초과 할 때 알 수 있도록 항상 모니터를 설정할 수 있습니다.

IIRC이 옵션은 Express를 제외한 모든 MSSQL 버전의 모든 데이터베이스에 대해 기본적으로 해제되어 있습니다.


2
축소 일정을 계획해서는 안됩니다. 문제의 원인 때문에 실제로는 드문 작업이어야합니다. 백업 후 축소를 수행하는 것에 대한 귀하의 의견을 이해하지 못합니다. 축소 작업으로 생성 된 로그 레코드는 언제 수행하는지 또는 어떤 다른 백업을 수행하든 관계없이 다음 트랜잭션 로그 백업에서 선택됩니다. 감사합니다
Paul Randal 2016 년

1

TechNet에는 SQL 유지 관리에 대해 자세히 설명하는 백서가 있습니다.

http://technet.microsoft.com/en-us/library/cc262731.aspx


불행히도이 백서는 SharePoint 설치만을 대상으로하며 실제로 약간의 오류가 있습니다. 백서의 저자 인 Bill Baer와 함께 현재 SharePoint MCM 수업을 가르치는 데 시간을 보냈습니다.
Paul Randal

3
데이터베이스 유지 관리에 대한 일반적인 개요는 TechNet Magazine 기사 실효 데이터베이스 유지 관리 ( technet.microsoft.com/en-us/magazine/cc671165.aspx)에 있습니다.
Paul Randal

1

Autogrow와 Autoshrink가 모두 활성화 된 SQL Server를 보았습니다. 이 (상대적으로 강력한) 서버는 하루 종일 데이터베이스 파일이 줄어들고 커지기 때문에 매우 느 렸습니다. 자동 축소가 유용 할 수 있지만 다음 두 가지를 권장합니다.

  1. 기본적으로 자동 축소 기능을 해제하십시오.
  2. 서버 구성을 문서화하여 자동 증가 및 자동 축소가 활성화 된 위치와 활성화되지 않은 위치를 알 수 있습니다.

1

데이터베이스를 축소 한 것은 디스크 공간이 부족한 테스트 서버에서 사본을 새로 고치는 것뿐이었습니다 (운영 데이터베이스를 보유하기에 충분하지 않음).

프로덕션 데이터베이스의 파일에는 여유 공간이 충분하지만 불행히도 백업 한 파일과 동일한 파일 크기로 데이터베이스를 복원해야합니다. 따라서 백업하기 전에 생산을 축소 할 수밖에 없었습니다. (축소에 오랜 시간이 걸리고 많은 리소스가 소비되었으며 그에 따른 트랜잭션 로그 증가에 문제가있었습니다.)


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.