Guest User

Untitled

a guest
Jan 16th, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.50 KB | None | 0 0
  1. declare @xel_path varchar(1024);
  2. declare @utc_adjustment int = datediff(hour, getutcdate(), getdate());
  3.  
  4. -------------------------------------------------------------------------------
  5. ------------------- target event_file path retrieval --------------------------
  6. -------------------------------------------------------------------------------
  7. ;with target_data_cte as
  8. (
  9. select
  10. target_data =
  11. convert(xml, target_data)
  12. from sys.dm_xe_sessions s
  13. inner join sys.dm_xe_session_targets st
  14. on s.address = st.event_session_address
  15. where s.name = 'alwayson_health'
  16. and st.target_name = 'event_file'
  17. ),
  18. full_path_cte as
  19. (
  20. select
  21. full_path =
  22. target_data.value('(EventFileTarget/File/@name)[1]', 'varchar(1024)')
  23. from target_data_cte
  24. )
  25. select
  26. @xel_path =
  27. left(full_path, len(full_path) - charindex('', reverse(full_path))) +
  28. 'AlwaysOn_health*.xel'
  29. from full_path_cte;
  30.  
  31. -------------------------------------------------------------------------------
  32. ------------------- replica state change events -------------------------------
  33. -------------------------------------------------------------------------------
  34. ;with state_change_data as
  35. (
  36. select
  37. object_name,
  38. event_data =
  39. convert(xml, event_data)
  40. from sys.fn_xe_file_target_read_file(@xel_path, null, null, null)
  41. )
  42. select
  43. object_name,
  44. event_timestamp =
  45. dateadd(hour, @utc_adjustment, event_data.value('(event/@timestamp)[1]', 'datetime')),
  46. ag_name =
  47. event_data.value('(event/data[@name = "availability_group_name"]/value)[1]', 'varchar(64)'),
  48. previous_state =
  49. event_data.value('(event/data[@name = "previous_state"]/text)[1]', 'varchar(64)'),
  50. current_state =
  51. event_data.value('(event/data[@name = "current_state"]/text)[1]', 'varchar(64)')
  52. from state_change_data
  53. where object_name = 'availability_replica_state_change'
  54. order by event_timestamp desc;
  55.  
  56. ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE = ON);
  57. ALTER EVENT SESSION AlwaysOn_health ON SERVER STATE = START;
  58.  
  59. DECLARE @FileName NVARCHAR(4000)
  60. SELECT @FileName = target_data.value('(EventFileTarget/File/@name)[1]', 'nvarchar(4000)')
  61. FROM (
  62. SELECT CAST(target_data AS XML) target_data
  63. FROM sys.dm_xe_sessions s
  64. JOIN sys.dm_xe_session_targets t
  65. ON s.address = t.event_session_address
  66. WHERE s.name = N'AlwaysOn_health'
  67. ) ft;
  68.  
  69. WITH base
  70. AS (
  71. SELECT XEData.value('(event/@timestamp)[1]', 'datetime2(3)') AS event_timestamp
  72. ,XEData.value('(event/data/text)[1]', 'VARCHAR(255)') AS previous_state
  73. ,XEData.value('(event/data/text)[2]', 'VARCHAR(255)') AS current_state
  74. ,ar.replica_server_name
  75. FROM (
  76. SELECT CAST(event_data AS XML) XEData
  77. ,*
  78. FROM sys.fn_xe_file_target_read_file(@FileName, NULL, NULL, NULL)
  79. WHERE object_name = 'availability_replica_state_change'
  80. ) event_data
  81. JOIN sys.availability_replicas ar
  82. ON ar.replica_id = XEData.value('(event/data/value)[5]', 'VARCHAR(255)')
  83. )
  84. SELECT DATEADD(HOUR, DATEDIFF(HOUR, GETUTCDATE(), GETDATE()), event_timestamp) AS event_timestamp
  85. ,previous_state
  86. ,current_state
  87. ,replica_server_name
  88. FROM base
  89. ORDER BY event_timestamp DESC;
Add Comment
Please, Sign In to add comment