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

Rencana eksekusi SQL Server — apa itu dan bagaimana itu membantu masalah kinerja?

Rencana eksekusi SQL Server berguna untuk menyelidiki masalah kinerja dengan kueri Anda. Profesional basis data sering menerima tiket masalah atau keluhan pengguna bahwa kueri berjalan lambat. Hasil query yang biasanya memakan waktu dua atau tiga menit tiba-tiba menjadi lebih dari 30 menit. Pemecahan masalah mungkin memerlukan penyelidikan area seperti sumber daya server (CPU, memori), statistik, kinerja disk, pemblokiran, kebuntuan, dan indeks. Dalam artikel ini, kami akan fokus pada peran rencana eksekusi SQL Server dalam memecahkan masalah kinerja.

Apa yang terjadi setelah Anda mengirimkan T-SQL di SQL Server?

Mari kita lihat apa yang terjadi setelah Anda mengirimkan kueri menggunakan Transact-SQL, atau T-SQL, di SQL Server. Untuk pengguna, tentu saja, tidak ada bedanya. Pengguna berharap mendapatkan hasil yang akurat dengan cepat, baik dengan melakukan kueri ke database atau menelusuri web.

Alur kerja tingkat tinggi dari kueri SQL

  1. Pengguna mengautentikasi ke SQL Server dalam aplikasi klien dan mengirimkan kueri.
  2. SQL Server mem-parsing kueri dan memeriksa kesalahan sintaks.
  3. Pohon parse diproses lebih lanjut di Aljabar, yang menyelesaikan semua objek, tabel, dan kolom dalam kueri. Itu juga melakukan pemeriksaan pada tipe data kolom. Jika ada masalah, itu mengembalikan kesalahan. Aljabar menghasilkan pohon proses kueri dan hash kueri. Jika rencana eksekusi sudah ada, SQL Server menggunakan rencana cache itu dan mengeksekusi kueri.
  4. Jika tidak ada paket atau paket sudah usang, Pengoptimal Kueri melakukan pengoptimalan berbasis biaya penuh dengan bantuan statistik, pohon proses kueri, dan batasan. Berdasarkan masukan tersebut, ia menyiapkan rencana eksekusi SQL Server yang hemat biaya.
  5. Akhirnya, mesin kueri SQL Server mengeksekusi kueri sesuai dengan rencana eksekusi dan mengembalikan hasilnya.

Ikhtisar rencana eksekusi SQL Server

Rencana eksekusi SQL Server membantu profesional database memecahkan masalah kinerja kueri dan menulis kueri yang efisien. Saat kueri membutuhkan waktu lama untuk dijalankan, rencana eksekusi SQL Server dapat membantu Anda mengidentifikasi titik di mana kueri menggunakan sumber daya dan waktu paling banyak.

Anda dapat menggunakan salah satu dari berikut ini untuk membuat rencana eksekusi:

  1. Studio Manajemen SQL Server
  2. Azure Data Studio
  3. Profil SQL Server
  4. Acara yang diperpanjang
  5. Tampilan pengelolaan dinamis
  6. Perangkat lunak pemantauan basis data pihak ketiga

Rencana eksekusi yang dihasilkan oleh #1 hingga #5 serupa. Software pemantauan database pihak ketiga (#6) menyediakan fungsi tambahan yang menggunakan kode warna untuk mengidentifikasi operator yang mahal.

SQL Server menyediakan perkiraan dan rencana eksekusi aktual, mirip dengan apa yang Anda alami ketika Anda perlu memperbaiki mobil Anda. Seorang mekanik memeriksa kendaraan Anda, kemudian Anda menerima perkiraan pekerjaan berdasarkan kebutuhan Anda, kondisi kendaraan dan perkiraan waktu dan bahan yang menurut mekanik akan diperlukan untuk perbaikan. Tentu saja, biaya dan waktu sebenarnya mungkin berbeda, seperti halnya dengan perkiraan dan rencana eksekusi SQL Server yang sebenarnya.

Perkiraan rencana eksekusi

