Я хочу отслеживать время, когда размер файла журнала базы данных SQL, databaseName.ldf изменяется, чтобы я мог сравнить его со временем выполнения запросов SQL, чтобы определить, какие запросы / поведение SQL оказывают наибольшее влияние на размер моих файлов databaseName.ldf .

Я пробовал сторонние инструменты, такие как Size Matters и Folder Changes View, но проблема заключалась в том, что они регистрировали только последние изменения. Я хотел видеть все изменения в размере файла с течением времени.

Я бы предпочел, если бы он использовал метод без опроса или вызванный событиями.

1 ответ1

1

SysInternals Process Monitor может быть полезен со следующими фильтрами:

  • Путь: databaseName.ldf (предпочитайте полный путь, если это возможно)
  • Операция: WriteFile

После окончания теста вы можете сохранить его в формате CSV или XML для оценки. К сожалению, размер файла указан в столбце сведений, который представляет собой текстовый столбец, включающий другие элементы, которые вам не интересны. Поскольку файлы журналов, вероятно, добавляются, вам необходимо рассчитать общую длину самостоятельно (смещение + длина).

Снимок экрана гипотетического файла журнала


С некоторыми навыками кодирования на C # вы можете использовать FileSystemWatcher. Преимущество: вы можете войти в формат, который лучше всего подходит для вас. Недостаток: потенциально не проверенный код Spaghetti, в котором могут быть ошибки.

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);
                }
            }
        }
    }
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .