Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Блокировка update - select / 7 сообщений из 7, страница 1 из 1
06.09.2001, 08:39
    #32013594
Barabanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка update - select
"Level1-запрещение "грязного" чтения. На этом уровне решается проблема "грязного" чтения. Когда транзакция начинает изменение данных, СУБД должна блокировать ресурсы, чтобы ни одна другая транзакция не смогла прочитать изменяемые данные. До тех пор, пока транзакция не будет зафиксирована или отменена, данные нельзя будет прочитать."
У меня возникает вопрос: почему в MSSQL нельзя прочитать данные, которые были до начала транзакции, в момент выполнения транзакции? Почему данные блокируются, ведь ещё не факт, что изменяемые данные будут зафиксированы. И значит на момент выполнения транзакции актуальными являются данные, которые были до её выполнения. Вопрос такой: почему нельзя получить данные(но не грязные nolock, а данные до начала транзакции) во время их изменения другой транзакцией, как это делается, например в Oracle?
...
Рейтинг: 0 / 0
06.09.2001, 09:05
    #32013600
Блокировка update - select
Потому что в MSSQL нет механизма версионности записей, требующий значительных ресурсов. Поэтому, чтобы другая транзакция не смогла прочитать данные, которые изменены, но еще неизвестно - будут они закомичены или откачены, эти данные блокируются от чтения. К сведению, блокировка практически никаких ресурсов не потребляет.
Как следствие - в MSSQL принято делать транзакции как можно более короткими.
Как второе следствие, все кто перешел на MSSQL с Inerbase и Oracle, все испытывают проблемы производительности, так как там внимания на такую мелочь, как длительность транзакции, особо не уделялось, а попытка применить те же методы в MSSQL (Sybase, Informix, DB2, ...) сразу бьет по зубам молотком.
...
Рейтинг: 0 / 0
06.09.2001, 11:27
    #32013612
Barabanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка update - select
Конечно рекомендация: транзакция должна быть как можно более короткой по времени и работать с как можно более меньшим объемом ресурсов, хорошая, но не всегда работает. А если транзакция всё равно получается длинной? Посмотрел в Profiler, как 1С 7.7 работает с таблицами: там постоянное dirty read.
...
Рейтинг: 0 / 0
06.09.2001, 12:13
    #32013616
Блокировка update - select
Есть ряд методов, позволяющих уменьшать транзакции без потери качества.

> 1С 7.7 работает с таблицами: там постоянное dirty read.

Как работает 1С с базой - это уже ставший классическим пример как не надо работать с MSSQL. А также - Галактика, Скала, Диасофт и еще некоторые.

Хорошие примеры работы с MSSQL: - Axapta, Алеф-бухгалтер, Босс-предприятие.
...
Рейтинг: 0 / 0
06.09.2001, 15:02
    #32013627
PeterG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка update - select
Скале не нужен транзакционный механизм MS SQL, так как она использует для блокировок и транзакций свои собственные средства. А что касается Босс-предприятия, то советую посмотреть профайлером, как он "правильно" работает с MS SQL. Отчет-шахматка по тестовой базе данных с 5 проводками строился у меня 20 минут.
...
Рейтинг: 0 / 0
07.09.2001, 07:39
    #32013651
Блокировка update - select
Возможно, что у меня неправильные сведения о Босс-предприятии. Бывает.
...
Рейтинг: 0 / 0
07.09.2001, 10:25
    #32013657
Barabanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка update - select
Глеб, а можно по подробнее про "Есть ряд методов, позволяющих уменьшать транзакции без потери качества." или ссылку, где можно прочитать об этом. Потому что уж больно много проблем возникает с блокировками. У меня есть свои соображения на этот счёт, но они меня не удовлетворяют.Был очень неприятно удивлён, узнав, что MSSQL блокирует на уровне строки только вставку, а изменение на уровне страницы... Или вот это:"Индексы SQL Server блокируются точно так-же, как и страницы данных соответствующих таблиц, однако эффект блокировки страницы индекса значительно шире. Записи в таблице хранятся в большинстве случаев в случайном порядке (исключение составляют кластерные индексы). Когда обновляется страница данных, то должен обновиться соответствующий индекс. Как и у таблиц, данные индексов хранятся на страницах. Для обновления страницы индекса, эта страница должна быть сначала заблокирована. Если данные в таблице распределены случайным образом, то блокировка страницы индекса приведет к блокировке большого количества страниц данных, поскольку страница индекса ссылается на большое количество страниц данных. Это значит что модификация одного ключевого значения на странице может заблокировать множество совершенно посторонних записей на страницах данных. Если для таблицы определено несколько индексов, то изменение одной записи приведет к лавинообразному росту блокировок страниц, не относящихся к странице где находится модифицируемая запись. В приложениях, работающих с большими объемами данных, это может сильно снизить производительность системы." Поэтому может быть кто-нибудь может рассказать о своих граблях и их решениях в MSSQL. Заранее спасибо.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Блокировка update - select / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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