Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Рост лога во время инсерта в таблицу, как решить?  [new]
abrashka
Member

Откуда:
Сообщений: 517
День добрый!
В базе с Simple recovery model есть процедура которая сначала удаляет все данные из таблицы(truncate) а затем заполняет ее, речь идет о билетной кассе, таблица содержит место+представление. Т.е. грубо говоря если в базе есть 1000 представлений и в зале есть 3000 мест, то таблица будет содержать 3 миллиона строк. Если делаю обычный insert into select, то размер лога растет примерно как и размер mdf.
Если инсерт по какой-либо причине упадет, то нет необходимости в откате.
Как можно снизить до минимума рост лога во время инсерта(кроме как делать шринк после выполнения процедуры)?

Пробовал запускать инсерт в циклах по 1,10, 100 представлений в каждом инсерте, но на лог это не влияет.
Если делаю типа
while...
 begin
  begin tran
    insert into ... select...
  commit tran
 end
 

То пользы никакой нет, но если запускаю чекпоинт после каждого инсерта, то лог растет намного меньше.
Вопрос в том, на сколько безопасно исползовать чекпоинт в таком виде и есть ли другие способы решить эту проблему?
while...
 begin
    insert into ... select...
  checkpoint
 end
 

Спасибо!
14 ноя 17, 17:17    [20953534]     Ответить | Цитировать Сообщить модератору
 Re: Рост лога во время инсерта в таблицу, как решить?  [new]
invm
Member

Откуда: Москва
Сообщений: 9349
abrashka
есть ли другие способы решить эту проблему?
Вставлять с минимальным журналированием
insert into MyTable with (tablock) select ...
14 ноя 17, 17:58    [20953732]     Ответить | Цитировать Сообщить модератору
 Re: Рост лога во время инсерта в таблицу, как решить?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
ну и если это не куча, то еще и + order by
14 ноя 17, 18:30    [20953856]     Ответить | Цитировать Сообщить модератору
 Re: Рост лога во время инсерта в таблицу, как решить?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
abrashka
Как можно снизить до минимума рост лога во время инсерта

Если у Вас таблица с индексами, рекомендую попробовать trace flag 610 Trace flag 610 sends an instruction to the server to minimally log INSERT and MERGE on new page allocations.
+

В рамках легкого оффтопа рекламный слоган:
"Регулярное употребление флага 610 - и Ваши волосы станут сияющими и шелковистыми" (с)
14 ноя 17, 18:50    [20953936]     Ответить | Цитировать Сообщить модератору
 Re: Рост лога во время инсерта в таблицу, как решить?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
abrashka,

Если же у Вас SQL 2016 и новее - тогда такой флаг использовать не нужно.
И приведите скрипт таблицы с указанием PRIMARY KEY (у меня экспертное предощущение, что он состоит из сочетания столбцов с ID места в зале и ID представления, и наверняка эта таблица продажи билетов текущего дня).
14 ноя 17, 18:52    [20953947]     Ответить | Цитировать Сообщить модератору
 Re: Рост лога во время инсерта в таблицу, как решить?  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
по сабжу: 3млн. строк ? И чо ? Это много ????
Это смех просто, а не объем. Поставьте винт на 500Г и его вам хватит на 500лет для этой задачи.

зы: Непроданные места потом можно удалять.
15 ноя 17, 10:51    [20955090]     Ответить | Цитировать Сообщить модератору
 Re: Рост лога во время инсерта в таблицу, как решить?  [new]
aleks222
Guest
LSV
по сабжу: 3млн. строк ? И чо ? Это много ????
Это смех просто, а не объем. Поставьте винт на 500Г и его вам хватит на 500лет для этой задачи.

зы: Непроданные места потом можно удалять.


1. Тредстартер удаляет даже радикальнее "сначала удаляет все данные из таблицы(truncate)".
2. Решение проблем тредстартера лежит не в плоскости "як удалять и як вставлять".
3. Радикальное решение: "НЕ удалять".
4. Вот нафига удалять все? Залы те же. Вряд ли их регулярно перестраивают.
15 ноя 17, 11:16    [20955235]     Ответить | Цитировать Сообщить модератору
 Re: Рост лога во время инсерта в таблицу, как решить?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
aleks222
4. Вот нафига удалять все? Залы те же. Вряд ли их регулярно перестраивают.
Это у них даже не места, это как бы "билеты".
Так что реально бизнес с таким подходом будет страдать - что то поправили, потому что для нового представления нужно удалить ряд сидений, и съедут данные на уже устаканившиеся мероприятия, или на прошедшие.
15 ноя 17, 12:18    [20955526]     Ответить | Цитировать Сообщить модератору
 Re: Рост лога во время инсерта в таблицу, как решить?  [new]
aleks222
Guest
alexeyvg
aleks222
4. Вот нафига удалять все? Залы те же. Вряд ли их регулярно перестраивают.
Это у них даже не места, это как бы "билеты".
Так что реально бизнес с таким подходом будет страдать - что то поправили, потому что для нового представления нужно удалить ряд сидений, и съедут данные на уже устаканившиеся мероприятия, или на прошедшие.


В чем ты видишь разницу между божием даром и яичницей?
Какие такие данные "съедут"?
Убрать "ряд" - не вставить "три лимона строк". Оно попроще будет.
15 ноя 17, 19:01    [20957677]     Ответить | Цитировать Сообщить модератору
 Re: Рост лога во время инсерта в таблицу, как решить?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
aleks222
Убрать "ряд" - не вставить "три лимона строк". Оно попроще будет.
Ну да, я про это и говорю. Не только проще, но и правильно для бизнеса.
aleks222
Убрать "ряд" - не вставить "три лимона строк". Оно попроще будет.
"Съедут" - если вот так удалять каждый раз все билеты и создавать заново.
Бизнес это должен контролировать явно.
Создали мероприятие, создали на него комплект билетов, утвердили, продаём билеты - комплект билетов не должен меняться, если там кто то в базе меняет залы, раскладки мест и т.д. на другие мероприятия.
А тут какой то сомнительный подход - всё поудаляли, создали заново...
16 ноя 17, 09:08    [20958624]     Ответить | Цитировать Сообщить модератору
 Re: Рост лога во время инсерта в таблицу, как решить?  [new]
abrashka
Member

Откуда:
Сообщений: 517
alexeyvg,

Спасибо!
Дизайн на самом деле работает через одно место, но разговор не об этом, речь идет о создании базы для отчетов, типа DWH, первоначальном создании, затем данные будут изменяться инкрементально.
22 ноя 17, 21:54    [20976355]     Ответить | Цитировать Сообщить модератору
 Re: Рост лога во время инсерта в таблицу, как решить?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33672
Блог
abrashka,

эти ваши 3 млн в ХД займут ну 50 Мб, которым цена 1 коп
22 ноя 17, 22:05    [20976380]     Ответить | Цитировать Сообщить модератору
 Re: Рост лога во время инсерта в таблицу, как решить?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
abrashka
alexeyvg,

Спасибо!
Дизайн на самом деле работает через одно место, но разговор не об этом, речь идет о создании базы для отчетов, типа DWH, первоначальном создании, затем данные будут изменяться инкрементально.
Если так, зачем париться об оптимизации?

Или нереально даже один раз выполнить такую операцию, из за нехватки места на диске или из за бесконечного времени исполнения?
Тогда перепишите формирование на цикл, без общей транзакции, скажем, цикл по мероприятиям или залам.
23 ноя 17, 10:30    [20977114]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить