Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara Mendapatkan Informasi Statistik SQL Server Menggunakan Fungsi Statistik Sistem

Seringkali, kita perlu mengumpulkan statistik sistem mengenai menjalankan Instans SQL Server, seperti jumlah total koneksi yang dicoba ke instans SQL Server sejak dimulainya, atau waktu yang dihabiskan SQL Server dalam operasi aktif, dll. Microsoft membawakan kita satu set terpisah sistem berfungsi untuk mengambil statistik terkait sistem. Hari ini, saya akan menjelaskan fungsi statistik sistem tersebut dengan kasus penggunaan.

Fungsi Statistik Sistem dalam SQL

Fungsi Statistik Sistem adalah jenis fungsi skalar yang mengembalikan nilai tunggal dalam output. Yang ini memberikan informasi statistik tentang sistem. Catatan penting adalah bahwa semua fungsi yang termasuk dalam kategori ini tidak akan mengembalikan output yang sama saat Anda menjalankannya. Untuk setiap eksekusi, Anda mendapatkan hasil yang berbeda. Itulah mengapa fungsi statistik sistem bersifat non-deterministik.

SQL Server memiliki beberapa fungsi statistik sistem bawaan yang mengembalikan statistik terkait sistem. Berikut daftarnya:

  • @@CONNECTIONS
  • @@PACK_RECEIVED
  • @@CPU_BUSY
  • @@PACK_SENT
  • @@TIMETICKS
  • @@IDLE
  • @@TOTAL_ERRORS
  • @@IO_BUSY
  • @@TOTAL_READ
  • fn_virtualfilestats
  • @@PACKET_ERRORS
  • @@TOTAL_MENULIS

Sekarang, mari kita jelajahi lebih dalam.

Memahami @@CPU_BUSY dan @@TIMETICKS Fungsi Sistem

@@CPU_BUSY sangat penting ketika kita perlu memahami berapa banyak waktu yang dihabiskan CPU dalam milidetik untuk mengerjakan operasi SQL Server. Hasil dari fungsi ini adalah tambahan setiap kali Anda menjalankannya sejak terakhir kali restart SQL Server. Ini berarti bahwa untuk setiap proses kita mendapatkan nilai tambahan dalam output. Lihat contohnya:

--Execute below T-SQL to get how busy your CPU is
SELECT @@CPU_BUSY

Keluaran:

Ini mengembalikan nilai numerik tunggal yang berarti bahwa CPU telah menghabiskan 641 milidetik untuk menjalankan transaksi SQL Server sejak layanan SQL Server terakhir dimulai ulang.

Sekarang, mari kita jalankan pernyataan SELECT sederhana. Saya akan menjalankan lagi pernyataan T-SQL di atas untuk memverifikasi apakah outputnya inkremental.

--Fetch top 1000 rows for a table
SELECT TOP (1000) [BusinessEntityID]
      ,[PersonType]
      ,[NameStyle]
      ,[Title]
      ,[FirstName]
      ,[MiddleName]
      ,[LastName]
      ,[Suffix]
      ,[EmailPromotion]
      ,[AdditionalContactInfo]
      ,[Demographics]
      ,[rowguid]
      ,[ModifiedDate]
  FROM [AdventureWorks2019].[Person].[Person]

Keluaran:

Mari kita jalankan SELECT @@CPU_BUSY lagi untuk melihat outputnya:

Di sini, kita dapat melihat nilai tambahan 653 milidetik dibandingkan dengan nilai 641 milidetik yang dikembalikan pada tangkapan layar pertama. Oleh karena itu, kami telah memvalidasi bahwa fungsi sistem ini mengembalikan nilai inkremental tunggal.

Sekarang, mari selami lebih dalam. Kami akan memeriksa cara menggunakan @@CPU_BUSY dalam berbagai skenario untuk kebutuhan kami.

Sebagaimana dinyatakan di atas, @@CPU_BUSY fungsi sistem mengembalikan output dalam milidetik . Jika Anda ingin mendapatkan outputnya dalam mikrodetik , Anda perlu menggunakan @@TIMETICKS berfungsi saat menjalankan pernyataan T-SQL @@CPU_BUSY (lihat perintah di bawah).

