Jalankan kembali rencana kueri aktual spesifik

7

Saya telah menangkap rencana permintaan aktual untuk permintaan tertentu.

Setelah ini, saya telah mengubah beberapa hal di sekitar (termasuk memperbarui statistik) dan menjalankan kembali permintaan tertentu. Sekarang rencana kueri yang sebenarnya berbeda (yang masuk akal).

Permintaan sekarang berjalan jauh lebih cepat. Saya ingin tahu apakah rencana eksekusi baru ada hubungannya dengan ini, karena perubahan lain (perubahan pada pengaturan IO, pengaturan VM, restart contoh sql, dll) juga dapat menyebabkan peningkatan kinerja. Untuk menguji ini saya ingin menjalankan kueri sekali lagi, dan mencoba untuk memaksa SQL Server untuk menggunakan paket eksekusi yang lama.

Pertanyaan : apakah ada cara untuk menjalankan kembali kueri dengan rencana eksekusi yang disediakan pengguna, atau bahkan menjalankan kueri langsung dari rencana tersebut?

Inilah yang saya coba untuk mencari tahu ini:

Jadi intinya: apakah ini mungkin? Jika demikian: bagaimana?

Jeroen
sumber
Saya telah menggunakan yang berikut ini untuk memeriksa permintaan yang panjang dan pendek pada sistem dev & test saya. Kosongkan paket, buffer, cache yang ada dan jalankan query dengan jejak. Menggunakan fungsi drop / free dbcc untuk menghapus sesi, cache, buffer, dll dan mengatur jejak tidak aktif. Tidak terkait tetapi membantu, adalah untuk melihat apa masalahnya dengan data di dalam tabel. Harap dicatat bahwa saya melihat bahwa Anda menggunakan S2K12 sehingga referensi ini harus cocok. Perilaku ini mungkin berbeda di versi Sql Server sebelumnya. Semoga ini membantu. DBCC FREESYSTEMCACHE, DROPCLEANBUFFERS, Jejak Aktif, show_statistics, dll.
Ray Porrata

Jawaban:

10

Iya.

Anda butuh USE PLANpetunjuk.

Di mana Anda memasok XMLdari paket pertama.

SELECT *
FROM T
OPTION (USE PLAN N'<?xml version="1.0" encoding="utf-16"?> ....')

Sementara itu tidak menjamin bahwa rencana itu akan persis sama (misalnya operator skalar komputasi dapat bergerak misalnya), kemungkinan akan cukup dekat.

Martin Smith
sumber
Terima kasih, persis apa yang saya minta. (Sayangnya itu membuat saya dengan masalah baru: " Rencana kueri tidak dapat ditemukan karena pengoptimal melebihi jumlah operasi yang diizinkan saat mencari rencana yang ditentukan dalam petunjuk USE PLAN. ", Tapi itu masalah lain yang harus saya tangani.)
Jeroen
@ Joen - Hmmm. Tidak yakin apakah ada yang bisa dilakukan untuk itu. Mungkin ada beberapa tanda jejak yang akan meningkatkan batas itu tetapi jika ada saya tidak mengetahuinya!
Martin Smith
Tidak masalah, terima kasih atas bantuan Anda: pelajari sesuatu yang baru hari ini! : D
Jeroen
@ Joen - Mungkin TF 8780 tidak berdokumen yang menonaktifkan batas waktu pengoptimal ? Tidak yakin apakah itu akan memiliki efek yang diinginkan.
Martin Smith