Menyiapkan Perintah di SQL Server Native Client

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

Penyedia SQL Server Native Client OLE DB mendukung persiapan perintah untuk mengoptimalkan beberapa eksekusi satu perintah; namun, persiapan perintah menghasilkan overhead, dan konsumen tidak perlu menyiapkan perintah untuk menjalankannya lebih dari sekali. Secara umum, perintah harus disiapkan jika akan dijalankan lebih dari tiga kali.

Untuk alasan performa, persiapan perintah ditangguhkan hingga perintah dijalankan. Ini adalah perilaku default. Setiap kesalahan dalam perintah yang sedang disiapkan tidak diketahui sampai perintah dijalankan atau operasi metaproperti dilakukan. Mengatur properti SQL Server SSPROP_DEFERPREPARE ke FALSE dapat menonaktifkan perilaku default ini.

Dalam SQL Server, ketika perintah dijalankan secara langsung (tanpa menyiapkannya terlebih dahulu), rencana eksekusi dibuat dan di-cache. Jika pernyataan SQL dijalankan lagi, SQL Server memiliki algoritma yang efisien untuk mencocokkan pernyataan baru dengan rencana eksekusi yang ada di cache, dan menggunakan kembali rencana eksekusi untuk pernyataan tersebut.

Untuk perintah yang disiapkan, SQL Server memberikan dukungan asli untuk menyiapkan dan menjalankan pernyataan perintah. Saat Anda menyiapkan pernyataan, SQL Server membuat rencana eksekusi, menyimpannya dalam cache, dan mengembalikan handel ke rencana eksekusi ini kepada penyedia. Penyedia kemudian menggunakan handel ini untuk menjalankan pernyataan berulang kali. Tidak ada prosedur tersimpan yang dibuat. Karena handel secara langsung mengidentifikasi rencana eksekusi untuk pernyataan SQL alih-alih mencocokkan pernyataan dengan rencana eksekusi di cache (seperti halnya untuk eksekusi langsung), lebih efisien untuk menyiapkan pernyataan daripada mengeksekusinya secara langsung, jika Anda tahu pernyataan akan dijalankan lebih dari beberapa kali.

Dalam SQL Server 2005 (9.x), pernyataan yang disiapkan tidak dapat digunakan untuk membuat objek sementara dan tidak dapat mereferensikan prosedur tersimpan sistem yang membuat objek sementara, seperti tabel sementara. Prosedur ini harus dijalankan secara langsung.

Beberapa perintah tidak boleh disiapkan. Misalnya, perintah yang menentukan eksekusi prosedur tersimpan atau menyertakan teks yang tidak valid untuk pembuatan prosedur tersimpan SQL Server tidak boleh disiapkan.

Jika prosedur tersimpan sementara dibuat, penyedia SQL Server Native Client OLE DB menjalankan prosedur tersimpan sementara, mengembalikan hasil seolah-olah pernyataan itu sendiri dijalankan.

Pembuatan prosedur tersimpan sementara dikendalikan oleh penyedia SQL Server Native Client OLE DB -properti inisialisasi khusus SSPROP_INIT_USEPROCFORPREP. Jika nilai properti SSPROPVAL_USEPROCFORPREP_ON atau SSPROPVAL_USEPROCFORPREP_ON_DROP, penyedia SQL Server Native Client OLE DB mencoba membuat prosedur tersimpan saat perintah disiapkan. Pembuatan prosedur tersimpan berhasil jika pengguna aplikasi memiliki izin SQL Server yang memadai.

Untuk konsumen yang jarang terputus, pembuatan prosedur tersimpan sementara dapat memerlukan sumber daya tempdb yang signifikan, database sistem SQL Server tempat objek sementara dibuat. Ketika nilai SSPROP_INIT_USEPROCFORPREP SSPROPVAL_USEPROCFORPREP_ AKTIF, prosedur tersimpan sementara yang dibuat oleh penyedia SQL Server Native Client OLE DB dihilangkan hanya ketika sesi yang membuat perintah kehilangan koneksinya ke instans SQL Server. Jika koneksi tersebut adalah koneksi default yang dibuat pada inisialisasi sumber data, prosedur tersimpan sementara hanya dihilangkan ketika sumber data menjadi tidak diinisialisasi.

Ketika nilai SSPROP_INIT_USEPROCFORPREP SSPROPVAL_USEPROCFORPREP_ON_DROP, prosedur tersimpan sementara penyedia OLE DB SQL Server Native Client dihilangkan ketika salah satu hal berikut ini terjadi:

  • Konsumen menggunakan ICommandText::SetCommandText untuk menunjukkan perintah baru.

  • Konsumen menggunakan ICommandPrepare::Unprepare untuk menunjukkan bahwa ia tidak lagi memerlukan teks perintah.

  • Konsumen merilis semua referensi ke objek perintah menggunakan prosedur tersimpan sementara.

Objek perintah memiliki paling banyak satu prosedur tersimpan sementara dalam tempdb. Prosedur tersimpan sementara yang ada mewakili teks perintah saat ini dari objek perintah tertentu.

Lihat juga

Perintah