SQL Server'da istatistiksel bakım işlevleri (autostats)

Makale çevirileri Makale çevirileri
Makale numarası: 195565 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Yeni sunulan istatistiksel bakım işlevleri (AutoStat, aşağıdaki eylemlerden birini gerçekleştirerek, üretim sistemindeki istenmeyen bir yük verebilir:
  • Istatistiksel güncelleştirmeleri yoğun üretim dönemlerde başlatılıyor.

    -VEYA-
  • Belirli bir noktada bir UPDATE STATISTICS işlemlerin aşırı derecede yüksek bir sayı, süre başlatılıyor.
Bu makalenin amacı, koşullar altında oluşturulan autostats ve veritabanındaki tablolara yönelik çalışacak bir UPDATE STATISTICS görmek bekleyebilir ayrıntı sağlamaktır.

SQL Server 2000'de autostats hakkında daha fazla bilgi için bkz: "İstatistikleri kullanılan sorgu en iyi duruma getiricisi Microsoft SQL Server 2000 tarafından" aşağıdaki MSDN Web sitesinde:
http://msdn2.microsoft.com/en-us/library/aa902688(SQL.80).aspx


Not Microsoft SQL Server 2005 kullanıyorsanız, istatistikleri sorgu en iyi duruma getiricisi SQL Server 2005'te tarafından nasıl kullanıldığı hakkında bilgi için aşağıdaki Microsoft teknik incelemeye bakın:
http://technet.microsoft.com/en-us/library/cc966419.aspx

Daha fazla bilgi

Genel bilgiler

SQL Server, istatistiksel bilgileri içeren tablolar ve dizinler üzerinde sağlanan son derece önemli bir maliyet temelinde iyileştirici kullanımı sağlar. Belirli bir sorgu için en iyi yürütme planını belirlemek için doğru ve güncel istatistiksel bilgiler olmadan, SQL Server varolup.

SQL Server'ın maliyet temelinde karar dahil yapma iyileştirici yardımcı'de, her tabloda saklanan istatistikleri:
  • Tablodaki satır sayısını belirtir.
  • Tablo tarafından kullanılan sayfa sayısı.
  • Tablonun anahtarlarına, istatistikler için son güncelleştirme sonrasında yapılan değişiklikler sayısı.
Ek bilgi için dizinleri (her dizin için) de dahil olmak üzere, saklanır:
  • Ilk sütunda bir eş-yükseklik çubuk.
  • Tüm sütun öneklere üzerinde yoğunluğunu.
  • Ortalama anahtar uzunluğu.
Yeni bir dizin oluşturulan her dizin istatistikleri otomatik olarak oluşturulur. Buna ek olarak, şimdi oluşturmak ve diğer sütunlar hakkında istatistik tutmak olanaklıdır.

Olabildiğince olarak güncel bir biçimde istatistik bilgileri sağlamak için <a0></a0>, AutoStat, SQL Server, SQL Server'ın, tablo değişiklikleri izleme ile belirli bir değişiklik eşiğine ulaşıldı, otomatik olarak bir tablo için istatistikleri güncelleştirme işlemini kapasitededir tanıtır. Ayrıca, SQL Server otomatik-oluştur-otomatik olarak doğru bir belirli sorgunun en iyi duruma getirilmesi için gerekli tüm istatistikler oluşturmak sunucu neden istatistiklerini tanıtır.

AutoStat nesli olan olduğunu belirleme

"Değişiklik threshold" ulaşıldı, yukarıda belirtildiği gibi AutoStat belirli bir tablo ile ilgili istatistikleri otomatik olarak güncelleştirecektir. Çalışan bir sysindexes.rowmodctr sütun tutar toplam tüm değişiklikler tabloya, zaman içinde sorgu işlemcinin karar işlem yapmayı olumsuz etkileyebilir. Bu sayaç, aşağıdaki olaylardan biri her oluştuğunda güncelleştirilir:
  • Bir tek bir satır ekleme yapıldı.
  • Bir tek satır silme işlemi yapılır.
  • Dizin oluşturulmuş bir sütun için bir güncelleştirme yapılır.
Not: TRUNCATE TABLE rowmodctr güncelleştirmez.

Tablo istatistiklerinin güncelleştirildikten sonra rowmodctr değeri 0'a ayarlanır ve tablonun istatistikleri şema sürümü güncelleştirildi.

Ayrıca, bir saklı yordamın yürütme planı önbellekten alınır ve bu planı istatistikleri için önemli durumlarda, geçerli sürüme istatistikleri şema sürümü Karşılaştırılacak. Yeni istatistikler varsa, saklı yordam için plan derlenmiş çekirdekler.

Otomatik güncelleştirme istatistikleri temel algoritma şudur:
  • Bir tablo için önem küçüktür altıdır ve tempdb veritabanında tablo varsa, her tablonun altı değişiklikler güncelleştirmeyle otomatik.
  • Bir tablo için önem 6'dan büyük, ancak daha az ise, durum, eşit veya 500, 500 her değişiklik güncelleştirme.
  • 500 ', Büyük bir tablo için önem istatistikleri güncelleştirirseniz, (500 + tablo yüzde 20'si) değişiklikleri oluşmadı.
  • Tablo değişkenleri için önem değişiklikleri. tetikler otomatik güncelleştirme istatistikleri.
