sp_recompile (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Menyebabkan prosedur tersimpan, pemicu, dan fungsi yang ditentukan pengguna dikompilasi ulang saat dijalankan lagi. Ini dilakukan dengan menjatuhkan rencana yang ada dari cache prosedur, memaksa rencana baru dibuat saat berikutnya prosedur atau pemicu dijalankan. Dalam koleksi SQL Server Profiler, peristiwa SP:CacheInsert dicatat alih-alih peristiwa SP:Recompile.

Konvensi sintaks transact-SQL

Sintaks

sp_recompile [ @objname = ] N'object'
[ ; ]

Argumen

[ @objname = ] N'object'

Nama prosedur tersimpan, pemicu, tabel, tampilan, atau fungsi yang ditentukan pengguna yang memenuhi syarat atau tidak memenuhi syarat dalam database saat ini. @objname adalah nvarchar(776), tanpa default.

  • Jika @objname adalah nama prosedur tersimpan, pemicu, atau fungsi yang ditentukan pengguna, prosedur tersimpan, pemicu, atau fungsi akan dikompilasi ulang saat berikutnya dijalankan.

  • Jika @objname adalah nama tabel atau tampilan, semua prosedur tersimpan, pemicu, atau fungsi yang ditentukan pengguna yang mereferensikan tabel atau tampilan akan dikompilasi ulang saat berikutnya dijalankan.

Mengembalikan nilai kode

0 (berhasil) atau angka bukan nol (kegagalan)

Keterangan

sp_recompile mencari objek dalam database saat ini saja.

Kueri yang digunakan oleh prosedur tersimpan, atau pemicu, dan fungsi yang ditentukan pengguna hanya dioptimalkan saat dikompilasi. Karena indeks atau perubahan lain yang memengaruhi statistik dilakukan pada database, prosedur tersimpan yang dikompilasi, pemicu, dan fungsi yang ditentukan pengguna dapat kehilangan efisiensi. Dengan mengkompilasi ulang prosedur dan pemicu tersimpan yang bertindak pada tabel, Anda dapat mengoptimalkan kembali kueri.

Eksekusi proaktif prosedur tersimpan ini biasanya tidak perlu. SQL Server secara otomatis mengompilasi ulang prosedur tersimpan, pemicu, dan fungsi yang ditentukan pengguna saat menguntungkan. Ada berbagai alasan mesin database dapat memilih untuk mengkompilasi ulang objek. Paling umum, kompilasi ulang otomatis mengikuti perubahan pada perkiraan kardinalitas yang mendasar karena pembaruan statistik otomatis atau manual.

Mengkompilasi ulang prosedur tersimpan dengan setiap eksekusi adalah salah satu cara yang kurang efisien untuk memerangi masalah rencana kueri yang disebabkan oleh parameterisasi. Fitur Pengoptimalan Parameter Rencana Sensitif yang diperkenalkan di SQL Server 2022 (16.x) mencoba mengurangi masalah ini secara otomatis. Dalam versi sebelumnya, alih-alih memanggil sp_recompile dengan setiap eksekusi, pertimbangkan:

  • Tambahkan opsi WITH RECOMPILE ke kueri, yang memerlukan perubahan kode.
  • Terapkan WITH RECOMPILE opsi dengan panduan paket.
  • Terapkan WITH RECOMPILE opsi dengan petunjuk Penyimpanan Kueri tanpa membuat perubahan kode.
  • Untuk informasi selengkapnya, lihat Mengatasi kueri dengan masalah rencana sensitif parameter.

Izin

Memerlukan izin ALTER pada objek yang ditentukan.

Contoh

Contoh berikut menyebabkan prosedur tersimpan, pemicu, dan fungsi yang ditentukan pengguna yang bertindak pada Sales.Customer tabel dikompilasi ulang saat berikutnya dijalankan.

USE AdventureWorks2022;
GO
EXEC sp_recompile N'Sales.Customer';
GO