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

Cara membaca dan menganalisis rencana eksekusi SQL Server

Paket eksekusi SQL Server adalah gerbang untuk pengoptimal kueri dan eksekusi kueri untuk profesional database. Mereka mengungkapkan pemrosesan kueri dan fase yang terlibat seperti tabel yang terpengaruh, indeks, statistik, jenis gabungan, jumlah baris yang terpengaruh, pemrosesan kueri, pengurutan data, dan pengambilan data.

Dalam artikel sebelumnya, Rencana Eksekusi SQL Server — Apa itu dan Bagaimana Membantu Masalah Performa? kami menjelajahi alur kerja eksekusi kueri tingkat tinggi, berbagai jenis rencana eksekusi (grafis, XML, dan teks), bersama dengan rencana eksekusi aktual dan perkiraan.

Sekarang, kami akan menjelajahi hal-hal yang perlu Anda ketahui saat mengevaluasi rencana eksekusi SQL Server dan cara terbaik untuk menginterpretasikan informasi.

Membaca rencana eksekusi SQL Server grafis

Umumnya, kita membaca rencana eksekusi dari kanan ke kiri. Anda mulai dengan operator rencana eksekusi paling kanan atas dan bergerak ke kiri. Ini membantu Anda mengikuti aliran data logis dalam kueri.

Misalkan Anda menjalankan kueri berikut dalam database sampel [AdventureWorks2019] dan melihat rencana eksekusi yang sebenarnya.

SELECT TOP (10) [SalesOrderID] [SalesOrderDetailID] [CarrierTrackingNumber] [OrderQty] [ProductID] [SpecialOfferID] [ModifiedDate] FROM [AdventureWorks2019].[Sales].[SalesOrderDetail] where [UnitPrice]>1000

Kueri mengambil data dari tabel [Penjualan].[SalesOrderDetail] untuk pesanan dengan harga satuan lebih besar dari 1.000.

Jika kita membaca rencana eksekusi dari kanan ke kiri, kita akan melihat hal berikut:

  • Operator pertama adalah Clustered Index Scan yang membaca data dari tabel [Sales].[SalesOrderDetail]. Saat Anda mengarahkan penunjuk mouse ke panah yang menghubungkan Pemindaian Indeks Berkelompok dan operator Top, ini akan menampilkan perkiraan dan jumlah baris aktual, serta perkiraan ukuran data.

  • Ini meneruskan data dari operator Clustered Index Scan ke operator Top melewati 10 baris ke operator SELECT.

Secara internal, SQL Server mengeksekusi rencana dari kiri ke kanan. Jika Anda tertarik dengan perintah fisik operator, Anda harus membaca rencana eksekusi dari kiri ke kanan. Setiap operator meminta data dari operator berikutnya. Misalnya, dalam skenario di atas, operator Top meminta data dari Clustered Index Scan. Pemindaian Indeks Berkelompok menampilkan baris dari tabel [Penjualan].[SalesOrderDetail] yang memenuhi Di mana kondisi klausa.

Jika beberapa cabang bergabung dalam rencana eksekusi, Anda harus mengikuti pendekatan dari kanan ke kiri, dari atas ke bawah.

Biaya operator

Setiap operator dalam rencana eksekusi SQL Server dikaitkan dengan biaya. Biaya operator relatif terhadap biaya lain dalam rencana pelaksanaan. Biasanya, kita perlu berkonsentrasi pada operator yang mahal dan menyetel kueri di sekitarnya.

Dalam hal rencana eksekusi yang rumit, mungkin sulit untuk mengidentifikasi operator yang mahal. Dalam hal ini, Anda dapat menggunakan SET SHOWPLAN_ALL AKTIF, dan itu akan memberikan informasi dalam format tabel.

Anda juga dapat menggunakan [Teks stmt] untuk memecah rencana eksekusi di setiap operator dan tingkat pernyataan.

SQL Server Management Studio (SSMS) juga memberikan fleksibilitas untuk menemukan operator berdasarkan kriteria pencarian. Untuk melakukannya, klik kanan pada rencana eksekusi dan pilih Temukan Node. Ini akan membuka jendela dengan berbagai kondisi pencarian. Tentukan kebutuhan Anda, dan itu akan menunjuk ke node tertentu, seperti yang ditunjukkan di bawah ini.

Atau, Anda dapat menggunakan Azure Data Studio dan membuka Jalankan Kueri Saat Ini dengan Paket Aktual  di bawah palet Perintah. Ini memberikan rencana eksekusi aktual dalam bentuk yang ringkas, bersama dengan operasi Top untuk mengidentifikasi operator yang mahal dengan cepat.

Analisis rencana pertunjukan

Anda dapat mengidentifikasi Estimasi Kardinalitas yang Tidak Akurat untuk menyelidiki rencana eksekusi yang bermasalah. Ini akan memberi Anda informasi singkat tentang menemukan operator tertentu dan rekomendasi di tab Analisis ShowPlan. Anda dapat mengurutkan hasil dalam kolom selisih, aktual, dan perkiraan untuk menemukan masalah dan rekomendasi untuk operator tertentu dalam rencana eksekusi. Ini tersedia dari SSMS 17.4.

