Always On kullanılabilirlik grupları hakkında sağlık bilgisi elde etmek için halka arabellekleri kullanın.

Şunlar için geçerlidir: SQL Server

Bazı tanılama Always On kullanılabilirlik grubu (AG) bilgileri SQL Server kademe arabelleklerinden veya dinamik yönetim görünümünden sys.dm_os_ring_buffers (DMV) alınabilir. Ring arabellekleri SQL Server başlatıldığında oluşturulur ve iç tanılama amacıyla SQL Server'da uyarıları kaydeder. Bunlar desteklenmez, ancak sorunları giderirken onlardan değerli bilgileri ayıklamaya devam edebilirsiniz. Bu halka arabellekleri, SQL Server yanıt vermeyi durdurduğunda veya kilitlendiğinde başka bir tanılama kaynağı sağlar.

Aşağıdaki Transact-SQL (T-SQL) sorgusu AG halkası arabelleklerinden tüm olay kayıtlarını alır.

SELECT * FROM sys.dm_os_ring_buffers WHERE ring_buffer_type LIKE '%HADR%'

Verileri daha yönetilebilir hale getirmek için verileri tarihe ve halka arabellek türüne göre filtreleyin. Aşağıdaki sorgu, bugün gerçekleşen belirtilen kademe arabelleğinden kayıtları alır.

DECLARE @start_of_today DATETIME,
    @start_of_tomorrow DATETIME;

SET @start_of_today = CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME);
SET @start_of_tomorrow = DATEADD(DAY, 1, @start_of_today);

DECLARE @runtime DATETIME;

SET @runtime = GETDATE();

SELECT CONVERT(VARCHAR(30), @runtime, 121) AS data_collection_runtime,
    DATEADD(ms, - 1 * (inf.ms_ticks - ring.timestamp), GETDATE()) AS ring_buffer_record_time,
    ring.timestamp AS record_timestamp,
    inf.ms_ticks AS cur_timestamp,
    ring.*
FROM sys.dm_os_ring_buffers ring
CROSS JOIN sys.dm_os_sys_info inf
WHERE ring_buffer_type = '<RING_BUFFER_TYPE>'
    AND DATEADD(ms, - 1 * (inf.ms_ticks - ring.timestamp), GETDATE()) >= @start_of_today
    AND DATEADD(ms, - 1 * (inf.ms_ticks - ring.timestamp), GETDATE()) < @start_of_tomorrow;
GO

record Her kayıttaki sütun XML biçiminde tanılama verileri içerir. XML verileri kademe arabelleği türleri arasında farklılık gösterir. Her halka arabellek türü hakkında daha fazla bilgi için bkz: Kullanılabilirlik grubu halka arabellek türleri. XML verilerini daha okunabilir hale getirmek için T-SQL sorgunuzu özelleştirerek istenen XML öğelerini ayıklamanız gerekir. Örneğin, aşağıdaki sorgu RING_BUFFER_HADRDBMGR_API halka arabelleğindeki tüm olayları alır ve XML verilerini ayrı tablo sütunlarına biçimlendirır.

WITH hadr (ts, type, record)
AS (
    SELECT timestamp AS ts,
        ring_buffer_type AS type,
        CAST(record AS XML) AS record
    FROM sys.dm_os_ring_buffers
    WHERE ring_buffer_type = 'RING_BUFFER_HADRDBMGR_API'
    )
SELECT ts,
    type,
    record.value('(./Record/@id)[1]', 'bigint') AS [Record ID],
    record.value('(./Record/@time)[1]', 'bigint') AS [Time],
    record.value('(./Record/HadrDbMgrAPI/dbId)[1]', 'bigint') AS [DBID],
    record.value('(/Record/HadrDbMgrAPI/API)[1]', 'varchar(50)') AS [API],
    record.value('(/Record/HadrDbMgrAPI/Action)[1]', 'varchar(50)') AS [Action],
    record.value('(/Record/HadrDbMgrAPI/role)[1]', 'int') AS [Role],
    record.value('(/Record/Stack)[1]', 'varchar(100)') AS [Call Stack]
FROM hadr
ORDER BY record.value('(./Record/@time)[1]', 'bigint') DESC;
GO

Kullanılabilirlik grubu çevrim tamponu türleri

sys.dm_os_ring_buffers içinde dört AG halka arabelleği vardır. Aşağıdaki bölümde halka arabellek türleri ve her halka arabellek türü için sütun içeriğinin record bir örneği açıklanmaktadır.

RING_BUFFER_HADRDBMGR_API

Gerçekleşen veya gerçekleşen durum geçişlerini kaydeder. Durum geçişlerine bakarken değerlere objectType çok dikkat edin.

