Bagaimana cara membaca Biaya Permintaan, dan apakah selalu berupa persentase?

34

Saat ini saya sedang belajar untuk SQL 70-433 (ujian Sertifikasi Microsoft), dan saya menjadi sangat bingung tentang metrik kinerja "biaya permintaan".

Menurut dokumentasi apa pun yang saya dapat temukan melalui Google, biaya kueri adalah angka persentase, dan mewakili persentase seluruh batch yang diambil oleh salah satu bagiannya. Ini sudah terasa agak aneh bagi saya, karena saya tertarik pada manfaat absolut dari permintaan tertentu, daripada manfaatnya relatif terhadap pertanyaan lain yang kebetulan muncul di sampingnya.

Tapi kemudian saya berpikir, mungkin yang Anda harapkan adalah menempatkan dua pertanyaan alternatif berdampingan, menjalankannya sebagai "batch", dan kemudian mana pun yang memiliki biaya kurang dari 50% adalah pemenangnya.

Tetapi diskusi tentang biaya permintaan dalam bab 6, pelajaran pertama dari Microsoft 70-703 Pelatihan Kit Microsoft tampaknya tidak menanggung kaitan dengan ini.

Berikut adalah contohnya: Mereka memperlihatkan kueri yang berisi dua sub-kueri yang berkorelasi, dan kemudian memperbaikinya dengan mengganti sub-kueri dengan OUTER APPLY. Hasilnya: "Permintaan ini memiliki biaya sekitar 76, sedangkan biaya permintaan pertama adalah dua kali lipat, sekitar 151." Mereka kemudian meningkatkan kueri lebih jauh, dan mengurangi biaya dari 76 menjadi 3,6. Mereka tidak menyiratkan angka-angka ini adalah persentase, sedangkan mereka menyiratkan bahwa mereka adalah angka absolut yang berhubungan dengan permintaan sebagai objek mandiri, tanpa merujuk ke pertanyaan lain. Lagi pula, bagaimana mungkin permintaan pertama memiliki biaya 151%?

Kemudian dalam bab ini, mereka menunjukkan tangkapan layar dari rencana eksekusi yang memiliki tiga bagian. Yang pertama mengatakan "Biaya: 0%", yang kedua mengatakan "Biaya: 1%" dan yang terakhir mengatakan "Biaya: 99%" tetapi teks (dari buku itu sendiri) di bawah tangkapan layar "Biaya permintaan ini adalah 0,56" . Saya menduga mereka berarti beberapa jenis biaya lain, tetapi saya tidak dapat menemukan rujukan di tempat lain.

Adakah yang bisa membantu? Saya benar-benar bingung.


sumber
PS Menganggap mereka mengacu pada sesuatu selain persentase yang ditunjukkan dalam rencana eksekusi ... bagaimana cara saya mendapatkan SSMS untuk menunjukkan angka-angka yang mereka kutip? Apakah saya memerlukan sesuatu seperti SET STATISTIK WAKTU ON, tetapi dengan beberapa perintah lain yang akan menunjukkan kepada saya angka "biaya" pada tab Pesan?

Jawaban:

43

Biaya permintaan dilaporkan dalam rencana pelaksanaan sebagai "perkiraan biaya subtree". Ini adalah angka absolut seperti 1.5. Conor Cunningham disebutkan dalam presentasi SQLBits yang awalnya merujuk pada jumlah detik yang diambil untuk mengeksekusi pada mesin karyawan Microsoft tertentu ( "Mesin Nick" ) dalam SQL Server 7 hari

masukkan deskripsi gambar di sini

tetapi sekarang harus ditafsirkan sebagai ukuran unitless biaya keseluruhan.

Rencana eksekusi adalah pohon. Setiap iterator di pohon diberikan perkiraan biaya CPU dan perkiraan biaya IO dan ini ditambahkan bersama-sama untuk mendapatkan biaya keseluruhan (bobot relatif dapat disesuaikan dengan beberapa perintah DBCC tidak berdokumen ). Perkiraan biaya subtree termasuk biaya untuk iterator itu sendiri dan semua turunannya. Untuk melihat contoh rumus penetapan biaya yang digunakan, Anda dapat melihat artikel ini .

Untuk menentukan perkiraan biaya untuk seluruh kueri di SSMS, pilih iterator root (mis. SELECTIterator) di sebelah kiri paket grafis dan lihat metrik ini di jendela properti SSMS.

Saat menjalankan beberapa kueri (baik dalam batch yang sama atau tidak) persentase dihitung dengan menjumlahkan semua nilai-nilai ini dan menghitung persentase seperti yang Anda harapkan.

Anda harus menyadari bahwa bahkan dalam rencana pelaksanaan yang sebenarnya angka biaya ini didasarkan pada perkiraan dan menggunakan ini untuk membandingkan manfaat relatif dari dua pertanyaan yang berbeda dapat sangat salah dalam kasus di mana estimasi tersebut tidak akurat.

Martin Smith
sumber
Terima kasih, itu sangat membantu. Dan sama sekali tidak jelas! Saya bertanya-tanya mengapa angka itu tidak ditandai dengan lebih jelas?
4
Saya selalu bertanya-tanya tentang satuan ukuran, senang akhirnya mengetahui. Saya telah menjelaskan kepada orang-orang (lucu) bahwa itu adalah "SQL Dolar". Jika biaya permintaan 1,0, itu seperti membayar 1 dolar untuk secangkir kopi. Bukan harga yang buruk. Apakah Anda akan membayar $ 300 untuk satu cangkir? Tidak mungkin!
datagod