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).
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:
- sys.dm_exec_cached_plans
- sys.dm_exec_requests
- sys.dm_exec_query_memory_grants
- sys.dm_exec_query_stats
sql_handle adalah handel SQL dari batch yang akan dibersihkan. sql_handle adalah varbinary(64) dan dapat diperoleh dari objek manajemen dinamis berikut:
- sys.dm_exec_query_stats
- sys.dm_exec_requests
- sys.dm_exec_cursors
- sys.dm_exec_xml_handles
- sys.dm_exec_query_memory_grants
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