Dans le cadre de tests de performances, j’ai cherché une solution pour remettre à zéro les statistiques présentées sur l’écran Query Performance du portail de management SQL AZURE.

SQLAzure_QueryPerformance

J’ai rapidement découvert l’instruction DBCC FREEPROCACHE. Cette instruction permet en effet de supprimer les plans d’exécution mis en cache par SQL SERVER. Celle- ci n’est malheureusement pas supportée par SQL AZURE.

En cherchant un petit peu, j’ai découvert une solution simple et efficace pour contourner ce problème sur le blog de Christian Rodriguez. La solution consiste à modifier temporairement les tables de la base de données pour provoquer la suppression automatique des plans d’exécution en cache.

Voici le script :


SET NOCOUNT ON
DECLARE @lcl_name VARCHAR(100)
DECLARE @addcolumnSql nVARCHAR(MAX)
DECLARE @dropcolumnSql nVARCHAR(MAX)
DECLARE cur_name CURSOR FOR

SELECT name
FROM sysobjects
WHERE type = 'U'

OPEN cur_name
FETCH NEXT FROM cur_name INTO @lcl_name
WHILE @@Fetch_status = 0
BEGIN
  SET @addcolumnSql = 'alter table [' + @lcl_name + '] add temp_col_to_clear_exec_plan bit'
  EXECUTE sp_executesql @addcolumnSql
  PRINT @addcolumnSql
  SET @dropcolumnSql = 'alter table [' + @lcl_name + '] drop column temp_col_to_clear_exec_plan'
  EXECUTE sp_executesql @dropcolumnSql
  PRINT @dropcolumnSql
  FETCH NEXT FROM cur_name INTO @lcl_name
END
CLOSE cur_name

DEALLOCATE cur_name
SET NOCOUNT OFF

Ce script m’a été très utile pour mes tests, j’espère que cette astuce vous servira également.