SQL Server Management Studio, cara mendapatkan waktu eksekusi hingga milidetik


220

Ketika saya mengirimkan kumpulan (mis., Melakukan kueri) di SSMS, saya melihat waktu yang diperlukan untuk mengeksekusi di bilah status. Apakah mungkin untuk mengonfigurasi SSMS untuk menampilkan waktu kueri dengan resolusi milidetik?

Ini bar yang saya bicarakan dengan bagian bunga yang dilingkari merah:

masukkan deskripsi gambar di sini


3
Tidak benar-benar menjawab pertanyaan Anda, tetapi Anda bisa menggunakan SQL Server Profiler (alat pencatatan) untuk memeriksa durasi permintaan Anda. Durasi diukur dalam milidetik.
AGuyCalledGerald

Jawaban:


66

Saya berjuang dengan itu sampai saya menemukan ini ...

http://blog.sqlauthority.com/2009/10/01/sql-server-sql-server-management-studio-and-client-statistics/

Juga, jika Anda membuka jendela Properties Anda mungkin menemukan beberapa "Connection elapsed time" ajaib yang dapat memberi Anda beberapa waktu eksekusi ... Semoga ini membantu ...


18
Bagian mengenai jendela Properties benar-benar merupakan jawaban untuk utas ini. "Waktu Berlalu" duduk di sana menatap wajahmu.
Eric

Dan saya sekarang menetapkan jawaban ini sebagai jawaban yang diterima, karena itu paling benar.
Michael Goldshteyn

363

Yang ingin Anda lakukan adalah ini:

set statistics time on

-- your query

set statistics time off

Hasilnya akan terlihat seperti ini di jendela Pesan Anda:

Waktu Eksekusi SQL Server: Waktu CPU = 6 ms, waktu yang berlalu = 6 ms.


1
Tetapi ini menempatkan waktu di jendela Pesan, yang berarti saya harus membalik secara manual setelah melakukan kueri. Selain itu, hasilnya tampaknya tidak masuk akal, misalnya: Waktu CPU = 1357 ms, waktu yang berlalu = 169 ms. Bagaimana itu bertambah, bahkan jika saya memiliki 8 core dengan hyperthreading (yaitu, 16 virtual)?
Michael Goldshteyn

2
@MichaelGoldshteyn tentang mengapa waktu CPU Anda lebih besar, itu karena Anda memiliki CPU multi-core atau hyperthreaded.

25
@MichaelGoldshteyn 1357/8 = 169.625. Kebetulan?
Dan J

3
@ DanJ, ​​DB tidak melakukan segalanya dari memori. Seringkali I / O terlibat dan I / O berarti lebih banyak waktu berlalu.
Michael Goldshteyn

9
@binki Anda benar bahwa komentar saya yang berumur 1.555 hari tidak akurat.
benizi

125

Nyalakan Statistik Klien dengan melakukan salah satu dari yang berikut:

  • Menu: Permintaan> Sertakan Statistik klien
  • Bilah Alat: Klik tombol (di sebelah Sertakan Waktu Eksekusi Aktual)
  • Keyboard: Shift-Alt-S

Kemudian Anda mendapatkan tab baru yang mencatat waktu, data IO, dan jumlah baris, dll untuk (hingga) 10 ekseksi terakhir (plus rata-rata!):

masukkan deskripsi gambar di sini


Ini sama dengan jawaban @Ymagine First dari Nov'2012. Lihat jawaban di atas ...
Bogdan Bogdanov

Situs itu (ironisnya) memiliki kesalahan SQL pada saat itu, jadi saya mengekstrak info kunci dari cache Google dan diposting sebagai jawaban baru. Saya tidak bermaksud mencuri kredit dan mungkin saya seharusnya mengedit jawaban asli sebagai gantinya.
NickG

Sebenarnya, sepertinya saya tidak memiliki cukup poin rep untuk mengedit pertanyaan, jadi itu mungkin mengapa saya tidak melakukan itu.
NickG

3
FYI unit untuk Statistik Waktu dalam milidetik: brentozar.com/archive/2012/12/…
congusbongus

17

Untuk mendapatkan waktu eksekusi sebagai variabel di proc Anda:

DECLARE @EndTime datetime
DECLARE @StartTime datetime 
SELECT @StartTime=GETDATE() 

-- Write Your Query


SELECT @EndTime=GETDATE()

--This will return execution time of your query
SELECT DATEDIFF(ms,@StartTime,@EndTime) AS [Duration in millisecs] 

DAN lihat ini

Mengukur Kinerja Permintaan: "Biaya Permintaan Rencana Eksekusi" vs "Waktu Diambil"


1
Datepart NS mewakili nanosecond, untuk milidetik gunakan MS
Milan Matějka

12

Saya mengincar hal yang sama dan menemukan tautan berikut yang sangat brilian:

http://www.sqlserver.info/management-studio/show-query-execution-time/

Ini menunjukkan tiga cara berbeda untuk mengukur kinerja. Semua bagus untuk kekuatan mereka sendiri. Yang saya pilih adalah sebagai berikut:


DECLARE @ Time1 DATETIME

DECLARE @ Time2 DATETIME

SET @ Time1 = GETDATE ()

- Masukkan kueri di sini

SET @ Time2 = GETDATE ()

SELECT DATEDIFF (MILLISECOND, @ Time1, @ Time2) SEBAGAI Elapsed_MS


Ini akan menampilkan hasil dari kueri Anda diikuti dengan jumlah waktu yang dibutuhkan untuk menyelesaikan.

Semoga ini membantu.


Saya menemukan bahwa tidak konsisten, kadang-kadang menunjukkan waktu dan kadang-kadang hanya menunjukkan 0.
RMati

2

Saya tidak tahu tentang memperluas bilah informasi.

Tetapi Anda bisa mengatur waktu sebagai default untuk semua kueri yang ditampilkan di tab "Pesan".

Saat berada di jendela Query, buka item Menu Query, pilih "opsi kueri" lalu pilih "lanjutan" di grup "Eksekusi" dan centang kotak "atur waktu statistik" / "atur statistik IO". Nilai-nilai ini kemudian akan muncul di area pesan untuk setiap permintaan tanpa harus ingat untuk mengaktifkan dan menonaktifkan statistik yang ditetapkan.

Anda juga dapat menggunakan Shift + Alt + S untuk mengaktifkan statistik klien kapan saja


0

Anda dapat mencoba kode ini:

USE AdventureWorks2012;
GO
SET STATISTICS TIME ON;
GO
SELECT ProductID, StartDate, EndDate, StandardCost 
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
GO
SET STATISTICS TIME OFF;
GO
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.