Transaction Log – How it works. Виталий Попович Разработчик баз данных Intapp Say Thank you to Volunteers: They spend their FREE time to give you this event. Because they are love our COMMUNITY. Because they want YOU to learn from the BEST IN THE WORLD. If you see one of these guys in the hall – buy them a beer/wine, they deserve it. Vitaliy Popovych Olena Smoliak Maksim Garnets Yevhen Nedashkivskyi Oksana Borysenko 3 Sponsor Sessions at 12:30 Don’t miss them, they might be providing some interesting and valuable information! Bakotech (Dell) – Room “AE” Intapp – Room “F” DevArt – Room “Lazurny” Our Sponsors: Содержание Что такое журнал транзакций и для чего он нужен? Как работает журнал транзакций? Из чего состоит журнал транзакций? Ошибки при работе с журналом транзакций. Лучшие практики. Что такое журнал транзакций? Файл данных *.mdf Файл журнала транзакций *.ldf В журнале транзакций фиксируются все изменения данных, произведенные в каждой из транзакций. Транзакция Транзакция это - набор из одной или нескольких операций с базой данных, которые обрабатываются как одно целое. Элементарная еденица работы с базой данных Соблюдение принципов ACID Atomicity (атомарность транзакций) Consistency (согласованность данных) Isolation (изоляция транзакций) Durability (устойчивость транзакций) Гарантия корректной и надежной работы транзакций. A - Atomicity Атомарность транзакций Если транзакция выполняется успешно, все ее изменения сохраняются. Если нет – все изменения полностью отменяются. “Все или ничего!” C - Consistency Согласованность данных Обрабатываемые транзакцией данные никогда не будут в промежуточном или несогласованном состоянии. Данные которые затрагивает команда UPDATE, изменяющая десять записей, будут видны либо в первоначальном, либо в конечном состоянии. I - Isolation Изолированность Транзакция является изолированной если она не воздействует на другие параллельные транзакции, и они на нее не воздействуют тоже. Изоляция препятствует получению транзакцией неправдивых или неполных данных, которые в данный момент обрабатываются другой транзакцией. D - Durability Устойчивость Транзакция считается устойчивой, если она может завершиться, несмотря на системный сбой, или, в случае незафиксированной транзакции, может быть полностью отменена. Rolled forward – накатка транзакции Rolled back – откат транзакции Для чего он нужен? На журнал транзакций ложиться работа по обеспечению атомарности транзакций (Atomicity) и живучасти транзакций (Durability). Так же он принимает участие в обеспечении согласованности транзакций (Consistency), в случае если транзакция откатывается. Для чего он нужен? Журнал транзакций поддерживает следующие операции: восстановление транзакций; восстановление всех незавершенных транзакций при запуске SQL Server; поддержка репликации транзакций; поддержка решений высокого уровня доступности и аварийного восстановления: Группы доступности AlwaysOn, зеркальное отображение базы данных. Как работает журнал транзакций? UPDATE [Table] SET column1 = 10 WHERE column2 LIKE '%Text%'; 1) Страницы данных из Table считываются с диска в память (Buffer Pool) Buffer Pool Журнал транзакций База данных Как работает журнал транзакций? UPDATE [Table] SET column1 = 10 WHERE column2 LIKE '%Text%'; 2) Запускается неявная транзакция. 3) Эти три страницы блокируются для выполнения обновлений. Buffer Pool 4) Изменения вносятся в страницах данных, находящихся в памяти. Журнал транзакций База данных Как работает журнал транзакций? UPDATE [Table] SET column1 = 10 WHERE column2 LIKE '%Text%'; 5) Изменения записываются также в записи журнала транзакций на диске. Buffer Pool 6) Автоматически закрывается неявная транзакция. Журнал транзакций База данных Как работает журнал транзакций? Когда же данные попадают в файл данных? Страницы данных будут записаны на диск при следующей операции контрольной точки (Checkpoint) или если память, занимаемая ими в буферном пуле, потребуется для другой страницы. SQL Server пытается запустить процесс контрольной точки всякий раз когда журнал транзакций заполняется более чем на 70 процентов, или при получении ошибки переполнения журнала транзакций, а также при останове SQL Server (если используется SHUTDOWN WITH NOWAIT) Записываются все измененные (грязные) страницы! Checkpoint Контрольная точка создает надежную точку, с которой SQL Server Database Engine может начать применение изменений, содержащихся в журнале, после непредвиденного отключения или аварии. UNDO – откат всех изменений до первоначального состояния. REDO – повтор всех изменений Из чего он состоит? Физически, файл журнала транзакций, состоит из виртуальных файлов - Virtual Log Files (VLF’s) Размер журнала транзакций Кол-во VLF 64Mb 4 VLF’s >64Mb <=1Gb 8 VLF’s >1Gb 16 VLF’s Как работают VLF Когда файл VLF заполняется, процедура ведения журнала автоматически переходит к следующему VLF в журнале транзакций. VLF1 VLF2 VLF3 Начало лога VLF4 VLF5 Конец лога Checkpoint Как работают VLF Неактивные VLF отбрасываются и могут быть перезаписанны. Транзакция, частью которой является эта запись, зафиксирована. Все страницы базы данных, которые она изменила, записаны на диск процедурой контрольной точки. Данная запись журнала не требуется для резервного копирования (полного, выборочного или журнала). Эта запись журнала не требуется никакому компоненту, читающему журнал (например, средству зеркального отображения базы данных или репликации) VLF1 VLF2 VLF3 Начало лога VLF4 VLF5 Конец лога Как работают VLF VLF1 Конец лога VLF2 VLF3 Начало лога VLF4 VLF5 Усечение журнала транзакций Процесс усечения журнала освобождает место в файле журнала для повторного использования журналом транзакций. Усечение журнала необходимо для предотвращения переполнения журнала. Когда выполняется усечение? Усечение журнала выполняется автоматически после следующих событий: В простой модели восстановления — после контрольной точки. Для моделей полного восстановления и моделей восстановления с неполным протоколированием, если контрольная точка была создана после предыдущего резервного копирования, усечение происходит после резервного копирования журнала. Усечение журнала не приводит к уменьшению размера физического файла журнала Демонстрация Virtual Log Files Логический вид … Log Sequence Numbers (LSN) 00000021:00000018:0001 VLF number: Log Block Offset: Slot Number 4 байта : 4 байта : 2 байта VLF number – номер виртуального файла Log Block Offset – сдвиг внутри VLF Slot Number – номер слота Общие ошибки Журнал транзакций растет и заполняет диск! Если выбрана модель востановления FULL и не делаются бекапы логов; Старые (долгие) незафиксированные транзакции; Демонстрация Full Transaction Log Long Transaction Лучшие практики Не создавайте несколько файлов журналов, поскольку это не приводит к выигрышу в производительности. Файл журнала транзакций это файл с последовательным доступом, и SQL Server не пишет в несколько файлов одновременно. Лучшие практики Храните файл отдельном диске. журнала транзакций на В этом случае есть больше шансов востановления БД после сбоя. Так же это эффективнее с точки знения I/O (нагрузки на дисковую подсистему) Вопросы? Спасибо за внимание! Email: vitaliy.popovych@outlook.com Skype: vitalik.popovych www.facebook.com/vitaliy.popovich.911 www.twitter.com/PopovychVitaliy