Untuk melakukannya, cukup klik kanan pada rencana eksekusi, lalu klik Analyze the Actual Execution Plan.

Kemudian, klik hyperlink di bawah Menemukan Detail . Ini akan menjelaskan kemungkinan skenario untuk ketidakakuratan estimasi dan solusi untuk meningkatkan estimasi ini. Ini adalah titik awal yang baik untuk masalah estimasi kardinalitas.

Bandingkan Showplan

Misalkan Anda mengidentifikasi masalah dalam rencana eksekusi dan Anda menerapkan solusi untuk memperbaikinya. Namun, bagaimana Anda akan membandingkan rencana eksekusi sebelumnya (bagaimana sebelum menerapkan solusi) dan rencana eksekusi saat ini? The SSMS Bandingkan Showplan fitur memberi Anda fleksibilitas untuk membandingkan dua rencana eksekusi. Ini menyoroti persamaan dan perbedaan antara rencana ini.

Biasanya, DBA mendapat telepon dari pengembang bahwa kueri tertentu berfungsi dengan baik dalam produksi tetapi membutuhkan waktu lama di lingkungan QA dengan parameter yang sama. Kasus penggunaan lain adalah bermigrasi ke versi SQL Server yang lebih baru. Misalkan setelah migrasi, Anda menghadapi masalah dengan kueri yang berfungsi dengan baik di versi SQL yang lebih rendah. Anda dapat menggunakan alat ini untuk membandingkan rencana eksekusi dari berbagai versi SQL dan tingkat patch juga.

Simpan rencana eksekusi di SQLPlan perpanjangan. Setelah itu, Anda dapat mengklik kanan pada rencana eksekusi lain dan memilih Bandingkan Showplan .

Rencana eksekusi langsung di SSMS

Anda dapat mengaktifkan rencana eksekusi langsung dari kueri aktif. Ini akan memberi Anda statistik waktu nyata tentang aliran data ke berbagai operator. Dalam statistik eksekusi waktu berjalan, Anda dapat melacak waktu dan jumlah baris yang telah berlalu. Ini adalah fitur luar biasa untuk mengatasi masalah dan men-debug masalah kinerja. Anda dapat menggunakan statistik kueri langsung dari SQL Server 2016 dan yang lebih baru.

Catatan:Anda harus menggunakan SSMS versi terbaru. Lihat Microsoft docs untuk mendownload SSMS versi terbaru.

  • Versi terbaru saat ini:SSMS 18.7.1

Untuk statistik kueri langsung, aktifkan Sertakan Statistik Kueri Langsung menggunakan bilah alat SSMS.

Anda juga dapat melihat rencana eksekusi langsung dari Activity Monitor . Di Activity Monitor, pilih proses yang diinginkan, klik kanan untuk melihat menu dan pilih Show Live Execution Plan.

Ini memberi Anda perkiraan kueri langsung bersama dengan aliran data dan persentase penyelesaian dari masing-masing operator. Biasanya, kami menunggu eksekusi kueri selesai dan melihat rencana eksekusi yang sebenarnya. Namun, misalkan kueri Anda membutuhkan waktu lebih dari 30 menit untuk menghasilkan hasil. Dalam hal ini, Anda dapat menggunakan statistik kueri langsung untuk melacak masing-masing operator, aliran data, dan menunjukkan operator mana yang membutuhkan waktu untuk menyelesaikan kueri. Misalnya, seperti yang ditunjukkan di bawah ini, kueri berjalan selama 12 menit 48 detik, dan kueri diperkirakan selesai 20%. Di tingkat operator, pemindaian indeks dan spool jumlah baris selesai 41%. Garis putus-putus menunjukkan pergerakan data.

Meninjau penggunaan rencana eksekusi SQL Server

Paket eksekusi SQL Server sangat berguna dalam memecahkan masalah dan mengoptimalkan kueri yang lambat. Setiap profesional basis data perlu mengetahui cara menganalisis dan memahami informasi setelah rencana eksekusi tersedia. Seperti yang dibahas sebelumnya, ada berbagai alat di SSMS dan Azure Data Studio untuk membantu Anda meninjau dan menyelesaikan masalah kinerja—fitur Bandingkan Paket khususnya adalah salah satu yang dapat dimanfaatkan saat Anda mulai membuat perubahan dan menilai kinerja.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Saat menghapus kaskade untuk tabel referensi sendiri

  2. Pangkas (bukan bulat) tempat desimal di SQL Server

  3. SQL Server 2017:Menyalin Data SQL Server dari Linux ke Windows dengan SSIS

  4. Cara membagi string setelah karakter tertentu di SQL Server dan memperbarui nilai ini ke kolom tertentu

  5. Jalankan Pemicu Hanya Saat Kolom Tertentu Diperbarui (SQL Server)