Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Что логирует sql server?  [new]
Авторр
Guest
Добрый день.
Есть база в которой мы используем таблицы с данными, условно база называется work.
Создаем временные таблицы (в tempdb) вне транзакции, открываем транзакцию и пишем данные во временные таблицы.
Пишет ли в лог базы work данные, которые мы заливаем во временные таблицы?
18 фев 16, 09:56    [18833433]     Ответить | Цитировать Сообщить модератору
 Re: Что логирует sql server?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Авторр
Пишет ли в лог базы work данные, которые мы заливаем во временные таблицы?

Нет.
Транзакции базы tempdb пишутся в журнал базы tempdb.
18 фев 16, 09:57    [18833438]     Ответить | Цитировать Сообщить модератору
 Re: Что логирует sql server?  [new]
Авторр
Guest
Glory,

Транзакцию мы открываем в базе work (процедурой в базе work), данные с помощью select берем из work и вставляем во временные таблицы, в tempdb. Если говорите нет, тогда возникает вопрос, а почему тогда долго откатывается транзакция ,если брать очень большое количество данных из work в tempdb?
18 фев 16, 10:06    [18833476]     Ответить | Цитировать Сообщить модератору
 Re: Что логирует sql server?  [new]
o-o
Guest
допустим, вы 3 Гига в лог написали, теперь откатываете.
будете ждать, пока все 3 Гига вычитает из лога
и сгенерирует каждой записи лога compensation record.
конечно это будет дольше, чем откатить 100Kb.
внимание, вопрос:
какая же разница, в логе какой базы все это происходит?
чем больше откатываете, тем больше ждете,
а что, в темпдб должно быть наоборот?
чем больше записал, тем быстрее откачу?
18 фев 16, 10:37    [18833617]     Ответить | Цитировать Сообщить модератору
 Re: Что логирует sql server?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Авторр
Если говорите нет, тогда возникает вопрос, а почему тогда долго откатывается транзакция ,если брать очень большое количество данных из work в tempdb?

Вы ответ прочитали ?
Нет, изменения объектов базы work не пишутся в журнал базы tempdb.
Да, изменения объектов базы tempdb пишутся в журнал базы tempdb.
И транзакция не имеет привязки к базе
18 фев 16, 11:28    [18833976]     Ответить | Цитировать Сообщить модератору
 Re: Что логирует sql server?  [new]
Авторр
Guest
Glory,

Ещё раз вопрос,в транзакции select из базы work пишет в базу tempdb (во временную таблицу), растет лог базы work, почему?
18 фев 16, 12:01    [18834193]     Ответить | Цитировать Сообщить модератору
 Re: Что логирует sql server?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Авторр
Ещё раз вопрос,в транзакции select из базы work пишет в базу tempdb (во временную таблицу), растет лог базы work, почему?

И еще раз
Транзакция не привязана к базе.
Почему растет тот или иной журнал, вы можете выяснить проанализировав тот или иной журнал.
18 фев 16, 12:02    [18834206]     Ответить | Цитировать Сообщить модератору
 Re: Что логирует sql server?  [new]
Авторр
Guest
Glory,

Есть ли у вас скрипт, который показывает что хранится в логе базы и к какой транзакции относится?
Поделитесь плз, если это можно посмотреть вообще.
18 фев 16, 13:19    [18834828]     Ответить | Цитировать Сообщить модератору
 Re: Что логирует sql server?  [new]
o-o
Guest
select *
from sys.fn_dblog(null, null);
18 фев 16, 13:33    [18834940]     Ответить | Цитировать Сообщить модератору
 Re: Что логирует sql server?  [new]
Авторр
Guest
o-o,

Спасибо.
18 фев 16, 14:04    [18835258]     Ответить | Цитировать Сообщить модератору
 Re: Что логирует sql server?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51249
o-o
допустим, вы 3 Гига в лог написали, теперь откатываете.
будете ждать, пока все 3 Гига вычитает из лога
и сгенерирует каждой записи лога compensation record.
конечно это будет дольше, чем откатить 100Kb.
внимание, вопрос:
какая же разница, в логе какой базы все это происходит?
чем больше откатываете, тем больше ждете,
а что, в темпдб должно быть наоборот?
чем больше записал, тем быстрее откачу?

А в чём сакральный смысл отката (и вообще протоколирования) временной таблицы?..
18 фев 16, 15:01    [18835785]     Ответить | Цитировать Сообщить модератору
 Re: Что логирует sql server?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37067
Dimitry Sibiryakov
А в чём сакральный смысл отката (и вообще протоколирования) временной таблицы?..
Чтобы после rollback там все было как до begin tran. Ваш кеп.
18 фев 16, 15:05    [18835806]     Ответить | Цитировать Сообщить модератору
 Re: Что логирует sql server?  [new]
