Aracılığıyla paylaş


Yeniden yürütme planı önbellekleme ve

SQL Server yürütme planları hem de veri arabellekleri depolamak için kullanılan bellek havuzu vardır.Yürütme planları ya da veri arabellekleri tahsis havuzunun yüzde sistem durumuna bağlı olarak dinamik olarak artıp.Yürütme planları depolamak için kullanılan bellek havuzu parçası yordam önbelleği adlandırılır.

SQL Serveryürütme planları aşağıdaki ana bileşen vardır:

  • Sorgu planı

    Yürütme planı toplu herhangi bir sayıda kullanıcı tarafından kullanılan bir dönük, salt okunur bir veri yapısıdır.Bu sorgu planı adlandırılır.Kullanıcı bağlamı sorgu planı içinde depolanır.Asla daha çok ya da var. sorguyu iki kopyasını bellekte planlayın: tüm seri yürütmeler ve tüm paralel yürütmeler için başka bir kopya.Paralel kopyasını kendi paralellik derecesi ne olursa olsun tüm paralel yürütmeler kapsar.

  • Yürütme içeriği

    Sorgu yürütülmekte her kullanıcı parametre değerleri gibi kendi yürütme belirli verileri tutan bir veri yapısı vardır.Bu veri yapısı yürütme içeriği adlandırılır.Yürütme içeriği veri yapılarını tanımlarlar.Bir kullanıcı bir sorgu yürütür ve yapıları değil kullanılmakta ise, yeni kullanıcı için içerik ile yeniden.

Yürütme bağlamı, aynı sorgu, farklı hazır değerler

When any SQL statement is executed in SQL Server, the relational engine first looks through the procedure cache to verify that an existing execution plan for the same SQL statement exists.SQL Server reuses any existing plan it finds, saving the overhead of recompiling the SQL statement.Varolan bir yürütme planı varsa, SQL Server oluşturur Yeni bir yürütme planı için sorgu.

SQL Server Belirli bir sql deyim için herhangi bir varolan yürütme planları bulmak için etkili bir algoritma vardır.Sistemlerin çoğu, bu tarama tarafından kullanılan en az her sql deyim derlemek yerine varolan planların yeniden çalışabilme tarafından kaydedilir ve kaynakları daha az kaynaklardır.

Tüm nesne başvurularını tam önbellek var, kullanılmayan yürütme planları için yeni sql deyimlerini eşleştirmek için algoritmalar gerektirir.Örneğin, bunlardan ilki olan SELECT ifadeleri ile varolan bir planı eşlenemiyor ve ikinci eşleştirilir:

SELECT * FROM Person;

SELECT * FROM Person.Person;

Yordamı önbellekten kaldırma yürütme planları

Bunları saklamak için yeterli belleği var olduğu sürece yürütme planları yordam önbelleği kalır.Bellek baskısı var, Veritabanı Altyapısı belirlemek hangi yürütme planları yordam önbelleği kaldırmak maliyet tabanlı bir yaklaşım kullanır.Maliyet tabanlı bir karar almanız Veritabanı Altyapısı artar ve azalır geçerli maliyeti değişken için her yürütme planına göre aşağıdaki etkenler.

Kullanıcı işlemi yürütme planı Coche'e ekler, kullanıcı işlemi geçerli maliyet özgün sorgu derleme maliyeti eşit ayarlar; geçici yürütme planları için kullanıcı işlemi geçerli maliyeti sıfıra ayarlar.Bundan sonra her saat bir kullanıcı işlemi yürütme planı başvuruyor, bunu özgün derleme maliyeti; geçerli maliyet sıfırlar geçici yürütme planları için kullanıcı işlemi geçerli maliyeti artırır.Tüm planları için geçerli maliyet değeri en fazla özgün derleme maliyetidir.

Bellek baskısı var, Veritabanı Altyapısı yanıt veren kaldırarak yürütme planları yordam önbelleği.Kaldırmak, planları belirlemek için Veritabanı Altyapısı tekrar tekrar, her yürütme planı durumunu inceler ve kaldırır planları olduğunda bunların geçerli maliyeti sıfır.Bellek baskısı var sıfır geçerli maliyet ile yürütme planı otomatik olarak kaldırılır değil; kaldırılmış sadece Veritabanı Altyapısı plan ve geçerli inceler maliyeti var. sıfırYürütme planı incelerken Veritabanı Altyapısı Geçerli maliyet, bir sorgu şu anda kullanma geçerli maliyeti azaltmak sıfıra doğru iter.planı.

