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

2 cách để xem liệu các tính năng không dùng nữa có còn được sử dụng trong phiên bản máy chủ SQL hay không

Thật ngạc nhiên khi một số tính năng có thể không còn được sử dụng trong thế giới phần mềm một cách nhanh chóng.

Bài viết này trình bày hai phương pháp để xem liệu các tính năng không dùng nữa có đang được sử dụng trong phiên bản SQL Server hay không.

Phương pháp 1 - sys.dm_os_performance_counters

Có lẽ cách nhanh nhất để làm điều đó là sử dụng sys.dm_os_performance_counters chế độ xem quản lý động hệ thống. Trong số nhiều điều bạn có thể làm với chế độ xem này, là nhận danh sách các tính năng không dùng nữa, cùng với số lần chúng đã được sử dụng kể từ khi SQL Server khởi động.

Dưới đây là một ví dụ được lấy từ bài viết của tôi Cách nhanh nhất để tìm các tính năng không được dùng nữa vẫn được sử dụng trong phiên bản máy chủ SQL:

SELECT
  RTRIM(instance_name) 'Feature', 
  cntr_value 'Usage Count'
FROM sys.dm_os_performance_counters   
WHERE object_name = 'SQLServer:Deprecated Features'
AND cntr_value > 0;

Kết quả:

+-----------------------------------+---------------+
| Feature                           | Usage Count   |
|-----------------------------------+---------------|
| String literals as column aliases | 1             |
| TIMESTAMP                         | 1             |
| numbered_procedures               | 1             |
| sysdatabases                      | 3             |
| sp_db_vardecimal_storage_format   | 1             |
| XP_API                            | 2             |
+-----------------------------------+---------------+

Trong ví dụ này, tôi chỉ trả lại những hàng có object_name cột có giá trị là SQLServer:Deprecated Featurescntr_value giá trị của cột lớn hơn 0.

Bạn có thể xóa cntr_value từ truy vấn này để trả về tất cả các tính năng không dùng nữa, bao gồm cả những tính năng chưa được sử dụng.

Phương pháp 2 - Sử dụng Sự kiện mở rộng

Một cách khác để làm điều đó là sử dụng các sự kiện mở rộng. Đây là một phương pháp toàn diện hơn và bạn có thể sử dụng nó để tạo tệp nhật ký chứa tất cả các trường hợp sử dụng tính năng không được dùng nữa, cùng với câu lệnh SQL được sử dụng có chứa tính năng không dùng nữa, ai đã chạy nó, cơ sở dữ liệu mà nó đã được chạy chống lại, v.v. . Dưới đây là một ví dụ.

Tạo sự kiện:

CREATE EVENT SESSION [Deprecation Events] ON SERVER 
ADD EVENT sqlserver.deprecation_announcement(
    ACTION(
        sqlserver.database_name,
        sqlserver.sql_text,
        sqlserver.username
        )
),
ADD EVENT sqlserver.deprecation_final_support(
    ACTION(
        sqlserver.database_name,
        sqlserver.sql_text,
        sqlserver.username
    )
)
ADD TARGET package0.event_file(
    SET filename=N'/var/opt/mssql/tmp/DeprecationEvents.xel'
    )
WITH (
    TRACK_CAUSALITY = ON
    );

Bắt đầu sự kiện:

ALTER EVENT SESSION [Deprecation Events] ON SERVER STATE = START;

Chạy một số mã không dùng nữa:

SELECT * FROM sys.sql_dependencies;

Đọc nhật ký:

SELECT
    EventXml.value('(@timestamp)[1]', 'datetime2') AS [timestamp],
    EventXml.value('(action[@name="username"]/value)[1]', 'nvarchar(256)') AS username,
    EventXml.value('(action[@name="database_name"]/value)[1]', 'nvarchar(128)') AS database_name,
    EventXml.value('(action[@name="sql_text"]/value)[1]', 'varchar(4000)') AS sql_text,
    EventXml.value('(@name)[1]', 'varchar(50)') AS event_name,
    EventXml.value('(data[@name="feature"]/value)[1]', 'varchar(255)') AS feature,
    EventXml.value('(data[@name="message"]/value)[1]', 'varchar(max)') AS message
FROM (SELECT CAST(event_data AS XML) AS XmlEventData
    FROM sys.fn_xe_file_target_read_file (
        '/var/opt/mssql/tmp/DeprecationEvents*.xel', 
        null, 
        null, 
        null
    )) AS EventTable
CROSS APPLY EventTable.XmlEventData.nodes('event') AS q(EventXml);

Kết quả (sử dụng đầu ra dọc):

dấu thời gian
timestamp     | 2019-10-31 04:03:06.5280000
username      | sa
database_name | Test
sql_text      | SELECT * FROM sys.sql_dependencies;
event_name    | deprecation_announcement
feature       | sql_dependencies
message       | sql_dependencies will be removed in a future version of SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use it.

Để thảo luận chi tiết hơn về phương pháp này, hãy xem Sử dụng sự kiện mở rộng để ghi nhật ký các tính năng không được dùng nữa đang được sử dụng trong phiên bản SQL Server. Bài viết đó bao gồm cùng một ví dụ, nhưng chi tiết hơn một chú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. Sự khác biệt giữa #temptable và ## TempTable?

  2. Tại sao EF lại tạo ra các truy vấn SQL với các lần kiểm tra null không cần thiết?

  3. THỜI GIAN THỐNG KÊ trong SQL Server là gì?

  4. Cách bật quyền hàng loạt trong SQL Server

  5. Di chuyển đám mây 101:Di chuyển từ SQL Server sang Azure