ClearAffectedPlans_BeforeCU3_Upgrade.sql 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. SET NOCOUNT ON;
  2. DROP TABLE IF EXISTS #tmpUserDBs;
  3. SELECT [database_id], 0 AS [IsDone]
  4. INTO #tmpUserDBs
  5. FROM master.sys.databases
  6. WHERE [database_id] > 4
  7. AND [state] = 0 -- must be ONLINE
  8. AND is_read_only = 0 -- cannot be READ_ONLY
  9. AND [database_id] NOT IN (SELECT dr.database_id FROM sys.dm_hadr_database_replica_states dr -- Except all local Always On secondary replicas
  10. INNER JOIN sys.dm_hadr_availability_replica_states rs ON dr.group_id = rs.group_id
  11. INNER JOIN sys.databases d ON dr.database_id = d.database_id
  12. WHERE rs.role = 2 -- Is Secondary
  13. AND dr.is_local = 1
  14. AND rs.is_local = 1)
  15. DECLARE @userDB sysname;
  16. WHILE (SELECT COUNT([database_id]) FROM #tmpUserDBs WHERE [IsDone] = 0) > 0
  17. BEGIN
  18. SELECT TOP 1 @userDB = DB_NAME([database_id]) FROM #tmpUserDBs WHERE [IsDone] = 0
  19. -- PRINT 'Working on database ' + @userDB
  20. EXEC ('USE [' + @userDB + '];
  21. DECLARE @clearPlan bigint, @clearQry bigint;
  22. IF EXISTS (SELECT [actual_state] FROM sys.database_query_store_options WHERE [actual_state] IN (1,2))
  23. BEGIN
  24. IF EXISTS (SELECT plan_id FROM sys.query_store_plan WHERE engine_version = ''14.0.3008.27'')
  25. BEGIN
  26. DROP TABLE IF EXISTS #tmpclearPlans;
  27. SELECT plan_id, query_id, 0 AS [IsDone]
  28. INTO #tmpclearPlans
  29. FROM sys.query_store_plan WHERE engine_version = ''14.0.3008.27''
  30. WHILE (SELECT COUNT(plan_id) FROM #tmpclearPlans WHERE [IsDone] = 0) > 0
  31. BEGIN
  32. SELECT TOP 1 @clearPlan = plan_id, @clearQry = query_id FROM #tmpclearPlans WHERE [IsDone] = 0
  33. EXECUTE sys.sp_query_store_unforce_plan @clearQry, @clearPlan;
  34. EXECUTE sys.sp_query_store_remove_plan @clearPlan;
  35. UPDATE #tmpclearPlans
  36. SET [IsDone] = 1
  37. WHERE plan_id = @clearPlan AND query_id = @clearQry
  38. END;
  39. PRINT ''- Cleared possibly affected plans in database [' + @userDB + ']''
  40. END
  41. ELSE
  42. BEGIN
  43. PRINT ''- No affected plans in database [' + @userDB + ']''
  44. END
  45. END
  46. ELSE
  47. BEGIN
  48. PRINT ''- Query Store not enabled in database [' + @userDB + ']''
  49. END')
  50. UPDATE #tmpUserDBs
  51. SET [IsDone] = 1
  52. WHERE [database_id] = DB_ID(@userDB)
  53. END