|
| 1 | +/*Clear Query Store and procedure cache*/ |
| 2 | +ALTER DATABASE AdventureWorks2016_EXT SET QUERY_STORE CLEAR; |
| 3 | +ALTER DATABASE AdventureWorks2016_EXT SET QUERY_STORE = ON (QUERY_CAPTURE_MODE = ALL); |
| 4 | +DBCC FREEPROCCACHE |
| 5 | +GO |
| 6 | +USE AdventureWorks2016_EXT; |
| 7 | +GO |
| 8 | + |
| 9 | +/*Run simple query - what data is collected and where does it go to?*/ |
| 10 | +SELECT * FROM Part; |
| 11 | + |
| 12 | +SELECT * FROM sys.query_store_query_text; |
| 13 | +SELECT * FROM sys.query_store_query; |
| 14 | +SELECT * FROM sys.query_store_plan; |
| 15 | +SELECT * FROM sys.query_store_runtime_stats; |
| 16 | + |
| 17 | +/* |
| 18 | + Combine all info |
| 19 | + vw_QueryStoreCompileInfo is custom view (created for presentation) |
| 20 | +
|
| 21 | +*/ |
| 22 | +SELECT * FROM vw_QueryStoreCompileInfo |
| 23 | +WHERE query_sql_text = 'SELECT * FROM Part' |
| 24 | + |
| 25 | +/*The same query from the proc*/ |
| 26 | +DROP PROCEDURE IF EXISTS sp_GetParts |
| 27 | +GO |
| 28 | + |
| 29 | +CREATE PROCEDURE sp_GetParts |
| 30 | +AS |
| 31 | +SELECT * FROM Part; |
| 32 | +GO |
| 33 | + |
| 34 | +EXEC sp_GetParts; |
| 35 | + |
| 36 | +/*Again the same query, from sp_executesql*/ |
| 37 | +EXEC sp_executesql N'SELECT * FROM Part' |
| 38 | + |
| 39 | +SELECT * FROM vw_QueryStoreCompileInfo |
| 40 | +WHERE query_sql_text = 'SELECT * FROM Part' |
| 41 | + |
| 42 | +/*Finally trigger*/ |
| 43 | +DROP TRIGGER IF EXISTS dbo.OnPartInsert |
| 44 | +GO |
| 45 | + |
| 46 | +CREATE TRIGGER dbo.OnPartInsert |
| 47 | + ON dbo.Part |
| 48 | + AFTER INSERT |
| 49 | +AS |
| 50 | +BEGIN |
| 51 | + -- SET NOCOUNT ON added to prevent extra result sets from |
| 52 | + -- interfering with SELECT statements. |
| 53 | + SET NOCOUNT ON; |
| 54 | + |
| 55 | + SELECT * FROM Part; |
| 56 | + |
| 57 | +END |
| 58 | +GO |
| 59 | + |
| 60 | +INSERT INTO Part VALUES (3000020, 'Part_300020'); |
| 61 | + |
| 62 | +SELECT * FROM vw_QueryStoreCompileInfo |
| 63 | +WHERE query_sql_text = 'SELECT * FROM Part' |
| 64 | + |
| 65 | +/*What happens with parametrized query?*/ |
| 66 | +SELECT * FROM Part WHERE PartId = 5; |
| 67 | + |
| 68 | +SELECT * FROM vw_QueryStoreCompileInfo |
| 69 | +WHERE query_sql_text = 'SELECT * FROM Part = 5' |
| 70 | + |
| 71 | +/* Check sys.query_store_query_text */ |
| 72 | + |
| 73 | +SELECT * FROM sys.query_store_query_text; |
| 74 | + |
| 75 | +/*Try sys.fn_stmt_sql_handle_from_sql_stmt this instead*/ |
| 76 | +SELECT * FROM sys.fn_stmt_sql_handle_from_sql_stmt |
| 77 | +('SELECT * FROM Part WHERE PartId = 5', NULL) |
| 78 | + |
| 79 | +/*Changed searched criteria*/ |
| 80 | +SELECT V.* FROM vw_QueryStoreCompileInfo V |
| 81 | +JOIN sys.fn_stmt_sql_handle_from_sql_stmt |
| 82 | +('SELECT * FROM Part WHERE PartId = 5', NULL) F |
| 83 | +ON V.statement_sql_handle = F.statement_sql_handle |
| 84 | + |
| 85 | +/*Get runtime info for the queries*/ |
| 86 | +SELECT * FROM vw_QueryStoreRuntimeInfo |
| 87 | +WHERE query_sql_text = 'SELECT * FROM Part' |
| 88 | +ORDER BY start_time DESC |
| 89 | + |
| 90 | +SELECT * FROM vw_QueryStoreRuntimeInfo V |
| 91 | +JOIN sys.fn_stmt_sql_handle_from_sql_stmt |
| 92 | +('SELECT * FROM Part WHERE PartId = 5', NULL) F |
| 93 | +ON V.statement_sql_handle = F.statement_sql_handle |
| 94 | +ORDER BY start_time DESC |
| 95 | + |
| 96 | + |
0 commit comments