msLex
Member

Откуда:
Сообщений: 8189
Dimitry Sibiryakov
А в чём сакральный смысл отката (и вообще протоколирования) временной таблицы?..


rollback - это не конец жизни.
18 фев 16, 16:51    [18836746]     Ответить | Цитировать Сообщить модератору
 Re: Что логирует sql server?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51249
msLex
rollback - это не конец жизни.

Для данных во временной таблице - конец. Вместе с самой таблицей.
18 фев 16, 17:26    [18837019]     Ответить | Цитировать Сообщить модератору
 Re: Что логирует sql server?  [new]
o-o
Guest
Dimitry Sibiryakov
msLex
rollback - это не конец жизни.

Для данных во временной таблице - конец. Вместе с самой таблицей.

обоснуйте.
вот я заполняю себе временную таблицу.
сперва в нее основные 10 полей копирую по SELECT INTO.
потом начинаю добавлять колонки (ALTER TABLE ADD...) и заполнять их
опупительными апдэйтами, каждый по 5 таблиц в соединении.
ну или сперва создаю каркас таблицы со всеми полями,
куда вставляю строки с заполненными 10-ю полями,
остальные пока что NULL, я их апдэйтами заполню.
на 5ом апдэйте у меня ошибка, ведущая к роллбэку.
и что, я получу свою таблицу с правильно заполненными 14-ю полями,
разберусь с ошибкой и дальше продолжу свои апдэйты.
где же конец жизни таблицы-то?

и это просто один пример.

но что вообще за ущемление прав временных таблиц?
чем это они хуже постоянных?
ну, не поднимутся после рестарта,
а что, в нормальных конторах рестартят каждые 10 минут что ли?

да у нас вон долбают своими бэкапами постоянно,
один сплошной непрерывный бэкап весь день.
бесперебойное полное логирование в базах с простой моделью,
бороться с ними(бэкапирователями) бесполезно, а работать надо.
да темпдб это просто спасение, они ж его не могут бэкапить!!!
18 фев 16, 17:41    [18837122]     Ответить | Цитировать Сообщить модератору
 Re: Что логирует sql server?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
> обоснуйте.

имеется в виду, что "классически" транзакция открывается в самом начале (перед отправкой батча)
и первое же исключение отрывает выполнение всего батча
есть такая практика
очень не у всех есть много t-sql кода, в котором не на каждое исключение (внезапно) надо делать rollback
и я уже молчу про non-committable state в catch
18 фев 16, 17:50    [18837164]     Ответить | Цитировать Сообщить модератору
 Re: Что логирует sql server?  [new]
o-o
Guest
Crimean,

ну а тогда глобальные временные таблицы?
они точно задуманы для жизни дольше, чем в одной транзакции,
вот в них все что-то пишут,
один кто-то завершился с ошибкой, и что, всем теперь великий облом?
---------
нет, я решительно против наездов на темпдб с ее логированием.
все продумано, в лог идет меньше, чем везде: UNDO info идет, REDO info не идет.
все это товарищи MS-овцы давно просчитали и реализовали, а мне теперь их выбор оправдывать?
пускай Dimitry Sibiryakov пишет возмущенно в Microsoft.
или пускай переходит на инмемори и присоединяется к a_voronin-y.
я тут каким боком?
объяснишь, как оно работает, так тебе же еще и предъявят, а *на кой* оно так работает
18 фев 16, 18:26    [18837379]     Ответить | Цитировать Сообщить модератору
 Re: Что логирует sql server?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Dimitry Sibiryakov
o-o
допустим, вы 3 Гига в лог написали, теперь откатываете.
будете ждать, пока все 3 Гига вычитает из лога
и сгенерирует каждой записи лога compensation record.
конечно это будет дольше, чем откатить 100Kb.
внимание, вопрос:
какая же разница, в логе какой базы все это происходит?
чем больше откатываете, тем больше ждете,
а что, в темпдб должно быть наоборот?
чем больше записал, тем быстрее откачу?

А в чём сакральный смысл отката (и вообще протоколирования) временной таблицы?..


Специально для тех, кто ищет смысл в таких откатах придумали

SCHEMA_ONLY (non-durable table)
This option ensures durability of the table schema, including indexes. When SQL Server is restarted, the non-durable table is recreated, but starts with no data. (This is unlike a table in tempdb, where both the table and its data are lost upon restart.) A typical scenario for creating a non-durable table is to store transient data, such as a staging table for an ETL process. A SCHEMA_ONLY durability avoids both transaction logging and checkpoint, which can significantly reduce I/O operations.
18 фев 16, 19:10    [18837550]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить