Published on

February 13, 2022

Utilisation de GroupedTableAppenderResponse dans les événements étendus de SQL Server

Bienvenue dans une autre recette de notre livre de cuisine des événements étendus ! Dans cet article de blog, nous explorerons le concept de GroupedTableAppenderResponse dans les événements étendus de SQL Server et comment il peut être utilisé pour extraire des informations précieuses à partir d’une série d’événements.

Imaginez que vous ayez hérité d’une instance SQL Server volumineuse et occupée avec plusieurs bases de données et connexions. Une de vos tâches est de suivre quelles connexions sont actives et lesquelles peuvent être désactivées en toute sécurité. Activer l’audit de connexion dans le ERRORLOG peut créer beaucoup de bruit, et capturer des événements de connexion individuels avec une session d’événements étendus peut être inefficace.

C’est là que GroupedTableAppenderResponse est utile. Il vous permet de regrouper et d’agréger des événements en mémoire avant de les écrire dans une table cible. De cette façon, vous pouvez extraire des informations spécifiques sans avoir à lire et à agréger toutes les données ultérieurement.

Créons une session d’événements étendus pour capturer les événements de connexion :

IF NOT EXISTS (SELECT * FROM sys.server_event_sessions WHERE name = 'Recipe06')
CREATE EVENT SESSION [Recipe06] ON SERVER 
ADD EVENT sqlserver.login(
    SET collect_database_name=(1)
    ACTION(
        sqlserver.client_app_name,
        sqlserver.server_principal_name
    )
)
GO

IF NOT EXISTS (SELECT * FROM sys.dm_xe_sessions WHERE name = 'Recipe06')
    ALTER EVENT SESSION Recipe06 ON SERVER STATE = START;

Maintenant, configurons le GroupedTableAppenderResponse :

{
    "Target": {
        "ServerName": "$ServerName",
        "SessionName": "Recipe06",
        "FailOnProcessingError": false,
        "Responses": [
            {
                "__type": "GroupedTableAppenderResponse",
                "ServerName": "$ServerName",
                "DatabaseName": "XERecipes",
                "TableName": "Recipe_06_LoginAudit",
                "AutoCreateTargetTable": false,
                "OutputColumns": [
                    "server_principal_name",
                    "database_name",
                    "client_app_name",
                    "MIN(collection_time) AS first_seen", 
                    "MAX(collection_time) AS last_seen", 
                    "COUNT(collection_time) AS logon_count" 
                ],
                "Events": [
                    "login"
                ]
            }
        ]
    }
}

Dans cette configuration, nous spécifions la table cible où les données agrégées seront écrites. Nous définissons également les colonnes de sortie, y compris les colonnes agrégées telles que MIN, MAX et COUNT. Les données sont regroupées en mémoire, puis fusionnées avec les données existantes dans la table cible en utilisant les colonnes group by comme clé de jointure.

Une fois la configuration définie, nous pouvons exécuter l’outil XESmartTarget pour exécuter la session d’événements étendus :

"%ProgramFiles%XESmartTargetxesmarttarget.exe" --File c:tempRecipe_06_Login_Audit.json --GlobalVariables ServerName=(local)SQLEXPRESS

La fenêtre de la console nous informera que les lignes sont regroupées et agrégées selon la configuration. L’inspection des données dans la table cible confirme que les événements de connexion ont été agrégés avec succès.

Si vous laissez XESmartTarget s’exécuter pendant un certain temps, il continuera à écrire plus de données dans la table cible et mettra à jour les comptes en conséquence. Cela vous permet d’identifier facilement les connexions inutilisées en exécutant XESmartTarget pendant une durée significative et en analysant les données dans la table cible.

GroupedTableAppenderResponse est un outil puissant qui peut être utilisé pour diverses tâches dans les événements étendus de SQL Server. Dans notre prochaine recette, nous explorerons comment l’utiliser pour identifier les tables inutilisées dans une base de données. Restez à l’écoute !

Merci d’avoir lu cette recette de notre livre de cuisine des événements étendus. Si vous avez des questions ou des suggestions, n’hésitez pas à laisser un commentaire ci-dessous.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.