Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Совет с хинтом блокировки таблицы  [new]
bigman
Member

Откуда:
Сообщений: 256
Есть проблема:

Необходимо очистить таблицу через Delete ...,
в которую в это вставляются записи.
Соответственно ее нужно заблокировать.

Вопрос: как лучше это сделать ?

select * from with tablockx - возникает мертвая блокировка с процессом
SqlAgent - Generic Refresher,
снять эту блокировку удается только путем перезапуска самого сервера :(
13 янв 04, 15:58    [489722]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Соответственно ее нужно заблокировать.


Зачем. DELETE TableName не проходит. И что это за таблица, что с ней SQLAgent работает?
13 янв 04, 16:06    [489741]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
bigman
Member

Откуда:
Сообщений: 256
В том то и дело, что агент с ней не работает. Обычная таблица.
Но когда выполняется эта команда, возникает deadlock с процессом
агента ...
13 янв 04, 16:10    [489755]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
bigman
Member

Откуда:
Сообщений: 256
если я не буду блокировать таблицу, то я могу зацепить записи, которые
введены с момента процесса. А это недопустимо. Соответственно, надо
таблицу заблокировать, удалить записи, а потом разблокировать
13 янв 04, 16:12    [489760]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
если я не буду блокировать таблицу, то я могу зацепить записи, которые
введены с момента процесса


Ничего вы не зацепите. А чтоб агент не мешался попробуйте остановить его.
13 янв 04, 16:13    [489765]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
funikovyuri
Member

Откуда: Симферополь
Сообщений: 4045
2bigman

Я думаю стоит початать про phantom reads и repeatable read
13 янв 04, 16:14    [489768]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
bigman
Member

Откуда:
Сообщений: 256
поясните пожалуйста свое последнее высказывание ...
уровень блокировки - стандартный
13 янв 04, 16:14    [489769]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
bigman
Member

Откуда:
Сообщений: 256
2funikovyuri

Про это я знаю
Я подумаю над Вашими словами
13 янв 04, 16:15    [489776]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
funikovyuri
Member

Откуда: Симферополь
Сообщений: 4045
вообще - хинты - это workaraound - не надо их как штатное средство использовать. Во всех случаях без них можно обойтись - они не решают дачи - а только иногда позволяют решить их эффективнее
13 янв 04, 16:16    [489779]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
bigman
Member

Откуда:
Сообщений: 256
Просто хочется услышать совет спецов более высокого ранга
13 янв 04, 16:16    [489780]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
bigman
Member

Откуда:
Сообщений: 256
Я же и спрашиваю совет:
как решить эту проблемы более эффективно ?
13 янв 04, 16:18    [489783]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
поясните пожалуйста свое последнее высказывание ...


Если вы про то, что я сказал, что вы не зацепите записи, то каких вы пояснений хотите? При попытке выполнить удаление всей таблицы сервер будет пытаться ее заблокировать, подождет, пока снимуться все блокировки при вставке, начнет удаление, и пока транзакция на удаление выполнятеся ничего в эту таблицу вставлено не будет.
13 янв 04, 16:20    [489789]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
funikovyuri
Member

Откуда: Симферополь
Сообщений: 4045
Просто хочется услышать совет спецов более высокого ранга

Ну тогда ждите Glory

Правильно ли я понял задачу

Надо удалить все записи в таблице кроме тех которые будут втавляться в процессе удаления? Тогда вам подойдет просто DELETE FROM TableName - только вот - я подозреваю - никто все равно до этой таблице не достучится до окончания удаления - не то что что-нибудь в нее еще вставлять :)
13 янв 04, 16:20    [489792]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
bigman
Member

Откуда:
Сообщений: 256
2funikovyuri
Хорошо бы .... :)
13 янв 04, 16:24    [489806]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
bigman
Member

Откуда:
Сообщений: 256
2praklin
Убедили окончательно
Всем спасибо
13 янв 04, 16:26    [489812]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
funikovyuri
Member

Откуда: Симферополь
Сообщений: 4045
ага, зашибись...
13 янв 04, 16:26    [489815]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Тут все очень тонко.
Вот вам пример.

Создаем таблицу

-- drop table a


create table a ( id int identity primary key nonclustered , part int , no int , unique clustered( part, no ))


Заполняем

insert into a ( part, no ) select top 1000 1, id from sysobjects

insert into a ( part, no ) select top 1000 2, id from sysobjects
insert into a ( part, no ) select top 1000 3, id from sysobjects


Открываем два кверика

Q1:begin tran > The command(s) completed successfully.
Q1:delete from a where part = 2 > (1000 row(s) affected)

Q2:begin tran > The command(s) completed successfully.
Q2:insert into a ( part, no ) select top 1000 4, id from sysobjects > (1000 row(s) affected)

Q1:commit > The command(s) completed successfully.
Q2:commit > The command(s) completed successfully.

То есть у нас во время удаления спокойно вставили записи. Вопрос только в том, какие записи и какие индексы на таблицу :)
13 янв 04, 18:23    [490090]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
То есть у нас во время удаления спокойно вставили записи. Вопрос только в том, какие записи и какие индексы на таблицу

Вопрос то у человека был - не удаляться ли данные которые будут добавлены во время DELETE.

"если я не буду блокировать таблицу, то я могу зацепить записи, которые
введены с момента процесса. А это недопустимо"
13 янв 04, 18:38    [490113]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
BootMaker
Member

Откуда: С-Петербург
Сообщений: 902
Я так полагаю, блокироваться во время удаления таблица будет экстентами (красивое слово), то бишь частями, поэтому вставка новых данных просто произойдет на свежее, незаблокированное место?
14 янв 04, 01:46    [490292]     Ответить | Цитировать Сообщить модератору
 Re: Совет с хинтом блокировки таблицы  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Пример был приведен как повод для размышления и для проверки на своей таблице. Хто его знает, о чем он думает, какие там у него индексы и какие записи будут вставляться.
14 янв 04, 11:00    [490591]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить