SQL Server'de yalnızca istatistik veritabanı oluşturmak için istatistik betiği oluşturma

Bu makalede, SQL Server'de yalnızca istatistik veritabanı oluşturmak için veritabanı meta verilerini kullanarak istatistik betiği oluşturmayı öğreneceksiniz.

Orijinal ürün sürümü: SQL Server 2014, SQL Server 2012, SQL Server 2008

Özgün KB numarası: 914288

Giriş

DBCC CLONEDATABASE, performans sorunlarını araştırmak için veritabanının yalnızca şema kopyası oluşturmak için tercih edilen yöntemdir. Bu makaledeki yordamı yalnızca kullanamadığınızda kullanın DBCC CLONEDATABASE.

Microsoft SQL Server'daki sorgu iyileştiricisi, en uygun sorgu planını belirlemek için aşağıdaki bilgi türlerini kullanır:

  • veritabanı meta verileri
  • donanım ortamı
  • veritabanı oturum durumu

Genellikle, bir test sisteminde sorgu iyileştiricisinin davranışını yeniden oluşturmak için tüm bu tür bilgilerin benzetimini yapmanız gerekir.

Microsoft Müşteri Destek Hizmetleri, sorgu iyileştirici sorununu araştırmak için veritabanı meta verilerinin betiğini oluşturmanızı isteyebilir. Bu makalede istatistik betiğini oluşturma adımları ve sorgu iyileştiricisinin bilgileri nasıl kullandığı açıklanır.

Not

Bu veriler içinde kaydedilen anahtarlar PII bilgilerini içerebilir. Örneğin, tablonuzda istatistik içeren bir Telefon numarası sütunu varsa, her adımın yüksek anahtar değeri oluşturulan istatistik betiğinde olur.

Veritabanının tamamını betikle

Yalnızca istatistiklere dayalı bir kopya veritabanı oluşturduğunuzda, tek tek nesneleri betik oluşturmak yerine veritabanının tamamını betik oluşturmak daha kolay ve daha güvenilir olabilir. Veritabanının tamamını betik olarak kullandığınızda aşağıdaki avantajları elde edebilirsiniz:

  • Sorunu yeniden oluşturmak için gereken eksik bağımlı nesnelerle ilgili sorunlardan kaçınırsınız.
  • Gerekli nesneleri seçmek için daha az adıma ihtiyacınız vardır.

Bir veritabanı için betik oluşturursanız ve veritabanının meta verileri binlerce nesne içeriyorsa, betik oluşturma işleminin önemli CPU kaynakları tükettiğini unutmayın. Yoğun olmayan saatlerde betiği oluşturmanız önerilir veya tek tek nesneler için betik oluşturmak için Tek Tek Nesneleri Betikle seçeneğini kullanabilirsiniz.

Sorgunuzun başvurduğunu her veritabanını betik olarak kullanmak için şu adımları izleyin:

  1. SQL Server Management Studio açın.

  2. Nesne GezginiVeritabanları'nı genişletin ve betik oluşturmak istediğiniz veritabanını bulun.

  3. Veritabanına sağ tıklayın, Görevler'in üzerine gelin ve Betik Oluştur'a tıklayın.

  4. Betik sihirbazında doğru veritabanının seçili olduğunu doğrulayın. Tüm veritabanının ve tüm veritabanı nesnelerinin betiğini seçmek için tıklayın ve ardından İleri'yi seçin.

  5. Komut Dosyası Seçeneklerini Seç iletişim kutusunda Gelişmiş düğmesini seçerek varsayılan değerden aşağıdaki tabloda listelenen değere aşağıdaki ayarları değiştirin.

    Betik oluşturma seçeneği Seçecek değer
    Ansi doldurma True
    Hatada Betik Çalıştırmaya Devam Et True
    Bağımlı Nesneler için Betik Oluşturma True
    Sistem Kısıtlama Adlarını Ekle True
    Betik Harmanlaması True
    Betik Oturum Açma Bilgileri True
    Betik Nesne Düzeyi İzinleri True
    Betik İstatistikleri Betik istatistikleri ve histogramları
    Betik Dizinleri True
    Betik Tetikleyicileri True

    Not

    Şema dbo dışındaki oturum açma bilgilerine ait nesneler içermediği sürece Betik Oturum Açmaları seçeneği ve Betik Nesne Düzeyi İzinleri seçeneğinin gerekli olmayabileceğini unutmayın.

  6. Değişiklikleri kaydetmek için Tamam'ı seçin ve Gelişmiş Betik Seçenekleri sayfasını kapatın.

  7. Dosyaya Kaydet'i seçin ve Tek dosya seçeneğini belirleyin.

  8. Seçimlerinizi gözden geçirin ve İleri'yi seçin.

  9. Bitir'iseçin.

Tek tek nesneler için betik oluşturma

