123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- -- LWP related extended events Demo
- CREATE EVENT SESSION [PerfStats_Node] ON SERVER
- ADD EVENT sqlserver.query_thread_profile(
- ACTION(sqlos.scheduler_id,sqlserver.database_id,sqlserver.is_system,sqlserver.plan_handle,sqlserver.query_hash_signed,sqlserver.query_plan_hash_signed,sqlserver.server_instance_name,sqlserver.session_id,sqlserver.session_nt_username,sqlserver.sql_text))
- --ADD TARGET package0.ring_buffer(SET max_memory=(25600))
- ADD TARGET package0.event_file(SET filename=N'C:\IP\Tiger\SQL Intersection\SQL Intersection Winter 2018\Gems to Help You Troubleshoot Query Performance\new_xevents\PerfStats_Node.xel',max_file_size=(50),max_rollover_files=(2))
- WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
- GO
- USE AdventureWorks2016CTP3
- GO
- DROP EVENT SESSION [PerfStats_Node] ON SERVER
- GO
- ALTER EVENT SESSION [PerfStats_Node] ON SERVER STATE = start;
- GO
- -- Execute plan with many nodes
- SELECT e.[BusinessEntityID],
- p.[Title],
- p.[FirstName],
- p.[MiddleName],
- p.[LastName],
- p.[Suffix],
- e.[JobTitle],
- pp.[PhoneNumber],
- pnt.[Name] AS [PhoneNumberType],
- ea.[EmailAddress],
- p.[EmailPromotion],
- a.[AddressLine1],
- a.[AddressLine2],
- a.[City],
- sp.[Name] AS [StateProvinceName],
- a.[PostalCode],
- cr.[Name] AS [CountryRegionName],
- p.[AdditionalContactInfo]
- FROM [HumanResources].[Employee] AS e
- INNER JOIN [Person].[Person] AS p
- ON RTRIM(LTRIM(p.[BusinessEntityID])) = RTRIM(LTRIM(e.[BusinessEntityID]))
- INNER JOIN [Person].[BusinessEntityAddress] AS bea
- ON RTRIM(LTRIM(bea.[BusinessEntityID])) = RTRIM(LTRIM(e.[BusinessEntityID]))
- INNER JOIN [Person].[Address] AS a
- ON RTRIM(LTRIM(a.[AddressID])) = RTRIM(LTRIM(bea.[AddressID]))
- INNER JOIN [Person].[StateProvince] AS sp
- ON RTRIM(LTRIM(sp.[StateProvinceID])) = RTRIM(LTRIM(a.[StateProvinceID]))
- INNER JOIN [Person].[CountryRegion] AS cr
- ON RTRIM(LTRIM(cr.[CountryRegionCode])) = RTRIM(LTRIM(sp.[CountryRegionCode]))
- LEFT OUTER JOIN [Person].[PersonPhone] AS pp
- ON RTRIM(LTRIM(pp.BusinessEntityID)) = RTRIM(LTRIM(p.[BusinessEntityID]))
- LEFT OUTER JOIN [Person].[PhoneNumberType] AS pnt
- ON RTRIM(LTRIM(pp.[PhoneNumberTypeID])) = RTRIM(LTRIM(pnt.[PhoneNumberTypeID]))
- LEFT OUTER JOIN [Person].[EmailAddress] AS ea
- ON RTRIM(LTRIM(p.[BusinessEntityID])) = RTRIM(LTRIM(ea.[BusinessEntityID]))
- GO
- ALTER EVENT SESSION [PerfStats_Node] ON SERVER STATE = stop;
- GO
- -- Choose any event and let's open the associated cached plan.
- -- I want to see which operator this one is, and where in the plan it sits
- SELECT qp.query_plan
- FROM sys.dm_exec_query_stats qs
- CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
- WHERE CAST(qs.query_plan_hash AS BIGINT) = -832496756154281217
- GO
- -- How will I search for my node_id? Use showplan search in SSMS.
- -------------------------------
- -- Now for a new event. A LWP-based "query_post_execution_showplan"
- DROP EVENT SESSION [PerfStats_LWP_Plan] ON SERVER
- GO
- CREATE EVENT SESSION [PerfStats_LWP_Plan] ON SERVER
- ADD EVENT sqlserver.query_plan_profile(
- ACTION(sqlos.scheduler_id,sqlserver.database_id,sqlserver.is_system,sqlserver.plan_handle,sqlserver.query_hash_signed,sqlserver.query_plan_hash_signed,sqlserver.server_instance_name,sqlserver.session_id,sqlserver.session_nt_username,sqlserver.sql_text))
- --ADD TARGET package0.ring_buffer(SET max_memory=(25600))
- ADD TARGET package0.event_file(SET filename=N'C:\IP\Tiger\SQL Intersection\SQL Intersection Winter 2018\Gems to Help You Troubleshoot Query Performance\new_xevents\PerfStats_LWP_Plan.xel',max_file_size=(50),max_rollover_files=(2))
- WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
- GO
- ALTER EVENT SESSION [PerfStats_LWP_Plan] ON SERVER STATE = start;
- GO
- -- Let's run the following query
- SELECT e.[BusinessEntityID],
- p.[Title],
- p.[FirstName],
- p.[MiddleName],
- p.[LastName],
- p.[Suffix],
- e.[JobTitle],
- pp.[PhoneNumber],
- pnt.[Name] AS [PhoneNumberType],
- ea.[EmailAddress],
- p.[EmailPromotion],
- a.[AddressLine1],
- a.[AddressLine2],
- a.[City],
- sp.[Name] AS [StateProvinceName],
- a.[PostalCode],
- cr.[Name] AS [CountryRegionName],
- p.[AdditionalContactInfo]
- FROM [HumanResources].[Employee] AS e
- INNER JOIN [Person].[Person] AS p
- ON RTRIM(LTRIM(p.[BusinessEntityID])) = RTRIM(LTRIM(e.[BusinessEntityID]))
- INNER JOIN [Person].[BusinessEntityAddress] AS bea
- ON RTRIM(LTRIM(bea.[BusinessEntityID])) = RTRIM(LTRIM(e.[BusinessEntityID]))
- INNER JOIN [Person].[Address] AS a
- ON RTRIM(LTRIM(a.[AddressID])) = RTRIM(LTRIM(bea.[AddressID]))
- INNER JOIN [Person].[StateProvince] AS sp
- ON RTRIM(LTRIM(sp.[StateProvinceID])) = RTRIM(LTRIM(a.[StateProvinceID]))
- INNER JOIN [Person].[CountryRegion] AS cr
- ON RTRIM(LTRIM(cr.[CountryRegionCode])) = RTRIM(LTRIM(sp.[CountryRegionCode]))
- LEFT OUTER JOIN [Person].[PersonPhone] AS pp
- ON RTRIM(LTRIM(pp.BusinessEntityID)) = RTRIM(LTRIM(p.[BusinessEntityID]))
- LEFT OUTER JOIN [Person].[PhoneNumberType] AS pnt
- ON RTRIM(LTRIM(pp.[PhoneNumberTypeID])) = RTRIM(LTRIM(pnt.[PhoneNumberTypeID]))
- LEFT OUTER JOIN [Person].[EmailAddress] AS ea
- ON RTRIM(LTRIM(p.[BusinessEntityID])) = RTRIM(LTRIM(ea.[BusinessEntityID]))
- OPTION (RECOMPILE, USE HINT('QUERY_PLAN_PROFILE'))
- GO
- ALTER EVENT SESSION [PerfStats_LWP_Plan] ON SERVER STATE = stop;
- GO
- -- Let's see the event and what it provides
|