Aracılığıyla paylaş


DBCC FREEPROCCACHE (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)Microsoft Fabric'te SQL Veritabanı

Plan önbelleğindeki tüm öğeleri kaldırır, bir plan tanıtıcısı veya SQL tanıtıcısı belirterek belirli bir planı plan önbelleğinden kaldırır veya belirtilen kaynak havuzuyla ilişkili tüm önbellek girdilerini kaldırır.

Uyarı

DBCC FREEPROCCACHE yerel olarak derlenmiş saklı yordamlar için yürütme istatistiklerini temizlemez. Yordam önbelleği yerel olarak derlenmiş saklı yordamlar hakkında bilgi içermez. Yordam yürütmelerinden toplanan tüm yürütme istatistikleri, yürütme istatistikleri DMV'lerinde görünür: sys.dm_exec_procedure_stats (Transact-SQL) ve sys.dm_exec_query_plan (Transact-SQL).

Transact-SQL söz dizimi kuralları

Sözdizimi

SQL Server ve Azure SQL Veritabanı söz dizimi:

DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]

Azure Synapse Analytics ve Analytics Platform Sistemi (PDW) için söz dizimi:

DBCC FREEPROCCACHE [ ( COMPUTE | ALL ) ]
     [ WITH NO_INFOMSGS ]
[;]

Arguments

( { plan_handle | sql_handle | pool_name } )

plan_handle , yürütülen ve planı plan önbelleğinde bulunan bir toplu iş için sorgu planını benzersiz olarak tanımlar. plan_handlevarbinary(64) olup aşağıdaki dinamik yönetim nesnelerinden alınabilir:

sql_handle temizlenecek toplu işin SQL tanıtıcısıdır. sql_handlevarbinary(64) olup aşağıdaki dinamik yönetim nesnelerinden alınabilir:

pool_name , Resource Governor kaynak havuzunun adıdır. pool_namesysname'dir ve sys.dm_resource_governor_resource_pools dinamik yönetim görünümü sorgulanarak elde edilebilir.

Resource Governor iş yükü grubunu bir kaynak havuzuyla ilişkilendirmek için dinamik yönetim görünümünü sys.dm_resource_governor_workload_groups sorgula. Bir oturumun iş yükü grubu hakkında bilgi için sys.dm_exec_sessions dinamik yönetim görünümünü sorgular.

BİLGİ_MSJSIZ

Tüm bilgilendirme iletilerini gizler.

BİLGİ İŞLEM

Sorgu planı önbelleğini her İşlem düğümünden temizleyin. Bu varsayılan değerdir.

HEPSİ

Sorgu planı önbelleğini her İşlem düğümünden ve Denetim düğümünden temizleyin.

Uyarı

SQL Server 2016(13.x) ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE ile başlayarak geçerli veritabanı için yordam (plan) önbelleğini temizlemek için kullanılabilir.

Açıklamalar

Plan önbelleğini dikkatlice temizlemek için kullanın DBCC FREEPROCCACHE . Yordam (plan) önbelleğinin temizlenmesi tüm planların çıkarılmasına neden olur ve gelen sorgu yürütmeleri, önceden önbelleğe alınmış herhangi bir planı yeniden kullanmak yerine yeni bir plan derler.

Bu, yeni derleme sayısı arttıkça sorgu performansında ani ve geçici bir düşüşe neden olabilir. Plan önbelleğindeki temizlenen her önbellek deposu için SQL Server hata günlüğü aşağıdaki bilgilendirme iletisini içerir:

SQL Server has encountered %d occurrence(s) of cachestore flush for the '%s' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

Bu ileti, önbellek bu zaman aralığında temizlendiği sürece beş dakikada bir günlüğe kaydedilir.

Aşağıdaki yeniden yapılandırma işlemleri yordam önbelleğini de temizler:

  • erişim denetimi önbellek demet sayısı
  • erişim denetimi önbellek kotası
  • CLR etkinleştirildi
  • paralellik için maliyet eşiği
  • çapraz veritabanı sahiplik zinciri
  • dizin oluşturma belleği
  • maksimum paralellik derecesi
  • en fazla sunucu belleği
  • maksimum metin repl boyutu
  • en fazla çalışan iş parçacığı
  • sorgu başına en az bellek
  • en az sunucu belleği
  • sorgu valisi maliyet sınırı
  • sorgu bekleme
  • uzak sorgu zaman aşımı
  • kullanıcı seçenekleri

Azure SQL Veritabanı'nda, DBCC FREEPROCCACHE geçerli veritabanını veya elastik havuzu barındıran veritabanı altyapısı örneğinde çalışır. Kullanıcı veritabanında yürütülürken DBCC FREEPROCCACHE bu veritabanı için plan önbelleği temizleniyor. Veritabanı bir elastik havuzdaysa, bu elastik havuzdaki diğer tüm veritabanlarında plan önbelleğini de temizler. Komutunun veritabanında yürütülmesinin master aynı mantıksal sunucudaki diğer veritabanları üzerinde hiçbir etkisi yoktur. Temel, S0 veya S1 hizmet amacını kullanarak bir veritabanında bu komutun yürütülmesi, aynı mantıksal sunucudaki bu hizmet hedeflerini kullanarak diğer veritabanlarındaki plan önbelleğini temizleyebilirsiniz.

Sonuç kümeleri

WITH NO_INFOMSGS Yan tümce belirtilmediğinde şunu DBCC FREEPROCCACHE döndürür:

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Permissions

Şunlar için geçerlidir: SQL Server, Analiz Platformu Sistemi (PDW)

  • Sunucuda ALTER SERVER STATE izni gerektirir.

Şunlar için geçerlidir: Azure SQL Veritabanı

  • # #MS_ServerStateManager## sunucu rolü üyeliği gerektirir.

Şunlar için geçerlidir: Azure Synapse Analytics

  • db_owner sabit sunucu rolünde üyelik gerektirir.

Azure Synapse Analytics ve Analytics Platform Sistemi (PDW) için açıklamalar

Birden çok DBCC FREEPROCCACHE komut eşzamanlı olarak çalıştırılabilir.

Azure Synapse Analytics veya Analytics Platform Sistemi'nde (PDW) plan önbelleğini temizlemek, daha önce önbelleğe alınmış herhangi bir planı yeniden kullanmak yerine gelen sorgular yeni bir plan derledikçe sorgu performansında geçici bir düşüşe neden olabilir.

DBCC FREEPROCCACHE (COMPUTE) yalnızca SQL Server'ın İşlem düğümlerinde çalıştırıldığında sorguları yeniden derlemesine neden olur. Azure Synapse Analytics veya Analytics Platform Sistemi'nin (PDW) Denetim düğümünde oluşturulan paralel sorgu planını yeniden derlemesine neden olmaz.

DBCC FREEPROCCACHE yürütme sırasında iptal edilebilir.

Azure Synapse Analytics ve Analytics Platform Sistemi (PDW) için sınırlamalar ve kısıtlamalar

DBCC FREEPROCCACHE bir işlem içinde çalıştırılamaz.

DBCC FREEPROCCACHE bir EXPLAIN deyiminde desteklenmez.

Azure Synapse Analytics ve Analytics Platform Sistemi (PDW) için meta veriler

Çalıştırıldığında sys.pdw_exec_requests sistem görünümüne DBCC FREEPROCCACHE yeni bir satır eklenir.

Örnekler: SQL Server

A. Plan önbelleğinden sorgu planını temizleme

Aşağıdaki örnek, sorgu planı tutamacını belirterek bir sorgu planını plan önbelleğinden temizler. Örnek sorgunun plan önbelleğinde olduğundan emin olmak için önce sorgu yürütülür. sys.dm_exec_cached_plans ve sys.dm_exec_sql_text dinamik yönetim görünümleri sorgunun plan tutamacını döndürmek için sorgulanır.

Sonuç kümesindeki plan işleme değeri daha sonra, plan önbelleğinden yalnızca bu planı kaldırmak için deyimine eklenir DBCC FREEPROCACHE .

USE AdventureWorks2022;
GO
SELECT * FROM Person.Address;
GO
SELECT plan_handle, st.text
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE text LIKE N'SELECT * FROM Person.Address%';
GO

Sonuç kümesi aşağıdadır.

plan_handle                                         text
--------------------------------------------------  -----------------------------
0x060006001ECA270EC0215D05000000000000000000000000  SELECT * FROM Person.Address;
  
(1 row(s) affected)
-- Remove the specific plan from the cache.
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);
GO

B. Plan önbelleğindeki tüm planları temizleme

Aşağıdaki örnek, plan önbelleğindeki tüm öğeleri temizler. Bilgi WITH NO_INFOMSGS iletisinin görüntülenmesini önlemek için yan tümcesi belirtilir.

DBCC FREEPROCCACHE WITH NO_INFOMSGS;

C. Kaynak havuzuyla ilişkili tüm önbellek girdilerini temizleme

Aşağıdaki örnek, belirtilen kaynak havuzuyla ilişkili tüm önbellek girdilerini temizler. Görünüm sys.dm_resource_governor_resource_pools ilk olarak pool_name değerini almak için sorgulanır.

SELECT * FROM sys.dm_resource_governor_resource_pools;
GO
DBCC FREEPROCCACHE ('default');
GO

Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)

D. DBCC FREEPROCCACHE temel söz dizimi

Aşağıdaki örnek, mevcut tüm sorgu planı önbelleklerini İşlem düğümlerinden kaldırır. Bağlam olarak ayarlanmış UserDbSalesolsa da, tüm veritabanları için İşlem düğümü sorgu planı önbellekleri kaldırılır. yan tümcesi WITH NO_INFOMSGS , bilgi iletilerinin sonuçlarda görünmesini engeller.

USE UserDbSales;
DBCC FREEPROCCACHE (COMPUTE) WITH NO_INFOMSGS;

Aşağıdaki örnekte, bilgi iletilerinin sonuçlarda gösterilmesi dışında, önceki örnekle aynı sonuçlar bulunur.

USE UserDbSales;
DBCC FREEPROCCACHE (COMPUTE);

Bilgilendirme iletileri istendiğinde ve yürütme başarılı olduğunda, sorgu sonuçları İşlem düğümü başına bir satıra sahip olur.

E. DBCC FREEPROCCACHE çalıştırma izni verme

Aşağıdaki örnek, komutunu çalıştırmak Davidiçin oturum açma DBCC FREEPROCCACHE izni verir.

GRANT ALTER SERVER STATE TO David;
GO

Ayrıca bakınız