Quiero monitorear el momento en que databaseName.ldf
cambia el tamaño de un archivo de registro de base de datos SQL para poder compararlo con el momento en que se ejecutaron las consultas SQL para determinar qué consultas/comportamiento SQL tienen el mayor efecto en el tamaño de mi databaseName.ldf
archivos.
Probé herramientas de terceros comoEl tamaño importayVista de cambios de carpetapero el problema fue que solo registraron el último cambio. Quería ver todos los cambios en el tamaño del archivo a lo largo del tiempo.
Preferiría que utilizara un método sin sondeo o que se activara por eventos.
Respuesta1
Monitor de procesos SysInternalsPuede ser útil con los siguientes filtros:
- Ruta:
databaseName.ldf
(prefiera la ruta completa si es posible) - Operación:
WriteFile
Una vez finalizada la prueba, puede guardarla como CSV o XML para su evaluación. Desafortunadamente, el tamaño del archivo está en la columna de detalles, que es una columna de texto que incluye otras cosas que no son de su interés. Dado que es probable que se agreguen archivos de registro, usted mismo debe calcular la longitud total (desplazamiento + longitud).
Con algunas habilidades de codificación en C#, puedes usar elVigilante del sistema de archivos. Beneficio: puedes iniciar sesión en el formato que más te convenga. Desventaja: código Spaghetti potencialmente no probado que podría tener errores.
using System;
using System.IO;
namespace FileSizeChangeLogger
{
static class Program
{
static long lastSize;
static FileInfo file = new FileInfo(@"D:\temp\myfilename.txt");
static void Main()
{
lastSize = file.Length;
var watcher = new FileSystemWatcher {Path = file.DirectoryName};
watcher.Changed += OnFileChange;
while (true)
{
watcher.WaitForChanged(WatcherChangeTypes.Changed);
}
}
private static void OnFileChange(object sender, FileSystemEventArgs e)
{
if (e.FullPath.Equals(file.FullName, StringComparison.InvariantCultureIgnoreCase))
{
file.Refresh();
var newSize = file.Length;
if (newSize != lastSize)
{
Console.WriteLine(file.Length);
}
}
}
}
}