@@TIMETICKS mengembalikan jumlah mikrodetik per centang .

Tick ​​adalah semacam acara penjadwalan yang menyebabkan penjadwal berjalan. Jumlah waktu per centang adalah nilai yang bergantung pada komputer yang dapat diambil dengan menjalankan pernyataan T-SQL di bawah ini:

--Get @@TIMETICKS output
SELECT @@TIMETICKS

Ini dia outputnya:

Kami akan menggunakan kedua fungsi bersama-sama untuk mendapatkan outputnya dalam mikrodetik dan detik:

--Get @@CPU_BUSY output in Microseconds & seconds
SELECT @@CPU_BUSY*@@TIMETICKS As [CPU Busy Microseconds]
Go
SELECT @@CPU_BUSY*@@TIMETICKS/1000000 As [CPU Busy Seconds]
Go 

Setelah mengeksekusi kedua pernyataan T-SQL, kita dapat melihat output:

Catatan:Jika Anda memiliki persyaratan untuk mendapatkan @CPU_BUSY output dalam tipe data float , Anda juga dapat menyelesaikannya dengan menjalankan kumpulan pernyataan di bawah ini:

--Get @@CPU_BUSY output in Microseconds & seconds with float data type
SELECT @@CPU_BUSY*CAST (@@TIMETICKS As float) As [CPU Busy Microseconds], 
@@CPU_BUSY*CAST (@@TIMETICKS As float)/1000000 As [CPU Busy Seconds]
Go

Keluaran:

Silakan dan gunakan fungsi sistem @@CPU_BUSY &@@TIMETICK sesuai kebutuhan bisnis Anda.

Memahami @@IO_BUSY Fungsi Sistem

Seperti namanya, fungsi sistem ini mengembalikan total waktu dalam milidetik yang telah dihabiskan SQL Server untuk melakukan operasi IO (operasi Input\Output) sejak restart terakhir SQL Server. Keluaran dari fungsi sistem ini juga bertambah setiap kali Anda menjalankannya.

Jalankan pernyataan T-SQL di bawah ini:

--Get total time SQL Server has taken in IO operations since its last restart
SELECT @@IO_BUSY

Output pada gambar di bawah ini adalah 194 milidetik.

Kita juga dapat menggunakan fungsi sistem @@TIMETICKS untuk mendapatkan nilai dalam mikrodetik:

--Get total time SQL Server has taken in IO operations since its last restart
SELECT @@IO_BUSY*@@TIMETICKS AS [IO Microseconds]
GO
SELECT @@IO_BUSY*@@TIMETICKS/1000000 AS [IO Seconds]

Berikut adalah output dari pernyataan T-SQL di atas:

Jika Anda ingin menghindari aritmatika overflow saat mengonversi nilai ke mikrodetik menggunakan fungsi sistem @@TIMETICKS, jalankan perintah di bawah ini untuk mendapatkan outputnya dalam tipe data float seperti yang telah kita lakukan untuk fungsi @@CPU_BUSY sebelumnya:

--Get total time SQL Server has taken in IO operations since its last restart
SELECT @@IO_BUSY*CAST (@@TIMETICKS As float) AS [IO Microseconds]
GO
SELECT @@IO_BUSY*CAST (@@TIMETICKS As float)/1000000 AS [IO Seconds]
Go

Memahami @@IDLE Fungsi Sistem

Fungsi sistem ini mengembalikan waktu dalam milidetik untuk status diam SQL Server sejak restart terakhir. Jalankan perintah di bawah ini:

--Get total time SQL Server was idle
SELECT @@IDLE

Berikut adalah outputnya:

Anda juga dapat menggunakan fungsi GETDATE() bersama dengan semua fungsi sistem di atas untuk mendapatkan nilainya antara waktu saat ini dan waktu ketika SQL Server dimulai ulang. Jika Anda ingin mendapatkan nilai ini dalam mikrodetik, gunakan fungsi @@TIMETICKS seperti yang ditunjukkan untuk fungsi @@CPU_BUSY dan @@IO_BUSY.

