Aracılığıyla paylaş


Yürütme planı önbelleğe alma ve yeniden

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

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

  • Sorgu planı

    Yürütme planının toplu kullanıcılar herhangi bir sayıda tarafından kullanılan re-entrant, salt okunur bir veri yapısıdır.Bu sorgu planını adlandırılır.Hiçbir kullanıcı bağlamı sorgu planı içinde depolanır.Hiçbir zaman birden çok bir veya sorgunun iki kopyasını bellekte planlayın: Tüm seri yürütmeler ve tüm paralel yürütme için başka bir kopya. Paralel kopyasını kendi parallelism derecesini ne olursa olsun tüm paralel yürütmeler kapsar.

  • Yürütme içeriği

    Sorgu yürütülmekte olan her kullanıcı verileri gibi parametre değerlerini, yürütme için belirli tutan bir veri yapısı vardır.Bu veri yapısı, yürütme içeriği anı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ı bağlamının ile yeniden.

Execution context, same query, different literals

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 hiçbir yürütme planı varsa, SQL Server Sorgu için yeni bir yürütme planı oluşturur.

SQL Server varolan herhangi bir yürütme planları için belirli SQL deyim bulmak için etkin bir algoritma vardır.Çoğu sistemlerinde, bu tarama tarafından kullanılan en düşük kaynaklar, her bir SQL deyim derlemenin yerine varolan planları yeniden çalışabilme tarafından kaydedilen kaynakları düşüktür.

Yeni SQL deyimi için kullanılmayan yürütme planları önbelleğindeki eşleştirmek için kullanılan algoritmaları, tüm nesne başvurularını tam olarak nitelenmiş olmasını gerektirir.Örneğin, bu ilk SELECT ifadeleri eşlenemiyor varolan bir planı ve ikinci eşleştirilir:

SELECT * FROM Contact

SELECT * FROM Person.Contact

Yürütme kaldırma arasında planları yordam önbelleği

Bunları saklamak için yeterli bellek olduğu sürece, yürütme planları yordam önbelleği kalır.Bellek baskısı bulunduğunda, Database Engine maliyetine dayalı bir yaklaşım kaldırmak hangi yürütme planları belirlemek için kullandığı yordam önbelleği. Maliyet-temel alan bir karar almanız Database Engine artırır ve geçerli bir maliyet değişkeninin her yürütme planı için aşağıdaki etkenlere göre azaltır.

Bir kullanıcı işlemi yürütme planı önbelleğe eklediğinde, kullanıcı işlemi geçerli maliyeti özgün sorgu derleme maliyeti eşit ayarlar; anlık yürütme planları için kullanıcı işlemi geçerli maliyeti sıfır olarak ayarlar.Bundan sonra her bir kullanıcı işlemi yürütme planı başvuruyor, geçerli maliyeti için özgün derleme maliyeti sıfırlar; anlık için maliyet geçerli yürütme kullanıcı işlemi artar planlamaktadır.Tüm planları için en geçerli maliyeti için özgün derleme maliyeti değerdir.

Bellek baskısı bulunduğunda, Database Engine Yürütme planları'den kaldırarak yanıt yordam önbelleği. Kaldırmak, , hangi planlamaktadır belirlemek için Database Engine art arda her yürütme planı durumunu inceler ve bunların geçerli maliyeti sıfır olduğunda planları kaldırır. Yürütme planı geçerli sıfır maliyetli bellek baskısı bulunduğunda otomatik olarak kaldırılmaz; kaldırılır, yalnızca Database Engine plan ve geçerli inceler maliyeti sıfırdır. Yürütme planı incelerken Database Engine Geçerli maliyeti sıfır, bir sorgu planı şu anda kullanmıyorsa, geçerli maliyeti düşürme tarafından doğru iter.

The Database Engine repeatedly examines the execution plans until enough have been removed to satisfy memory requirements.Yürütme planı, bellek baskısı bulunmaktadır, ancak, maliyeti artış ve birden çok kez Azaltılan olabilir.Bellek baskısı artık, Database Engine bunların maliyeti sıfır olsa da, kullanılmayan yürütme planları ve tüm yürütme planları geçerli maliyetini azaltma duruyor yordam önbelleği kalır.

The Database Engine uses the kaynak monitor and user threads to free memory from the yordam önbelleği in response to memory pressure. Kaynak izleyicisi ve kullanıcı iş parçacıklarını her kullanılmayan yürütme planı geçerli maliyetini azaltmak için aynı anda çalıştırma planları inceleyebilirsiniz.Kaynak izleyicisi yürütme planları'nden kaldırır yordam önbelleği ne zaman genel bellek baskısı bulunmaktadır.Bu, sistem belleğinin, işlem bellek, kaynak havuzu bellek ve en büyük boyut için tüm önbellekleri ilkelerini zorlamak için bellek serbest bırakır.

Tüm önbellekleri en büyük boyutu, arabellek havuzu boyutu işlevidir 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 ayarısp_configure (Transact-SQL).

Kullanıcı iş parçacıkları yürütme planları'nden kaldırmak yordam önbelleği ne zaman tek bir önbellek bellek baskısı bulunmaktadır.Bunlar, tek önbellek boyutu sınırını ve en çok tek önbellek girdileri için ilkeleri uygular.

Aşağıdaki örnekler, hangi yürütme planları kaldırılmasını göstermektedir yordam önbelleği:

  • Böylece, maliyet, hiçbir zaman sıfır olarak gider yürütme planı sık başvurulmaktadır.Plan yordam önbelleği kalır ve bellek baskısı yok ve geçerli maliyeti sıfırdır kaldırılmaz.

  • Özel yürütme planı eklenir ve bellek baskısı varsa, önce yeniden başvurulmuyor.Yürütme planı veritabanı alt yapısını inceler, sıfır ise, geçerli bir maliyet ile geçici plan başlatılır olduğundan, bu maliyet ve planı yordamı önbellekten kaldırmak sıfır geçerli görebilirsiniz.Bellek baskısı yok 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 ya da tüm planlarını önbellekten, kullanın. DBCC FREEPROCCACHE (Transact-SQL).

Yürütme recompiling 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.Derlenmiş çekirdekler sorgu yürüten sonraki bağlantı için yeni BIR plan sonra gerekir.Bir planı geçersiz koşullar şunlardır:

  • Bir tabloya yapılan değişiklikler veya (ALTER VIEW ve ALTER tablo) sorgu tarafından başvurulan bir görünüm.

  • Yürütme planı tarafından kullanılan herhangi bir dizini değiştirir.

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

  • Yürütme planı tarafından kullanılan dizin siliniyor.

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

  • Çok sayıda anahtarlarına değişiklikleri (değişiklik diğer kullanıcılardan INSERT veya DELETE deyimleri tarafından oluşturulan bir tablo sorgu tarafından başvurulan).

  • Sayı, tetikleyici içeren tabloları içinde satır eklenen or silindi tabloları çok büyüyor.

  • Yürütme bir saklı yordam WITH yeniden DERLE) seçeneğini kullanarak.

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

Içinde SQL Server 2000, derlenmiş bir deyim içinde toplu recompilation, tüm toplu işlem, saklı bir yordam gönderilen olup olmadığını neden her tetikleyici, geçici toplu iş veya hazırlanmış deyim, çekirdekler. Içinde SQL Server 2005 ve daha sonra yalnızca deyim iç recompilation neden olan toplu iş iş derlenmiş çekirdekler. Bu fark yüzünden recompilation sayar SQL Server 2000 ve daha sonraki sürümleri, benzer değildir. Ayrıca yeniden daha fazla alt tür vardır SQL Server 2005 ve daha sonra genişletilmiş özellik nedeniyle ayarlayın.

deyim-düzey recompilation, çoğu durumda, az sayıda deyim s yeniden ve bunların ilişkili yasal CPU süresini ve kilitleri nedeniyle, performans sağlar.Bu nedenle, bu yasal derlenmiş çekirdekler gerekmez, diğer tablolarda için toplu iş kaçınılmış.

The SQL Server ProfilerSP:Recompile trace event reports statement-level recompilations.Bu izleme olay yalnızca toplu iş iş iş olarak yeniden raporları SQL Server 2000. Daha fazla, TextData sütun bu olay doldurulur.Bu nedenle, SQL Server 2000 izleme için uygulama SP: StmtStarting or SP: StmtCompleted edinmek içinTransact-SQL metin recompilation neden artık gerekmemektedir.

Izleme olay SQL:StmtRecompile Düzey Ekstresi yeniden bildirir.Bu izleme olayı izleme ve yeniden hata ayıklamak için kullanılır.Oysa SP:recompile yalnızca saklı yordamları ve tetikleyicileri, oluştururSQL:StmtRecompile , saklı yordamlar, tetikleyiciler, özel toplu işleri, kullanılarak gerçekleştirilen toplu işlemleri oluştururSp_executesqlSorgu ve dinamik SQL hazırlıklı.

The EventSubClass sütun of SP:Recompile and SQL:StmtRecompile contains an integer code that indicates the reason for the recompilation.Aşağıdaki tabloda, her Kod sayının anlamı içerir.

EventSubClass değeri

Açıklama

1

Şemayı değiştirdi.

2

Istatistik değiştirdi.

3

Ertelenen derleme.

4

küme seçenek değiştirdi.

5

Geçici tablo olarak değiştirdi.

6

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

7

Değiştirilen GÖZATMA iznine IÇIN.

8

Sorgu bildirim ortam değiştirdi.

9

Değiştirilen görünümü bölümlenmiş.

10

Imleç seçenekleri değişti.

11

OPTION (RECOMPILE) istendi.

Not

Derlenmiş AUTO_UPDATE_STATISTICS veritabanı seçeneği ON küme, tablolar veya güncelleştirildi, istatistikleri veya, cardinalities önemli ölçüde son yürütme bu yana değişen dizin oluşturulmuş görünümler hedeflediğinizde sorgularını çekirdekler.Standart kullanıcı tanımlı tablo için geçici tablo, bu davranışı uygulanır ve inserted ve deleted DML Tetikleyiciler tarafından oluşturulan tablolar. Sorgu performansını aşırı yeniden tarafından etkileniyorsa, bu ayar KAPALı \CurrentControlSet.AUTO_UPDATE_STATISTICS veritabanı seçeneği KAPALı küme, hiçbir yeniden göre istatistikler'i veya önem düzeyi değişiklikleri dışında ortaya inserted ve deleted ıNSTEAD OF tetikleri DML tarafından oluşturulan tablolar. Bu tablo, çünkü tempdb AUTO_UPDATE_STATISTICS ayarında erişim sorgularının recompilation bağlıdırtempdb.Unutmayın SQL Server 2000, sorguları yeniden derleyin DML tetikleyicisine önem değişikliklere göre devam inserted ve deleted tablolar, bu ayar KAPALı olduğunda bile. AUTO_UPDATE_STATISTICS devre dışı bırakma hakkında daha fazla bilgi için bkz: Sorgu performans geliştirme için istatistikleri'ni kullanma.

Değişiklik Geçmişi

Güncelleştirilmiş içerik

Yürütme planları yordam önbelleğinden kaldırılıyor ilgili bölümü güncelleştirildi.