Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách lấy thông tin thống kê của máy chủ SQL bằng chức năng thống kê hệ thống

Thông thường, chúng tôi cần thu thập số liệu thống kê hệ thống liên quan đến việc chạy Phiên bản SQL Server, chẳng hạn như tổng số kết nối đã cố gắng đến phiên bản SQL Server kể từ khi bắt đầu hoặc thời gian SQL Server dành cho các hoạt động tích cực, v.v. Microsoft đã cung cấp cho chúng tôi một tập hợp riêng gồm chức năng hệ thống để truy xuất các số liệu thống kê liên quan đến hệ thống. Hôm nay, tôi sẽ giải thích các chức năng thống kê hệ thống như vậy với các trường hợp sử dụng.

Hàm thống kê hệ thống trong SQL

Hàm thống kê hệ thống là một loại hàm vô hướng trả về một giá trị duy nhất trong đầu ra. Cái này cung cấp thông tin thống kê về hệ thống. Một lưu ý cần thiết là tất cả các hàm thuộc danh mục này sẽ không trả về cùng một kết quả khi bạn thực thi chúng. Đối với mỗi lần thực hiện, bạn sẽ nhận được một kết quả khác nhau. Đó là lý do tại sao các hàm thống kê của hệ thống không mang tính xác định.

SQL Server có một số chức năng thống kê hệ thống tích hợp sẵn trả về các thống kê liên quan đến hệ thống. Dưới đây là danh sách:

  • @@ KẾT NỐI
  • @@ PACK_RECEIVED
  • @@ CPU_BUSY
  • @@ PACK_SENT
  • @@ TIMETICKS
  • @@ IDLE
  • @@ TOTAL_ERRORS
  • @@ IO_BUSY
  • @@ TOTAL_READ
  • fn_virtualfilestats
  • @@ PACKET_ERRORS
  • @@ TOTAL_WRITE

Bây giờ, hãy khám phá chúng sâu hơn.

Hiểu các chức năng của hệ thống @@ CPU_BUSY và @@ TIMETICKS

@@ CPU_BUSY rất quan trọng khi chúng ta cần hiểu CPU đã dành bao nhiêu thời gian tính bằng mili giây để làm việc trên các hoạt động của SQL Server. Kết quả của hàm này tăng lên mỗi khi bạn chạy nó kể từ lần khởi động lại SQL Server cuối cùng. Nó có nghĩa là đối với mỗi lần chạy, chúng tôi nhận được một giá trị gia tăng trong đầu ra. Xem ví dụ:

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

Đầu ra:

Nó trả về một giá trị số duy nhất có nghĩa là CPU đã dành 641 mili giây để chạy các giao dịch SQL Server kể từ lần khởi động lại dịch vụ SQL Server cuối cùng.

Bây giờ, hãy thực hiện một câu lệnh SELECT đơn giản. Tôi sẽ chạy lại câu lệnh T-SQL ở trên để xác minh xem đầu ra có tăng dần hay không.

--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]

Đầu ra:

Hãy chạy SELECT @@ CPU_BUSY một lần nữa để xem đầu ra của nó:

Tại đây, chúng ta có thể thấy giá trị gia tăng 653 mili giây so với giá trị 641 mili giây được trả về trong ảnh chụp màn hình đầu tiên. Do đó, chúng tôi đã xác nhận rằng các hàm hệ thống này trả về các giá trị gia tăng duy nhất.

Bây giờ, chúng ta hãy đi sâu hơn. Chúng tôi sẽ kiểm tra cách sử dụng @@ CPU_BUSY trong các tình huống khác nhau cho các yêu cầu của chúng tôi.

Như đã nêu ở trên, @@ CPU_BUSY hàm hệ thống trả về kết quả đầu ra sau mili giây . Nếu bạn muốn nhận đầu ra của nó trong micro giây , bạn cần sử dụng @@ TIMETICKS trong khi chạy câu lệnh @@ CPU_BUSY T-SQL (xem các lệnh bên dưới).

@@ TIMETICKS trả về số micro giây mỗi lần đánh dấu .

Tick ​​là một loại sự kiện lên lịch làm cho các bộ lập lịch chạy. Lượng thời gian cho mỗi lần đánh dấu là giá trị phụ thuộc vào máy tính có thể được tìm nạp bằng cách chạy câu lệnh T-SQL bên dưới:

--Get @@TIMETICKS output
SELECT @@TIMETICKS

Đây là đầu ra của nó:

Chúng tôi sẽ sử dụng cả hai hàm cùng nhau để nhận kết quả đầu ra của chúng trong micro giây và giây:

--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 

Sau khi thực hiện cả hai câu lệnh T-SQL, chúng ta có thể thấy kết quả đầu ra:

Lưu ý:Nếu bạn có yêu cầu nhận đầu ra @CPU_BUSY ở kiểu dữ liệu float , bạn cũng có thể hoàn thành việc này bằng cách chạy tập hợp các câu lệnh dưới đây:

--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

Đầu ra:

Hãy tiếp tục và sử dụng các chức năng của hệ thống @@ CPU_BUSY &@@ TIMETICK theo nhu cầu kinh doanh của bạn.

Hiểu @@ Chức năng hệ thống IO_BUSY

Như tên gọi của nó, hàm hệ thống này trả về tổng thời gian tính bằng mili giây mà SQL Server đã dành để thực hiện các hoạt động IO (hoạt động Input \ Output) kể từ lần khởi động lại SQL Server cuối cùng. Đầu ra của chức năng hệ thống này cũng tăng lên mỗi khi bạn chạy nó.

Chạy câu lệnh T-SQL dưới đây:

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

Kết quả đầu ra trong hình ảnh dưới đây là 194 mili giây.

Chúng tôi cũng có thể sử dụng chức năng hệ thống @@ TIMETICKS để nhận giá trị tính bằng micro giây:

--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]

Đây là kết quả của câu lệnh T-SQL ở trên:

Nếu bạn muốn tránh tràn số học trong khi chuyển đổi giá trị thành micro giây bằng cách sử dụng hàm hệ thống @@ TIMETICKS, hãy chạy lệnh dưới đây để nhận đầu ra của nó ở kiểu dữ liệu float như chúng ta đã thực hiện cho hàm @@ CPU_BUSY trước đó:

--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

Hiểu @@ Chức năng hệ thống IDLE

Hàm hệ thống này trả về thời gian tính bằng mili giây cho trạng thái không hoạt động của Máy chủ SQL kể từ lần khởi động lại cuối cùng. Chạy lệnh dưới đây:

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

Đây là kết quả:

Bạn cũng có thể sử dụng hàm GETDATE () cùng với tất cả các hàm hệ thống ở trên để lấy giá trị của chúng giữa thời điểm hiện tại và thời điểm SQL Server khởi động lại. Nếu bạn muốn nhận giá trị này trong micro giây, hãy sử dụng hàm @@ TIMETICKS như được hiển thị cho các hàm @@ CPU_BUSY và @@ IO_BUSY.

Câu lệnh T-SQL dưới đây rất giống với các ví dụ trước. Nó trả về số giây và micro giây trong kiểu dữ liệu 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

Đầu ra:

Hiểu @@ PACK_SENT, @@ PACK_RECEIVED và @@ PACKET_ERRORS

Các chức năng thống kê hệ thống này liên quan đến các gói mạng. Chúng cực kỳ hữu ích trong việc phân tích thông tin về các gói mạng.

  • @@ PACK_SENT - trả về số lượng gói tin đầu ra được SQL Server ghi vào mạng kể từ lần khởi động lại cuối cùng.
  • @@ PACK_RECEIVED - hiển thị số lượng gói dữ liệu đầu vào được SQL Server đọc từ mạng kể từ lần khởi động lại cuối cùng.
  • @@ PACKET_ERRORS - hiển thị số lỗi gói mạng đã xảy ra trên các kết nối SQL Server kể từ lần khởi động lại gần đây nhất.

Chúng ta có thể sử dụng các câu lệnh T-SQL dưới đây để lấy số lượng gói dữ liệu đầu vào và đầu ra được SQL Server đọc hoặc ghi.

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

Chi tiết về các gói này có trong đầu ra:

Bạn cũng có thể chạy @@ PACKET_ERRORS tương tự để lấy tổng số lỗi gói:

--Get number of packets Errors
SELECT @@PACKET_ERRORS

Hiểu biết @@ TOTAL_READ, @@ TOTAL_WRITE và @@ TOTAL_ERRORS

Các hàm thống kê hệ thống liên quan đến đĩa nhận số lần đọc đĩa, ghi đĩa và lỗi ghi đĩa mà SQL Server đã thực hiện.

  • @@ TOTAL_READ - hiển thị số lần đọc đĩa của SQL Server kể từ lần khởi động lại gần đây nhất.
  • @@ TOTAL_WRITE - hiển thị số lượng đĩa được ghi bởi SQL Server kể từ lần khởi động lại gần đây nhất.
  • @@ TOTAL_ERRORS - hiển thị số lỗi ghi đĩa của SQL Server kể từ lần khởi động lại gần đây nhất. Hãy nhớ rằng, chức năng này không ghi lại các lỗi ghi không nghiêm trọng - chúng do hệ thống tự xử lý.

