Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
A diagnosztikai Always On rendelkezésre állási csoport (AG) adatai az SQL Server gyűrűpuffereiből vagy a sys.dm_os_ring_buffers dinamikus felügyeleti nézetből (DMV) kérhetők le. A gyűrűpufferek az SQL Server indításakor jönnek létre, és riasztásokat rögzítenek az SQL Server rendszeren belül a belső diagnosztika érdekében. Ezek nem támogatottak, de a hibák elhárítása során továbbra is értékes információkat nyerhet ki belőlük. Ezek a gyűrűpufferek egy másik diagnosztikai forrást biztosítanak, ha az SQL Server nem válaszol vagy összeomlik.
Az alábbi Transact-SQL (T-SQL) lekérdezés lekéri az összes eseményrekordot az AG-gyűrű puffereiből.
SELECT * FROM sys.dm_os_ring_buffers WHERE ring_buffer_type LIKE '%HADR%'
Az adatok kezelhetőbbé tétele érdekében szűrje az adatokat dátum és a gyűrűpuffer típusa szerint. Az alábbi lekérdezés lekéri azokat a rekordokat a megadott gyűrűpufferből, amelyek ma történtek.
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
Az record egyes rekordok oszlopa XML formátumú diagnosztikai adatokat tartalmaz. Az XML-adatok különböznek a gyűrűpufferek típusaitól. További információ az egyes gyűrűpuffertípusokról: Rendelkezésre állási csoport gyűrű puffertípusai. Az XML-adatok olvashatóbbá tétele érdekében testre kell szabnia a T-SQL-lekérdezést a kívánt XML-elemek kinyeréséhez. Az alábbi lekérdezés például lekéri az összes eseményt a RING_BUFFER_HADRDBMGR_API gyűrűpufferből, és az XML-adatokat külön táblaoszlopokba formázja.
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
Rendelkezésre állási csoport gyűrűs puffertípusai
Négy AG gyűrűpuffer található a sys.dm_os_ring_buffers. Az alábbi szakasz ismerteti a gyűrűpuffer típusait és az record egyes gyűrűpuffertípusok oszloptartalmának mintáját.
RING_BUFFER_HADRDBMGR_API
Rögzíti azokat az állapotváltozásokat, amelyek megtörténtek vagy éppen történnek. Az állapotáttűnéseket vizsgálva ügyeljen az objectType értékekre.
<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
Az AG-tevékenység által végrehajtott belső metódus- vagy függvényhívásokat rögzíti. Olyan információkat jeleníthet meg, mint a felfüggesztés, a folytatás vagy a szerepkörváltozások, beleértve a belépési és a kilépési pontokat is.
<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-adatok elemzése gyűrűpufferből
A vizsgált gyűrűpufferből elemezheti a Record mezőt a lekérdezésben szereplő érték() metódus (xml-adattípus) használatával. Ennek a módszernek a használatához először a gyűrűpuffer rekordoszlopát XML-fájlba kell leadnia . Az alábbi lekérdezés például bemutatja, hogyan elemezhet RING_BUFFER_HADRDBMGR_API olvasható formátumban ezzel a módszerrel.
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