Saya menjalankan Microsoft SQL Server 2016 SP2-CU6 (13.0.5292.0) pada VM 4 vCPU dengan max degree of parallelism
set ke 2
dan cost threshold for parallelism
set ke 50
.
Di pagi hari, ketika mencoba untuk menampilkan Perkiraan Rencana Eksekusi untuk permintaan SELECT TOP 100 , saya mengalami menunggu besar-besaran dan operasi untuk membuat rencana yang diperkirakan memakan waktu beberapa menit, sering kali dalam kisaran 5 - 7 menit. Sekali lagi, ini bukan eksekusi sebenarnya dari permintaan, ini hanya proses untuk menampilkan Estimasi Rencana Eksekusi .
sp_WhoIsActive
akan menunjukkan PAGEIOLATCH_SH
menunggu atau LATCH_EX [ACCESS_METHODS_DATASET_PARENT]
menunggu dan ketika saya menjalankan skrip WaitingTasks.sql karya Paul Randal selama operasi, ia menunjukkan CXPACKET
menunggu dengan utas pekerja yang menunjukkan PAGEIOLATCH_SH
menunggu:
* bidang deskripsi sumber daya = exchangeEvent id=Port5f6069e600 WaitType=e_waitPortOpen waiterType=Coordinator nodeId=1 tid=0 ownerActivity=notYetOpened waiterActivity=waitForAllOwnersToOpen
Utas pekerja tampaknya akan membawa seluruh stats
tabel ke dalam memori (karena nomor halaman tersebut dan juga nomor halaman berikutnya yang ditunjukkan dari kueri Paul Randal kembali ke kunci yang dikelompokkan untuk stats
tabel). Setelah rencana itu kembali, pada dasarnya itu instan untuk sisa hari itu, bahkan setelah saya melihat sebagian besar stats
tabel gesekan dari cache dengan hanya berbagai catatan yang tersisa (yang saya asumsikan ditarik karena mencari operasi dari query yang sama).
Saya akan mengharapkan perilaku awal ini jika kueri benar-benar mengeksekusi dengan rencana yang menggunakan operator SCAN, tetapi mengapa melakukan ini ketika mengevaluasi rencana eksekusi hanya untuk sampai pada operator SEEK seperti yang ditunjukkan dalam rencana yang ditautkan di atas? Apa yang dapat saya lakukan (selain menjalankan pernyataan ini sebelum jam kantor sehingga data saya di-cache dengan tepat) untuk membantu meningkatkan kinerja di sini? Saya berasumsi sepasang indeks penutupan akan bermanfaat, tetapi apakah mereka benar-benar menjamin perubahan perilaku? Saya harus bekerja di dalam beberapa batasan penyimpanan dan pemeliharaan jendela di sini, dan permintaan itu sendiri dihasilkan dari solusi vendor, sehingga saran lain (selain pengindeksan yang lebih baik) akan diterima pada saat ini.