자동 업데이트 통계를 False로 설정하는 이유는 무엇입니까?


10

방금 더 광범위한 획득 프로젝트의 일환으로 약 20 개의 SQL Server 인스턴스를 상속했습니다. 성능을 평가하는 과정에 있으며 유지 관리 계획이 구현 된 방식이 마음에 들지 않습니다.

매일 담요 인덱스를 다시 작성하고 (이 문제를 처리 할 수 ​​있음) 통계를 매일 수동으로 업데이트하고 있습니다.

데이터베이스의 약 절반이 자동 업데이트 통계 = False로 설정되어 있는데, '성능 문제'를 줄이겠다는 말 외에 명확하지 않은 이유로 ...

나는 항상 이것을 True로 설정하는 모범 사례를 생각하고 노력 했으며이 설정이 True 인 경우 수동 업데이트가 필요하지 않다고 느꼈습니다. 내가 잘못?

누구 든지이 세트를 False로 설정했을 때 어떤 이점이 있는지 설명 할 수 있지만 대신 일일 수동 업데이트를 수행합니까?

일부 데이터베이스는 트랜잭션이 많고 (수백만 건의 삽입, 삭제, 하루 업데이트) 다른 데이터베이스는 트랜잭션 속도가 낮으며 일부는 모두 읽기 전용입니다. 자동 업데이트 설정이 False로 설정된 운율이나 이유는 없습니다. 추첨 인 것 같습니다.

답변:


6

당신은 맞습니다. 또한 대부분의 경우이 Auto Update statistics값을 true로 설정해야 SQL Server에서 통계를 업데이트 할시기를 결정하고 제대로 작동한다고 생각합니다. 이것이 true로 설정되면 최적화 프로그램이 더 나은 계획을 준비하는 데 도움이되는 필드의 데이터 분배에 대한 통계가 업데이트됩니다. 여기서주의해야 할 것은 표에서 데이터의 20 %가 변경 될 때 자동 업데이트 통계가 발생한다는 것입니다. 따라서 10 개의 행이 업데이트되면 100K 개의 행이있는 테이블에서 상태 업데이트가 시작된다고 생각해서는 안됩니다.

Paul Randal은 통계가 자동으로 업데이트되는시기 이해 블로그에서 더 심층적 인 분석을 수행합니다 . 이 옵션이 true로 설정되어 있으면 단점이 없습니다. 예,이 옵션이 true로 설정되면 일부 I / O 활동을 볼 수 있습니다.

블로그에서 얻을 수있는 중요한 결론은

수정 결과로 통계가 구식이 되더라도 수정이 완료된 후에는 자동으로 업데이트되지 않습니다. 다음에 쿼리 계획에서 통계를 사용하면 통계가 자동으로 업데이트됩니다.

작업을 선택하기 만하고 DML 작업이없는 데이터베이스 나 데이터베이스 만 읽은 경우에는 옵션을 false로 유지할 수 있지만 사실을 지키면 다시는 아무런 해가 없습니다. 우리는 주로 일정량의 활동이있는 데이터베이스를 봅니다.


10

이것은 너무 길기 때문에 자동 업데이트 통계를 끄고 싶을 수도있는 다른 경우와 비슷합니다. 대용량 OLTP 워크로드를 지원하는 데이터베이스와 밀리 초 단위의 엄격한 쿼리 성능 SLA를 사용했습니다. 거의 모든 쿼리는 쿼리 및 인덱스 튜닝 세부 사항에 많은주의를 기울여 사소한 것이며 일부 테이블은 상당히 컸습니다. 이 상황에서 피크 기간 동안 통계를 업데이트하는 데 큰 가치가 없었으며 자동 업데이트 통계는 SLA를 위반합니다. 결과적으로, 피크가 아닌 기간 동안 예정된 작업을 통해 유지 보수가 수행되었습니다.

다른 옵션은 데이터베이스 옵션 AUTO_UPDATE_STATISTICS과 둘 다 켜는 것입니다 AUTO_UPDATE_STATISTICS_ASYNC. 이렇게하면 통계 업데이트의 오버 헤드가 동 기적으로 발생하지 않고 오래된 통계를 기반으로 쿼리가 실행 계획을 진행할 수 있습니다. 서버가 쿼리 워크로드와 백그라운드 통계 업데이트를 수용 할 수있는 크기 인 경우 OLTP 워크로드에 특히 적합합니다.


auto_update_stats가 실제로 문제를 일으키는 예제를 생각해 보았습니다. 이것은 훌륭한 것입니다. 쿼리
SqlRyan

1
더 큰 데이터베이스 (VLDB)의 경우 auto_update 통계 옵션이 ON이고 작업 시간이 부적절한 시간에 SQL이 시작됩니다. 서버를 끄고 서버가 테이블을 결정하게하는 대신 특정 테이블 및 통계에 대한 수동 업데이트에 대해보다 전략적으로 전환해야했습니다. 이로 인해 내 시스템을보다 예측 가능하게 만들었지 만 관리 비용이 높지만 (의심 할 여지가 없지만) 업데이트 작업이 방해받지 않도록해야했습니다. 일반적인 인덱스 / 통계 관리 기능이있는 시스템을 "담요"화하면 그대로 두십시오. 그렇지 않으면 상황에 따라 자세한 전략이 필요할 수 있습니다.
SnapJag

6

일반적으로 자동 업데이트 통계를 사용하는 것이 좋습니다. 그러나 다른 설정과 마찬가지로 설정을 켜거나 끌 수있는 이유가 있습니다.

하나는 일부 테이블에 이탈이 많고 쿼리가 정확한 통계에 크게 민감하지 않다는 것입니다. 많은 데이터를 변경하고 있지만 데이터를 읽지 않거나 읽지 않는 ETL 또는 기타 대량 시나리오를 생각해보십시오. 자동 통계 업데이트가 시작되고 많은 I / O가 더 이상 사용되지 않는 더 정확한 통계를 제공하게 할 필요는 없습니다.

하루 종일 데이터를 여러 번 업데이트하는 시나리오가있을 수 있지만 매번 업데이트 할 때마다 통계를 업데이트하지 않아도됩니다. (데이터가 하루 중 특정 시간에만 쿼리된다고 말하십시오. 어쨌든 데이터가 쿼리되지 않을 때 통계를 여러 번 업데이트 할 필요가 없습니다.)

또는 쓰기 작업량이 많은 작업 일 수도 있습니다. 또는 읽기는 일반적으로 전체 스캔이므로 통계가별로 중요하지 않습니다.

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