Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara mendapatkan Paket Eksekusi Kueri di SQL Server?

Ada sejumlah metode untuk mendapatkan rencana eksekusi, yang mana yang akan digunakan tergantung pada keadaan Anda. Biasanya Anda dapat menggunakan SQL Server Management Studio untuk mendapatkan rencana, namun jika karena alasan tertentu Anda tidak dapat menjalankan kueri di SQL Server Management Studio maka Anda mungkin merasa terbantu untuk dapat memperoleh rencana melalui SQL Server Profiler atau dengan memeriksa cache paket.

Metode 1 - Menggunakan SQL Server Management Studio

SQL Server hadir dengan beberapa fitur rapi yang membuatnya sangat mudah untuk menangkap rencana eksekusi, cukup pastikan bahwa item menu "Sertakan Rencana Eksekusi Aktual" (ditemukan di bawah menu "Kueri") dicentang dan jalankan kueri Anda seperti biasa .

Jika Anda mencoba untuk mendapatkan rencana eksekusi untuk pernyataan dalam prosedur tersimpan, maka Anda harus menjalankan prosedur tersimpan, seperti:

exec p_Example 42

Saat kueri Anda selesai, Anda akan melihat tab tambahan berjudul "Rencana eksekusi" muncul di panel hasil. Jika Anda menjalankan banyak pernyataan maka Anda mungkin melihat banyak rencana ditampilkan di tab ini.

Dari sini Anda dapat memeriksa rencana eksekusi di SQL Server Management Studio, atau klik kanan pada rencana dan pilih "Save Execution Plan As ..." untuk menyimpan rencana ke file dalam format XML.

Metode 2 - Menggunakan opsi SHOWPLAN

Metode ini sangat mirip dengan metode 1 (sebenarnya inilah yang dilakukan secara internal oleh SQL Server Management Studio), namun saya telah menyertakannya untuk kelengkapan atau jika Anda tidak memiliki SQL Server Management Studio.

Sebelum Anda menjalankan kueri, jalankan satu dari pernyataan berikut. Pernyataan harus menjadi satu-satunya pernyataan dalam kumpulan, yaitu Anda tidak dapat menjalankan pernyataan lain pada saat yang sama:

SET SHOWPLAN_TEXT ON
SET SHOWPLAN_ALL ON
SET SHOWPLAN_XML ON
SET STATISTICS PROFILE ON
SET STATISTICS XML ON -- The is the recommended option to use

Ini adalah opsi koneksi sehingga Anda hanya perlu menjalankan ini sekali per koneksi. Mulai saat ini, semua pernyataan yang dijalankan akan disertai dengan hasil tambahan berisi rencana eksekusi Anda dalam format yang diinginkan - cukup jalankan kueri Anda seperti biasa untuk melihat rencana tersebut.

Setelah selesai, Anda dapat menonaktifkan opsi ini dengan pernyataan berikut:

SET <<option>> OFF

Perbandingan format rencana eksekusi

Kecuali Anda memiliki preferensi yang kuat, rekomendasi saya adalah menggunakan STATISTICS XML pilihan. Opsi ini setara dengan opsi "Sertakan Rencana Eksekusi Aktual" di SQL Server Management Studio dan menyediakan sebagian besar informasi dalam format yang paling nyaman.

  • SHOWPLAN_TEXT - Menampilkan perkiraan rencana eksekusi berbasis teks dasar, tanpa mengeksekusi kueri
  • SHOWPLAN_ALL - Menampilkan perkiraan rencana eksekusi berbasis teks dengan perkiraan biaya, tanpa mengeksekusi kueri
  • SHOWPLAN_XML - Menampilkan perkiraan rencana eksekusi berbasis XML dengan perkiraan biaya, tanpa mengeksekusi kueri. Ini setara dengan opsi "Tampilkan Perkiraan Rencana Eksekusi..." di SQL Server Management Studio.
  • STATISTICS PROFILE - Mengeksekusi kueri dan menampilkan rencana eksekusi aktual berbasis teks.
  • STATISTICS XML - Mengeksekusi kueri dan menampilkan rencana eksekusi aktual berbasis XML. Ini setara dengan opsi "Sertakan Rencana Eksekusi Aktual" di SQL Server Management Studio.

Metode 3 - Menggunakan SQL Server Profiler

Jika Anda tidak dapat menjalankan kueri secara langsung (atau kueri Anda tidak berjalan lambat saat Anda menjalankannya secara langsung - ingatlah bahwa kami ingin rencana kueri berkinerja buruk), maka Anda dapat merekam rencana menggunakan pelacakan SQL Server Profiler. Idenya adalah untuk menjalankan kueri Anda saat pelacakan yang menangkap salah satu peristiwa "Showplan" sedang berjalan.

