День добрый!
В базе с Simple recovery model есть процедура которая сначала удаляет все данные из таблицы(truncate) а затем заполняет ее, речь идет о билетной кассе, таблица содержит место+представление. Т.е. грубо говоря если в базе есть 1000 представлений и в зале есть 3000 мест, то таблица будет содержать 3 миллиона строк. Если делаю обычный insert into select, то размер лога растет примерно как и размер mdf.
Если инсерт по какой-либо причине упадет, то нет необходимости в откате.
Как можно снизить до минимума рост лога во время инсерта(кроме как делать шринк после выполнения процедуры)?
Пробовал запускать инсерт в циклах по 1,10, 100 представлений в каждом инсерте, но на лог это не влияет.
Если делаю типа
То пользы никакой нет, но если запускаю чекпоинт после каждого инсерта, то лог растет намного меньше.
Вопрос в том, на сколько безопасно исползовать чекпоинт в таком виде и есть ли другие способы решить эту проблему?
Спасибо!
В базе с 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
Спасибо!