Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Блокировка update - select
|
|||
|---|---|---|---|
|
#18+
"Level1-запрещение "грязного" чтения. На этом уровне решается проблема "грязного" чтения. Когда транзакция начинает изменение данных, СУБД должна блокировать ресурсы, чтобы ни одна другая транзакция не смогла прочитать изменяемые данные. До тех пор, пока транзакция не будет зафиксирована или отменена, данные нельзя будет прочитать." У меня возникает вопрос: почему в MSSQL нельзя прочитать данные, которые были до начала транзакции, в момент выполнения транзакции? Почему данные блокируются, ведь ещё не факт, что изменяемые данные будут зафиксированы. И значит на момент выполнения транзакции актуальными являются данные, которые были до её выполнения. Вопрос такой: почему нельзя получить данные(но не грязные nolock, а данные до начала транзакции) во время их изменения другой транзакцией, как это делается, например в Oracle? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2001, 08:39 |
|
||
|
Блокировка update - select
|
|||
|---|---|---|---|
|
#18+
Потому что в MSSQL нет механизма версионности записей, требующий значительных ресурсов. Поэтому, чтобы другая транзакция не смогла прочитать данные, которые изменены, но еще неизвестно - будут они закомичены или откачены, эти данные блокируются от чтения. К сведению, блокировка практически никаких ресурсов не потребляет. Как следствие - в MSSQL принято делать транзакции как можно более короткими. Как второе следствие, все кто перешел на MSSQL с Inerbase и Oracle, все испытывают проблемы производительности, так как там внимания на такую мелочь, как длительность транзакции, особо не уделялось, а попытка применить те же методы в MSSQL (Sybase, Informix, DB2, ...) сразу бьет по зубам молотком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2001, 09:05 |
|
||
|
Блокировка update - select
|
|||
|---|---|---|---|
|
#18+
Конечно рекомендация: транзакция должна быть как можно более короткой по времени и работать с как можно более меньшим объемом ресурсов, хорошая, но не всегда работает. А если транзакция всё равно получается длинной? Посмотрел в Profiler, как 1С 7.7 работает с таблицами: там постоянное dirty read. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2001, 11:27 |
|
||
|
Блокировка update - select
|
|||
|---|---|---|---|
|
#18+
Есть ряд методов, позволяющих уменьшать транзакции без потери качества. > 1С 7.7 работает с таблицами: там постоянное dirty read. Как работает 1С с базой - это уже ставший классическим пример как не надо работать с MSSQL. А также - Галактика, Скала, Диасофт и еще некоторые. Хорошие примеры работы с MSSQL: - Axapta, Алеф-бухгалтер, Босс-предприятие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2001, 12:13 |
|
||
|
Блокировка update - select
|
|||
|---|---|---|---|
|
#18+
Скале не нужен транзакционный механизм MS SQL, так как она использует для блокировок и транзакций свои собственные средства. А что касается Босс-предприятия, то советую посмотреть профайлером, как он "правильно" работает с MS SQL. Отчет-шахматка по тестовой базе данных с 5 проводками строился у меня 20 минут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2001, 15:02 |
|
||
|
Блокировка update - select
|
|||
|---|---|---|---|
|
#18+
Возможно, что у меня неправильные сведения о Босс-предприятии. Бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2001, 07:39 |
|
||
|
Блокировка update - select
|
|||
|---|---|---|---|
|
#18+
Глеб, а можно по подробнее про "Есть ряд методов, позволяющих уменьшать транзакции без потери качества." или ссылку, где можно прочитать об этом. Потому что уж больно много проблем возникает с блокировками. У меня есть свои соображения на этот счёт, но они меня не удовлетворяют.Был очень неприятно удивлён, узнав, что MSSQL блокирует на уровне строки только вставку, а изменение на уровне страницы... Или вот это:"Индексы SQL Server блокируются точно так-же, как и страницы данных соответствующих таблиц, однако эффект блокировки страницы индекса значительно шире. Записи в таблице хранятся в большинстве случаев в случайном порядке (исключение составляют кластерные индексы). Когда обновляется страница данных, то должен обновиться соответствующий индекс. Как и у таблиц, данные индексов хранятся на страницах. Для обновления страницы индекса, эта страница должна быть сначала заблокирована. Если данные в таблице распределены случайным образом, то блокировка страницы индекса приведет к блокировке большого количества страниц данных, поскольку страница индекса ссылается на большое количество страниц данных. Это значит что модификация одного ключевого значения на странице может заблокировать множество совершенно посторонних записей на страницах данных. Если для таблицы определено несколько индексов, то изменение одной записи приведет к лавинообразному росту блокировок страниц, не относящихся к странице где находится модифицируемая запись. В приложениях, работающих с большими объемами данных, это может сильно снизить производительность системы." Поэтому может быть кто-нибудь может рассказать о своих граблях и их решениях в MSSQL. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2001, 10:25 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=46&tid=1825617]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 317ms |

| 0 / 0 |