Tanpa menjalankan kueri, Anda dapat memperoleh perkiraan (logis) rencana eksekusi SQL Server berdasarkan statistik SQL Server. Di SQL Server Management Studio (SSMS) ikuti langkah-langkah berikut:

  1. Sorot kueri (jika Anda menginginkan rencana eksekusi untuk kueri tertentu).
  2. Klik tombol Tampilkan Perkiraan Rencana Eksekusi (pintasan keyboard Ctrl + L), seperti yang ditunjukkan di bawah ini.

Terkadang SQL Server tidak dapat menghasilkan perkiraan rencana; misalnya, jika parameter digunakan tanpa menentukan nilainya dalam kueri, atau jika tabel temp tidak dideklarasikan.

Rencana eksekusi sebenarnya

Setelah Anda mengirimkan kueri ke SQL Server, Anda bisa mendapatkan rencana eksekusi aktual yang mewakili langkah-langkah yang diambil SQL Server untuk menjalankan kueri. Seperti dalam skenario perbaikan kendaraan, ini seperti tagihan sebenarnya yang Anda terima.

Untuk mendapatkan rencana eksekusi yang sebenarnya, ikuti langkah-langkah di bawah ini di SSMS sebelum menjalankan kueri.

  1. Sorot kueri.
  2. Klik pada Tampilkan Rencana Eksekusi Aktual tombol (pintasan keyboard Ctrl + M ), seperti yang ditunjukkan di atas.

Format rencana eksekusi SQL Server

Secara default, prosedur SSMS yang dijelaskan di atas menghasilkan rencana eksekusi SQL Server dalam format grafis. Tetapi Anda memiliki opsi untuk melihat rencana eksekusi dalam tiga format berbeda:

  1. Grafis
  2. XML
  3. Teks

Mari kita lihat masing-masing format tersebut.

1. Rencana eksekusi grafis

Rencana grafis menggambarkan semua komponen, termasuk aliran data, seperti yang ditunjukkan di bawah ini.

Operator

Operator ditampilkan sebagai ikon. Setiap operator ditunjuk untuk melakukan tugas tertentu. Misalnya, pengoptimal kueri di SQL Server mungkin melakukan pemindaian tabel, pemindaian indeks, dan pencarian. Beginilah tampilan operator pencarian indeks berkerumun saat menarik data dari indeks pada tabel [AdventureWorks2019].[HumanResources]:

Persentase biaya

Paket grafis juga menunjukkan persentase biaya — di sini, 99% untuk pencarian indeks berkerumun — terkait dengan operator. Biaya tersebut relatif terhadap operator lain yang digunakan dalam mengeksekusi kueri.

Panah aliran data

Panah menghubungkan operator, lebarnya mencerminkan jumlah baris data yang berpindah dari satu operator ke operator berikutnya.

Misalnya, kueri Anda hanya menghasilkan satu baris keluaran tetapi membutuhkan waktu lama untuk diselesaikan. Memindahkan mouse ke panah aliran data dalam rencana eksekusi, Anda menemukan bahwa jumlah baris yang dibaca adalah jutaan. Itu menunjukkan ketidakseimbangan yang sangat besar dalam pemanfaatan sumber daya dan menunjukkan area yang membutuhkan pengoptimalan.

Keterangan alat

Seperti yang ditunjukkan di bawah ini, saat Anda mengarahkan mouse ke operator, tooltips muncul dengan lebih banyak statistik tentang aliran data.

Jendela properti

Jendela Properties menampilkan informasi rinci tentang operator dan komponennya. Ini adalah superset dari tooltips.

2. Rencana eksekusi SQL Server berformat XML

Rencana eksekusi XML dalam format yang spesifik dan terstruktur. Meskipun format XML kurang intuitif secara visual, format ini menyimpan semua detail dalam XML dan tidak memerlukan langkah tambahan untuk melihat properti dan tooltips. Anda dapat dengan mudah mengonversi format XML ke format grafis dan sebaliknya.

