it-swarm.asia

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

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 kaitannya dengan ini.

Berikut adalah contohnya: Mereka memperlihatkan kueri yang berisi dua sub-kueri yang berkorelasi, dan kemudian memperbaikinya dengan mengganti sub-kueri dengan OUTER BERLAKU. 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 kueri 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.

34

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 mengacu pada jumlah detik yang diambil untuk mengeksekusi pada mesin karyawan Microsoft tertentu ( "Mesin Nick" ) di SQL Server 7 hari

enter image description here

tetapi sekarang harus ditafsirkan sebagai ukuran unitless biaya keseluruhan.

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

Untuk menentukan perkiraan biaya untuk seluruh kueri di SSMS, pilih iterator root (mis. SELECT iterator) 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 perkiraan tersebut tidak akurat.

43
Martin Smith