Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Что можит глючить ? (блокировки, настройки)  [new]
Denis Lee
Member

Откуда: Беларусь, Минск
Сообщений: 564
Ситуация следующая, приложение реализована Delphi (использую ADO), сервер БД - MS SQL Server.

В какой то непредсказуемый момент приложение не может получить ответ на запросы. Странно то, что запросы эти обычные SELECT - ы, ошибка возникает только тогда когда с сервером БД работает порядка 3-6 человек. На одном клиенте эту ошибку локализовать (или даже умышленно повторить) неудаётся вот уже в протяжении нескольких дней.

При выполнении запросы вываливается сообщение о time out, странно что значение как на клиенте так и на сервере стоит порядком 15 сек, при выполнении SELECT - а происходит страннная штука сервер в протяжении 15 секунд неотвечает. Хотя все запросы выполняются за время меньше 1 секунды (некоторые за милисекунды).

Вопрос что можит лочить таблицы, SELECT - :):):):):):), у меня других вариантов нет, разве может что нить касающееся настроек сервера БД.

Клиенты переодически проверяют соединение посылая запрос "SELECT 1", клиенты переодически выполняют обновление данных выполняя пачку запросов для обновления всех данных в открытых формах.

Машина на которой стоит MS SQL Server - 2 процессорный сервек с 2 гигами озу.

Если у коги нить есть какие нибудь идеи, помегиие плз....
15 ноя 05, 12:45    [2069705]     Ответить | Цитировать Сообщить модератору
 Re: Что можит глючить ? (блокировки, настройки)  [new]
Glory
Member

Откуда:
Сообщений: 104760
Вопрос что можит лочить таблицы, SELECT - :):):):):):), у меня других вариантов нет, разве может что нить касающееся настроек сервера БД.
Ну так посмотрите, что лочит. Через sp_lock/sp_who
15 ноя 05, 12:47    [2069718]     Ответить | Цитировать Сообщить модератору
 Re: Что можит глючить ? (блокировки, настройки)  [new]
Denis Lee
Member

Откуда: Беларусь, Минск
Сообщений: 564
как я могу посмотреть используя sp_lock/sp_who
т.е. сразу же после ошибки, посмотреть что залочено используя sp_lock. Так в этот момент уже может быть и ничего и незалочено.
15 ноя 05, 13:08    [2069848]     Ответить | Цитировать Сообщить модератору
 Re: Что можит глючить ? (блокировки, настройки)  [new]
Glory
Member

Откуда:
Сообщений: 104760
Поставьте перед выполнением ваших запросов SET LOCK_TIMEOUT 5000 к примеру. Если дело в именно в блокировках, то сгенерируется соответствующая ошибка.
Есди дело просто в медленном выполнении запросов, то тогда придется настраивать с помощью Profiler трассу для сборо статистики того, что происходит на сервере
15 ноя 05, 13:37    [2070044]     Ответить | Цитировать Сообщить модератору
 Re: Что можит глючить ? (блокировки, настройки)  [new]
Константин Заровный
Member

Откуда: Волгодонск
Сообщений: 954
Немного общих фраз:
· Запросы отправляемые на SQL server должны быть как можно проще и отрабатываться в очень короткие сроки. (а именно простые моментально, сложные запросы не более 5 секунд)
· Количество подключений (сессий, связей, конектов ..) к серверу БД должно быть минимальным, но достаточным. Проще всего это определяется если разделить запросы на 2 части

1 - Запросы к простым справочникам, с небольшим количеством возвращаемых записей (для всех запросов, как правило, достаточно одной сессии, но все данные необходимо «прокэшировать» в память клиента)
2 - Запросы с большим количеством возвращаемых записей («Длинные»), которые не всегда просматриваются полностью (на каждый запрос, как правило, создается свой коннект и крайне желательно ограничить количество возвращаемых записей.

· «Длинные» запросы используются как правило при выборе данных из очень большого списка и если необходимая строчка найдена - то нужно либо закрыть запрос либо необходимо забрать(прокэшировать) все данные на клиента (на крайний случай позаботиться о фоновом кэшировании)
· Транзакции нужно использовать только там где это действительно необходимо, но между началом транзакции и ее завершением не должно быть диалогов с пользователем, т.е. все должно выполняться в автоматическом режиме.
· В любом случае необходимо позаботиться о том, чтобы транзакции (явные и не очень) были как можно короче по времени.



Все мои размышления по этому поводу здесь.

А невытащеный до конца Select действительно накладывает блокировки, только он блокирует Update - который натыкается на блокировку поставленую Select-ом.
а уже Update накладывает блокировку покруче - такая ситуация хоть и маловероятно, но бывает. Если ты не работаеш со временными таблицами в транзакции(чего делать нельзя), и не используеш "Select INTO" - то может быть это твой случай.
15 ноя 05, 21:12    [2072132]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить