1c sql server log ldf файлы как уменьшить

Обновлено: 21.11.2024

Я пытаюсь уменьшить файл журнала, так как пространство журнала транзакций составляет 62,38 МБ, из которых используется только 0,18 МБ.

Когда я запускаю команду:

DBCC SHRINKFILE (log_file, 20, только усечение)

я получаю сообщение об ошибке:

Невозможно сжать файл журнала 2 (log_file), поскольку общее количество логических файлов журнала не может быть меньше 2.

Может ли кто-нибудь сказать мне, что я делаю неправильно?

4 сентября 2003 г., 12:18

Попробуйте сначала запустить это

имя базы данных журнала резервного копирования с truncate_only

Тогда вы сможете запустить свою инструкцию, я полагаю, что эта ошибка относится к используемой части журнала и виртуальных файлов журнала.

Рэй Хигдон MCSE, MCDBA, CCNA

Рэй Хигдон MCSE, MCDBA, CCNA

4 сентября 2003 г., 12:36

quote:

Попробуйте запустить это первое

резервное копирование журнала dbname с truncate_only

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

HTH

Рэй Хигдон MCSE, MCDBA, CCNA

Не повезло. Он по-прежнему выдает ту же ошибку, и пространство журнала транзакций остается прежним.

4 сентября 2003 г., 13:12

Если вы используете SQL2K, запустите dbcc sqlperf('logspace') и опубликуйте здесь результаты. Также укажите, в каком режиме восстановления вы используете базу данных? Если вы не знаете, вы можете запустить sp_helpdb, и в поле состояния появится сообщение.

Рэй Хигдон MCSE, MCDBA, CCNA

Рэй Хигдон MCSE, MCDBA, CCNA

4 сентября 2003 г., 14:22

quote:

Если вы используете SQL2K, запустите dbcc sqlperf('logspace') и опубликуйте здесь результаты, а также какой режим восстановления вы используете для базы данных? Если вы не знаете, вы можете запустить sp_helpdb, и в поле состояния будет указано

Ray Higdon MCSE, MCDBA, CCNA

Вот результаты development_db, для которых я хочу уменьшить журнал:

Он был установлен на Простой. Но теперь я изменил его на Bulk-Logged, чтобы иметь возможность сделать резервную копию журнала транзакций.

4 сентября 2003 г., 17:27

Хорошо, похоже, вы решили эту проблему, когда в простом вы не можете сделать резервную копию журнала

Рэй Хигдон MCSE, MCDBA, CCNA

Рэй Хигдон MCSE, MCDBA, CCNA

5 сентября 2003 г., 8:40

quote:

Хорошо, звучит так, как будто вы решили эту проблему, когда в простом вы не можете сделать резервную копию журнала

Рэй Хигдон MCSE, MCDBA, CCNA

Но моя проблема не решена. Я не могу обрезать файл журнала. Общее выделенное пространство для журнала транзакций занимает 62,38 МБ, из которых используется только 0,18 МБ, а 62,2 МБ свободно. Поэтому я хочу подытожить это свободное пространство, сделав общий объем журнала транзакций равным 3 МБ.

5 сентября 2003 г., 8:42

Никто не спрашивает версию вашего SQL Server, вы можете это сказать?

5 сентября 2003 г., 13:00

Если ему удалось перейти на массовую регистрацию, значит, он использует SQL 2000. Давинаш, переключись на полный режим и попробуй запустить

имя базы данных журнала резервного копирования с truncate_only

Затем запустите команду сжатия файла, а затем вернитесь к простой или массовой регистрации.

Рэй Хигдон MCSE, MCDBA, CCNA

Рэй Хигдон MCSE, MCDBA, CCNA

5 сентября 2003 г., 13:54

У вас есть более одного файла журнала? Команда sp_helpdb покажет, какие файлы присутствуют. Посмотрите в столбце использования.

EXEC sp_helpdb 'Борей'

откроются два файла:

Борей (только данные)

Northwind_log (только журнал)

Если у вас есть более одного файла журнала, вы не можете использовать команду DBCC SHRINKFILE для сжатия журнала. См. эту статью базы знаний:

Автор: Руководство от начала до конца по мониторингу производительности SQL Server

К. Брайан Келли
@kbriankelley

5 сентября 2003 г., 14:15

Нет, не знаю. У меня есть только один файл журнала. Вот вывод EXEC sp_helpdb:

development_data 1C:\Development Database\development_data.mdf PRIMARY246336 КБНеограниченно10%только данные

