Я хочу отслеживать время изменения размера файла журнала базы данных SQL, databaseName.ldf
чтобы можно было сравнить его со временем выполнения SQL-запросов и определить, какие SQL-запросы/поведение оказывают наибольшее влияние на размер моих databaseName.ldf
файлов.
Я пробовал сторонние инструменты, такие какРазмер имеет значениеиПросмотр изменений в папкено проблема была в том, что они регистрировали только последние изменения. Я хотел увидеть все изменения в размере файла с течением времени.
Я бы предпочел, чтобы он использовал метод без опроса или запускался событиями.
решение1
Монитор процессов SysInternalsмогут быть полезны следующие фильтры:
- Путь:
databaseName.ldf
(предпочтительно полный путь, если возможно) - Операция:
WriteFile
После завершения теста вы можете сохранить его в формате CSV или XML для оценки. К сожалению, размер файла указан в столбце «Подробности», который представляет собой текстовый столбец, включающий другие данные, которые вам не интересны. Поскольку файлы журналов, скорее всего, будут добавлены, вам нужно будет самостоятельно рассчитать общую длину (смещение + длина).
Имея некоторые навыки программирования на C#, вы можете использоватьFileSystemWatcher. Преимущество: вы можете войти в наиболее подходящий для вас формат. Недостаток: потенциально непроверенный спагетти-код, который может содержать ошибки.
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);
}
}
}
}
}