it-swarm-eu.dev

Zjištění využití serveru SQL pomocí dotazu

Můj aktuální projekt bude neustále odesílat dotazy na server SQL a může využívat 100% paměti nebo procesoru.

  • Jak mohu zkontrolovat, zda se server blíží plnému využití uložené procedury, abych se mohl rozhodnout, zda provést dotazy nebo ne, nebo uložit některá nastavení do tabulky, aby následující dotazy věděly, že je pracovní vytížení vysoké, a rozhodnout, co dělat

  • Pokud ne, jak mohu zabránit serveru SQL, aby dosáhl plného využití?

Další informace o tomto případě: Nyní vím, že náš současný testovací server dokáže zpracovat 40–50 dotazů za sekundu (jedna konkrétní uložená procedura). A nyní se rozhodneme, kolik dotazů se na server odesílá každou sekundu. Pokud nastavíme částku ještě o 1 vyšší, než se očekávalo, z dlouhodobého hlediska dotazy nakonec zaplní virtuální paměť a klient bude muset periodicky restartovat svou instanci serveru SQL.

Očekávané výsledky (pro lovce odměn):

@memory_usage float, @cpu_usage float; /* in percentage */

Jakékoli nápady jsou vítány. Dík.

7

Pokud opravdu chcete omezit paměť serveru SQL, podívejte se na možnost Maximální paměť server .

Využití paměti je možné, ale záleží na tom, co opravdu chcete. Chcete vidět využití paměti jako procento z možnosti „Maximální paměť serveru“? Pokud ano, podívejte se na sys.dm_os_process_memory :

select convert(float, memory_utilization_percentage) / 100 as memory_usage
from sys.dm_os_process_memory

Pokud chcete využívat fyzickou paměť vs. celkovou systémovou paměť, podívejte se do obou sys.dm_os_process_memory a sys.dm_os_sys_info :

select * from sys.dm_os_sys_info

declare @physicalMemoryInUseKB bigint
declare @totalSystemMemoryBytes bigint

select @physicalMemoryInUseKB = physical_memory_in_use_kb from sys.dm_os_process_memory
select @totalSystemMemoryBytes = physical_memory_in_bytes from sys.dm_os_sys_info
select convert(float, @physicalMemoryInUseKB) * 1024
       / convert(float, @totalSystemMemoryBytes) as memory_usage

Nemyslím si, že můžete získat využití CPU, pokud nemáte povoleno Resource Governor . Pokud ano, podívejte se na sys.dm_os_performance_counters:

select
    case CPUUsageBase
        when 0 then 0
        else convert(float, CPUUsage) / convert(float, CPUUsageBase)
    end as 'cpu_usage'
from
(select cntr_value as [CPUUsage]
from sys.dm_os_performance_counters
where counter_name like 'CPU usage%'
and object_name like '%Workload Group Stats%'
and cntr_type = 537003264) Usage
cross join
(select cntr_value as [CPUUsageBase]
 from sys.dm_os_performance_counters
 where counter_name like 'CPU usage %'
 and object_name like '%Workload Group Stats%'
 and cntr_type = 1073939712) UsageBase
11
Paul Williams

DMV poskytují informace o využití CPU a paměti. Tyto dotazy vyžadují ke spuštění oprávnění VIEW_SERVER_STATE.

DECLARE @memory_usage FLOAT
    , @cpu_usage FLOAT

SET @memory_usage = ( SELECT    1.0 - ( available_physical_memory_kb / ( total_physical_memory_kb * 1.0 ) ) memory_usage
                        FROM      sys.dm_os_sys_memory
                    )

SET @cpu_usage = ( SELECT TOP ( 1 )
                            [CPU] / 100.0 AS [CPU_usage]
                    FROM     ( SELECT    record.value('(./Record/@id)[1]', 'int') AS record_id
                                        , record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int') AS [CPU]
                                FROM      ( SELECT    [timestamp]
                                                    , CONVERT(XML, record) AS [record]
                                            FROM      sys.dm_os_ring_buffers WITH ( NOLOCK )
                                            WHERE     ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'
                                                    AND record LIKE N'%<SystemHealth>%'
                                        ) AS x
                            ) AS y
                    ORDER BY record_id DESC
                    )


SELECT  @memory_usage [memory_usage]
        , @cpu_usage [cpu_usage]
5
StrayCatDBA

V rámci uložené procedury? Nebudete mít možnost, jakmile bude dokončen dotaz, který způsobil, že CPU přejde na 100%, již nemůžete monitorovat tuto metriku, která by byla provedena dalším dotazem v rámci uložené procedury.

Pokud používáte SQL Server 2008 nebo vyšší (a Enterprise Edition), můžete pomocí nástroje guvernér prostředků zajistit, aby ostatní procesy měly k dispozici výkon procesoru a paměť.

4
mrdenny