development_log 2c:\Development Database\development_log.ldf NULL63880 KBUnlimited0%log only

Также ray_higdon, я попробовал еще раз, как вы предложили. Он дает ту же ошибку, как только я запускаю команду SHRINKFILE. Да, я использую SQL 2000 на сервере Windows 2000. Просто чтобы вы знали, эта база данных была первоначально создана в версии 6.0 или 6.5, и с тех пор она была обновлена. Интересно, не повредило ли какое-либо из этих обновлений какую-либо системную таблицу и оставило ли в ней какие-то плохие записи? Потому что раньше у меня была одна такая проблема с безопасностью из-за ошибки в обновлении SQL до системных таблиц.

Ошибка базы данных:
Поставщик Microsoft OLE DB для SQL Server: журнал транзакций для базы данных «ReportServer» заполнен. Чтобы узнать причину невозможности повторного использования места в журнале, обратитесь к столбцу таблицы log_reuse_wait_desc
sys. базы данных HRESULT = 80040E14, SQLStvr: состояние ошибки = 2, серьезность = 11, родной = 9002, строка = 1

Ошибка базы данных:
Поставщик Microsoft OLE для SQL Server: журнал транзакций для базы данных «ReportServer» заполнен. Чтобы узнать, почему пространство в журнале нельзя использовать повторно, см. столбец log_reuse_wait_desc sys.database
HRESULT = 80040E14, SQLSTATE = апрель 2000 г., native = 9002

Это означает, что на диске, где находится журнал транзакций, закончилось место и теперь некуда записывать данные в базу данных для новых транзакций. Чаще всего это происходит, когда вы не устанавливаете никаких ограничений на размер лога и в MS SQL не создаете соответствующие сервис-планы.

В этом случае нужно уменьшить размер файла транзакций (*.ldf), другими словами сделать The Shrink (сжатие) лога. Это можно использовать как сжатие журнала запросов и вручную.

Рассмотреть журнал транзакций сжатия вручную:

Шаг 1. Установите модель восстановления Simple (Простая). Правой кнопкой по базе - Свойства (Properties) - Параметры (Options) - 4-я верхняя точка модели восстановления (Recovery model) - Простая (Simple) - ОК.

Шаг 2. Запустите. Сократите (сжмите) журнал транзакций. Правой кнопкой по базе - Задачи (Tasks) - Сжать (Shrink) - Файлы (Files) - установить тип файла (File type) - История (Log) - в операции сжатия (Shrink action) - выбрать Реорганизовать страницы перед OSVOD неиспользуемое пространство (Реорганизовать страницы перед освобождением неиспользуемого пространства) - Сжать файл (Сжать файл до) -
указать допустимый размер журнала.

Шаг 3. Установите модель восстановления Full (Полная). Правой кнопкой по базе - Свойства (Properties) - Параметры (Options) - 4-я верхняя точка модели восстановления (Recovery model) - Полная (Full) - ОК.

PS: В этой статье даны рекомендации по решению конкретных проблем. Настройка самого MS SQL здесь не рассматривается!

В этом разделе рассказывается, как контролировать размер журнала транзакций SQL Server, сжимать журнал транзакций, добавлять или увеличивать файл журнала транзакций, оптимизировать скорость роста журнала транзакций tempdb и контролировать рост файла журнала транзакций.

Отслеживание использования места в журнале

Отслеживайте использование пространства журнала с помощью sys.dm_db_log_space_usage. Это динамическое административное представление возвращает информацию об используемом в настоящее время пространстве журнала и указывает, когда журнал транзакций нуждается в усечении.

Чтобы получить информацию о текущем размере файла журнала, его максимальном размере и параметре автоматического увеличения для файла, вы также можете использовать столбцы размера, максимального_размера и роста для этого файла журнала в sys.database_files.

Не перегружайте диск журналов. Убедитесь, что хранилище журналов выдерживает требования к IOPS и малой задержке для вашей транзакционной нагрузки.

Уменьшить размер файла журнала

Чтобы уменьшить физический размер физического файла журнала, необходимо уменьшить размер файла журнала. Это полезно, когда вы знаете, что файл журнала транзакций содержит неиспользуемое пространство. Вы можете сжимать файл журнала только тогда, когда база данных подключена к сети и хотя бы один виртуальный файл журнала (VLF) свободен. В некоторых случаях сжатие журнала невозможно до следующего усечения журнала.

Такие факторы, как длительная транзакция, которые поддерживают активность VLF в течение длительного периода времени, могут ограничивать сокращение журнала или даже препятствовать его уменьшению. Дополнительные сведения см. в разделе Факторы, которые могут задержать усечение журнала.

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

Прежде чем сжимать журнал транзакций, имейте в виду Факторы, которые могут задержать усечение журнала. Если после сжатия журнала снова потребуется пространство для хранения, журнал транзакций снова увеличится, что приведет к снижению производительности во время операций увеличения журнала. Дополнительные сведения см. в рекомендациях в этом разделе.

Уменьшить файл журнала (без сжатия файлов базы данных)

Отслеживание событий сжатия файла журнала

Пространство журнала мониторинга

sys.database_files (Transact-SQL) (см. столбцы размера, максимального_размера и роста для файла или файлов журнала.)

Добавить или увеличить файл журнала

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

  • Чтобы добавить файл журнала в базу данных, используйте предложение ADD LOG FILE инструкции ALTER DATABASE. Добавление файла журнала позволяет увеличить размер журнала.
  • Чтобы увеличить файл журнала, используйте условие MODIFY FILE оператора ALTER DATABASE, указав синтаксис SIZE и MAXSIZE. Дополнительные сведения см. в разделе ALTER DATABASE (Transact-SQL) File и Filegroup.

Дополнительную информацию см. в рекомендациях в этом разделе.

Оптимизировать размер журнала транзакций tempdb

При перезапуске экземпляра сервера размер журнала транзакций базы данных tempdb изменяется до исходного размера до автоматического увеличения. Это может снизить производительность журнала транзакций tempdb.

Эти накладные расходы можно избежать, увеличив размер журнала транзакций tempdb после запуска или перезапуска экземпляра сервера. Дополнительные сведения см. в разделе База данных tempdb.

Контролировать рост файла журнала транзакций

Используйте инструкцию ALTER DATABASE (Transact-SQL) File и Filegroup для управления ростом файла журнала транзакций. Обратите внимание на следующее:

  • Чтобы изменить текущий размер файла в КБ, МБ, ГБ и ТБ, используйте параметр РАЗМЕР.
  • Чтобы изменить прирост, используйте параметр FILEGROWTH. Значение 0 указывает на то, что автоматический рост отключен и дополнительное пространство не разрешено.
  • Чтобы управлять максимальным размером файла журнала в КБ, МБ, ГБ и ТБ или задать НЕОГРАНИЧЕННОЕ увеличение, используйте параметр MAXSIZE.

Дополнительную информацию см. в рекомендациях в этом разделе.

Рекомендации

Ниже приведены некоторые общие рекомендации по работе с файлами журналов транзакций:

Автоматическое увеличение (autogrow) журнала транзакций, заданное параметром FILEGROWTH, должно быть достаточно большим, чтобы опережать потребности транзакций рабочей нагрузки. Шаг увеличения файла журнала должен быть достаточно большим, чтобы избежать частого расширения. Хорошим указателем на правильный размер журнала транзакций является отслеживание объема журнала, занятого во время:

  • Время, необходимое для выполнения полного резервного копирования, поскольку резервное копирование журналов невозможно, пока оно не завершится.
  • Время, необходимое для самых больших операций по обслуживанию индекса.
  • Время, необходимое для выполнения самого большого пакета в базе данных.

При настройке автоматического увеличения для файлов данных и журналов с помощью параметра FILEGROWTH может быть предпочтительнее установить его в размере, а не в процентах, чтобы обеспечить лучший контроль над коэффициентом роста, поскольку процент — это постоянно растущая величина.

Небольшой шаг роста может создать слишком много маленьких VLF и снизить производительность. Чтобы определить оптимальное распределение VLF для текущего размера журнала транзакций всех баз данных в данном экземпляре и необходимые приращения роста для достижения требуемого размера, см. этот сценарий.

Большой прирост может привести к слишком малому количеству VLF и к большому размеру, а также повлиять на производительность. Чтобы определить оптимальное распределение VLF для текущего размера журнала транзакций всех баз данных в данном экземпляре и необходимые приращения роста для достижения требуемого размера, см. этот сценарий.

Даже при включенном автоматическом увеличении вы можете получить сообщение о том, что журнал транзакций заполнен, если он не может расти достаточно быстро, чтобы удовлетворить потребности вашего запроса. Дополнительные сведения об изменении шага роста см. в разделе ALTER DATABASE (Transact-SQL) File and Filegroup options

