Ich möchte ein Audit-Trail-System in meiner Datenbank einrichten, um UPDATE/INSERT
Anweisungen für eine bestimmte Tabelle mit sehr hoher Aktivität zu überwachen . Ich habe zwei Möglichkeiten vor mir: Verwenden des in SQL Server integrierten Audit-Systems oder Erweiterte Ereignisse.
Da SQL Server Audit intern erweiterte Ereignisse verwendet, gehe ich davon aus, dass bei der direkten Verwendung von Audit anstelle von erweiterten Ereignissen ein gewisser Overhead entsteht.
Kann ich auf irgendeine Weise testen, welches System den Server stärker beeinflusst? Wenn ich wissen könnte, was tatsächlich passiert, wenn eine XE-Sitzung erstellt wird, würde dies mir bei der Analyse der Auswirkungen auf den Server helfen.
Wir haben Trigger in Betracht gezogen und diese Option wegen des Overheads weggelassen. Dies wurde jedoch nur aufgrund von Informationen aus dem Internet entschieden.
quelle
Antworten:
Ich habe einen einfachen Prüfstand erstellt, um SQL Server Audit gegen Trigger und möglicherweise andere Optionen zu testen. Bei meinen Tests zum Einfügen von 1 Million Zeilen in eine Tabelle erhielt ich 52, 67 und 159 Sekunden für Baseline, SQL Audit und meinen Trigger:
Dies ist nicht besonders wissenschaftlich, bietet Ihnen jedoch möglicherweise eine Möglichkeit, Ansätze zu vergleichen. Sehen Sie sich das Skript an und prüfen Sie, ob es für Sie von Nutzen sein kann:
Obwohl die Triggeroption hier nicht sehr gut funktioniert hat, kann mein Triggercode je nach dem, was Sie erfassen möchten, vereinfacht werden, und Sie können auf die alten und neuen Werte in einem ziemlich verwendbaren Format zugreifen, das SQL Audit nicht bietet. Ich habe diese Technik für eine Konfigurationstabelle mit geringerer Aktivität verwendet und sie funktioniert recht gut. Je nachdem, was Sie erfassen möchten, können Sie auch die Datenerfassung ändern in Betracht ziehen .
Lassen Sie mich wissen, wie Sie mit Ihren Prüfungen weitermachen. Viel Glück.
quelle
Ein Vorteil des Audits ist, dass automatisch aufgezeichnet wird, wer es ein- und ausschaltet. XE führt dies nicht sofort aus (obwohl Sie möglicherweise ein Ereignis finden, das das Stoppen / Starten von XE verfolgt). Möglicherweise erfassen die beiden auch unterschiedliche Daten, je nachdem, was Sie genau möchten.
Um einige Tests durchführen zu können, müssten Sie eine Datenbanksicherung durchführen, eine Ablaufverfolgung der Anwendung unter Last erfassen und dann die Kopie wiederherstellen, während Sie eine Wiedergabe / Wiedergabe mit Audit / Ersetzen mit XE durchführen und Leistungsdaten vergleichen.
Welche Leistungsdaten? Es liegt an dir. Für einige Ideen - Linchi Shea führte einen Vergleich zwischen Audit und Trace durch, indem er sich auf Transaktionen / Sek. Konzentrierte, während Kehayias einen Vergleich zwischen Trace und XE durchführte, indem er sich auf Stapel / Sek. Und die gesamte Laufzeit der Wiederholung konzentrierte.
Ich möchte Sie ermutigen, beide und ihre Kommentare zu lesen, da Sie wissen sollten, dass sie unabhängig von Ihrer Tätigkeit interpretiert werden können. Es ist schwierig, einen Apfelvergleich für Äpfel zu bekommen. Außerdem kann eine Ablaufverfolgung / Wiedergabe das Laden möglicherweise nicht richtig simulieren - beispielsweise, wenn Ihre Anwendung viele Massenladevorgänge von nicht mehr vorhandenen Datenträgerdateien ausführt.
Wichtig ist jedoch, dass Sie mindestens eines ausprobieren, damit Sie Ihre Entscheidungen rechtfertigen und auch für den Rest von uns darüber bloggen können.
quelle