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