Veritabanının tamamını betik oluşturmak yerine yalnızca belirli bir sorgu tarafından başvuruda bulunan tek tek nesnelerin betiğini oluşturabilirsiniz. Ancak tüm veritabanı nesneleri yan tümcesi WITH SCHEMABINDING kullanılarak oluşturulmadığı sürece, sistem tablosundaki sys.depends bağımlılık bilgileri her zaman doğru olmayabilir. Bu yanlışlık aşağıdaki sorunlardan birine neden olabilir:

  • Betik oluşturma işlemi bağımlı bir nesne betiği oluşturmaz.

  • Betik oluşturma işlemi nesneleri yanlış sırada betikle yazabilir. Betiği başarıyla çalıştırmak için, oluşturulan betiği el ile düzenlemeniz gerekir.

Bu nedenle, veritabanında çok fazla nesne olmadığı ve betik oluşturmanın çok uzun sürmediği sürece tek tek nesneleri betik olarak yazmanız önerilmez. Betik nesnelerini tek tek kullanmanız gerekiyorsa şu adımları izleyin:

  1. SQL Server Management Studio Veritabanları'nı genişletin ve betik oluşturmak istediğiniz veritabanını bulun.

  2. Veritabanına sağ tıklayın, Betik Veritabanı Farklı'nın üzerine gelin, CREATE To üzerine gelin ve ardından Dosya'yı seçin.

  3. Bir dosya adı girin ve Kaydet'i seçin.

    Çekirdek veritabanı kapsayıcısı betiklenir. Bu kapsayıcı dosyaları, dosya gruplarını, veritabanını ve özellikleri içerir.

  4. Veritabanına sağ tıklayın, Görevler'in üzerine gelin ve Betik Oluştur'a tıklayın.

  5. Doğru veritabanının seçili olduğundan emin olun ve İleri'yi seçin.

  6. Nesne Türlerini Seç iletişim kutusunda Belirli veritabanı nesnelerini seç'i seçin ve sorunlu sorgunun başvurduğunu tüm veritabanı nesne türlerini seçin.

    Örneğin, sorgu yalnızca tablolara başvuruyorsa Tablolar'ı seçin. Sorgu bir görünüme başvuruyorsa Görünümler ve Tablolar'ı seçin. Sorunlu sorgu kullanıcı tanımlı bir işlev kullanıyorsa İşlevler'i seçin.

  7. Sorgu tarafından başvuruda bulunan tüm nesne türlerini seçtiğinizde İleri'yi seçin.

  8. Betik Oluşturma Seçeneklerini Ayarla iletişim kutusunda Gelişmiş düğmesini seçin ve varsayılan değerdeki aşağıdaki ayarları Gelişmiş Betik Seçenekleri sayfasındaki aşağıdaki tabloda listelenen değerle değiştirin.

    Betik oluşturma seçeneği Seçecek değer
    Ansi Doldurma True
    Hatada Betik Çalıştırmaya Devam Et True
    Sistem Kısıtlama Adlarını Ekle True
    Bağımlı Nesneler için Betik Oluşturma True
    Betik Harmanlaması True
    Betik Oturum Açma Bilgileri True
    Betik Nesne Düzeyi İzinleri True
    Betik İstatistikleri Betik istatistikleri ve histogramları
    Betik USE DATABASE True
    Betik Dizinleri True
    Betik Tetikleyicileri True

    Not

    Şema dbo dışındaki oturum açma bilgilerine ait nesneler içermediği sürece Betik Oturum Açma bilgileri ve Betik Nesne Düzeyi İzinleri seçeneklerinin gerekli olmayabileceğini unutmayın.

  9. Gelişmiş Betik Seçenekleri sayfasını kaydetmek ve kapatmak için Tamam'ı seçin.

    7. adımda seçtiğiniz her veritabanı nesne türü için bir iletişim kutusu görüntülenir.

  10. Her iletişim kutusunda belirli tabloları, görünümleri, işlevleri veya diğer veritabanı nesnelerini seçin ve ardından İleri'yi seçin.

  11. Dosyaya Betik seçeneğini belirleyin ve ardından 3. adımda girdiğiniz dosya adını belirtin.

  12. Betiği başlatmak için Son'u seçin.

    Betik oluşturma tamamlandığında, betik dosyasını Microsoft Desteği Mühendisine gönderin. Microsoft Desteği Mühendisi de aşağıdaki bilgileri isteyebilir:

    • İşlemci sayısı ve ne kadar fiziksel belleğin mevcut olduğu da dahil olmak üzere donanım yapılandırması.

    • Sorguyu çalıştırdığınızda etkin olan SET seçenekleri.

    Bir SQLDiag raporu veya SQL Profiler izlemesi göndererek bu bilgileri zaten sağlamış olabileceğinizi unutmayın. Bu bilgileri sağlamak için başka bir yöntem de kullanmış olabilirsiniz.

Bilgiler nasıl kullanılır?