Pernyataan T-SQL di bawah ini sangat mirip dengan contoh sebelumnya. Ini mengembalikan jumlah detik dan mikrodetik dalam tipe data float.

--Get total time SQL Server was idle
SELECT @@IDLE* CAST(@@TIMETICKS AS Float) As [IO Microseconds]
GO
SELECT @@IDLE*CAST(@@TIMETICKS AS Float)/1000000 AS [IO Seconds]
Go

Keluaran:

Memahami @@PACK_SENT, @@PACK_RECEIVED, dan @@PACKET_ERRORS

Fungsi statistik sistem ini berhubungan dengan paket jaringan. Mereka sangat berguna dalam menganalisis informasi pada paket jaringan.

  • @@PACK_SENT – mengembalikan jumlah paket keluaran yang ditulis ke jaringan oleh SQL Server sejak restart terakhir.
  • @@PACK_RECEIVED – menampilkan jumlah paket input yang dibaca dari jaringan oleh SQL Server sejak restart terakhir.
  • @@PACKET_ERRORS – menampilkan jumlah kesalahan paket jaringan yang terjadi pada koneksi SQL Server sejak restart terakhir.

Kita dapat menggunakan pernyataan T-SQL di bawah ini untuk mendapatkan jumlah paket input dan output yang akan dibaca atau ditulis oleh SQL Server.

--Get the number of packets received or sent
SELECT @@PACK_SENT AS [Packets Sent]
GO
SELECT @@PACK_RECEIVED AS [Packets RECIEVED]
GO

Detail tentang paket-paket ini ada di output:

Anda juga dapat menjalankan @@PACKET_ERRORS sama untuk mendapatkan jumlah total kesalahan paket:

--Get number of packets Errors
SELECT @@PACKET_ERRORS

Memahami @@TOTAL_READ, @@TOTAL_WRITE dan @@TOTAL_ERRORS

Fungsi statistik sistem terkait disk mendapatkan jumlah pembacaan disk, penulisan disk, dan kesalahan penulisan disk yang telah dilakukan SQL Server.

  • @@TOTAL_READ – menampilkan jumlah disk yang dibaca oleh SQL Server sejak restart terakhir.
  • @@TOTAL_MENULIS – menampilkan jumlah disk yang ditulis oleh SQL Server sejak restart terakhir.
  • @@TOTAL_ERRORS – menampilkan jumlah kesalahan penulisan disk oleh SQL Server sejak restart terakhir. Ingat, kesalahan penulisan non-fatal tidak ditangkap oleh fungsi ini – kesalahan tersebut ditangani oleh sistem itu sendiri.

Saya telah memukul semua 3 fungsi sistem dalam satu pernyataan T-SQL untuk menampilkan output dari semuanya dalam satu kesempatan:

--Get Disk related statistics
SELECT @@TOTAL_READ AS [Reads], 
@@TOTAL_WRITE AS [Writes], 
@@TOTAL_ERRORS As [Disk Errors]

Di bawah ini Anda dapat melihat jumlah kesalahan pembacaan, penulisan, dan penulisan disk:

Memahami @@CONNECTIONS Fungsi Sistem

Fungsi sistem ini menampilkan jumlah total upaya untuk menyambung ke SQL Server terlepas dari keberhasilannya sejak restart terakhir SQL Server. Jalankan pernyataan T-SQL di bawah ini:

--Get the number of attempted connections
SELECT @@CONNECTIONS AS [Total Connections]

Output di bawah ini menunjukkan bahwa jumlah total koneksi yang dicoba adalah 3130 untuk contoh SQL Server ini. Ini tidak berarti bahwa 3130 percobaan berhasil.

Semua Fungsi Statistik Sistem dalam Satu Pernyataan T-SQL

