Fix incorrect Azure SQL DB server properties (#7715)
This commit is contained in:
parent
a3aaa2f7bb
commit
1874ab53cb
|
|
@ -502,111 +502,109 @@ END
|
||||||
const sqlServerPropertiesV2 = `
|
const sqlServerPropertiesV2 = `
|
||||||
SET DEADLOCK_PRIORITY -10;
|
SET DEADLOCK_PRIORITY -10;
|
||||||
DECLARE
|
DECLARE
|
||||||
@SqlStatement AS nvarchar(max)
|
@SqlStatement AS nvarchar(max) = ''
|
||||||
,@EngineEdition AS tinyint = CAST(SERVERPROPERTY('EngineEdition') AS int)
|
,@EngineEdition AS tinyint = CAST(SERVERPROPERTY('EngineEdition') AS int)
|
||||||
|
|
||||||
DECLARE @sys_info TABLE (
|
|
||||||
cpu_count INT,
|
|
||||||
server_memory BIGINT,
|
|
||||||
sku NVARCHAR(64),
|
|
||||||
engine_edition SMALLINT,
|
|
||||||
hardware_type VARCHAR(16),
|
|
||||||
total_storage_mb BIGINT,
|
|
||||||
available_storage_mb BIGINT,
|
|
||||||
uptime INT
|
|
||||||
)
|
|
||||||
|
|
||||||
IF @EngineEdition = 8 /*Managed Instance*/
|
IF @EngineEdition = 8 /*Managed Instance*/
|
||||||
INSERT INTO @sys_info ( cpu_count, server_memory, sku, engine_edition, hardware_type, total_storage_mb, available_storage_mb, uptime )
|
SET @SqlStatement = 'SELECT TOP 1 ''sqlserver_server_properties'' AS [measurement],
|
||||||
SELECT TOP(1)
|
REPLACE(@@SERVERNAME,''\'','':'') AS [sql_instance],
|
||||||
virtual_core_count AS cpu_count,
|
DB_NAME() as [database_name],
|
||||||
(SELECT process_memory_limit_mb FROM sys.dm_os_job_object) AS server_memory,
|
virtual_core_count AS cpu_count,
|
||||||
sku,
|
(SELECT process_memory_limit_mb FROM sys.dm_os_job_object) AS server_memory,
|
||||||
cast(SERVERPROPERTY('EngineEdition') as smallint) AS engine_edition,
|
sku,
|
||||||
hardware_generation AS hardware_type,
|
@EngineEdition AS engine_edition,
|
||||||
reserved_storage_mb AS total_storage_mb,
|
hardware_generation AS hardware_type,
|
||||||
(reserved_storage_mb - storage_space_used_mb) AS available_storage_mb,
|
reserved_storage_mb AS total_storage_mb,
|
||||||
(select DATEDIFF(MINUTE,sqlserver_start_time,GETDATE()) from sys.dm_os_sys_info) as uptime
|
(reserved_storage_mb - storage_space_used_mb) AS available_storage_mb,
|
||||||
FROM sys.server_resource_stats
|
(select DATEDIFF(MINUTE,sqlserver_start_time,GETDATE()) from sys.dm_os_sys_info) as uptime,
|
||||||
ORDER BY start_time DESC
|
SERVERPROPERTY(''ProductVersion'') AS sql_version,
|
||||||
|
db_online,
|
||||||
|
db_restoring,
|
||||||
|
db_recovering,
|
||||||
|
db_recoveryPending,
|
||||||
|
db_suspect
|
||||||
|
FROM sys.server_resource_stats
|
||||||
|
CROSS APPLY
|
||||||
|
(SELECT SUM( CASE WHEN state = 0 THEN 1 ELSE 0 END ) AS db_online,
|
||||||
|
SUM( CASE WHEN state = 1 THEN 1 ELSE 0 END ) AS db_restoring,
|
||||||
|
SUM( CASE WHEN state = 2 THEN 1 ELSE 0 END ) AS db_recovering,
|
||||||
|
SUM( CASE WHEN state = 3 THEN 1 ELSE 0 END ) AS db_recoveryPending,
|
||||||
|
SUM( CASE WHEN state = 4 THEN 1 ELSE 0 END ) AS db_suspect,
|
||||||
|
SUM( CASE WHEN state = 6 or state = 10 THEN 1 ELSE 0 END ) AS db_offline
|
||||||
|
FROM sys.databases
|
||||||
|
) AS dbs
|
||||||
|
ORDER BY start_time DESC';
|
||||||
|
|
||||||
IF @EngineEdition = 5 /*Azure SQL DB*/
|
IF @EngineEdition = 5 /*Azure SQL DB*/
|
||||||
|
SET @SqlStatement = 'SELECT ''sqlserver_server_properties'' AS [measurement],
|
||||||
INSERT INTO @sys_info ( cpu_count, server_memory, sku, engine_edition, hardware_type, total_storage_mb, available_storage_mb, uptime )
|
REPLACE(@@SERVERNAME,''\'','':'') AS [sql_instance],
|
||||||
SELECT TOP(1)
|
DB_NAME() as [database_name],
|
||||||
(SELECT count(*) FROM sys.dm_os_schedulers WHERE status = 'VISIBLE ONLINE') AS cpu_count,
|
(SELECT count(*) FROM sys.dm_os_schedulers WHERE status = ''VISIBLE ONLINE'') AS cpu_count,
|
||||||
(SELECT process_memory_limit_mb FROM sys.dm_os_job_object) AS server_memory,
|
(SELECT process_memory_limit_mb FROM sys.dm_os_job_object) AS server_memory,
|
||||||
slo.edition as sku,
|
slo.edition as sku,
|
||||||
cast(SERVERPROPERTY('EngineEdition') as smallint) AS engine_edition,
|
@EngineEdition AS engine_edition,
|
||||||
slo.service_objective AS hardware_type,
|
slo.service_objective AS hardware_type,
|
||||||
cast(DATABASEPROPERTYEX(DB_NAME(),'MaxSizeInBytes') as bigint)/(1024*1024) AS total_storage_mb,
|
CASE
|
||||||
NULL AS available_storage_mb, -- Can we find out storage?
|
WHEN slo.edition = ''Hyperscale'' then NULL
|
||||||
NULL as uptime
|
ELSE cast(DATABASEPROPERTYEX(DB_NAME(),''MaxSizeInBytes'') as bigint)/(1024*1024)
|
||||||
FROM sys.databases d
|
END AS total_storage_mb,
|
||||||
-- sys.databases.database_id may not match current DB_ID on Azure SQL DB
|
CASE
|
||||||
CROSS JOIN sys.database_service_objectives slo
|
WHEN slo.edition = ''Hyperscale'' then NULL
|
||||||
WHERE d.name = DB_NAME() AND slo.database_id = DB_ID()
|
ELSE
|
||||||
|
(cast(DATABASEPROPERTYEX(DB_NAME(),''MaxSizeInBytes'') as bigint)/(1024*1024)-
|
||||||
|
(select SUM(size/128 - CAST(FILEPROPERTY(name, ''SpaceUsed'') AS int)/128) FROM sys.database_files )
|
||||||
|
)
|
||||||
|
END AS available_storage_mb,
|
||||||
|
(select DATEDIFF(MINUTE,sqlserver_start_time,GETDATE()) from sys.dm_os_sys_info) as uptime
|
||||||
|
FROM sys.databases d
|
||||||
|
-- sys.databases.database_id may not match current DB_ID on Azure SQL DB
|
||||||
|
CROSS JOIN sys.database_service_objectives slo
|
||||||
|
WHERE d.name = DB_NAME() AND slo.database_id = DB_ID()';
|
||||||
|
|
||||||
ELSE IF @EngineEdition IN (2,3,4) /*Standard,Enterprise,Express*/
|
ELSE IF @EngineEdition IN (2,3,4) /*Standard,Enterprise,Express*/
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
DECLARE @MajorMinorVersion AS int = CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') as nvarchar),4) AS int)*100 + CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') as nvarchar),3) AS int)
|
DECLARE @MajorMinorVersion AS int = CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') as nvarchar),4) AS int)*100 + CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') as nvarchar),3) AS int)
|
||||||
DECLARE @Columns AS nvarchar(MAX) = ''
|
DECLARE @Columns AS nvarchar(MAX) = ''
|
||||||
|
|
||||||
IF @MajorMinorVersion >= 1050
|
IF @MajorMinorVersion >= 1050
|
||||||
SET @Columns = N',CASE [virtual_machine_type_desc]
|
SET @Columns = N',CASE [virtual_machine_type_desc]
|
||||||
WHEN ''NONE'' THEN ''PHYSICAL Machine''
|
WHEN ''NONE'' THEN ''PHYSICAL Machine''
|
||||||
ELSE [virtual_machine_type_desc]
|
ELSE [virtual_machine_type_desc]
|
||||||
END AS [hardware_type]';
|
END AS [hardware_type]';
|
||||||
ELSE /*data not available*/
|
ELSE /*data not available*/
|
||||||
SET @Columns = N',''<n/a>'' AS [hardware_type]';
|
SET @Columns = N',''<n/a>'' AS [hardware_type]';
|
||||||
|
|
||||||
|
SET @SqlStatement = 'SELECT ''sqlserver_server_properties'' AS [measurement],
|
||||||
|
REPLACE(@@SERVERNAME,''\'','':'') AS [sql_instance],
|
||||||
|
DB_NAME() as [database_name],
|
||||||
|
[cpu_count]
|
||||||
|
,(SELECT [total_physical_memory_kb] FROM sys.[dm_os_sys_memory]) AS [server_memory]
|
||||||
|
,CAST(SERVERPROPERTY(''Edition'') AS NVARCHAR) AS [sku]
|
||||||
|
,@EngineEdition AS [engine_edition]
|
||||||
|
,DATEDIFF(MINUTE,[sqlserver_start_time],GETDATE()) AS [uptime]
|
||||||
|
' + @Columns + ',
|
||||||
|
SERVERPROPERTY(''ProductVersion'') AS sql_version,
|
||||||
|
db_online,
|
||||||
|
db_restoring,
|
||||||
|
db_recovering,
|
||||||
|
db_recoveryPending,
|
||||||
|
db_suspect,
|
||||||
|
db_offline
|
||||||
|
FROM sys.[dm_os_sys_info]
|
||||||
|
CROSS APPLY
|
||||||
|
( SELECT SUM( CASE WHEN state = 0 THEN 1 ELSE 0 END ) AS db_online,
|
||||||
|
SUM( CASE WHEN state = 1 THEN 1 ELSE 0 END ) AS db_restoring,
|
||||||
|
SUM( CASE WHEN state = 2 THEN 1 ELSE 0 END ) AS db_recovering,
|
||||||
|
SUM( CASE WHEN state = 3 THEN 1 ELSE 0 END ) AS db_recoveryPending,
|
||||||
|
SUM( CASE WHEN state = 4 THEN 1 ELSE 0 END ) AS db_suspect,
|
||||||
|
SUM( CASE WHEN state = 6 or state = 10 THEN 1 ELSE 0 END ) AS db_offline
|
||||||
|
FROM sys.databases
|
||||||
|
) AS dbs';
|
||||||
|
|
||||||
|
END
|
||||||
|
EXEC sp_executesql @SqlStatement , N'@EngineEdition smallint', @EngineEdition = @EngineEdition;
|
||||||
|
|
||||||
SET @SqlStatement = '
|
|
||||||
SELECT
|
|
||||||
[cpu_count]
|
|
||||||
,(SELECT [total_physical_memory_kb] FROM sys.[dm_os_sys_memory]) AS [server_memory]
|
|
||||||
,CAST(SERVERPROPERTY(''Edition'') AS NVARCHAR) AS [sku]
|
|
||||||
,@EngineEdition AS [engine_edition]
|
|
||||||
,DATEDIFF(MINUTE,[sqlserver_start_time],GETDATE()) AS [uptime]
|
|
||||||
' + @Columns + '
|
|
||||||
FROM sys.[dm_os_sys_info]'
|
|
||||||
|
|
||||||
/*Insert the dynamic sql result into the table variable*/
|
|
||||||
INSERT INTO @sys_info ( [cpu_count], [server_memory], [sku], [engine_edition], [uptime], [hardware_type] )
|
|
||||||
EXEC sp_executesql @SqlStatement , N'@EngineEdition smallint', @EngineEdition = @EngineEdition
|
|
||||||
END
|
|
||||||
|
|
||||||
SELECT 'sqlserver_server_properties' AS [measurement],
|
|
||||||
REPLACE(@@SERVERNAME,'\',':') AS [sql_instance],
|
|
||||||
DB_NAME() as [database_name],
|
|
||||||
s.cpu_count,
|
|
||||||
s.server_memory,
|
|
||||||
s.sku,
|
|
||||||
s.engine_edition,
|
|
||||||
s.hardware_type,
|
|
||||||
s.total_storage_mb,
|
|
||||||
s.available_storage_mb,
|
|
||||||
s.uptime,
|
|
||||||
SERVERPROPERTY('ProductVersion') AS sql_version,
|
|
||||||
db_online,
|
|
||||||
db_restoring,
|
|
||||||
db_recovering,
|
|
||||||
db_recoveryPending,
|
|
||||||
db_suspect,
|
|
||||||
db_offline
|
|
||||||
FROM (
|
|
||||||
SELECT SUM( CASE WHEN state = 0 THEN 1 ELSE 0 END ) AS db_online,
|
|
||||||
SUM( CASE WHEN state = 1 THEN 1 ELSE 0 END ) AS db_restoring,
|
|
||||||
SUM( CASE WHEN state = 2 THEN 1 ELSE 0 END ) AS db_recovering,
|
|
||||||
SUM( CASE WHEN state = 3 THEN 1 ELSE 0 END ) AS db_recoveryPending,
|
|
||||||
SUM( CASE WHEN state = 4 THEN 1 ELSE 0 END ) AS db_suspect,
|
|
||||||
SUM( CASE WHEN state = 6 or state = 10 THEN 1 ELSE 0 END ) AS db_offline
|
|
||||||
FROM sys.databases
|
|
||||||
) AS dbs
|
|
||||||
CROSS APPLY (
|
|
||||||
SELECT cpu_count, server_memory, sku, engine_edition, hardware_type, total_storage_mb, available_storage_mb, uptime
|
|
||||||
FROM @sys_info
|
|
||||||
) AS s
|
|
||||||
`
|
`
|
||||||
|
|
||||||
//Recommend disabling this by default, but is useful to detect single CPU spikes/bottlenecks
|
//Recommend disabling this by default, but is useful to detect single CPU spikes/bottlenecks
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue