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


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