Загрузка данных
USE [replTransVas];
SET NOCOUNT ON;
-- 1. Фактическое состояние индексов после ошибки 1222.
SELECT
N'01_INDEXES' AS section,
name,
type_desc,
is_disabled
FROM sys.indexes
WHERE object_id = OBJECT_ID(N'dbo.sb_answer')
ORDER BY index_id;
-- 2. Два снимка работы сессий репликации.
-- Счетчики сессии накопительные: сравниваем прирост.
DECLARE @sample int = 1;
WHILE @sample <= 2
BEGIN
SELECT
N'02_REPLICATION_WORK' AS section,
@sample AS sample_no,
SYSDATETIME() AS captured_at,
s.session_id,
s.login_time,
s.status AS session_status,
s.cpu_time AS session_cpu_ms,
s.logical_reads AS session_logical_reads,
s.reads AS session_reads,
s.writes AS session_writes,
r.status AS request_status,
r.command,
r.wait_type,
r.wait_time AS wait_ms,
r.blocking_session_id,
r.wait_resource,
r.total_elapsed_time AS request_elapsed_ms,
CASE WHEN r.sql_handle IS NOT NULL THEN
SUBSTRING(
txt.text,
r.statement_start_offset / 2 + 1,
(
CASE r.statement_end_offset
WHEN -1 THEN DATALENGTH(txt.text)
ELSE r.statement_end_offset
END - r.statement_start_offset
) / 2 + 1
)
END AS current_statement
FROM sys.dm_exec_sessions AS s
LEFT JOIN sys.dm_exec_requests AS r
ON r.session_id = s.session_id
OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) AS txt
WHERE s.program_name =
N'WIN-5ODCFIGQRP3_myNewVasya_V3Trans';
-- Одна и та же transaction_id в обоих снимках,
-- ее возраст и изменение объема журнала.
SELECT
N'03_ACTIVE_TRANSACTIONS' AS section,
@sample AS sample_no,
SYSDATETIME() AS captured_at,
s.session_id,
st.transaction_id,
at.transaction_begin_time,
DATEDIFF(
SECOND, at.transaction_begin_time, GETDATE()
) AS transaction_age_seconds,
dt.database_transaction_log_record_count AS log_records,
CAST(
dt.database_transaction_log_bytes_used / 1048576.0
AS decimal(18, 2)
) AS log_used_mb
FROM sys.dm_exec_sessions AS s
JOIN sys.dm_tran_session_transactions AS st
ON st.session_id = s.session_id
JOIN sys.dm_tran_active_transactions AS at
ON at.transaction_id = st.transaction_id
JOIN sys.dm_tran_database_transactions AS dt
ON dt.transaction_id = st.transaction_id
WHERE s.program_name =
N'WIN-5ODCFIGQRP3_myNewVasya_V3Trans'
AND dt.database_id = DB_ID();
-- Есть ли очередь задач на CPU в момент снимка.
SELECT
N'04_CPU_QUEUE' AS section,
@sample AS sample_no,
scheduler_id,
runnable_tasks_count,
current_tasks_count,
pending_disk_io_count
FROM sys.dm_os_schedulers
WHERE status = N'VISIBLE ONLINE';
IF @sample = 1
WAITFOR DELAY '00:00:15';
SET @sample += 1;
END;
-- 3. Последние сообщения доставки.
SELECT TOP (10)
N'05_DISTRIBUTION_HISTORY' AS section,
h.[time],
h.runstatus,
h.comments
FROM distribution.dbo.MSdistribution_agents AS a
JOIN distribution.dbo.MSdistribution_history AS h
ON h.agent_id = a.id
WHERE a.publisher_db = N'myNewVasya'
AND a.publication = N'V3Trans'
AND a.subscriber_db = N'replTransVas'
ORDER BY h.[time] DESC;
-- 4. Параметры профиля именно этого агента.
SELECT
N'06_AGENT_PROFILE' AS section,
a.id AS agent_id,
a.name AS agent_name,
a.profile_id,
p.parameter_name,
p.value
FROM distribution.dbo.MSdistribution_agents AS a
LEFT JOIN msdb.dbo.MSagent_parameters AS p
ON p.profile_id = a.profile_id
WHERE a.publisher_db = N'myNewVasya'
AND a.publication = N'V3Trans'
AND a.subscriber_db = N'replTransVas'
ORDER BY p.parameter_name;