Thursday, April 29, 2021

Database performance information

Understanding Your SQL Server Databases: A Comprehensive Query

This post provides a powerful SQL query to gather crucial information about all databases on your SQL Server instance. You'll get insights into their **recovery model**, **log reuse wait description**, **log file size**, **log usage size**, and **compatibility level**, along with many other important database settings. This script is invaluable for monitoring database health and performance.


SELECT db.[name] AS [Database Name]
 ,SUSER_SNAME(db.owner_sid) AS [Database Owner]
 ,db.recovery_model_desc AS [Recovery Model]
 ,db.state_desc
 ,db.containment_desc
 ,db.log_reuse_wait_desc AS [Log Reuse Wait Description]
 ,CONVERT(DECIMAL(18, 2), ls.cntr_value / 1024.0) AS [Log Size (MB)]
 ,CONVERT(DECIMAL(18, 2), lu.cntr_value / 1024.0) AS [Log Used (MB)]
 ,CAST(CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT) AS DECIMAL(18, 2)) * 100 AS [Log Used %]
 ,db.[compatibility_level] AS [DB Compatibility Level]
 ,db.is_mixed_page_allocation_on
 ,db.page_verify_option_desc AS [Page Verify Option]
 ,db.is_auto_create_stats_on
 ,db.is_auto_update_stats_on
 ,db.is_auto_update_stats_async_on
 ,db.is_parameterization_forced
 ,db.snapshot_isolation_state_desc
 ,db.is_read_committed_snapshot_on
 ,db.is_auto_close_on
 ,db.is_auto_shrink_on
 ,db.target_recovery_time_in_seconds
 ,db.is_cdc_enabled
 ,db.is_published
 ,db.is_distributor
 ,db.group_database_id
 ,db.replica_id
 ,db.is_memory_optimized_elevate_to_snapshot_on
 ,db.delayed_durability_desc
 ,db.is_auto_create_stats_incremental_on
 ,db.is_query_store_on
 ,db.is_sync_with_backup
 ,db.is_temporal_history_retention_enabled
 ,db.is_supplemental_logging_enabled
 ,db.is_remote_data_archive_enabled
 ,db.is_encrypted
 ,de.encryption_state
 ,de.percent_complete
 ,de.key_algorithm
 ,de.key_length
 ,db.resource_pool_id
 ,db.is_tempdb_spill_to_remote_store
 ,db.is_result_set_caching_on
 ,db.is_accelerated_database_recovery_on
 ,is_stale_page_detection_on
FROM sys.databases AS db WITH (NOLOCK)
INNER JOIN sys.dm_os_performance_counters AS lu WITH (NOLOCK) ON db.name = lu.instance_name
INNER JOIN sys.dm_os_performance_counters AS ls WITH (NOLOCK) ON db.name = ls.instance_name
LEFT OUTER JOIN sys.dm_database_encryption_keys AS de WITH (NOLOCK) ON db.database_id = de.database_id
WHERE lu.counter_name LIKE N'Log File(s) Used Size (KB)%'
 AND ls.counter_name LIKE N'Log File(s) Size (KB)%'
 AND ls.cntr_value > 0
ORDER BY db.[name]
OPTION (RECOMPILE);

This query leverages two key Dynamic Management Views (DMVs) for its data:


Popular Posts