Bagaimana cara terbaik mengukur kinerja permintaan?

19

Saya memiliki 2 prosedur tersimpan, di mana prosedur tersimpan kedua adalah peningkatan dari yang pertama.

Saya mencoba untuk mengukur dengan tepat berapa banyak perbaikan.

1 / Mengukur clock timesepertinya tidak menjadi pilihan karena saya mendapatkan waktu eksekusi yang berbeda. Lebih buruk lagi, kadang-kadang (jarang, tapi itu terjadi) waktu pelaksanaan prosedur tersimpan kedua lebih besar dari waktu pelaksanaan prosedur pertama (saya kira karena beban kerja server pada saat itu).

2 / Include client statisticsjuga memberikan hasil yang berbeda.

3 / DBCC DROPCLEANBUFFERS, DBCC FREEPROCCACHEbagus, tapi cerita yang sama ...

4 / SET STATISTICS IO ONbisa menjadi pilihan, tetapi bagaimana saya bisa mendapatkan skor keseluruhan karena saya memiliki banyak tabel yang terlibat dalam prosedur tersimpan saya?

5 / Include actual execution planbisa menjadi pilihan juga. Saya mendapatkan estimated subtreecost0,3253 untuk prosedur tersimpan pertama, dan 0,3079 untuk prosedur kedua. Dapatkah saya mengatakan prosedur tersimpan kedua adalah 6% lebih cepat (= 0,3253 / 0,3079)?

6 / Menggunakan bidang "Baca" dari SQL Server Profiler?

Jadi bagaimana saya bisa mengatakan bahwa prosedur tersimpan kedua adalah x% lebih cepat dari prosedur pertama, tidak peduli kondisi eksekusi (beban kerja server, server tempat prosedur tersimpan ini dijalankan, dll)?

Jika tidak memungkinkan, bagaimana saya bisa membuktikan prosedur tersimpan kedua memiliki waktu eksekusi yang lebih baik daripada prosedur tersimpan pertama?

Mihai Bejenariu
sumber

Jawaban:

17

Saya suka menggunakan alat gratis SQLQueryStress ketika membandingkan skenario sebelum dan sesudah. Dengan SQLQueryStress Anda dapat menjalankan setiap prosedur tersimpan sebanyak yang Anda suka, dan mendapatkan statistik rata-rata total untuk semua eksekusi.

Misalnya, Anda bisa menjalankan setiap prosedur yang tersimpan 100 kali, dan kemudian menggunakan statistik untuk membuat cadangan peningkatan Anda. "Lebih dari 100 eksekusi, peningkatan saya menghemat total 30 detik dan proc yang disimpan menghasilkan 1.500 lebih sedikit per eksekusi." Saya pikir Anda mendapatkan idenya.

Jika ada parameter dalam proc yang disimpan, itu selalu ide yang baik untuk memeriksa ulang apakah perbaikan Anda bekerja dengan banyak set parameter yang berbeda. SQLQueryStress melakukan beberapa hal keren dengan membiarkan Anda mengganti parameter dalam kueri Anda untuk mendapatkan gambaran keseluruhan yang lebih baik tentang bagaimana proc yang disimpan mungkin berkinerja.

Dokumentasi SQLQueryStress: http://www.datamanipulation.net/sqlquerystress/documentation/documentation.asp

SQLQueryStress

GoodwinSQL
sumber
6

4 / Anda dapat mengunjungi http://statisticsioparser.com/statisticsioparser/ dan menempelkan statistik Anda untuk melihat skor keseluruhan.

Nelson G
sumber
Bunyinya logis: 3101 vs 2943. Read-Ahead berbunyi: 0 vs 8. Hitungan pindai: 637 secara keseluruhan. Berbunyi fisik: 0 keseluruhan. Baca LOB Logis: secara keseluruhan.
Mihai Bejenariu
3

Ketika Anda telah mengumpulkan waktu eksekusi selama beberapa hari untuk dua prosedur tersimpan Anda, saya akan merekomendasikan agar Anda menggunakan beranda ini

http://www.evanmiller.org/ab-testing/t-test.html

untuk melihat apakah mereka sebenarnya berbeda.

Perbedaan 6% tidak terdengar banyak, ketika datang ke perbaikan prosedur yang tersimpan. Saya datang untuk mengharapkan dua pesanan besarnya dari rekan saya, dan saya berpura-pura kecewa jika dia hanya mencapai satu urutan besarnya ...

Dia tidak harus menggunakan beranda EvanMiller untuk membuktikan bahwa solusinya bekerja lebih cepat.

Saya juga akan menginstal SQLSentrys (edit :) Plan Explorer dari http://www.sqlsentry.com/ karena ini adalah alat yang jauh lebih baik untuk membandingkan rencana eksekusi.

Henrik Staun Poulsen
sumber