Perhatikan bahwa bergantung pada beban Anda bisa gunakan metode ini pada lingkungan produksi, namun Anda jelas harus berhati-hati. Mekanisme pembuatan profil SQL Server dirancang untuk meminimalkan dampak pada database tetapi ini tidak berarti bahwa tidak akan ada apa pun dampak kinerja. Anda mungkin juga mengalami masalah dalam memfilter dan mengidentifikasi rencana yang benar dalam pelacakan Anda jika database Anda sedang banyak digunakan. Anda jelas harus memeriksa dengan DBA Anda untuk melihat apakah mereka senang dengan Anda melakukan ini di database mereka yang berharga!

  1. Buka SQL Server Profiler dan buat jejak baru yang menghubungkan ke database yang diinginkan yang ingin Anda rekam jejaknya.
  2. Di bawah tab "Pemilihan Acara", centang "Tampilkan semua acara", centang baris "Kinerja" -> "Showplan XML" dan jalankan pelacakan.
  3. Saat pelacakan berjalan, lakukan apa pun yang perlu Anda lakukan untuk menjalankan kueri yang berjalan lambat.
  4. Tunggu kueri selesai dan hentikan pelacakan.
  5. Untuk menyimpan jejak, klik kanan pada paket xml di SQL Server Profiler dan pilih "Ekstrak data peristiwa..." untuk menyimpan paket ke file dalam format XML.

Paket yang Anda dapatkan setara dengan opsi "Sertakan Paket Eksekusi Aktual" di SQL Server Management Studio.

Metode 4 - Memeriksa cache kueri

Jika Anda tidak dapat menjalankan kueri secara langsung dan juga tidak dapat menangkap jejak profiler, Anda masih dapat memperoleh perkiraan paket dengan memeriksa cache paket kueri SQL.

Kami memeriksa cache paket dengan menanyakan SQL Server DMV. Berikut ini adalah kueri dasar yang akan mencantumkan semua paket kueri yang di-cache (sebagai xml) bersama dengan teks SQL-nya. Di sebagian besar basis data, Anda juga perlu menambahkan klausa pemfilteran tambahan untuk memfilter hasil hingga hanya paket yang Anda minati.

SELECT UseCounts, Cacheobjtype, Objtype, TEXT, query_plan
FROM sys.dm_exec_cached_plans 
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle)

Jalankan kueri ini dan klik XML rencana untuk membuka rencana di jendela baru - klik kanan dan pilih "Simpan rencana eksekusi sebagai..." untuk menyimpan rencana ke file dalam format XML.

Catatan:

Karena ada begitu banyak faktor yang terlibat (mulai dari tabel dan skema indeks hingga data yang disimpan dan statistik tabel), Anda harus selalu coba dapatkan rencana eksekusi dari database yang Anda minati (biasanya yang mengalami masalah kinerja).

Anda tidak dapat menangkap rencana eksekusi untuk prosedur tersimpan terenkripsi.

rencana eksekusi "aktual" vs "perkiraan"

Sebuah sebenarnya rencana eksekusi adalah salah satu tempat SQL Server benar-benar menjalankan kueri, sedangkan perkiraan rencana eksekusi SQL Server bekerja seperti yang akan lakukan tanpa mengeksekusi kueri. Meskipun secara logika setara, rencana eksekusi aktual jauh lebih berguna karena berisi detail dan statistik tambahan tentang apa yang sebenarnya terjadi saat mengeksekusi kueri. Ini penting saat mendiagnosis masalah saat estimasi SQL Server tidak aktif (seperti saat statistik kedaluwarsa).

  • Perkiraan dan rencana eksekusi aktual ditinjau kembali

Bagaimana cara menginterpretasikan rencana eksekusi kueri?

Ini adalah topik yang cukup layak untuk sebuah buku (gratis) tersendiri.

Lihat juga:

  • Dasar-dasar Rencana Eksekusi
  • Izin SHOWPLAN dan Batch Transact-SQL
  • SQL Server 2008 – Menggunakan Query Hash dan Query Plan Hash
  • Menganalisis Cache Paket SQL Server


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mendapatkan peringatan:Nilai nol dihilangkan dengan operasi SET agregat atau lainnya

  2. Pencocokan fuzzy menggunakan T-SQL

  3. Menjelajahi Operasi Indeks Online Tingkat Partisi di SQL Server 2014 CTP1

  4. String Format Numerik Standar Didukung oleh FORMAT() di SQL Server

  5. 3 Cara Mengembalikan String Beberapa Spasi di SQL Server