Not: Bu strictest anlamlı SQL Server önem olarak tablodaki satır sayısını sayar.

Not: önem ek olarak, yüklemi, selectivity AutoStats oluşturma da etkiler. Yani, bu istatistikleri önem > 500, güncelleştirilmiş afer 500 her değişiklik, önem < 500 veya değişikliklerin her 20 % olmayabilir. <a1>Faktör</a1> (değer aralığı 1 4, <a2>1</a2> ve <a4>4 dahil) kadar BIR ölçeğe göre selectivity oluşturulur ve bu faktörü algoritması ' elde gibi değişiklik sayısını ve bir ürün AutoStats oluşturmak için gereken değişiklikler gerçek sayı olabilir.

Yukarıdaki algoritması tablo biçiminde summarised:
_________________________________________________________________________________
 Table Type | Empty Condition | Threshold When Empty |Threshold When Not Empty 
_________________________________________________________________________________
 Permanent  | < 500 rows      | # of Changes >= 500  | # of Changes >= 500 + (20% of Cardinality)
___________________________________________________________________________
 Temporary  | < 6 rows        | # of Changes >= 6    | # of Changes >= 500 + (20% of Cardinality)
___________________________________________________________________________
Table
Variables   | Change in cardinality does not affect AutoStats generation.
___________________________________________________________________________
bu kavramı göstermek amacıyla iki örnek aşağıda verilmiştir:

Örnek 1

23 Satır içeriyor ve iki dizini olan pubs veritabanındaki yazarlar tablosunu kullanabilirsiniz. Benzersiz kümelenmiş dizin, UPKCL_auidind, bir sütunda, au_id, dizine alınır ve bir bileşik kümelenmemiş dizin aunmind, au_lname ve au_fname sütunlarda oluşturuldu. Bu tablo, 500'den daha az satır içerdiğinden, tablo veri 500 değişiklikler oluşmuş sonra AutoStat başlayacaktır. Değişiklikleri 500 olabilir veya daha fazla ekler, siler, dizinlenmiş bir sütuna au_lname veya tüm diğer birleşimlere değiştirir.

Her güncelleştirme sırasında artan sysindexes.rowmodctr değeri izleyerek UPDATE STATISTICS çift başlatılacağına, bu nedenle, tahmin edebilir. Ulaştığında veya 500 aşıyor başlatılacak bir UPDATE STATISTICS bekleyebilirsiniz.

Örnek 2

Ikinci bir tablo, 1.000 bir önem düzeyi olan t2 göz önünde bulundurun. 500 Satır'dan büyük olan tablolar için SQL Server olacak UPDATE STATISTICS olduğunda (500 + yüzde 20'si) bir değişiklik yapılmamıştır. Yaklaşık 700 değişiklikler tabloya yapıldıktan sonra başlatmak AutoStat görmeyi beklediğiniz şekilde matematik yaparsanız, 1.000 yüzde 20'si 200,'dür.

Autostats belirleme otomatikleştirme

AutoStat çalıştırılacak olarak belirlenmesi otomatikleştirmek için <a0></a0>, sysindexes tablo yoklar ve tabloda değişiklikler başlangıç noktası erişmeye çalıştığınız zamanları belirlemek. Bunu yapmak için temel bir algoritma şudur:
   if (sysindexes.rows > 500)
      if (sysindexes.rows * 0.20 >= sysindexes.rowmodctr && production
      hours) //500 change leeway
         begin
            disable autostats
            log autostats disable
         end
      else
         begin
            stats ok
         end
   else
      if (sysindexes.rowmodctr >= 425) //75 change leeway
         begin
            disable autostats
            log autostats disable
         end
				

Daha sonra aşağıdakileri yapmak için bir iş zamanlamak:
  • Kendisi için bunları gün içinde devre dışı bırakmak için zorunlu tüm tablolara yönelik bir UPDATE STATISTICS çalıştırın.

    -ve-
  • UPDATE STATISTICS çalıştırdığınızda her tablonun değişiklik sayacı 0 değerine sıfırlandı çünkü AutoStat, yeniden etkinleştirin.

UPDATE STATISTICS bir tabloya karşı çalıştırılan olup olmadığını denetleme

AutoStat için Problematic, kanıtlanmış olduğunda en belirgin bu sorunun, böylece Veritabanı yöneticileri, UPDATE STATISTICS sırasında daha az zorlayıcı bir defa planlamak boş bırakarak, otomatik istatistik üretimi devre dışı bırakmak için çözümüdür. Bu da bir UPDATE STATISTICS deyimi veya saklanan sp_autostats yordamı kullanarak yapabilirsiniz. UPDATE STATISTICS deyimi için sözdizimi aşağıdaki gibidir:
   UPDATE STATISTICS <table>...with NORECOMPUTE
				

