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

Откуда:
Сообщений: 4
Здравствуйте.
Есть запрос
update commom_table1
set pole1=1
where session_id in (select session_id from table1).
В QueryAnalyzer (QA) выполняется 1-2 сек (выборка происходит из ~100 т. записей).
Данный запрос выполняется на нескольких машинах одновременно (таблицы table1, table2, ... - таблицы очередей, common_table - общая таблица). Все хорошо работает некоторое время, после чего некоторые клиенты (выполняющие данный запрос) начинают выдавать ошибку query timeout. Останавливал программу-клиент, перегружал машину, менял время SetQueryTimeout() все таже ошибка. Ставлю программу в отладку на своей машине, все выполняется за 1-2 сек., в QA тоже выполняется. Программы клиенты написаны на C++, используют класс MFS CDatabase. При этом SQL сервер не занят (CPU 5-10% не более), на машине-клиенте кроме моей программы ничего не работает.
Вопрос: почему так может происходить и возможные способы устранения ?
3 окт 09, 11:24    [7737741]     Ответить | Цитировать Сообщить модератору
 Re: На одной машине запрос выполняется, на другой ошибка timeout  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36799
Например, из-за блокировок.

Сообщение было отредактировано: 3 окт 09, 11:35
3 окт 09, 11:35    [7737745]     Ответить | Цитировать Сообщить модератору
 Re: На одной машине запрос выполняется, на другой ошибка timeout  [new]
Evgeniy2000
Member

Откуда:
Сообщений: 4
В том-то все и дело, что блокировок никаких не было (смотрел в MonitorActivity)
3 окт 09, 22:57    [7738719]     Ответить | Цитировать Сообщить модератору
 Re: На одной машине запрос выполняется, на другой ошибка timeout  [new]
aleks2
Guest
Evgeniy2000
Здравствуйте.
Есть запрос
update commom_table1
set pole1=1
where session_id in (select session_id from table1).
В QueryAnalyzer (QA) выполняется 1-2 сек (выборка происходит из ~100 т. записей).
Данный запрос выполняется на нескольких машинах одновременно (таблицы table1, table2, ... - таблицы очередей, common_table - общая таблица). Все хорошо работает некоторое время, после чего некоторые клиенты (выполняющие данный запрос) начинают выдавать ошибку query timeout. Останавливал программу-клиент, перегружал машину, менял время SetQueryTimeout() все таже ошибка. Ставлю программу в отладку на своей машине, все выполняется за 1-2 сек., в QA тоже выполняется. Программы клиенты написаны на C++, используют класс MFS CDatabase. При этом SQL сервер не занят (CPU 5-10% не более), на машине-клиенте кроме моей программы ничего не работает.
Вопрос: почему так может происходить и возможные способы устранения ?
4 окт 09, 15:14    [7739454]     Ответить | Цитировать Сообщить модератору
 Re: На одной машине запрос выполняется, на другой ошибка timeout  [new]
Glory
Member

Откуда:
Сообщений: 104760
Evgeniy2000
В том-то все и дело, что блокировок никаких не было (смотрел в MonitorActivity)

Вы смотрели их в момент выполнения запроса или после ?
5 окт 09, 11:34    [7741604]     Ответить | Цитировать Сообщить модератору
 Re: На одной машине запрос выполняется, на другой ошибка timeout  [new]
Evgeniy2000
Member

Откуда:
Сообщений: 4
Да, в момент выполнения запроса блокировок не было. Сегодня еще кое-что прояснилось: сначала выполняется update на занятие сеансов для обработки, потом select этих занятых сеансов, после чего пробегаю по CRecordset и получаю данные (GetFieldValue()). Сегодня в AM было значение wait_type - ASYNC_NETWORK_IO.
5 окт 09, 13:24    [7742431]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить