Menggunakan SQL Server Profiler untuk membuat dan menguji panduan rencana

Berlaku untuk: SQL Server (semua versi yang didukung) Azure SQL Database

Saat membuat panduan rencana, Anda bisa menggunakan SQL Server Profiler untuk mengambil teks kueri yang tepat untuk digunakan dalam argumen statement_text prosedur tersimpan sp_create_plan_guide. Ini membantu memastikan bahwa panduan paket akan dicocokkan dengan kueri pada waktu kompilasi. Setelah panduan rencana dibuat, SQL Server Profiler juga dapat digunakan untuk menguji bahwa panduan rencana, pada kenyataannya, dicocokkan dengan kueri. Umumnya, Anda harus menguji panduan rencana dengan menggunakan SQL Server Profiler untuk memverifikasi bahwa kueri Anda dicocokkan dengan panduan paket Anda.

Menangkap teks kueri dengan menggunakan SQL Server Profiler

Jika Anda menjalankan kueri dan mengambil teks persis seperti yang dikirimkan ke SQL Server dengan menggunakan SQL Server Profiler, Anda bisa membuat panduan paket jenis SQL atau TEMPLATE yang akan sama persis dengan teks kueri. Ini memastikan bahwa panduan paket digunakan oleh pengoptimal kueri.

Pertimbangkan kueri berikut yang dikirimkan oleh aplikasi sebagai batch yang berdiri sendiri:

SELECT COUNT(*) AS c  
FROM Sales.SalesOrderHeader AS h  
INNER JOIN Sales.SalesOrderDetail AS d  
  ON h.SalesOrderID = d.SalesOrderID  
WHERE h.OrderDate BETWEEN '20000101' and '20050101';  

Misalkan Anda ingin kueri ini dijalankan menggunakan operasi gabungan, tetapi SHOWPLAN menunjukkan bahwa kueri tidak menggunakan gabungan. Anda tidak dapat mengubah kueri secara langsung dalam aplikasi, jadi sebagai gantinya Anda membuat panduan rencana untuk menentukan bahwa petunjuk kueri MERGE JOIN ditambahkan ke kueri pada waktu kompilasi.

Untuk mengambil teks kueri persis seperti yang SQL Server terima, ikuti langkah-langkah berikut:

  1. Mulai jejak SQL Server Profiler, pastikan bahwa jenis peristiwa SQL:BatchStarting dipilih.

  2. Minta aplikasi menjalankan kueri.

  3. Jeda Jejak SQL Server Profiler.

  4. Klik peristiwa SQL:BatchStarting yang sesuai dengan kueri.

  5. Klik kanan dan pilih Ekstrak Data Peristiwa.

    Penting

    Jangan mencoba menyalin teks batch dengan memilihnya dari panel bawah jendela pelacakan Profiler. Ini dapat menyebabkan panduan rencana yang Anda buat tidak cocok dengan batch asli.

  6. Simpan data peristiwa ke file. Ini adalah teks batch.

  7. Buka file teks batch di Notepad dan salin teks ke penyalinan dan tempel buffer.

  8. Buat panduan paket dan tempelkan teks yang disalin di dalam tanda kutip ('') yang ditentukan untuk argumen @stmt . Anda harus menghindari tanda kutip tunggal dalam argumen @stmt dengan mendahuluinya dengan tanda kutip tunggal lainnya. Berhati-hatilah untuk tidak menambahkan atau menghapus karakter lain ketika Anda menyisipkan tanda kutip tunggal ini. Misalnya, tanggal harfiah '20000101' harus dibatasi sebagai ''20000101''.

Berikut adalah panduan rencananya:

EXEC sp_create_plan_guide   
    @name = N'MyGuide1',  
    @stmt = N'<paste the text copied from the batch text file here>',  
    @type = N'SQL',  
    @module_or_batch = NULL,  
    @params = NULL,  
    @hints = N'OPTION (MERGE JOIN)';  

Panduan rencana pengujian dengan menggunakan SQL Server Profiler

Untuk memverifikasi bahwa panduan paket sedang dicocokkan dengan kueri, ikuti langkah-langkah berikut:

  1. Mulai jejak SQL Server Profiler, pastikan bahwa jenis peristiwa Xml Showplan dipilih (terletak di bawah simpul Performa).

  2. Minta aplikasi menjalankan kueri.

  3. Jeda Jejak SQL Server Profiler.

  4. Temukan peristiwa Tampilkan XML untuk kueri yang terpengaruh.

    Catatan

    Kejadian Tampilkan XML untuk Kompilasi Kueri tidak dapat digunakan. PlanGuideDB tidak ada dalam peristiwa tersebut.

  5. Jika panduan paket berjenis OBJECT atau SQL, verifikasi bahwa peristiwa XML Showplan berisi atribut PlanGuideDB dan PlanGuideName untuk panduan paket yang Anda harapkan cocok dengan kueri. Atau, dalam kasus panduan paket TEMPLAT, verifikasi bahwa peristiwa XML Showplan berisi atribut TemplatePlanGuideDB dan TemplatePlanGuideName untuk panduan rencana yang diharapkan. Ini memverifikasi bahwa panduan rencana berfungsi. Atribut ini terkandung di bawah <elemen StmtSimple> dari rencana.

Lihat juga

sp_create_plan_guide (T-SQL)