Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ну опять про LOG... / 5 сообщений из 5, страница 1 из 1
12.07.2001, 10:15
    #32009439
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну опять про LOG...
А вот ежели 1000 раз выполнить команду Delete from SomeTable where 1=2 (то есть когда в самих данных непосредственно никаких изменений не происходит, но есть множество команд, которые теоретически могут повлиять на данные), то факт выдачи этих команд как-то фиксируется в логе или нет?
Я почему это спрашиваю... У меня висит задание, которое каждую минуту опрашивает одну из таблиц и выдает подобные команды, которые в 99,9% случаев реально ничего в базе не изменяют. Однако, размер лога как-то подозрительно быстро разрастается, хотя каких-либо массовых модификаций данных не производится.
...
Рейтинг: 0 / 0
12.07.2001, 11:09
    #32009442
Александр Гладченко
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну опять про LOG...
В вашем случае всё журналируется и иначе быть не могло, исходя из смысла транзакции.
...
Рейтинг: 0 / 0
12.07.2001, 18:18
    #32009479
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну опять про LOG...
Исходя из того, что размер лога увеличивается - да. А вот исходя из того, что я вычитал о транзакциях в литературе, этого быть не должно. Любые команды, которые приводят либо к выборке, либо к модификации хотя бы одной записи хотя бы одной таблицы изменяют блокировки страниц, на которых эти данные находятся. Это приводит к модификации по крайней мере системной таблицы SYSINDEXES (хотя бы на время). Если производилась модификация данных, то в лог переписываются страницы в том виде, в котором они были до модификации - и там уже модифицируются. Если производился голый SELECT (вот тут я немного плаваю) - возможно, в лог переписываются страницы, относящиеся к изменившимся записям SYSINDEXES на время выполнения разделяемой блокировки на чтение. А, возможно, страницы SYSINDEXES используются самим механизмом закрепления/отката транзакций и в лог не пишутся. Я исхожу из худшего - допустим, пишутся и просто по SELECT.
А если делается SELECT, который не выбирает ни одной записи? Или Update, условие WHERE которого отфильтровывает 0 записей? Я полагал, что блокировка распространяется только на те записи с которыми оперирует запрос. Если записей, с которыми оперирует запрос много, блокировка может быть расширена с уровня записей на уровень страниц. А если их очень много, то со страниц она может быть расширена на таблицу в целом. А если их вообще нет? То блокировок вообще не должно происходить? Нет записей - нет страниц, на которых находятся записи этих страниц. Нет факта модификации SYSINDEXES. Что тогда пишется в лог? Просто информация о том, что пусканули холостую операцию? А зачем это нужно? Ее хоть откатывай, хот закрепляй - ничего не изменится.
Просветите, может я что-то неправильно понял?
...
Рейтинг: 0 / 0
12.07.2001, 21:02
    #32009490
Александр Гладченко
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну опять про LOG...
То, что Вы написали, это только вершина айсберга
Вы забыли, что все ваши действия, от коннекта до дизконнекта могут вносить изменения в системных таблицах, а, заодно, и действия сервера приплюсуйте... Впрочем, я ещё не встречал человека, который бы смог утверждать, что представляет себе работу журнала во всех деталях. Для этог надо досканально знать движок. К тому же, почти всё, что мы знали про журнал в 7.0, в 2К уже работает иначе. Попробуй теперь разберись.
...
Рейтинг: 0 / 0
13.07.2001, 11:00
    #32009530
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну опять про LOG...
Спасибо, Александр. Вы, конечно правы. А вот я в своих рассуждениях допустил ошибку. Тот механизм блокирования, который я описал, может обеспечить только Level2 - No nonrepeatable read из четырех уровней изоляции транзакций по стандарту ANSI. MS SQL-сервер обеспечивает Level3 - No phantom. Для того же, чтобы это стало возможным, при выдаче люой команды Update или Delete должна блокироваться вся таблица, а не только те записи, которые подвергаются модификации. Вот из этой-то части спины ноги и произрастают.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ну опять про LOG... / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]