Sp_autostats saklı yordam için sözdizimi aşağıdaki gibidir:
sp_autostats <table_name>, <stats_flag>, <index_name>
Burada <stats_flag> "on" veya "off" dir.

UPDATE STATISTICS veya bir veritabanı her düzeydeki CREATE STATISTICS otomatik olarak geçtiği devre dışı bırakmak için sp_dboption da kullanabilirsiniz:
'otomatik güncelleştirme istatistikleri' <dbname>, sp_dboption < üzerinde | kapalı >

-VEYA-

<dbname>, sp_dboption 'otomatik oluştur istatistikleri' < üzerinde | kapalı >

Aynı anda bir UPDATE STATISTICS işlem sayısını denetleme

Şu anda AutoStat belirli tablolar için devre dışı bırakma yer aynı anda çalışan otomatik UPDATE STATISTICS ifadeleri sayısını yapılandırmak kilitlenemeyeceğini (DCR 51539 bu dosyalanmış). Sunucu ancak eşzamanlı bir UPDATE STATISTICS işlemler için işlemci başına dört sayısını.

Autostats ne çalışır belirleme

Derlenmiş istatistikler bağımlı bir saklı yordamın AutoStat sonucunda çekirdekler bildirmesine 205 izleme bayrağı'nı kullanabilirsiniz. Bu izleme bayrağı aşağıdaki iletileri hata günlüğe yazacaktır:
1998-10-15 11:10:51.98 spid9 recompile verilen: ProcName: sp_helpindex
LineNo: 75 StmtNo: 29
Izleme bayrağı 205 etkinleştirildiğinde, aşağıdaki iletiyi de istatistikleri güncelleştirildiği 8721 AutoStat iletiden ayraç. RowModCnt değeri, 0'dan büyük olması, ayraç açma iletisi ayırt. Köşeli sağ ayraç sonra UPDATE STATISTICS, 0 RowModCnt değeri olacaktır:
1998-10-15 11:38:43.68 spid8 Schema Değiştir: Tbl Dbid: 7 Objid:
133575514 RowModCnt: 60500 RowModLimit: 60499
Bu ileti için "RowModCnt" değişiklikler tabloya toplam sayısıdır. Eşik "RowModLimit" ise, tablo için bir UPDATE STATISTICS deyimi yürütme aşıldığında, sonuçlanır.

AutoStat gerçekleştirildiğinde, bilgileri hata günlüğünün dökümünü 8721, izleme bayrağı'nı etkinleştirmek olasıdır. Örnek görmeyi beklediğiniz bir ileti türü şudur:
1998-10-14 16:22:13.21 spid13 AUTOSTATS: Tbl GÜNCELLEŞTIRILDI: [yazarlar]
Satır: 23 kipi: 501 bağlı: 500 süre: 47ms UpdCount: 2
Bu ileti için "Kipi" değişiklikler tabloya toplam sayısıdır. "Süre" UPDATE STATISTICS deyimi tamamlamak için gereken süre miktarını olan değişiklik eşik değeri "Bağımlı" olan ve "UpdCount" güncelleştirilmiş istatistikleri sayısıdır.

UPDATE STATISTICS deyimi çalıştırdığınızda, belirlemek için SQL Server Profiler'ı da kullanabilirsiniz. Bunu yapmak için aşağıdaki adımları gerçekleştirin:
  1. Profiler menüsünden, Araçlar ' ı ve sonra Seçenekler ' i tıklatın.
  2. Genel sekmesinde olayları için gidin ve sonra Tüm olay sınıflarını seçin.
  3. Yeni bir izleme tanımlamak ve çeşitliolayları altında seçin, sonra da Otomatik Güncelleştirmeler istatistiği sub-event seçin.
Not: birçok istatistik AutoStat güncelleştirilmekte, iletileri çok sayıda hata günlüğüne yazılabilir. Bu izleme bayraklarıyla herhangi bir üretim veya başka kritik sunucu kullanmadan önce iyice deneyin.

Şema kilitleri

SQL Server'ı iki tablo istatistiklerini güncelleştirdiğinde her ikisi de alınır, şema kilitler kullanır:
   Sch-S: Schema Stability Lock
   ----------------------------
   This lock ensures that a schema element, such as a table or index, will
   not be dropped while any session holds a schema stability lock on the
   schema element.

   Sch-M-UPD-STATS: Schema Modification Lock
   -----------------------------------------
   This is a non-blocking lock that is used by the system to ensure that
   only one automatic UPDATE STATISTICS process is run against a table at
   any given point in time. The sp_lock stored procedure will report this
   lock has having a type = TAB, resouce = UPD-STATS and mode = SCH-M.
				
sp_lock çalışan veya syslockinfo tablosundan seçerek bu kilitlerin görüntüleyebilirsiniz.

Özellikler

Makale numarası: 195565 - Last Review: 2 Kasım 2007 Cuma - Gözden geçirme: 7.6
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Workgroup Edition
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
  • Microsoft SQL Server 2000 Enterprise Edition 64-bit
Anahtar Kelimeler: 
kbmt kbinfo KB195565 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:195565

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com