Untuk mengonversi rencana eksekusi grafis ke dalam format XML, klik kanan padanya dan pilih Show Execution Plan XML , seperti yang ditunjukkan di bawah ini.

Hasilnya adalah rencana eksekusi terstruktur berformat XML berikut.

Perintah berikut juga menghasilkan rencana eksekusi dalam format XML:

  • Untuk perkiraan paket:AKTIFKAN SHOWPLAN_XML
  • Untuk paket sebenarnya: SET STATISTICS_XML AKTIF

3. Rencana eksekusi SQL Server berformat teks

Anda dapat membuat rencana eksekusi dengan beberapa cara:

  • ATUR SHOWPLAN_TEXT AKTIF

Perintah ini menghasilkan perkiraan rencana eksekusi, tanpa informasi rinci tentang eksekusi query. Ini ditujukan untuk aplikasi seperti utilitas sqlcmd.

  • ATUR SHOWPLAN_ALL AKTIF

Perintah ini menghasilkan perkiraan rencana eksekusi, dengan informasi rinci tentang semua operator dan operasi dalam format tabel.

  • SETEL PROFIL STATISTIK

Perintah ini menghasilkan rencana eksekusi aktual, setelah eksekusi kueri, dalam format tabel.

Mengapa perkiraan dan rencana eksekusi SQL Server aktual berbeda?

Perkiraan dan rencana pelaksanaan yang sebenarnya umumnya serupa, meskipun beberapa keadaan dapat menyebabkannya berbeda.

Statistik basi

Alasan utama perbedaan antara rencana eksekusi yang diperkirakan dan yang sebenarnya adalah statistik basi.

Pengoptimal kueri menggunakan statistik untuk membuat rencana eksekusi kueri yang hemat biaya dan dioptimalkan. Jika statistik Anda tidak diperbarui, atau jika pengambilan sampel data Anda tidak sesuai, pengoptimal kueri akan melakukan pengoptimalan penuh dan membuat rencana eksekusi berdasarkan informasi lama. Anda juga bisa mendapatkan rencana eksekusi yang tidak efisien yang dapat menyebabkan masalah kinerja kueri.

Statistik basi terkadang terjadi ketika data sering berubah dan statistik tidak diperbarui sesuai dengan pemeliharaan indeks.

Rencana eksekusi SQL Server serial atau paralel

Pada waktu kompilasi, pengoptimal kueri membuat rencana eksekusi dan menghasilkan rencana serial atau paralel tergantung pada biaya kueri dan ambang biaya paralelisme. Meskipun rencana eksekusi mungkin sama untuk mode serial dan paralel, SQL Server memutuskan di antara keduanya berdasarkan sumber daya dan aktivitas server.

Perkiraan tidak valid

Seperti disebutkan sebelumnya, Aljabar mengikat nama objek sebelum mengeksekusi kueri SQL. Misalkan Anda menentukan bahwa tabel bernama test akan DIBUAT saat waktu proses, lalu coba buat perkiraan rencana eksekusi. Karena tabel tersebut tidak ada, Anda akan menerima pesan kesalahan, seperti yang ditunjukkan di bawah ini.

Menggunakan rencana eksekusi

Singkatnya, Anda dapat membuat rencana eksekusi SQL Server dalam format grafis, XML, dan teks serta menggunakannya untuk membantu Anda mengatasi masalah performa database.

Rencana eksekusi kueri adalah langkah utama dalam mengidentifikasi alur kerja kueri, operator, dan komponen sehingga Anda dapat menyetel kueri untuk kemungkinan peningkatan apa pun. Untuk informasi selengkapnya tentang menggunakan rencana eksekusi, lihat postingan kami: Cara Membaca dan Menganalisis Rencana Eksekusi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Memeriksa Pengaturan Konfigurasi untuk Database Mail di SQL Server (T-SQL)

  2. tidak ada sqljdbc_auth di java.library.path

  3. Bagaimana cara terhubung ke MS SQL Server menggunakan Inno Setup?

  4. Tanda kurung kurawal di T-SQL

  5. Bagaimana INTERSECT Bekerja di SQL Server