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

SQL Server SHOWPLAN_ALL

Di SQL Server, Anda dapat menggunakan SET SHOWPLAN_ALL pernyataan untuk mengembalikan informasi rinci tentang bagaimana pernyataan T-SQL dijalankan, serta perkiraan kebutuhan sumber daya untuk pernyataan.

SHOWPLAN_ALL mengembalikan informasi sebagai sekumpulan baris yang membentuk pohon hierarki yang mewakili langkah-langkah yang diambil oleh prosesor kueri SQL Server saat mengeksekusi setiap pernyataan. Ini mirip dengan SHOWPLAN_TEXT , kecuali SHOWPLAN_ALL mengembalikan informasi yang lebih detail (dan dimaksudkan untuk digunakan dengan aplikasi yang dapat menangani outputnya).

Anda dapat mengatur SHOWPLAN_ALL ke salah satu ON atau OFF .

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

Penting untuk diperhatikan bahwa SHOWPLAN_ALL memberikan perkiraan dari persyaratan sumber daya, dan bahwa persyaratan sumber daya yang sebenarnya mungkin berbeda ketika pernyataan tersebut benar-benar dijalankan.

Contoh

Berikut ini contoh untuk didemonstrasikan.

SET SHOWPLAN_ALL ON;
GO

SELECT * FROM Cats;
GO

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

Seperti inilah hasilnya di Azure Data Studio:

Dan inilah tampilannya di mssql-cli (antarmuka baris perintah) saat menggunakan output vertikal:

Commands completed successfully.
-[ RECORD 1 ]-------------------------
StmtText           | 
SELECT * FROM Cats;
StmtId             | 1
NodeId             | 1
Parent             | 0
PhysicalOp         | NULL
LogicalOp          | NULL
Argument           | 1
DefinedValues      | NULL
EstimateRows       | 3
EstimateIO         | NULL
EstimateCPU        | NULL
AvgRowSize         | NULL
TotalSubtreeCost   | 0.0032853
OutputList         | NULL
Warnings           | NULL
Type               | SELECT
Parallel           | 0
EstimateExecutions | NULL
-[ RECORD 2 ]-------------------------
StmtText           |   |--Clustered Index Scan(OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F]))
StmtId             | 1
NodeId             | 2
Parent             | 1
PhysicalOp         | Clustered Index Scan
LogicalOp          | Clustered Index Scan
Argument           | OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F])
DefinedValues      | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName]
EstimateRows       | 3
EstimateIO         | 0.003125
EstimateCPU        | 0.0001603
AvgRowSize         | 142
TotalSubtreeCost   | 0.0032853
OutputList         | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName]
Warnings           | NULL
Type               | PLAN_ROW
Parallel           | 0
EstimateExecutions | 1
(2 rows affected)
Commands completed successfully.

Ada banyak kolom, jadi saya menggunakan output vertikal di sini agar lebih mudah dibaca.

Jika kueri saya lebih kompleks, lebih banyak baris akan dikembalikan.

Berikut adalah contoh kueri (sedikit) yang lebih kompleks.

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

Hasil:

Cara Mematikannya

Anda dapat mematikannya dengan menggunakan SET SHOWPLAN_ALL OFF .

Setelah Anda melakukannya, pernyataan berikutnya akan dijalankan seperti biasa.

SET SHOWPLAN_ALL OFF;
GO

SELECT * FROM Cats;
GO

Hasil:

Commands completed successfully.
+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 1       | Meow      |
| 2       | Fluffy    |
| 3       | Scratch   |
+---------+-----------+
(3 rows affected)
Commands completed successfully.

Usang atau Tidak?

Menurut artikel MSDN lama ini, SET SHOWPLAN_ALL dijadwalkan untuk dihentikan di versi showplan mendatang, dan disarankan agar Anda menggunakan SET SHOWPLAN_XML sebagai gantinya.

Namun, artikel MSDN itu untuk SQL Server 2008 R2, dan saat saya menulis ini, artikel tersebut tampaknya tidak ditinggalkan di SQL Server 2019. Faktanya, dokumentasi saat ini tidak menyebutkan penghentian, dan tidak disertakan ketika saya menjalankan daftar item yang tidak digunakan lagi di SQL Server.

Bagaimanapun, mungkin ada baiknya untuk mengingat hal ini sebelum menggunakannya di rilis mendatang.

Rencana Eksekusi Grafis

Jika Anda menggunakan alat grafis seperti SSMS atau Azure Data Studio, Anda mungkin memiliki opsi untuk melihat perkiraan rencana eksekusi kueri grafis untuk kueri saat ini.

  • 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 .
  • Di Azure Data Studio, Anda dapat mengklik tombol Jelaskan tombol di atas jendela kueri.

Anda juga dapat menggunakan SET SHOWPLAN_XML ON untuk mengaktifkannya, dan SET SHOWPLAN_XML OFF untuk menonaktifkannya.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Pilih Ulang Tahun Mendatang

  2. Cara Mengubah Format Tanggal Saat Ini di SQL Server (T-SQL)

  3. INT vs Unique-Identifier untuk bidang ID di database

  4. Bagaimana Fungsi FORMAT() Bekerja di SQL Server (T-SQL)

  5. DATEDIFF_BIG() Contoh di SQL Server