SQL Server donne la possibilité de définir ses propres compteurs de performances en complément des compteurs installés par défaut. Il est possible de définir jusqu'à 10 compteurs de performances personnalisés. Il est ainsi possible de définir ses propres critères de performances. Les compteurs sont valorisés par l'intermédiaire des procédures stockées sp_user_counter1 à sp_user_counter10.
Afin de donner un certains dynamisme à ces compteurs, il est nécessaire de planifier un travail (sous la responsabilité de SQL Server Agent) qui va exécuter la mise à jour de la valeur du compteur.
Par exemple si l'on souhaite que le compteur numéro 1 représente la taille utilisé par le groupe de fichier PRIMARY de la base test la requête suivante peut être exécutée:
select sum(df.size) from sys.database_files df inner join sys.data_spaces ds on ds.data_space_id=df.data_space_id where ds.name='PRIMARY';
Le résultat est alors exprimé en nombre de pages. Comme chaque page représente 8Ko d'informations la taille en kilo-octets sera donc donnée à l'aide de la requête suivante:
select sum(df.size)*8 from sys.database_files df inner join sys.data_spaces ds on ds.data_space_id=df.data_space_id where ds.name='PRIMARY';
Le compteur numero 1 doit représenter cette valeur pour cela il faut stocker le résultat de cette requête dans une variable puis passer cette variable en paramètre de la procédure sp_user_counter1, ce qui peut être défini avec le script suivant:
declare @taille int select @taille=sum(df.size)*8 from sys.database_files df inner join sys.data_spaces ds on ds.data_space_id=df.data_space_id where ds.name='PRIMARY'; exec sp_user_counter1 @taille
Maintenant il semble difficile de laisser cela sous forme de script, il est donc nécessaire de planifier l'exécution de cette tâche de façon régulière. Pour cela après avoir démarré le service SQL Server Agent, un nouveau travail va être défini de la façon suivante. La planification de ce travail est définie pour une exécution toutes les heures entre 6h00 et 22h00 du lundi au dimanche.
declare @jobID Uniqueidentifier exec msdb.dbo.sp_add_job 'Les compteurs de performances', @job_ID=@jobID OUTPUT exec msdb.dbo.sp_add_jobstep @job_id=@jobID, @step_name='Compteur1',@subsystem=N'TSQL', @command='declare @taille int ;select @taille=sum(df.size)*8 from sys.database_files df inner join sys.data_spaces ds on ds.data_space_id=df.data_space_id where ds.name=''PRIMARY'';exec sp_user_counter1 @taille' -- Associer le travail au server local exec msdb.dbo.sp_add_jobserver @jobID, @server_name=N'(LOCAL)' -- definir une planification toutes les heures exec msdb.dbo.sp_add_jobschedule @job_id=@jobID,@name='Planification horaire', @enabled=1, /* Actif */ @freq_type=4, /* Quotidien */ @freq_interval=1, /* Tous les jours de la semaine */ @freq_subday_type=0x8, /*unité = heure */ @freq_subday_interval=1, /* Toute les heures*/ @active_start_time=060000, /* début à 6h00 */ @active_end_time=220000 /* fin à 22h00 */