Salinan saya dari Penyetelan &Pengoptimalan Kueri Microsoft SQL Server 2014 (juga tersedia di Kindle), oleh Benjamin Nevarez, tiba minggu lalu. Saya tidak dapat melakukannya dengan segera, tetapi selama akhir pekan saya akhirnya dapat menjelajahinya di antara penggantian popok dan perjalanan ke kebun binatang.
TL;DR :Bernilai uang
Benjamin menyajikan penjelasan menyeluruh tentang seluruh proses pengoptimalan kueri, dan banyak latar belakang yang Anda perlukan untuk memahami semuanya. Dia menangani indeks, statistik dan caching rencana, serta bagaimana menangani masalah umum seperti parameter sniffing. Dia menjelaskan opsi populer seperti Optimize for Ad Hoc Workloads dan Forced Parameterization, dan bagaimana opsi tersebut mengubah cara paket di-cache dan digunakan kembali. Dia juga membahas banyak fitur tidak berdokumen dan bendera pelacakan yang dapat membantu Anda lebih memahami (atau memaksa) pendekatan SQL Server untuk kueri Anda, dan cara menggunakan perintah Trace, Extended Events, dan DBCC untuk meninjau keputusan yang telah dibuat oleh pengoptimal dan dampaknya. pernah.
Ada juga sebagian besar konten yang didedikasikan untuk banyak fitur SQL Server 2014 baru, termasuk In-Memory OLTP ("Hekaton"), indeks penyimpanan kolom berkerumun, statistik inkremental, dan penaksir kardinalitas baru. Saat buku ini sedang ditulis, database sampel AdventureWorks untuk SQL Server 2014 belum diterbitkan, tetapi tersedia sekarang.
Buku ini diakhiri dengan bab yang kompleks namun informatif tentang batasan pengoptimal kueri yang mengarah pada rencana yang kurang optimal, dan cara menggunakan petunjuk dan panduan rencana untuk mengatasinya.
Beberapa batasan
Sementara referensi keseluruhan yang cukup lengkap untuk penyetelan kueri, ada beberapa hal yang menurut saya bisa lebih baik:
- Benjamin berbicara tentang mengumpulkan informasi ShowPlan dari Trace dan Extended Events, dan dengan tepat menunjukkan bahwa Profiler bukanlah cara yang Anda inginkan untuk menjalankan trace, karena overhead kinerja yang mengerikan dan terdokumentasi dengan baik. Ini adalah hal yang baik, karena jejak sudah tidak digunakan lagi dan Profiler adalah yang biasanya digunakan orang secara default. Ada peringatan kecil tentang overhead
query_post_execution_showplan
acara, yang menurut saya dapat diberi sedikit penekanan, dengan pengingat bahwa ini hanya boleh digunakan untuk penyetelan dan pemecahan masalah yang sangat bertarget. Mengumpulkan ini untuk setiap kueri dalam beban kerja Anda cenderung lebih banyak merugikan daripada menguntungkan.
- Dia membahas indeks dan statistik yang difilter, tetapi mengabaikan fakta bahwa mereka bermasalah ketika menyangkut pembaruan otomatis, karena tidak ada algoritme khusus yang digunakan meskipun indeks hanya mewakili subset tabel. Microsoft telah mengkonfirmasi bahwa ini adalah masalah, tetapi pada titik ini, mereka tidak memiliki rencana untuk memperbaikinya. Untuk informasi selengkapnya, lihat Hubungkan #509638 dan Hubungkan #333532. Lihat juga entri blog ini untuk mengetahui banyak batasan indeks terfilter lainnya yang perlu dipertimbangkan.
- Meskipun cakupan fitur tahun 2014 cukup lengkap, saya terkejut tidak menemukan
sys.dm_exec_query_profiles
yang disebutkan. , DMV baru untuk melacak kemajuan kueri secara waktu nyata – hingga ke operator individu. Ini bukan informasi penting untuk semua orang, karena ini bukan kasus penggunaan yang sangat luas (IMHO itu hanya sangat berguna untuk kueri yang berjalan lama).
- Ini benar-benar nit-pick, tapi itu salah satu yang umum di antara judul teknis:indeksnya sedikit tidak akurat. Misalnya, referensi ke SQL Sentry Plan Explorer menunjuk ke halaman 13, tetapi konten yang relevan sebenarnya ada di halaman 14. Seperti yang saya katakan, nit-pick yang sangat kecil, itu hanya menonjol bagi saya karena itu adalah hal pertama yang saya lihat naik di indeks. :-)
Saya tidak akan mempertimbangkan keluhan ini, per se. Tidak ada buku yang bisa memuat setiap detail terakhir tentang segalanya. Jadi tolong pertimbangkan mereka sebagai tambahan. :-)
Ringkasan
Ini dengan cepat menjadi referensi yang nyaman bagi saya; anjing-telinga sudah mengganti beberapa bookmark saya ke posting blog yang kebetulan menyebutkan beberapa detail yang tidak jelas atau bendera jejak, dan dalam banyak kasus Benjamin telah menggambarkannya secara lebih rinci dan/atau membingkainya dengan konteks yang lebih baik. Di antara buku ini dan beberapa judul yang dirujuk di bawah, saya pikir siapa pun yang akrab dengan T-SQL bisa mendapatkan kecepatan dengan cukup cepat, bahkan tidak memiliki pengetahuan tentang pengoptimal sebelum menyelam.
Materi pelengkap
Buku lain yang saya rekomendasikan untuk melengkapi judul ini:
- Berikan Penyesuaian Kinerja Kueri SQL Server Fritchey
- Pengindeksan Performa Pakar Jason Strate untuk SQL Server 2012
- Berikan Rencana Eksekusi SQL Server Fritchey
Dan tentu saja ada persediaan posting blog dan artikel lain yang tak ada habisnya untuk membantu pemahaman Anda tentang penyetelan dan pengoptimalan. Saya agak memihak pada materi Paul White – mereka sedalam yang diinginkan manusia, tetapi Anda juga bisa mendapatkan satu ton dari mereka hanya dengan membaca sekilas. Grant dan Gail Shaw juga memiliki beberapa konten berharga tentang kueri dan rencana eksekusi, dan Kimberly Tripp dan Erin Stellato adalah sumber daya yang bagus untuk apa pun yang terkait dengan indeks atau statistik.
- Paul White:SQLPerformance.com | sql.kiwi
- Berikan Fritchey (dan sumber daya)
- Gail Shaw
- Kimberly Tripp
- Erin Stellato
Anda mungkin menemukan beberapa tumpang tindih, tapi saya sangat percaya dalam mengkonsumsi informasi dari berbagai sumber. Terkadang mereka menyajikan informasi yang sama, tetapi bola lampu berbunyi klik berdasarkan cara seseorang mengatakannya atau konteks yang mereka berikan. Saya juga mungkin melewatkan sekitar 50 orang lain dengan materi yang bagus.
Oh, dan apakah saya menyebutkan alat gratis kami, Plan Explorer, dapat membantu dengan ini juga? Demo kit saya yang telah diperbarui menjelaskan banyak contoh.