Aşağıdaki tablolar, sorgu iyileştiricisinin bir sorgu planı seçmek için bu bilgileri nasıl kullandığını açıklamaya yardımcı olur.

Meta veri

Seçeneği Açıklama
Kısıtlama -ları Sorgu iyileştiricisi, sorgu ile temel alınan şema arasındaki çelişkileri algılamak için sık sık kısıtlamalar kullanır. Örneğin, sorgu yan tümcesini WHERE col = 5 içeriyorsa ve temel tabloda bir CHECK (col < 5) kısıtlama varsa, sorgu iyileştiricisi hiçbir satırın eşleşmeyeceğini bilir. Sorgu iyileştiricisi, null atanabilirlik hakkında benzer türde kesintiler yapar. Örneğin, yan tümcesinin, sütunun WHERE col IS NULL null atanabilirliğine ve sütunun dış birleştirmenin dış tablosundan olup olmamasına bağlı olarak true veya false olduğu bilinir. YABANCı ANAHTAR kısıtlamalarının varlığı, kardinaliteyi ve uygun birleştirme sırasını belirlemek için yararlıdır. Sorgu iyileştiricisi, birleştirmeleri ortadan kaldırmak veya önkoşulları basitleştirmek için kısıtlama bilgilerini kullanabilir. Bu değişiklikler temel tablolara erişme gereksinimini kaldırabilir.
Istatistik İstatistik bilgileri, dizin ve istatistik anahtarının önde gelen sütununun dağılımını gösteren yoğunluk ve histogram içerir. Koşulun yapısına bağlı olarak, sorgu iyileştiricisi bir koşulun kardinalitesini tahmin etmek için yoğunluğu, histogramı veya ikisini birden kullanabilir. Doğru kardinalite tahminleri için güncel istatistikler gereklidir. Kardinalite tahminleri, bir operatörün maliyetini tahmin etmede giriş olarak kullanılır. Bu nedenle, en iyi sorgu planlarını elde etmek için iyi kardinalite tahminlerine sahip olmanız gerekir.
Tablo boyutu (satır ve sayfa sayısı) Sorgu iyileştirici, belirli bir koşulun doğru veya yanlış olma olasılığını hesaplamak için histogramları ve yoğunluğu kullanır. Son kardinalite tahmini, olasılığı alt işlecin döndürdüğü satır sayısıyla çarpılarak hesaplanır. Tablodaki veya dizindeki sayfa sayısı GÇ maliyetini tahmin etmede bir faktördür. Tablo boyutu, taramanın maliyetini hesaplamak için kullanılır ve dizin araması sırasında erişilecek sayfa sayısını tahmin ettiğinizde kullanışlıdır.
Veritabanı seçenekleri Çeşitli veritabanı seçenekleri iyileştirmeyi etkileyebilir. AUTO_CREATE_STATISTICS ve AUTO_UPDATE_STATISTICS seçenekleri, sorgu iyileştiricisinin yeni istatistikler oluşturup oluşturmayacağını veya güncel olmayan istatistikleri güncelleştirip güncelleştirmeyeceğini etkiler. Parametreleştirme düzeyi, giriş sorgusu sorgu iyileştiricisine teslim etmeden önce giriş sorgusunun nasıl parametrelendirildiği etkiler. Parametreleştirme kardinalite tahminini etkileyebilir ve dizinlenmiş görünümlerle ve diğer iyileştirme türleriyle eşleştirmeyi engelleyebilir. Bu ayar, DATE_CORRELATION_OPTIMIZATION iyileştiricinin sütunlar arasındaki bağıntıları aramasına neden olur. Bu ayar kardinaliteyi ve maliyet tahminini etkiler.

Ortam

Seçeneği Açıklama
Oturum KÜMESI seçenekleri Ayar, ANSI_NULLS ifadenin NULL = NULL true olarak değerlendirilip değerlendirilmediğini etkiler. Dış birleşimler için kardinalite tahmini, geçerli ayara bağlı olarak değişebilir. Ayrıca belirsiz ifadeler de değişebilir. Örneğin, col = NULL ifade ayarına göre farklı şekilde değerlendirilir. Ancak ifade col IS NULL her zaman aynı şekilde değerlendirilir.
Donanım kaynakları Sıralama ve karma işleçlerinin maliyeti, SQL Server için kullanılabilen göreli bellek miktarına bağlıdır. Örneğin, verilerin boyutu önbellekten büyükse, sorgu iyileştirici verilerin her zaman diske biriktirilmesi gerektiğini bilir. Ancak, verilerin boyutu önbellekten çok daha küçükse, işlem büyük olasılıkla bellekte yapılır. SQL Server ayrıca sunucunun birden fazla işlemcisi varsa ve paralellik bir MAXDOP ipucu veya en yüksek paralellik derecesi yapılandırma seçeneği kullanılarak devre dışı bırakılmadıysa farklı iyileştirmeler de dikkate alır.

Ayrıca bkz.