Pessoal, abaixo um script muito interessante para uma validação inicial de de um Servidor SQL Server:
Retorno da consulta:
-- Total de Memoria no Servidor
-- % Uso de Memoria
-- % Qtde de CPU
-- VM ou servidor Fisico
-- Transações por segundo no SQL Server (bom para monitorar como está a utilização do banco de dados);
-- Quantidade de conexões no banco de dados (bom para monitorar quando temos um maior número de usuários conectados)
-- Consumo de CPU do servidor (bom para acompanhar o consumo de CPU);
-- [Page Life Expectancy] Expectativa de vida em segundos de uma página na memória do SQL Server (bom para monitorar se você está mantendo dados em cache por muito tempo, evitando acessos a disco
Parte do script veio da rotina de contatores do brother Fabrício Lima (https://www.fabriciolima.net/blog/2016/06/22/queries-do-dia-a-dia-monitorando-contadores-de-forma-simples-via-dmv/)
USE MASTER
GO
DECLARE
@BATCHREQUESTS INT,
@USER_CONNECTION INT,
@CPU INT,
@PLE INT,
@V_CPU_COUNT INT,
@V_BATCH_REQUESTS INT
DECLARE
@REQUESTSPERSECONDSAMPLE1 BIGINT,
@REQUESTSPERSECONDSAMPLE2 BIGINT
DECLARE
@V_SERVER_MEMORY_GB VARCHAR(255),
@V_PER_MEMORY_USED VARCHAR(255),
@V_VIRTUAL_MACHINE_TYPE_DESC VARCHAR(255)
SELECT
@REQUESTSPERSECONDSAMPLE1 = CNTR_VALUE
FROM SYS.DM_OS_PERFORMANCE_COUNTERS WHERE COUNTER_NAME = 'BATCH REQUESTS/SEC'
WAITFOR DELAY '00:00:05'
SELECT
@REQUESTSPERSECONDSAMPLE2 = CNTR_VALUE
FROM SYS.DM_OS_PERFORMANCE_COUNTERS WHERE COUNTER_NAME = 'BATCH REQUESTS/SEC'
SELECT @BATCHREQUESTS = (@REQUESTSPERSECONDSAMPLE2 - @REQUESTSPERSECONDSAMPLE1)/5
SELECT
@USER_CONNECTION = CNTR_VALUE
FROM SYS.DM_OS_PERFORMANCE_COUNTERS
WHERE COUNTER_NAME = 'USER CONNECTIONS'
SELECT TOP(1) @CPU = (SQLProcessUtilization + (100 - SystemIdle - SQLProcessUtilization ) )
FROM (
SELECT record.value('(./Record/@id)[1]', 'int') AS record_id,
record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int')
AS [SystemIdle],
record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]',
'int')
AS [SQLProcessUtilization], [timestamp]
FROM (
SELECT [timestamp], CONVERT(xml, record) AS [record]
FROM sys.dm_os_ring_buffers
WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'
AND record LIKE '%<SystemHealth>%') AS x
) AS y
SELECT
@PLE = CNTR_VALUE
FROM SYS.DM_OS_PERFORMANCE_COUNTERS
WHERE COUNTER_NAME = 'PAGE LIFE EXPECTANCY'
AND OBJECT_NAME LIKE '%Buffer Manager%'
SELECT
@V_SERVER_MEMORY_GB = round(total_physical_memory_kb/1048576.0,2),-- AS "SERVER_MEMORY_GB"
@V_PER_MEMORY_USED = round(100 - (100 * CAST(available_physical_memory_kb AS DECIMAL(18,3))/CAST(total_physical_memory_kb AS DECIMAL(18,3))) ,2),-- AS "PER_MEMORY_USED"
@V_CPU_COUNT = CPU_COUNT,
@V_VIRTUAL_MACHINE_TYPE_DESC = VIRTUAL_MACHINE_TYPE_DESC
FROM SYS.DM_OS_SYS_INFO SYSINFO
OUTER APPLY SYS.DM_OS_SYS_MEMORY
DECLARE @V1 BIGINT, @DELAY SMALLINT = 2, @TIME DATETIME;
SELECT @TIME = DATEADD(SECOND, @DELAY, '00:00:00');
SELECT @V1 = CNTR_VALUE
FROM MASTER.SYS.DM_OS_PERFORMANCE_COUNTERS
WHERE COUNTER_NAME = 'Batch Requests/sec';
WAITFOR DELAY @time;
/* [VIRTUAL_MACHINE_TYPE_DESC]
https://docs.microsoft.com/pt-br/sql/relational-databases/system-dynamic-management-views/sys-dm-os-sys-info-transact-sql?view=sql-server-2017
NONE = SQL Server não está em execução em uma máquina virtual.
HYPERVISOR = o SQL Server está em execução dentro de um hipervisor, o que implica uma virtualização assistida por hardware. Quando a função Hyper-V é instalada, o hipervisor hospeda o sistema operacional, para que uma instância em execução no sistema operacional host esteja em execução no hipervisor.
OTHER = o SQL Server está em execução dentro de uma máquina virtual que não usa assistente de hardware, como o Microsoft Virtual PC.
*/
SELECT
@V_BATCH_REQUESTS = (CNTR_VALUE - @V1)/@DELAY -- Transações por segundo no SQL Server (bom para monitorar como está a utilização do banco de dados);
FROM MASTER.SYS.DM_OS_PERFORMANCE_COUNTERS
WHERE COUNTER_NAME='Batch Requests/sec';
SELECT
@V_SERVER_MEMORY_GB AS [SERVER_MEMORY_GB] -- Total de Memoria no Servidor
,@V_PER_MEMORY_USED AS [PER_MEMORY_USED] -- % Uso de Memoria
,@V_CPU_COUNT AS [CPU_COUNT] -- % Qtde de CPU
,@V_VIRTUAL_MACHINE_TYPE_DESC AS [VIRTUAL_MACHINE_TYPE_DESC] -- VM ou servidor Fisico
,@V_BATCH_REQUESTS AS [BATCH REQUESTS/SEC] -- Transações por segundo no SQL Server (bom para monitorar como está a utilização do banco de dados);
,@USER_CONNECTION AS QT_USER_CONNECTION -- Quantidade de conexões no banco de dados (bom para monitorar quando temos um maior número de usuários conectados)
,@CPU AS [%_CPU] -- Consumo de CPU do servidor (bom para acompanhar o consumo de CPU);
,@PLE AS [Page Life Expectancy] -- [Page Life Expectancy] Expectativa de vida em segundos de uma página na memória do SQL Server (bom para monitorar se você está mantendo dados em cache por muito tempo, evitando acessos a disco