Форум: "Базы";
Текущий архив: 2017.11.12;
Скачать: [xml.tar.bz2];
ВнизБлокировка в SQL Найти похожие ветки
← →
miau (2011-09-08 12:23) [0]Уважаемые мастера, столкнулся с непонятной хренью, и не знаю, как её забарывать.
Суть проблемы такая:
Есть небольшая табличка, 7 столбцов, а число строк редко переваливает за 10. Когда пользователь открывает форму редактирования, туда вносится строка. Когда форма закрывается, строка удаляется.
Всё хорошо работало, пока не перешли с SQL-2000 на SQL-2008. Потом началась полная хрень: где-то раз на три дня таблица блокируется так, что внести в неё запись можно, прочитать через (nolock) можно, а удалить или прочитать без флага (nolock) не выходит.
Единственным выходом пока является стоп-старт сервера. Есть ли у кого-нибудь мысли, в чём может быть дело?
← →
OW © (2011-09-08 12:39) [1]ADOTable не юзать.
в свойствах соединения внимательно с режимом
определить кто блокирует
select * from sys.sysprocesses
where blocked <> 0
потом, узнать его(их) sql-запрос
dbcc inputbuffer(spid полученного на шаге 1)
потом смотря что видим
← →
miau (2011-09-08 12:49) [2]
> ADOTable не юзать
Не юзаю. Только ADOQuery и ADOStoredProc.
> в свойствах соединения внимательно с режимом
А что там может быть не то, просветите ламера?
> определить кто блокирует
Спасибо, буду смотреть, как повесятся.
← →
OW © (2011-09-08 12:53) [3]
> А что там может быть не то, просветите ламера?
ну, это..
{ TADOConnection }
TConnectMode = (cmUnknown, cmRead, cmWrite, cmReadWrite, cmShareDenyRead,
cmShareDenyWrite, cmShareExclusive, cmShareDenyNone);
TConnectOption = (coConnectUnspecified, coAsyncConnect);
TCursorLocation = (clUseServer, clUseClient);
TCursorType = (ctUnspecified, ctOpenForwardOnly, ctKeyset, ctDynamic,
ctStatic);
лишнего не просить, в смысле
← →
Кщд (2011-09-08 16:46) [4]>miau (08.09.11 12:23)
commit ставьте
← →
miau (2011-09-08 16:57) [5]
> commit ставьте
Там нет транзакций, объявленных через BEGIN TRANSACTION.
← →
Кщд (2011-09-08 20:38) [6]>miau (08.09.11 16:57) [5]
вы данные внетранзакционно вставляете?
научите?
и, конечно, код не показывайте
← →
SQLEX © (2011-09-08 22:06) [7]commit явный нужен если в св-ах стоит не автоматическая транзакция, или она начата явно.
иначе она и так начинается автоматически и автоматически завершается тоже.
← →
Кщд (2011-09-08 22:23) [8]>SQLEX © (08.09.11 22:06) [7]
откуда блокировки?
либо commit, либо непоказанный код, либо комбинация.
лично я предлагаю ТС не читать про транзакции и рестартовать сервер из-за блокировок в таблице с десятью записями, ибо очевидно, что во всём виноват MS
← →
OW © (2011-09-09 08:34) [9]
> Кщд (08.09.11 22:23) [8]
>
> >SQLEX © (08.09.11 22:06) [7]
> откуда блокировки?
> либо commit, либо непоказанный код, либо комбинация.
100%
Но откуда уверенность, что именно этого приложения?
Надо выяснить кто блокирует сначала
← →
OW © (2011-09-09 09:15) [10]
> определить кто блокирует
> select * from sys.sysprocesses
> where blocked <> 0
а потом можно
kill spid_полученного_соединения и сидим ждем, кто позвонит с проблемой "я работала, а тут все перестало показываться почему-то "
Отвечаем, что понятия не имеем почему же это так произошло и пытаем что было запущено и что при этом делалось. Потом звоним автору и говорим, что он балбес и при таких-то действиях такой-то программы таблица у него блокируется. И пусть разбирается сам :)
Шутка.
← →
Anatoly Podgoretsky © (2011-09-09 09:20) [11]> OW (09.09.2011 08:34:09) [9]
> Надо выяснить кто блокирует сначала
А чего тут выяснять и так ясно кто.
← →
miau (2011-09-13 14:12) [12]Помогло уничтожение индексов на таблице.
← →
DiamondShark © (2011-09-13 14:47) [13]
> miau (13.09.11 14:12) [12]
> Помогло уничтожение индексов на таблице.
Таракан слышит ногами.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2017.11.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.002 c