Tôi đã gộp tất cả 3 chức năng hệ thống trong một câu lệnh T-SQL để hiển thị kết quả đầu ra của tất cả chúng trong một lần:

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

Dưới đây, bạn có thể thấy số lỗi đọc, ghi và ghi đĩa:

Hiểu @@ CONNECTIONS Chức năng hệ thống

Chức năng hệ thống này hiển thị tổng số lần cố gắng kết nối với SQL Server bất kể thành công của chúng kể từ lần khởi động lại SQL Server cuối cùng. Chạy câu lệnh T-SQL dưới đây:

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

Kết quả bên dưới cho thấy tổng số kết nối đã cố gắng là 3130 cho phiên bản SQL Server này. Điều đó không có nghĩa là tất cả 3130 lần thử đều thành công.

Tất cả các chức năng thống kê của hệ thống trong một câu lệnh T-SQL

Chúng tôi cũng có thể kết hợp tất cả các chức năng hệ thống này trong một câu lệnh T-SQL và nhận được một đầu ra duy nhất cho mỗi giá trị thống kê hệ thống. Tôi đã giải thích riêng từng chức năng của hệ thống vì những chức năng này có thể rất hữu ích cho nhu cầu và yêu cầu công việc của bạn.

Chạy tập lệnh T-SQL dưới đây để nhận kết quả của tất cả các thống kê hệ thống được mô tả trong một lần:

--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]

Đây là đầu ra của tập lệnh trên, hiển thị tất cả thông tin liên quan đến thống kê trong một đầu ra:

Sử dụng thủ tục đã lưu trữ để lấy thống kê máy chủ SQL

Ngoài ra còn có một quy trình được lưu trữ hệ thống của Microsoft chuyên dụng cho phép chúng tôi xem chế độ xem tương tự về thống kê hệ thống . Tên của thủ tục được lưu trữ này là sp_monitor . Nó là tuyệt vời để theo dõi việc sử dụng và giá trị của từng loại thống kê SQL Server kể từ lần chạy cuối cùng bằng cùng một quy trình được lưu trữ

Lưu ý:Bạn cần có vai trò sysadmin để thực thi quy trình được lưu trữ này.

Tôi đã thực thi sp_monitor thủ tục được lưu trữ - hãy xem nó đang hiển thị ở dạng cụ thể như value (giá trị) -value% hoặc value (giá trị). Chúng ta có thể thấy cpu_busy đầu ra hiển thị là 20 (19) -0%. Bây giờ, bạn có thể nghĩ về cách chúng ta có thể đọc kết quả này. Đọc và hiểu bảng dưới đây - nó trình bày giải thích cho cả hai loại đầu ra:

Thông số hệ thống Đầu ra Phiên dịch
Cpu_busy 20 (19) -0% CPU bận 20 giây kể từ khi SQL Server được khởi động lần cuối \ khởi động lại CPU bận 19 giây vì sp_monitor là lần chạy cuối cùng0% tổng thời gian kể từ lần chạy cuối cùng của sp_monitor.
Packets_renition 1467 (1428) SQL Server đã nhận được 1467 gói kể từ khi nó được khởi động lần cuối \ restartedSQL Server đã nhận được 1428 gói kể từ khi sp_monitor được thực thi lần trước.

Kết luận

Bây giờ bạn có thể xem cách lấy thống kê liên quan đến hệ thống cho phiên bản SQL Server của bạn. Các chức năng của hệ thống và quy trình được lưu trữ sp_monitor sẽ rất hiệu quả và tiện lợi. Hãy tiếp tục và sử dụng các mã T-SQL này trong công việc phát triển của bạn hoặc cho các hoạt động phân tích hệ thống.

Hãy chia sẻ bài viết này trên các mạng xã hội yêu thích của bạn. Và nếu bạn muốn thảo luận về thông tin này cũng như chia sẻ ý kiến ​​và mẹo của mình, bạn có thể tham gia phần Nhận xét.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ràng buộc SQL DEFAULT để Chèn cột có giá trị mặc định vào bảng SQL Server

  2. Bản ghi ngẫu nhiên từ một bảng cơ sở dữ liệu (T-SQL)

  3. Chọn dữ liệu thông qua một chức năng được định giá bằng bảng trong SQL Server

  4. SSMS hiện đi kèm với Azure Data Studio

  5. Sử dụng chỉ mục trong bảng được tối ưu hóa bộ nhớ máy chủ SQL