Titik kritisnya adalah istilah yang pertama kali saya dengar digunakan oleh guru penyetelan kinerja SQL Server dan anggota lama Dewan Penasihat SentryOne Kimberly Tripp – dia memiliki seri blog yang bagus di sini. Titik kritisnya adalah ambang batas di mana rencana kueri akan "berujung" dari mencari indeks nonclustered yang tidak mencakup ke memindai indeks atau heap yang berkerumun. Rumus dasar yang bukan merupakan aturan yang keras dan cepat karena ada berbagai faktor lain yang mempengaruhi, adalah sebagai berikut:
- Pemindaian indeks (atau tabel) berkerumun akan sering terjadi ketika perkiraan baris melebihi 33% dari jumlah halaman dalam tabel
- Pencarian non-clustered plus key lookup akan sering terjadi ketika perkiraan baris di bawah 25% dari halaman dalam tabel
- Di antara 25% dan 33% itu bisa berjalan baik
Perhatikan bahwa ada "titik kritis" pengoptimal lainnya, seperti saat meliputi indeks akan memberi tip dari pencarian ke pemindaian, atau ketika kueri akan paralel, tetapi yang menjadi fokus kami adalah indeks nonclustered non-covering skenario karena cenderung menjadi yang paling umum – sulit untuk mencakup setiap kueri! Ini juga berpotensi paling berbahaya untuk kinerja, dan saat Anda mendengar seseorang merujuk ke titik kritis indeks SQL Server, biasanya inilah yang mereka maksud.
Titik Kritis di versi Plan Explorer sebelumnya
Plan Explorer sebelumnya telah menunjukkan efek bersih dari titik kritis saat sniffing parameter sedang dimainkan di Analisis Indeks tab, khususnya melalui Est(imated) Operation baris di Parameter panel:
Estimasi operasi untuk parameter kompilasi dan runtime, berdasarkan jumlah baris
Jika Anda belum menjelajahi modul Analisis Indeks, saya mendorong Anda untuk melakukannya. Meskipun diagram rencana dan fitur Plan Explorer lainnya sangat bagus, sejujurnya, Analisis Indeks adalah tempat Anda harus menghabiskan sebagian besar waktu Anda saat menyetel kueri dan indeks. Lihat ulasan mendalam Aaron Bertrand tentang fitur dan skenario di sini, dan tutorial indeks penutup yang bagus oleh Devon Leann Wilson di sini.
Di balik layar, kami melakukan matematika titik kritis dan memprediksi operasi indeks (mencari atau memindai) berdasarkan perkiraan baris dan jumlah halaman dalam tabel untuk parameter yang dikompilasi dan runtime, dan kemudian memberi kode warna pada sel terkait sehingga Anda dapat dengan cepat melihat apakah mereka cocok. Jika tidak, seperti pada contoh di atas, ini bisa menjadi indikator kuat bahwa Anda memiliki masalah sniffing parameter.
Histogram Statistik bagan mencerminkan distribusi nilai untuk kunci utama indeks menggunakan kolom untuk baris yang sama (oranye) dan baris rentang (teal). Ini adalah nilai yang sama yang akan Anda dapatkan dari DBCC SHOW_STATISTICS atau sys.dm_db_stats_histogram . Bagian dari distribusi yang terkena baik oleh parameter yang dikompilasi dan runtime disorot untuk memberi Anda gambaran perkiraan tentang berapa banyak baris yang terlibat untuk masing-masing. Cukup pilih Nilai Terkompilasi atau Nilai Waktu Proses kolom untuk melihat rentang yang dipilih:
Bagan histogram menunjukkan rentang yang terkena parameter runtime
Kontrol dan Visual Baru
Fitur-fitur di atas bagus, tapi untuk sementara saya merasa ada lebih banyak yang bisa kita lakukan untuk membuat segalanya lebih jelas. Jadi, dalam rilis terbaru Plan Explorer (2020.8.7), bagian bawah panel Parameter memiliki beberapa kontrol baru dengan visual terkait pada bagan histogram:
Kontrol baru untuk visual histogram
Perhatikan bahwa histogram yang ditampilkan secara default adalah untuk indeks yang digunakan oleh kueri untuk mengakses tabel yang dipilih, tetapi Anda dapat mengklik header indeks atau kolom tabel lainnya di kisi untuk melihat histogram lain.
Rentang Titik Kisaran
Rentang Titik Kritis kotak centang mengaktifkan pita merah muda yang ditampilkan pada bagan histogram:
Beralih untuk pita Kisaran Titik Puncak
Jika baris yang diperkirakan berada di bawah rentang ini, pengoptimal akan menyukai pencarian + pencarian, dan di atasnya pemindaian tabel. Di dalam jangkauan adalah tebakan siapa pun.
Est(imated)/Baris Aktual
Baris Perkiraan/Aktual kotak centang matikan tampilan baris yang diperkirakan (dari parameter yang dikompilasi) dan baris aktual (dari parameter runtime). Panah pada bagan di bawah menggambarkan hubungan antara kontrol ini dan elemen terkait:
Beralih untuk Taksiran dan Baris Aktual pada bagan histogram
Dalam contoh ini, jelas bahwa baris yang diperkirakan berada di bawah titik kritis dan baris yang sebenarnya dikembalikan berada di atasnya, yang tercermin dalam perbedaan antara perkiraan yang terdaftar dan operasi yang sebenarnya (Pencarian vs Pemindaian). Ini adalah sniffing parameter klasik, diilustrasikan!
Dalam posting mendatang saya akan menelusuri bagaimana ini berkorelasi dengan apa yang Anda lihat di diagram rencana dan kisi pernyataan. Sementara itu, berikut adalah file sesi Plan Explorer yang berisi contoh ini (pengendus parameter seek-to-scan) serta contoh scan-to-seek. Keduanya memanfaatkan basis data WideWorldImporters yang diperluas.
Baris Rentang atau Baris Rentang Rata-rata
Versi Plan Explorer sebelumnya menumpuk baris yang sama dan baris rentang dalam satu kolom untuk mewakili jumlah total baris dalam keranjang histogram. Ini berfungsi dengan baik ketika Anda memiliki predikat ketidaksetaraan atau rentang seperti yang ditunjukkan di atas, tetapi untuk predikat kesetaraan itu tidak masuk akal. Yang benar-benar ingin Anda lihat adalah baris rentang rata-rata karena itulah yang akan digunakan pengoptimal untuk estimasi. Sayangnya, tidak ada cara untuk mendapatkannya.
Dalam histogram Plan Explorer yang baru, alih-alih rangkaian kolom bertumpuk, kami sekarang menggunakan kolom tergugus dengan baris yang sama dan baris rentang berdampingan, dan Anda mengontrol apakah akan menampilkan baris rentang total atau rata-rata yang sesuai menggunakan Baris Rentang / Baris Rentang Rata-rata pemilih. Lebih lanjut tentang ini segera…
Menutup
Saya sangat senang dengan fitur-fitur baru ini, dan semoga bermanfaat bagi Anda. Cobalah dengan mengunduh Plan Explorer baru. Ini hanyalah pengantar singkat, dan saya berharap dapat membahas beberapa skenario berbeda di sini. Seperti biasa, beri tahu kami pendapat Anda!