Otomatik Güncelleme İstatistiklerini neden Yanlış olarak ayarladınız?


10

Daha geniş bir edinme projesinin parçası olarak SQL Server'ın yaklaşık 20 örneğini miras aldım. Performansı değerlendirme sürecindeyim ve bakım planlarının uygulanmasını sevmiyorum.

Günlük battaniye endeksi yeniden inşa görüyorum (Ben bununla başa çıkabilirim) ve aynı zamanda günlük manuel güncelleme istatistikleri.

Veritabanlarının yaklaşık yarısı Otomatik Güncelleme İstatistikleri = Yanlış olarak ayarlandı, çünkü bana 'Performans Sorunlarını' azaltmak olduğu söylenenden başka net olmayan nedenler ...

Bunu True olarak ayarlamak için her zaman en iyi uygulamayı düşündüm ve çalıştım ve bu ayar Doğru ise Manuel Güncelleme'nin gerekli olmadığını hissettim. Yanlış mıyım?

Herkes bu seti False olarak, ancak bunun yerine günlük manuel güncelleme yapmanın ne fayda sağlayacağını açıklayabilir mi?

Bazı veritabanlarının son derece işlemsel olduğunu (milyonlarca Ekleme, Silme, Günlük Güncelleme) Diğerlerinin işlem oranları açısından düşük olduğunu ve bazılarının salt okunur olduğunu belirtmeliyim. Otomatik Güncelleme ayarının Yanlış olarak ayarlanmış olmasına rağmen bir tekerleme veya neden yoktur. Bir piyango gibi görünüyor.

Yanıtlar:


6

Doğru, çoğu durumda Auto Update statisticsdoğru olarak ayarlanması gerektiğine inanıyorum, SQL Server'ın istatistikleri ne zaman güncelleyeceğine karar vermesine ve bana iyi bir iş yaptığına inanmasına izin vermeliyiz. Bu doğru olarak ayarlandığında, alandaki verilerin dağılımı hakkındaki istatistiklerin güncellendiğinden emin olur ve bu da sonuç olarak optimize edicinin daha iyi plan hazırlamasına yardımcı olur. Burada dikkat edilmesi gereken önemli şey, tablodaki verilerin% 20'si değiştiğinde Otomatik güncelleme istatistikleri tetiklenir. Bu nedenle, 100 satır içeren bir tabloda 10 satır güncellenirse durum güncellemesinin tetikleneceğini hissetmemelisiniz.

Daha derin bir analiz, İstatistiklerin Otomatik Olarak Ne Zaman Güncelleneceğini Anlama blogunda Paul Randal tarafından yapılır . Bu seçenek true olarak ayarlanırsa herhangi bir dezavantaj görmedim. Evet, bu seçenek true olarak ayarlandığında bazı G / Ç etkinliği görebilirsiniz.

Blogdan çıkarabileceğiniz önemli sonuç

Bir istatistik, bir değişikliğin sonucu olarak modası geçmiş olsa bile, değişiklik tamamlandıktan sonra otomatik olarak güncellenmez. İstatistik, bir sorgu planının bir sonraki kullanımında otomatik olarak güncellenir.

Yalnızca işlemi seçtiğiniz yalnızca veritabanlarını veya veritabanlarını okuduğunuz ve DML işlemi olmadığında, bu durumda seçeneği false olarak tutabilirsiniz, ancak yine de doğru tutarsanız hiçbir zarar gelmez. Çoğunlukla belirli miktarda etkinlik içeren bir veritabanı görüyoruz.


10

Bu bir yorum için çok uzun, bu yüzden otomatik güncelleme istatistiklerini kapatmak isteyebileceğiniz başka bir durumla karşılaşacağım. Milisaniyeler içinde yüksek hacimli OLTP iş yüklerini ve sıkı bir sorgu performansı SLA'sını destekleyen veritabanlarıyla çalıştım. Neredeyse tüm sorgular sorgulama ve dizin ayarlama detaylara çok dikkat ile önemsiz ve bazı tablolar oldukça büyük. Bu durumda yoğun dönemlerde istatistiklerin güncellenmesinde çok fazla değer yoktu ve otomatik güncelleme istatistikleri SLA'yı ihlal edecektir. Sonuç olarak, yoğun olmayan dönemlerde planlanmış bir iş aracılığıyla bakım yapılmıştır.

Başka bir seçenek, hem açmaktır AUTO_UPDATE_STATISTICSve AUTO_UPDATE_STATISTICS_ASYNCveritabanı seçenekleri. Bu, sorguların, güncelleştirme istatistiklerinin eşzamanlı olarak ek yükü yerine eski istatistiklere dayalı yürütme planlarına devam etmesine olanak tanır. Bu, sunucu sorgu iş yükünü artı arka plan istatistikleri güncellemesini alacak şekilde boyutlandırıldığı sürece özellikle bir OLTP iş yükü için uygundur.


Ben auto_update_stats aslında sorunlara neden olacağını bir örnek düşünmeye çalışıyordum ve bu harika bir - Ben mükemmel bir çözüm için de iki kez (eğer yapabilirim), ben eşlik edecek normal istatistik gecikme kaçınarak sorgu
SqlRyan

1
Daha büyük veritabanları (VLDB) ile durumum oldu, auto_update istatistikleri seçeneği AÇIK ve SQL çalışma gününün uygunsuz zamanlarında başlayacaktı. Kapattım ve sunucunun tabloları ne zaman belirlemesine izin vermek yerine belirli tablolara ve istatistiklere ilişkin manuel güncellemeler hakkında daha stratejik olmalıydım. Bu, sistemimi daha öngörülebilir kıldı, ancak daha yüksek bir yönetim maliyetiyle (şüphesiz), ancak güncelleme görevlerine izin vermemek için gerçekleşmesi gerekiyordu. Tipik dizin / istatistik yönetimi ile sistemi "örtmek" sizin işinizse, açık bırakın. Aksi takdirde, bazı durumlar ayrıntılı strateji gerektirebilir.
SnapJag

6

Genellikle otomatik güncelleme istatistiklerine sahip olmanın faydalı olduğunu söyleyebilirim. Ancak herhangi bir ayar gibi, ayarı açıp kapamanızın nedenleri vardır.

Birincisi, bazı tabloların çok fazla karmaşası olduğu ve belki de sorguların doğru istatistiklere çok duyarlı olmadığıdır. Çok fazla veri değiştirdiğiniz, ancak oradan okumadığınız veya fazla okumadığınız ETL'yi veya diğer toplu senaryoları düşünün. Otomatik istatistik güncellemelerinin devreye girmesinin ve hiç kullanılmayacak daha doğru istatistikler sağlamak için bir grup G / Ç'ye neden olmanın pek bir anlamı yoktur.

Ayrıca, verileri gün boyunca birden çok kez güncellediğiniz, ancak her güncellemeden sonra istatistikleri güncellemek istemediğiniz senaryolarınız olabilir. (Verilerin yalnızca günün belirli saatlerinde sorgulandığını varsayalım; veriler yine de sorgulanmayacaksa istatistikleri birden çok kez güncellemeye gerek yoktur.)

Ya da sadece ağır yazma iş yükünüz vardır. Veya okumalar genellikle istatistiklerin çok önemli olmadığı tam taramalardır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.