2017-01-03 2 views
0

Этот вопросПочему мой файл журнала транзакций SQL не будет автоматически расти?

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

Мне удалось получить тестовый запрос для работы с уменьшенным набором результатов и с помощью SELECT INTO вместо INSERT в качестве предварительно построенной таблицы. Этот уменьшенный набор результатов сгенерировал таблицу 20 гб, 838 978 560 строк.

При попытке ВСТАВИТЬ в предварительно построенный стол я также попытался использовать его с индексом Cluster и без него. Оба провалились.

Настройки сервера

Сервер работает под управлением SQL Server 2005 (Full не Express). Используемая база данных установлена ​​на SIMPLE для восстановления, и на диске, на котором находится файл, есть пространство (около 100 гб).

Параметр файла журнала транзакций предназначен для роста файлов в размере 250 мб и максимум 2,097,152 МБ.

Файл журнала, как ожидается, будет расти, пока он не достигнет 4729 мб.

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

У меня теперь есть идеи о том, как это решить. Если у кого-то есть какие-либо предположения или понимание того, что делать, это было бы высоко оценено.

+1

проверить https://technet.microsoft.com/en-us/library/dd425070(v=sql.100).aspx. есть вещи, которые вы можете сделать, чтобы принудительно включить SQL Server в объемную вставку, что должно уменьшить количество записей в T-log. – Jeremy

ответ

0

Во-первых, вы хотите избежать автоматического роста, когда это возможно; событиями автоматического роста являются ОГРОМНЫЕ убийцы производительности. Если у вас есть 100 ГБ, то почему бы не изменить размер файла журнала на что-то вроде 20 ГБ (просто временно, когда вы это устраняете). Моя политика всегда заключалась в использовании 90% + дискового пространства, выделенного для определенного файла MDF/NDF/LDF. Нет причин не делать этого.

Если вы используете восстановление SIMPLE, SQL Server должен управлять задачей возврата неиспользуемого пространства, но иногда SQL Server не делает отличную работу. Перед запуском вашего запроса проверьте свободное пространство журнала. Вы можете это сделать:

  1. щелкните правой кнопкой мыши DB> перейдите в раздел Задачи> Сжать> Файлы.
  2. изменить тип на «Вход»

enter image description here

Это поможет вам понять, как много неиспользованного пространства у вас есть. Вы можете установить «Переорганизовать страницы до освобождения неиспользуемого пространства>« Сжимающий файл »до 0. При перемещении вперед вы также можете освободить неиспользуемое пространство, используя CHECKPOINT; это может быть что-то, что можно включить в качестве первого шага перед запуском вашего запроса.

+0

Спасибо за совет. У меня уже было дело с сокращением файла журнала до 0, без везения.Я запустил CHECKPOINT (два раза подряд), который, как я видел, должен сбросить его, также не повезло. Проблема в основном заключается в том, что журнал почему-то не растет больше, чем 4-5 ГБ. Я думаю, что, хотя у меня есть 100Gb, показывающий бесплатно, он используется каким-то образом, поэтому журнал может его взять. – MKC

+0

Вы пытались создать несколько файлов LDF? –

+0

Нет, я читал, что не было никакого преимущества, если бы они были на одном диске, что в моем случае они были бы. Возможно, у меня есть шанс. Спасибо за предложение. – MKC

Смежные вопросы