Наличие нескольких файлов журнала в базе данных никоим образом не повышает производительность, поскольку файлы журнала транзакций не используют пропорциональное заполнение, как файлы данных в одной файловой группе.

Файлы журналов можно настроить на автоматическое сжатие. Однако это не рекомендуется, и свойство базы данных auto_shrink по умолчанию имеет значение FALSE. Если для параметра auto_shrink установлено значение TRUE, автоматическое сжатие уменьшает размер файла только в том случае, если более 25 процентов его пространства не используется.

В этом разделе описывается, как уменьшить размер файла данных или журнала в SQL Server с помощью SQL Server Management Studio или Transact-SQL.

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

В этой теме

Прежде чем начать:

Чтобы уменьшить размер файла данных или журнала, используйте:

Прежде чем начать

Ограничения и запреты

  • Первичный файл данных нельзя сделать меньше, чем размер основного файла в базе данных модели.

Рекомендации

  • Данные, перемещаемые для сжатия файла, могут быть разбросаны по любому доступному месту в файле. Это вызывает фрагментацию индекса и может снизить производительность запросов, выполняющих поиск в диапазоне индекса. Чтобы устранить фрагментацию, попробуйте перестроить индексы файла после сжатия.

Безопасность

Разрешения

Требуется членство в фиксированной роли сервера sysadmin или фиксированной роли базы данных db_owner.

Использование SQL Server Management Studio

Чтобы уменьшить размер файла данных или журнала

В обозревателе объектов подключитесь к экземпляру ядра базы данных SQL Server, а затем разверните этот экземпляр.

Разверните Базы данных, а затем щелкните правой кнопкой мыши базу данных, которую нужно сжать.

Наведите указатель мыши на Задачи, выберите Сжать и нажмите Файлы.

База данных
Отображает имя выбранной базы данных.

Тип файла
Выберите тип файла для файла. Доступные варианты: файлы данных и журналы. Выбор по умолчанию — Данные. Выбор другого типа файловой группы соответственно изменяет выбор в других полях.

Группа файлов
Выберите группу файлов из списка групп файлов, связанных с выбранным типом файлов выше. Выбор другой файловой группы соответствующим образом изменяет выбор в других полях.

Имя файла
Выберите файл из списка доступных файлов выбранной файловой группы и типа файла.

Местоположение
Отображает полный путь к текущему выбранному файлу. Путь нельзя редактировать, но его можно скопировать в буфер обмена.

Выделенное в настоящее время пространство.
Для файлов данных отображается текущее выделенное пространство. Для файлов журнала отображает текущее выделенное пространство, вычисленное на основе выходных данных DBCC SQLPERF(LOGSPACE).

Доступное свободное пространство
Для файлов данных отображает текущее доступное свободное пространство, рассчитанное на основе выходных данных команды DBCC SHOWFILESTATS(fileid). Для файлов журналов отображает текущее доступное свободное пространство, вычисленное на основе выходных данных DBCC SQLPERF(LOGSPACE).

Освобождение неиспользуемого пространства
Освобождение неиспользуемого пространства в файлах для операционной системы и сокращение файла до последней выделенной области, уменьшение размера файла без перемещения каких-либо данных. Попытки переместить строки на незанятые страницы не предпринимаются.

Реорганизация страниц перед освобождением неиспользуемого пространства
Эквивалентно выполнению команды DBCC SHRINKFILE с указанием целевого размера файла. Если выбран этот параметр, пользователь должен указать целевой размер файла в поле Сжать файл до.

Сжать файл до
Указывает целевой размер файла для операции сжатия. Размер не может быть меньше, чем текущее выделенное пространство, или больше, чем общее количество экстентов, выделенных для файла. Если ввести значение выше минимального или максимального, оно вернется к минимальному или максимальному после изменения фокуса или при нажатии любой из кнопок на панели инструментов.

Очистить файл путем переноса данных в другие файлы в той же файловой группе
Перенести все данные из указанного файла. Этот параметр позволяет удалить файл с помощью оператора ALTER DATABASE. Этот параметр эквивалентен выполнению команды DBCC SHRINKFILE с параметром EMPTYFILE.

Выберите тип файла и имя файла.

При необходимости установите флажок Освободить неиспользуемое пространство.

При выборе этого параметра любое неиспользуемое пространство в файле будет передано операционной системе, а файл сжат до последней выделенной области. Это уменьшает размер файла без перемещения каких-либо данных.