<Record id="11" type="RING_BUFFER_HADRDBMGR_STATE" time="860243">
  <HadrDbMgrState>
    <objectType>HadrUsers</objectType>
    <currentState>HDbMState_Starting</currentState>
    <proposedState>HDbMState_Started</proposedState>
    <targetState>HDbMState_Started</targetState>
    <legalTransition>Y</legalTransition>
    <role>1</role>
  </HadrDbMgrState>
</Record>

RING_BUFFER_HADRDBMGR_STATE

AG etkinliği tarafından yapılan iç yöntem veya işlev çağrılarını kaydeder. Hem giriş hem de çıkış noktaları dahil olmak üzere askıya alma, sürdürme veya rol değişiklikleri gibi bilgileri gösterebilir.

<Record id="45" type="RING_BUFFER_HADRDBMGR_STATE" time="1723487912">
  <HadrDbMgrState>
    <dbId>5</dbId>
    <objectType>HadrDbMgr</objectType>
    <currentState>HDbMState_Starting</currentState>
    <proposedState>HDbMState_Started</proposedState>
    <targetState>HDbMState_Started</targetState>
    <legalTransition>Y</legalTransition>
    <role>2</role>
  </HadrDbMgrState>
</Record>

RING_BUFFER_HADRDBMGR_COMMIT

<Record id="0" type="RING_BUFFER_HADRDBMGR_COMMIT" time="1723475368">
  <HadrDbMgrCommitPolicy>
    <dbId>5</dbId>
    <replicaId>883a18f5-97d5-450f-8f8f-9983a4fa5299</replicaId>
    <dbHardenPolicy>KillAll</dbHardenPolicy>
    <dbSyncConfig>0x0</dbSyncConfig>
    <syncPartnerCount>0</syncPartnerCount>
    <minSyncPartnerConfig>0</minSyncPartnerConfig>
    <partnerHardenPolicy>KillAll</partnerHardenPolicy>
    <partnerSyncConfig>0x0</partnerSyncConfig>
    <logBlock>0x0000000000000000</logBlock>
    <leaseExpired>Y</leaseExpired>
    <partnerChange>N</partnerChange>
    <role>2</role>
  </HadrDbMgrCommitPolicy>
</Record>

RING_BUFFER_HADR_TRANSPORT_STATE

<Record id="3" type="RING_BUFFER_HADR_TRANSPORT_STATE" time="1723485399">
  <HadrTransportState>
    <agId>08264B79-D10B-412F-B38D-CA07B08E9BD8</agId>
    <localArId>883A18F5-97D5-450F-8F8F-9983A4FA5299</localArId>
    <targetArId>628D6349-72DD-4D18-A6E1-1272645660BA</targetArId>
    <currentState>HadrSession_Configuring</currentState>
    <targetState>HadrSession_Connected</targetState>
    <legalTransition>Y</legalTransition>
  </HadrTransportState>
</Record>

XML verilerini halka arabelleğinden ayrıştırma

Sorgunuzda Record kullanarak, oluşturduğunuz kademe arabelleğinden alanını ayrıştırabilirsiniz. Bu yöntemi kullanmak için önce halka arabelleğindeki kayıt sütununu XML'e CAST etmeniz gerekir. Örneğin, aşağıdaki sorgu, bu yöntemi kullanarak RING_BUFFER_HADRDBMGR_API öğesini okunabilir bir formata dönüştürme şeklini göstermektedir.

WITH hadr (ts, type, record)
AS (
    SELECT timestamp AS ts,
        ring_buffer_type AS type,
        CAST(record AS XML) AS record
    FROM sys.dm_os_ring_buffers
    WHERE ring_buffer_type = 'RING_BUFFER_HADRDBMGR_API'
    )
SELECT ts,
    type,
    record.value('(./Record/@id)[1]', 'bigint') AS [Record id],
    record.value('(./Record/@time)[1]', 'bigint') AS [Time],
    record.value('(./Record/HadrDbMgrAPI/dbId)[1]', 'bigint') AS [dbid],
    record.value('(/Record/HadrDbMgrAPI/API)[1]', 'varchar(50)') AS [API],
    record.value('(/Record/HadrDbMgrAPI/Action)[1]', 'varchar(50)') AS [Action],
    record.value('(/Record/HadrDbMgrAPI/role)[1]', 'int') AS [Role],
    record.value('(/Record/Stack)[1]', 'varchar(100)') AS [Call Stack]
FROM hadr
ORDER BY record.value('(./Record/@time)[1]', 'bigint') DESC;
GO

Sonraki Adımlar