Perbedaan antara perkiraan dan rencana eksekusi aktual

8

Saya baru ke SQL Server dan saya ingin menyetel kueri pertama saya.

Dalam SQL Server 20xx, apa perbedaan antara "tampilan perkiraan rencana eksekusi" dan "termasuk rencana eksekusi aktual"?


sumber

Jawaban:

6

The diperkirakan rencana eksekusi yang dihasilkan hanya berdasarkan statistik yang SQL Server memiliki - tanpa benar-benar mengeksekusi query. Pengoptimal kueri hanya ditanya apa yang kemungkinan besar akan dilakukan dengan permintaan ini, berdasarkan semua informasi yang dimilikinya tentang kueri dan distribusi data, dll.

Ini berfungsi dengan baik, kueri tidak perlu dijalankan (yang bisa memakan waktu lama), tetapi jika statistiknya sudah usang, paket mungkin sangat miring.

The aktual rencana pelaksanaan hanya itu - yang sebenarnya rencana eksekusi yang digunakan ketika benar-benar menjalankan query. Ini akan menunjukkan kepada Anda hal-hal yang mungkin mengisyaratkan statistik "out-of-date" dll. Tetapi untuk mendapatkan ini, Anda harus menjalankan kueri - yang bisa memakan waktu lama.

marc_s
sumber
1
Saya akan berpikir bahwa satu-satunya pertanyaan nyata di sini adalah dalam kasus mana rencana sebenarnya bukan yang diperkirakan. Sisanya sudah jelas, bukan?
John
satu pertanyaan cepat setelah melewati pengoptimal kueri dan pada eksekusi kueri, jika paket yang di-cache sudah usang akankah langkah optimasi kueri mengeksekusi kembali pembaruan statistik? atau adakah cara lain untuk menghasilkan rencana eksekusi?
brykneval
1

Perkiraan paket akan memberi Anda cara menjalankan kueri di server tanpa benar-benar menjalankannya. Ini akan memberi Anda gagasan apakah Anda perlu menyesuaikan untuk membuat rencana yang lebih baik atau rencana yang diperkirakan terlihat ok.

Rencana aktual menunjukkan apa yang sebenarnya terjadi ketika server mengeksekusi kueri. Ini termasuk rincian seperti jumlah baris aktual dari sebuah tabel, berapa banyak memori yang digunakan jika ada semacam. Apa tingkat paralelisme yang telah digunakan selama eksekusi.

Tetapi hal terbaik adalah melihat perbedaan antara "jumlah baris yang diperkirakan" dan "jumlah baris aktual" yang dapat Anda lihat dalam rencana exec aktual. Semakin dekat kedua nilai ini berarti statistiknya mutakhir dan untuk statistik yang diberikan ini adalah rencana terbaik. Tetapi jika nilai-nilai ini memiliki banyak perbedaan, maka mungkin saja statistik itu tidak mutakhir dan dengan demikian ini mungkin bukan rencana terbaik. Dalam hal ini, memperbarui statistik akan membantu dalam menghasilkan rencana perkiraan yang lebih baik dan dengan demikian rencana aktual.

Gulli Meel
sumber