Condividi tramite


Prestazioni di SQL Server

In una gerarchia multisito Configuration Manager usa SQL Server replica per trasferire i dati tra siti. Per altre informazioni, vedere Replica di database.

Usare il diagramma seguente per avviare la risoluzione dei problemi relativi alle prestazioni SQL Server che possono influire sullo stato della replica:

Diagramma per la risoluzione dei problemi relativi alle prestazioni SQL Server

Query

Questo diagramma usa le query seguenti:

Assicurarsi che SQL Server tabella di rilevamento delle modifiche sia stata pulita

DECLARE @RetentionUnit INT = 0;
DECLARE @RetentionPeriod INT = 0;
DECLARE @CTCutOffTime DATETIME;
DECLARE @CTMinTime DATETIME;

SELECT @RetentionPeriod=retention_period,  
    @RetentionUnit=retention_period_units  
FROM sys.change_tracking_databases  
WHERE database_id = DB_ID();

IF @RetentionUnit = 1
    SET @CTCutOffTime = DATEADD(MINUTE,-@RetentionPeriod,GETUTCDATE())
ELSE IF @RetentionUnit = 2
    SET @CTCutOffTime = DATEADD(HOUR,-@RetentionPeriod,GETUTCDATE())
ELSE IF @RetentionUnit = 3
    SET @CTCutOffTime = DATEADD(DAY,-@RetentionPeriod,GETUTCDATE())

-- give a buffer of two days
SET @CTCutOffTime = DATEADD(DAY, -2, @CTCutOffTime)
select top 1 @CTMinTime=commit_time from sys.dm_tran_commit_table order by commit_ts asc
IF @CTMinTime < @CTCutOffTime
    PRINT 'there is change tracking backlog, please contact Microsoft support'

Modificare le sessioni correnti che gestiscono SQL Server messaggi di Service Broker sono bloccati

select
       req.session_id
       ,req.blocking_session_id
       ,req.last_wait_type
       ,req.wait_type
       ,req.wait_resource
       ,t.text
from sys.dm_exec_sessions s
inner join sys.dm_exec_requests req on s.Session_id=req.session_id
cross apply sys.dm_exec_sql_text(sql_handle) t
where program_name='SMS_data_replication_service'

Controllare le sessioni che richiedono troppa memoria

SELECT * FROM sys.dm_exec_query_memory_grants
ORDER BY requested_memory_kb DESC

Controllare le sessioni che accettano troppi blocchi

SELECT TOP 10 request_session_id,
program_name = (SELECT program_name FROM sys.dm_exec_sessions WHERE session_id=request_session_id),
COUNT (*) num_locks
FROM sys.dm_tran_locks
GROUP BY request_session_id
ORDER BY count (*) DESC

Vedere anche

Configurazione di SQL Server