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

Bagaimana SHOWPLAN_XML Bekerja di SQL Server

Di SQL Server, Anda dapat menggunakan SET SHOWPLAN_XML pernyataan untuk mengembalikan informasi rinci tentang bagaimana pernyataan T-SQL akan dieksekusi, dalam bentuk dokumen XML yang terdefinisi dengan baik.

Ini mirip dengan SHOWPLAN_ALL , kecuali SHOWPLAN_ALL mengembalikan kumpulan datanya berupa baris yang membentuk pohon hierarki.

Anda dapat mengatur SHOWPLAN_XML ke salah satu ON atau OFF .

Ketika SHOWPLAN_XML adalah ON , semua pernyataan T-SQL berikutnya tidak dieksekusi. Sebaliknya SQL Server mengembalikan informasi eksekusi untuk pernyataan (tanpa menjalankannya).

Contoh

Berikut ini contoh untuk didemonstrasikan.

SET SHOWPLAN_XML ON;
GO

SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO

Perhatikan bahwa SET SHOWPLAN_XML tidak dapat ditentukan di dalam prosedur tersimpan, dan itu harus menjadi satu-satunya pernyataan dalam sebuah batch.

Hasil yang Anda peroleh mungkin bergantung pada alat yang Anda gunakan untuk mengakses SQL Server.

Ketika saya menjalankan ini di Azure Data Studio, saya dapat mengklik berbagai tab untuk mendapatkan tampilan hasil yang berbeda.

Hasil tab menampilkan string XML mentah:

Mengklik baris akan membuka dokumen XML di tab baru:

Paket Kueri tab menampilkan representasi grafis dari hasil:

Operasi Teratas tab menyajikan data dalam format tabel yang memungkinkan Anda mengurutkan data menurut berbagai metrik:

Tidak Berfungsi?

Jika tidak berhasil untuk Anda, pastikan Sertakan Rencana Eksekusi Aktual tidak dipilih dalam SSMS. Saat ini dipilih, SET SHOWPLAN_XML ON tidak menghasilkan keluaran XML Showplan.

Cara Mematikannya

Anda dapat mematikannya dengan menggunakan SET SHOWPLAN_XML OFF .

Setelah Anda melakukannya, pernyataan berikutnya akan dijalankan seperti biasa.

SET SHOWPLAN_XML OFF;
GO

SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO

Hasil:

Commands completed successfully.
+---------+-----------+---------+-----------+-----------+
| CatId   | CatName   | DogId   | DogName   | GoodDog   |
|---------+-----------+---------+-----------+-----------|
| 2       | Fluffy    | 2       | Fluffy    | 0         |
+---------+-----------+---------+-----------+-----------+
(1 row affected)
Commands completed successfully.

Rencana Eksekusi dalam GUI

Jika Anda menggunakan alat grafis seperti SSMS atau Azure Data Studio, Anda mungkin memiliki opsi pintasan untuk menampilkan perkiraan rencana eksekusi kueri grafis. Ini memungkinkan Anda untuk melihat paket kueri tanpa perlu menjalankan SET SHOWPLAN_XML ON .

Untuk menjalankan perkiraan rencana kueri:

  • Dalam SSMS Anda dapat menggunakan Ctrl + L untuk melakukan ini. Atau Anda dapat mengeklik Tampilkan Perkiraan Rencana Eksekusi ikon, atau klik kanan di jendela kueri dan pilih Tampilkan Perkiraan Rencana Eksekusi . Ini akan menyelamatkan Anda dari keharusan mengubah SHOWPLAN_XML aktif dan nonaktif dalam kode Anda.
  • Di Azure Data Studio, Anda dapat mengklik tombol Jelaskan tombol di atas jendela kueri.

Anda juga dapat menjalankan rencana kueri yang sebenarnya:

  • Di SSMS, pada Kueri menu, klik Sertakan Rencana Eksekusi Aktual atau klik Sertakan Rencana Eksekusi Aktual tombol bilah alat.
  • Di Azure Data Studio, buka Tampilan> Palet Perintah dan ketik Jalankan Kueri Saat Ini dengan Paket Aktual .

Perhatikan bahwa jika Sertakan Rencana Eksekusi Aktual dipilih dalam SSMS, SET SHOWPLAN_XML ON opsi tidak menghasilkan keluaran XML Showplan. Coba hapus Sertakan Rencana Eksekusi Aktual tombol ini sebelum menggunakan SET pilihan.

Namun, saya menemukan Azure Data Studio melakukan yang sebaliknya SHOWPLAN_XML ON tampaknya menimpa Jalankan Kueri Saat Ini dengan Paket Aktual opsi, kecuali jika saya menjalankan Jelaskan pertama (perkiraan paket kueri), setelah itu Jalankan Kueri Saat Ini dengan Paket Aktual tiba-tiba berfungsi (Baris Sebenarnya dan Eksekusi Sebenarnya kolom Operasi Teratas tab mengembalikan data yang sesuai).

Sebaiknya matikan opsi XML Showplan sebelum menggunakan metode lain untuk mengambil paket kueri.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tentang Perintah GO di SQL Server

  2. Cara mentransmisikan DateTime ke Time

  3. VALUES Clause di SQL Server

  4. 9 Tugas Penting yang Menjadi Tanggung Jawab DBA

  5. Bagaimana Saya Menyalin Kumpulan Data, dan Mengubah Referensi FK untuk Menunjuk ke Semua Salinan?