Наблюдая, как тестовый сервер увеличивает размер файла журнала tempdb до 8 ГБ, из 12 ГБ, выделенных в течение нескольких часов во время нагрузочного тестирования. Файлы данных tempdb почти не используют файловое пространство. При запуске DBCC OPENTRAN в базе данных tempdb открытые транзакции отсутствуют более нескольких секунд. Я использую SQL Server 2005, и изоляция моментальных снимков чтения отключена.
Как определить, что использует журнал tempdb?
Журнал Tempdb несколько отличается от журналов в пользовательских базах данных.
В базе данных tempdb регистрируется только информация UNDO вместо REDO и UNDO, поскольку транзакции в базе данных tempdb всегда откатываются назад, а не вперед. Это связано с тем, что в базе данных tempdb никогда не запускалось восстановление после сбоя, и поэтому информация REDO никогда не используется. Если эти термины не имеют для вас смысла, см. Мою статью в журнале TechNet Magazine о Понимание ведения журнала и восстановления в SQL Server. Однако обратите внимание, что все операции, которые вносят изменения в tempdb воля быть зарегистрированным - tempdb не "не регистрируется".
Журнал Tempdb не очищает / не усекает (см. Статью снова), как другие журналы базы данных. В базе данных tempdb журнал будет усечен на контрольной точке (как в обычной модели восстановления SIMPLE), но контрольная точка не возникает автоматически так часто, как это происходит в пользовательских базах данных. В пользовательских базах данных контрольная точка возникает, чтобы попытаться ограничить время, необходимое для запуска аварийного восстановления (путем принудительного переноса грязных страниц на диск и, таким образом, ограничения объема REDO-восстановления, которое должно быть выполнено) и для пакетного обновления страниц для уменьшения общего количество выполненных операций ввода-вывода.
Таким образом, контрольные точки в tempdb возникают только тогда, когда использование журнала tempdb достигает определенной доли от общего размера журнала, около 70%, потому что время восстановления не имеет значения.
Подводя итог, ваш журнал tempdb ведет себя именно так, как ожидалось.
Надеюсь это поможет.
Журнал для tempdb растет так же, как и любой другой журнал транзакций. Все регистрируется до следующей контрольной точки, после которой записи журнала помечаются как подлежащие перезаписи. По умолчанию контрольная точка запускается каждую минуту или около того, поэтому, если у вас много чего происходит в tempdb (и поскольку вы проводите нагрузочное тестирование, вероятно, много чего происходит в tempdb), журнал будет расти следующим образом.
Если ваш нагрузочный тест соответствует вашей производственной нагрузке, вы можете ожидать, что ваш производственный журнал tempdb также вырастет до этого размера.
Вы можете использовать SQL Profiler, чтобы узнать, какие пользователи / приложения делают то, что требует хранилища tempdb.