The Veritabanı Altyapısı repeatedly examines the execution plans until enough have been removed to satisfy memory requirements.Bellek baskısı bulunmakla birlikte yürütme planı, maliyeti artar ve birden çok kez azaltılması olabilir.Bellek baskısı artık yok, Veritabanı Altyapısı durur kullanılmayan yürütmenin geçerli maliyet düşürme planları ve bunların maliyeti var. sıfır olsa bile yordam önbelleği tüm yürütme planları kalır

The Veritabanı Altyapısı uses the resource monitor and user threads to free memory from the procedure cache in response to memory pressure.Kaynak İzleyicisi ve kullanıcı iş parçacıklarını her kullanılmayan yürütme planı için geçerli maliyeti azaltmak için aynı anda çalıştırma planları inceleyebilirsiniz.Kaynak İzleyicisi'ni yürütme planları'dan kaldırır yordam önbelleği ne zaman genel bellek baskısı bulunmaktadır.Bunun için sistem bellek, işlem bellek, kaynak havuzu bellek ve en büyük boyut için tüm önbellekleri ilkelerini zorlamak için belleği boşaltır.

Tüm önbellekleri en büyük boyutu olan bir işlev Arabellek havuzu boyutu ve en fazla sunucu belleği aşamaz.En fazla sunucu belleği yapılandırma hakkında daha fazla bilgi için bkz: en fazla sunucu belleği ayarlama sp_configure (Transact-sql).

Yürütme planları arasında kullanıcı iş parçacıkları Kaldır yordam önbelleği ne zaman tek cache bellek baskısı bulunmaktadır.Bunlar için tek en büyük önbellek boyutu ve tek en büyük önbellek girdilerini ilkelerini zorlamak.

Hangi yürütme planları kaldırılmasını aşağıdaki örneklerde gösterilmektedir yordam önbelleği:

  • Böylece, maliyeti sıfıra hiçbir zaman gider yürütme planı sıkça başvurulmaktadır.Plan yordam önbelleği kalır ve geçerli maliyeti sıfırdır ve bellek baskısı olduğu sürece kaldırılır.

  • Geçici yürütme planı eklenir ve bellek baskısı var önce yeniden başvurulmuyor.Veritabanı Altyapısı yürütme planı incelerken geçerli bir sıfır maliyetle geçici planlar başlatılır beri planından kaldırmak ve maliyeti sıfır geçerli göreceksiniz yordam önbelleği.Bellek baskısı yoksa geçici yürütme planı geçerli sıfır maliyetli yordam önbelleği kalır.

El ile kaldırmak için tek bir plan veya tüm planlarını önbellekten, dbcc freeproccache (Transact-sql).

Fakat yürütme planları

Certain changes in a database can cause an execution plan to be either inefficient or invalid, based on the new state of the database.SQL Server detects the changes that invalidate an execution plan and marks the plan as not valid.Sorguyu yürütür sonraki bağlantı için yeni bir plan daha sonra çekirdekler gerekir.Bir plan geçersiz kılmak koşullar şunlardır:

  • Bir tabloda yaptığınız değişiklikler veya (alter tablo ve alter VIEW) sorgu tarafından başvurulan görünümünde.

  • Yürütme planı tarafından kullanılan tüm dizin değişiklikleri.

  • İstatistikleri güncelleştirmeleri yürütme planı tarafından kullanılan, ya da açıkça güncelleştirme İSTATİSTİKLERİ gibi bir deyim üretilen veya otomatik olarak oluşturulur.

  • Yürütme planı tarafından kullanılan bir dizin bırakarak.

  • İçin açık çağrı sp_recompile.

  • Çok sayıda (sorgu tarafından başvurulan tablo değiştirmek diğer kullanıcılardan INSERT veya delete deyimleri tarafından üretilen) anahtar değişikliklerini.

  • Tetikleyici, sayı içeren tablolar için satır biçiminde eklenen veya Silinmiş tabloları önemli ölçüde büyüyor.

  • WITH seçeneğini kullanarak bir saklı yordam yürütme.

Çoğu şu deyim doğruluğunu veya daha hızlı sorgu yürütme planları almak için gereklidir.

De SQL Server 2000, üzerinden gönderilmiş olup olmadığını yeniden derlemesinde, tüm toplu bir deyim içinde toplu neden olan her bir saklı yordam, tetikleyici, geçici toplu iş veya hazırlanmış deyim çekirdekler.De SQL Server 2005 ve daha sonra yalnızca deyim içini yeniden derlemesinde neden toplu iş iş çekirdekler.Bu fark yüzünden yeniden derlemesinde sayar SQL Server 2000 ve daha sonraki sürümlerde karşılaştırılabilir değildir.Ayrıca, daha fazla tür olduğunu yeniden derlemelerinde SQL Server 2005 ve daha sonra nedeniyle, genişletilmiş özellik küme.

Çoğu durumda, az sayıda ifadeleri yeniden derlemelerinde ve cpu açısından bunların ilişkili hükümleri neden olduğundan, deyimi düzey yeniden derlemesinde yararlı performans saat ve kilitler.Bu hükümleri, bu nedenle çekirdekler gerekmez diğer deyimleri için toplu iş kaçınılmış olur.

The SQL Server Profiler SP:Recompile trace event reports statement-level recompilations.Bu İzleme olay yalnızca toplu iş iş yeniden derlemelerinde, raporlar SQL Server 2000.Daha fazla, TextData sütun bu olay için doldurulur.Bu nedenle, SQL Server 2000 sahip olmanın izlenecek yöntem SP: StmtStarting veya StmtCompleted elde etmek için Transact-SQL yeniden derlemesinde neden metindir artık gerekli.

İzleme olay SQL:StmtRecompile şu deyim düzey bildirir.Bu İzleme olay izlemek ve şu hata ayıklamak için kullanılır.Oysa SP: RECOMPILE sadece saklı yordamları ve tetikleyicileri, oluşturduğu SQL:StmtRecompile saklı yordamlar, tetikleyiciler, ad-hoc toplu işlemler, kullanılarak gerçekleştirilen toplu işlemleri oluşturur sp_executesql, sorguları ve dinamik sql hazır.

The EventSubClass column of SP:Recompile and SQL:StmtRecompile contains an integer code that indicates the reason for the recompilation.Aşağıdaki tablo anlamı her kod numarasını içerir.

EventSubClass değeri

Açıklama

1

Şema değiştirildi.

2

İstatistik değişti.

3

Ertelenmiş derleme.

4

set seçenek değişti.

5

Geçici tablo değişti.

6

Uzak satır kümesi değişti.

7

Değiştirilen Gözat izni.

8

Sorgu bildirim ortamı değiştirildi.

9

Bölümlenmiş görünüm değiştirildi.

10

İmleç seçenekleri değişti.

11

SEÇENEK (yeniden) istendi.

Not

AUTO_UPDATE_STATISTICS veritabanı seçeneği on olarak ayarlandığında, sorgu çekirdekler, bunlar hedef tablo veya dizin oluşturulmuş görünümler, istatistikleri güncelleştirildi veya, cardinalities değişti önemli ölçüde bu yana son yürütme.Bu davranış standart kullanıcı tanımlı tablolar için geçici tablolara uygulanır ve inserted ve deleted tabloları oluşturduğu dml Tetikleyiciler.Aşırı yeniden derlemelerinde tarafından etkilenen sorgu performansı, bu ayarı değiştirmek için off düşünün.AUTO_UPDATE_STATISTICS veritabanı seçeneği için off ayarlandığında, yok şu temel alınarak istatistikleri veya kardinalite değişiklikleri dışında ortaya inserted ve deleted tarafından oluşturulan tablolardml INSTEAD OF tetikleyicileri. Bu tablolar oluşturulur çünkü tempdb, bunlara erişim sorguları yeniden derlemesinde AUTO_UPDATE_STATISTICS ayarını bağlıdır tempdb.Unutmayın, SQL Server 2000, yeniden derlemek devam DML tetikleyicisi için kardinalite değişiklikleri dayalı sorgular inserted ve deleted tablolar, hatta bu ayarı kapalı olduğundan,AUTO_UPDATE_STATISTICS devre dışı bırakma hakkında daha fazla bilgi için bkz: İstatistikler sorgu performansını artırmak için kullanma.