Kami juga dapat menggabungkan semua fungsi sistem ini dalam satu pernyataan T-SQL dan mendapatkan satu output untuk setiap nilai statistik sistem. Saya telah menjelaskan masing-masing fungsi sistem secara terpisah karena ini mungkin sangat berguna untuk kebutuhan dan persyaratan kerja Anda.

Jalankan skrip T-SQL di bawah ini untuk mendapatkan output dari semua statistik sistem yang dijelaskan dalam satu kesempatan:

--Get system statistics
SELECT @@CPU_BUSY*CAST (@@TIMETICKS As float) As [CPU Busy Microseconds],
@@CPU_BUSY*CAST (@@TIMETICKS As float)/1000000 As [CPU Busy Seconds],
@@IO_BUSY*CAST (@@TIMETICKS As float) AS [IO Microseconds],
@@IO_BUSY*CAST (@@TIMETICKS As float)/1000000 AS [IO Seconds],
@@IDLE* CAST(@@TIMETICKS AS Float) As [IO Microseconds],
@@IDLE*CAST(@@TIMETICKS AS Float)/1000000 AS [IO Seconds],
@@PACK_SENT AS [Packets Sent],
@@PACK_RECEIVED AS [Packets RECIEVED],
@@TOTAL_READ AS [Reads], 
@@TOTAL_WRITE AS [Writes], 
@@TOTAL_ERRORS As [Disk Errors],
@@CONNECTIONS AS [Total Connections]

Berikut adalah output dari skrip di atas yang menampilkan semua informasi terkait statistik dalam satu output:

Menggunakan Prosedur Tersimpan untuk Mendapatkan Statistik SQL Server

Ada juga prosedur penyimpanan sistem Microsoft khusus yang memungkinkan kita melihat tampilan statistik sistem yang serupa . Nama prosedur tersimpan ini adalah sp_monitor . Ini sangat baik untuk melacak penggunaan dan nilai setiap jenis statistik SQL Server sejak terakhir dijalankan oleh prosedur tersimpan yang sama

Catatan:Anda harus memiliki peran sysadmin untuk menjalankan prosedur tersimpan ini.

Saya telah menjalankan sp_monitor prosedur tersimpan – lihat hasilnya ditampilkan dalam bentuk tertentu seperti nilai(nilai)-nilai% atau nilai(nilai). Kita dapat melihat cpu_busy output ditampilkan sebagai 20(19)-0%. Sekarang, Anda mungkin berpikir tentang bagaimana kita dapat membaca output ini. Baca dan pahami tabel di bawah ini – tabel ini menyajikan penjelasan untuk kedua jenis output:

Parameter Sistem Keluaran Interpretasi
Cpu_busy 20(19)-0% CPU sibuk 20 detik sejak SQL Server terakhir dimulai\restartCPU sibuk 19 detik sejak sp_monitor dijalankan terakhir0% dari total waktu sejak sp_monitor dijalankan terakhir.
Paket_diterima 1467(1428) SQL Server telah menerima 1467 paket sejak terakhir dimulai\restartSQL Server telah menerima 1428 paket sejak sp_monitor dieksekusi terakhir kali.

Kesimpulan

Sekarang Anda dapat melihat cara mendapatkan statistik terkait sistem untuk instance SQL Server Anda. Fungsi sistem dan prosedur tersimpan sp_monitor akan sangat efisien dan nyaman. Silakan dan gunakan kode T-SQL ini dalam pekerjaan pengembangan Anda atau untuk aktivitas analisis sistem.

Silakan bagikan artikel ini di jejaring sosial favorit Anda. Dan jika Anda ingin mendiskusikan informasi ini dan berbagi pendapat dan tips Anda, Anda dipersilakan di bagian Komentar.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 4 Cara Menghitung Baris di Tabel SQL Server dengan Pro dan Kontra

  2. Memahami Ukuran Penyimpanan 'waktu' di SQL Server

  3. Penggunaan SqlParameter dalam klausa SEPERTI SQL tidak berfungsi

  4. Meminta server sql tertaut

  5. SQL Server 2016:Simpan Hasil Kueri ke File CSV