При необходимости установите флажок Реорганизовать файлы перед освобождением неиспользуемого пространства. Если выбран этот параметр, необходимо указать значение параметра «Сжать файл до». По умолчанию этот параметр отключен.

При выборе этого параметра любое неиспользуемое пространство в файле будет передано операционной системе, и она попытается переместить строки на нераспределенные страницы.

При необходимости введите максимальный процент свободного места, который останется в файле базы данных после сжатия базы данных. Допустимые значения: от 0 до 99. Этот параметр доступен только в том случае, если включен параметр Реорганизовать файлы перед освобождением неиспользуемого пространства.

При необходимости установите флажок Пустой файл путем переноса данных в другие файлы в той же файловой группе.

При выборе этого параметра все данные из указанного файла перемещаются в другие файлы в файловой группе. Затем пустой файл можно удалить. Этот параметр аналогичен выполнению команды DBCC SHRINKFILE с параметром EMPTYFILE.

Нажмите "ОК".

Использование Transact-SQL

Чтобы уменьшить размер файла данных или журнала

Подключиться к ядру базы данных.

На стандартной панели нажмите "Новый запрос".

Скопируйте и вставьте следующий пример в окно запроса и нажмите «Выполнить».В этом примере команда DBCC SHRINKFILE используется для уменьшения размера файла данных с именем DataFile1 в базе данных UserDB до 7 МБ.

Если эта статья является вашим первым знакомством с серией журналов транзакций SQL Server, я рекомендую вам ознакомиться с предыдущими статьями (см. оглавление ниже), в которых мы описали внутреннюю структуру журнала транзакций SQL Server, жизненно важную роль которые журнал транзакций поддерживает в согласованном состоянии базы данных и восстанавливает поврежденную базу данных или ошибочно измененную таблицу до определенного момента времени. Мы также обсудили в этой серии три модели восстановления: полную, простую и с массовым протоколированием, которые управляют тем, как транзакции будут записываться в файл журнала транзакций SQL Server, и, наконец, как управлять и отслеживать рост журнала транзакций SQL Server.

Собрав всю основную информацию из предыдущих статей, мы готовы теперь подробно обсудить в этой статье разницу между концепциями резервного копирования, усечения и сжатия журнала транзакций SQL Server и способы выполнения этих операций.

Резервная копия журнала транзакций

При настройке базы данных с использованием простой модели восстановления журнал транзакций SQL Server будет помечен как неактивный и автоматически усечен после фиксации активной транзакции. Это не относится к моделям восстановления базы данных Full и Bulk-Logged. Если для базы данных настроена модель полного восстановления, журнал транзакций SQL Server в файле журнала транзакций будет помечен как неактивный после фиксации транзакции без автоматического усечения, поскольку он будет ожидать выполнения резервной копии журнала транзакций. Напомним, что только резервная копия журнала транзакций, но НЕ полная резервная копия базы данных, усекает журналы транзакций из файла журнала транзакций и делает его доступным для повторного использования. Если из базы данных не создается резервная копия журнала транзакций, файл журнала транзакций будет непрерывно увеличиваться без усечения, пока не закончится свободное место.

Резервная копия журнала транзакций SQL Server может быть получена только из базы данных, если модель восстановления этой базы данных — Полная или Массовая. Модель восстановления базы данных можно проверить на вкладке «Параметры» окна «Свойства базы данных», как показано ниже:

Если вы попытаетесь создать резервную копию журнала транзакций для базы данных, для которой настроена простая модель восстановления, операция резервного копирования завершится ошибкой со следующим сообщением об ошибке:

Кроме того, для резервного копирования журнала транзакций требуется, чтобы из этой базы данных была сделана хотя бы одна полная резервная копия в качестве отправной точки для новой цепочки резервных копий. Если вы попытаетесь создать резервную копию журнала транзакций из базы данных, для которой ранее не было создано полное резервное копирование, операция резервного копирования завершится ошибкой со следующим сообщением об ошибке:

Давайте сделаем полную резервную копию базы данных, чтобы можно было сделать резервную копию журнала транзакций для этой базы данных. Мы будем использовать команду T-SQL BACKUP DATABASE для выполнения операции полного резервного копирования базы данных в нашем примере. Дополнительные сведения о различных способах и параметрах резервного копирования базы данных в SQL Server см. в серии статей о резервном копировании и восстановлении SQL Server. Полную резервную копию базы данных можно сделать с помощью приведенного ниже сценария T-SQL:

Читайте также: