DBCC FREEPROCCACHE (Transact-SQL)

Berlaku untuk: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Menghapus semua elemen dari cache paket, menghapus paket tertentu dari cache paket dengan menentukan handel paket atau handel SQL, atau menghapus semua entri cache yang terkait dengan kumpulan sumber daya tertentu.

Catatan

DBCC FREEPROCCACHE tidak menghapus statistik eksekusi untuk prosedur tersimpan yang dikompilasi secara asli. Cache prosedur tidak berisi informasi tentang prosedur tersimpan yang dikompilasi secara asli. Statistik eksekusi apa pun yang dikumpulkan dari eksekusi prosedur akan muncul dalam DMV statistik eksekusi: sys.dm_exec_procedure_stats (Transact-SQL) dan sys.dm_exec_query_plan (Transact-SQL).

Konvensi sintaks transact-SQL

Sintaks

Sintaks untuk database SQL Server dan Azure SQL:

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

Sintaks untuk Azure Synapse Analytics and Analytics Platform System (PDW):

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

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

( { plan_handle | sql_handle | pool_name } )

plan_handle secara unik mengidentifikasi rencana kueri untuk batch yang telah dijalankan dan yang rencananya berada di cache paket. plan_handle adalah varbinary(64) dan dapat diperoleh dari objek manajemen dinamis berikut:

sql_handle adalah handel SQL dari batch yang akan dibersihkan. sql_handle adalah varbinary(64) dan dapat diperoleh dari objek manajemen dinamis berikut:

pool_name adalah nama kumpulan sumber daya Resource Governor. pool_name adalah sysname dan dapat diperoleh dengan mengkueri tampilan manajemen dinamis sys.dm_resource_governor_resource_pools .

Untuk mengaitkan grup beban kerja Resource Governor dengan kumpulan sumber daya, kueri tampilan manajemen dinamis sys.dm_resource_governor_workload_groups. Untuk informasi tentang grup beban kerja untuk sesi, kueri tampilan manajemen dinamis sys.dm_exec_sessions .

DENGAN NO_INFOMSGS

Menyembunyikan semua pesan informasi.

COMPUTE

Hapus menyeluruh cache rencana kueri dari setiap simpul Komputasi. Ini adalah nilai default.

SEMUA

Hapus menyeluruh cache rencana kueri dari setiap simpul Komputasi dan dari simpul Kontrol.

Catatan

Dimulai dengan SQL Server 2016 (13.x), ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE dapat digunakan untuk menghapus cache prosedur (rencana) untuk database saat ini.

Keterangan

Gunakan DBCC FREEPROCCACHE untuk menghapus cache rencana dengan hati-hati. Menghapus cache prosedur (rencana) menyebabkan semua rencana dikeluarkan, dan eksekusi kueri masuk akan mengkompilasi rencana baru, alih-alih menggunakan kembali rencana yang di-cache sebelumnya.

Ini dapat menyebabkan penurunan performa kueri yang tiba-tiba dan sementara saat jumlah kompilasi baru meningkat. Untuk setiap cachestore yang dibersihkan dalam cache paket, log kesalahan SQL Server akan berisi pesan informasi berikut:

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.

Pesan ini dicatat setiap lima menit selama cache dihapus dalam interval waktu tersebut.

Operasi konfigurasi ulang berikut juga menghapus cache prosedur:

  • jumlah wadah cache pemeriksaan akses
  • kuota cache pemeriksaan akses
  • clr diaktifkan
  • ambang biaya untuk paralelisme
  • rantai kepemilikan lintas db
  • indeks membuat memori
  • tingkat paralelisme maks
  • memori server maks
  • ukuran repl teks maks
  • utas pekerja maks
  • memori min per kueri
  • memori server min
  • batas biaya gubernur kueri
  • kueri tunggu
  • batas waktu kueri jarak jauh
  • opsi pengguna

Dalam Azure SQL Database, DBCC FREEPROCCACHE bertindak pada instans mesin database yang menghosting database atau kumpulan elastis saat ini. DBCC FREEPROCCACHE Menjalankan dalam database pengguna akan menghapus cache paket untuk database tersebut. Jika database berada dalam kumpulan elastis, database juga menghapus cache rencana di semua database lain di kumpulan elastis tersebut. Menjalankan perintah dalam master database tidak berpengaruh pada database lain pada server logis yang sama. Menjalankan perintah ini dalam database menggunakan tujuan layanan Dasar, S0, atau S1 dapat menghapus cache paket di database lain menggunakan tujuan layanan ini di server logis yang sama.

