powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как добиться NOLOCK или ROWLOCK
9 сообщений из 9, страница 1 из 1
Как добиться NOLOCK или ROWLOCK
    #32015253
NiceBigMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте !!

Необходимо вставить записи у удаленную таблицу:

Insert into aa select a.b.dbo.c with (ROWLOCK) но LockType показывается TAB. Как это побороть ?
ситуация аналогична и с Delete. Зачем блокировать всю таблицу, если можно только строки ?
...
Рейтинг: 0 / 0
Как добиться NOLOCK или ROWLOCK
    #32015585
Игорь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как всетаки добиться ROWLOCK?
...
Рейтинг: 0 / 0
Как добиться NOLOCK или ROWLOCK
    #32015587
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO ваш INSERT воспринимается сервером не как скажем 100 отдельных команд INSERT для каждой записи из a.b.dbo.c, а как bulk insert, что есть несколько другое дело.

Возможно вам поможет установка "table lock on bulk load" в процедуре sp_tableoption
...
Рейтинг: 0 / 0
Как добиться NOLOCK или ROWLOCK
    #32015656
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Garya Привилегированный пользователь
Участник
При добавлении записи (записей) в таблицу происходит блокирование всей таблицы. От этого никуда не уйти, хоть какие хинты выставляй. Иначе возможна попытка одновременого добавления записи из разных сессий (десятой после существующих девяти), которые при сохранении наложатся друг на друга - одна новая запись уничтожит другую. Блокировка RowLock не поможет, поскольку добавляются РАЗНЫЕ записи. RowLock работает только по команде Update.
...
Рейтинг: 0 / 0
Как добиться NOLOCK или ROWLOCK
    #32015666
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Garya

Что тогда подразумевает наличие в BOL для команды INSERT утверждения что


INSERT [ INTO] { table_name WITH ( < table_hint_limited > [ ...n ] )
...
< table_hint_limited > ::=
{ FASTFIRSTROW
| HOLDLOCK
| PAGLOCK
| READCOMMITTED
| REPEATABLEREAD
| ROWLOCK
| SERIALIZABLE
| TABLOCK
| TABLOCKX
| UPDLOCK
}


Или создатели BOL просто скопировали один и тот же список хинтов для SELECT/INSERT/UPDATE ?
...
Рейтинг: 0 / 0
Как добиться NOLOCK или ROWLOCK
    #32015670
Игорь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня проблема не с блокировкой таблицы при вставке записи, а в блокировании нескольких строк , соответствующих табличной части открытого док-та, вместо страниц таблицы.
Как этого добиться?
И, вообще, как обеспечить полное соответсвие табличной части, если возможен к ней доступ вне док-та?
...
Рейтинг: 0 / 0
Как добиться NOLOCK или ROWLOCK
    #32015685
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Garya Привилегированный пользователь
Участник
2Glory. Я вычитал такую трактовку в книге. Сечас специально полез искать, но не смог найти. Хорошо помню, что видел. Тем не менее, признаю, что мог несколько некоректно истолковать написанное. Возможно, там подразумевалось поведение блокировки при определенном значении уровня изоляции и, возможно, не при всех уровнях изоляции результат выполнения запроса с этим хинтом одинаков.
...
Рейтинг: 0 / 0
Как добиться NOLOCK или ROWLOCK
    #32025502
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот помню, что при выходе 6.5 одним из главных преимуществ по сравнению с 6.0 было то, что добились ROWLOCK при инсерте, а не PAGELOCK как раньше.
Идея в том, что при нарастающем кластерном индексе страница на конце таблицы становится "горячей точкой" - при одновременном инсёрте получается блокировка и обязательно последовательное выполнение. А если ROWLOCK, то инсёрт может идти параллельно, не блокируя соседние записи.
Так что ROWLOCK при инсерте есть, начиная с 6.5.
...
Рейтинг: 0 / 0
Как добиться NOLOCK или ROWLOCK
    #32026014
Ты всё перепутал, насколько я понимаю. Вот как надо:

Insert into aa with(rowlock) (fields-list) select fields-list from remote-table with (NOLOCK)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как добиться NOLOCK или ROWLOCK
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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