Tataan hasil

WITH NO_INFOMSGS Saat klausa tidak ditentukan, DBCC FREEPROCCACHE mengembalikan:

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

Izin

Berlaku untuk: SQL Server, Analytics Platform System (PDW)

  • Memerlukan izin UBAH STATUS SERVER pada server.

Berlaku untuk: Azure SQL Database

  • Memerlukan keanggotaan dalam peran server ##MS_ServerStateManager##.

Berlaku untuk: Azure Synapse Analytics

  • Memerlukan keanggotaan dalam peran server tetap db_owner .

Keterangan untuk Azure Synapse Analytics and Analytics Platform System (PDW)

Beberapa DBCC FREEPROCCACHE perintah dapat dijalankan secara bersamaan.

Di Azure Synapse Analytics atau Analytics Platform System (PDW), menghapus cache paket dapat menyebabkan penurunan sementara performa kueri karena kueri masuk mengkompilasi paket baru, alih-alih menggunakan kembali paket yang di-cache sebelumnya.

DBCC FREEPROCCACHE (COMPUTE)hanya menyebabkan SQL Server mengolah ulang kueri saat dijalankan pada simpul Komputasi. Ini tidak menyebabkan Azure Synapse Analytics atau Analytics Platform System (PDW) mengkombinasikan ulang rencana kueri paralel yang dihasilkan pada simpul Kontrol.

DBCC FREEPROCCACHE dapat dibatalkan selama eksekusi.

Batasan dan pembatasan untuk Azure Synapse Analytics and Analytics Platform System (PDW)

DBCC FREEPROCCACHE tidak dapat berjalan dalam transaksi.

DBCC FREEPROCCACHE tidak didukung dalam pernyataan EXPLAIN.

Metadata untuk Azure Synapse Analytics and Analytics Platform System (PDW)

Baris baru ditambahkan ke sys.pdw_exec_requests tampilan sistem saat DBCC FREEPROCCACHE dijalankan.

Contoh: SQL Server

J. Menghapus rencana kueri dari cache paket

Contoh berikut menghapus rencana kueri dari cache paket dengan menentukan handel rencana kueri. Untuk memastikan contoh kueri ada di cache paket, kueri pertama kali dijalankan. Tampilan sys.dm_exec_cached_plans manajemen dinamis dan sys.dm_exec_sql_text dikueri untuk mengembalikan handel rencana untuk kueri.

Nilai handel paket dari kumpulan hasil kemudian dimasukkan ke DBCC FREEPROCACHE dalam pernyataan untuk menghapus hanya paket tersebut dari cache paket.

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

Berikut adalah tataan hasil.

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

B. Menghapus semua paket dari cache paket

Contoh berikut menghapus semua elemen dari cache paket. Klausa WITH NO_INFOMSGS ditentukan untuk mencegah pesan informasi ditampilkan.

DBCC FREEPROCCACHE WITH NO_INFOMSGS;

C. Menghapus semua entri cache yang terkait dengan kumpulan sumber daya

Contoh berikut menghapus semua entri cache yang terkait dengan kumpulan sumber daya tertentu. Tampilan sys.dm_resource_governor_resource_pools pertama kali dikueri untuk mendapatkan nilai untuk pool_name.

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

Contoh: Azure Synapse Analytics and Analytics Platform System (PDW)

D. Sintaks dasar DBCC FREEPROCCACHE

Contoh berikut menghapus semua cache rencana kueri yang ada dari simpul Komputasi. Meskipun konteks diatur ke UserDbSales, cache rencana kueri simpul komputasi untuk semua database akan dihapus. Klausa WITH NO_INFOMSGS mencegah pesan informasi muncul dalam hasil.

USE UserDbSales;
DBCC FREEPROCCACHE (COMPUTE) WITH NO_INFOMSGS;

Contoh berikut memiliki hasil yang sama dengan contoh sebelumnya, kecuali bahwa pesan informasi akan ditampilkan dalam hasil.

USE UserDbSales;
DBCC FREEPROCCACHE (COMPUTE);

Ketika pesan informasi diminta dan eksekusi berhasil, hasil kueri akan memiliki satu baris per simpul Komputasi.

E. Memberikan izin untuk menjalankan DBCC FREEPROCCACHE

Contoh berikut memberikan izin masuk David untuk menjalankan DBCC FREEPROCCACHE.

GRANT ALTER SERVER STATE TO David;
GO

Lihat juga