Сервер SQl по-прежнему получает сообщение об ошибке «Истекло время ожидания. Истекло время ожидания» - PullRequest
7 голосов
/ 17 января 2012

Я думал, что у меня возникла ошибка sql в сообщении здесь совсем немного назад ... (Сообщение об ошибке: истекло время ожидания. Время ожидания истекло до завершения операции, либо сервер неотвечаю. ") Я пытаюсь запустить это с инструментами базы данных в Visual Studio ... не в студии управления, а не через клиентский код / ​​ADO (пока). Я переписал довольно простой запрос, который использует несколько пользовательских функций.... функции, а также части запроса были протестированы, и все они работают хорошо, но запрос, показанный ниже, истекает ... это выполняется точно так, как указано в Management Studio, и занимает около 4 минут. Как я уже упоминал в моемВ другом сообщении я изменил настройку в разделе «Инструменты»> «Параметры»> «Дизайнеры»> «Переопределить значение времени ожидания строки подключения» до 120 секунд, как показано в этом сообщении, но ... он все еще истекает через 30 секунд. Добавление ISNULL в этой последней версииэто изменение, которое запускает его в студии управления.

SELECT Symbol, LatestDate
FROM (SELECT Symbol, ISNULL(dbo.LatestDateInDailyPricingVolBySymbol(Symbol), '1/1/1900') AS LatestDate FROM tblSymbolsMain) AS T2
WHERE (LatestDate < dbo.RecentTradingDateByNumber(3))

Общая идея - вернуть подмножество фондовых символов.bols, у которых нет соответствующей точки данных в моей ежедневной таблице цен в течение по крайней мере 3 дней.Любой берущий?Спасибо всем.

Ответы [ 3 ]

10 голосов
/ 17 января 2012

Безотносительно к вашему тайм-ауту;

Используете ли вы консоль управления SQL для выполнения запроса? Если это так, при подключении к базе данных есть кнопка опций, которая позволяет установить таймауты.

Connection Options

Кроме того, если в окне запроса щелкните правой кнопкой мыши и выберите Параметры запроса ....

0, значит неограниченно, я бы их проверил. 4 минуты - это много, может быть, запрос может быть реорганизован для ускорения работы?

enter image description here

Если вы запускаете это внутри Visual Studio через C #, время ожидания команды по умолчанию составляет 30 секунд. Измените его, установив время ожидания команды:

SqlCommand comm= new SqlCommand();
comm.CommandTimeout = 300;
2 голосов
/ 17 января 2012

Если запрос занимает столько времени, то это, вероятно, что-то не так.Я бы объявил переменную для хранения RecentTradingDateByNumber.Вот так это выглядит так:

DECLARE @RecentTrandingDateByNumber DATETIME
SET @RecentTrandingDateByNumber=dbo.RecentTradingDateByNumber(3)

SELECT 
    tblSymbolsMain.Symbol, 
    MAX(tblSymbolsMain.TradeDate)
FROM 
    tblSymbolsMain
GROUP BY 
    Symbol
HAVING 
    MAX(TradeDate) < @RecentTrandingDateByNumber

Чтобы увидеть выполнение в Management Studio, перейдите к «Запрос / Включить фактический план выполнения».Если вы также хотите видеть трафик запроса, выберите число и т. Д. Вы также можете включить статистику клиента.«Запрос / включение клиентской статистики»

Если вы хотите узнать больше информации о проверке выполнения запросов, см. здесь

1 голос
/ 17 января 2012

Меня беспокоит, что ваша рутина занимает 4 минуты, чтобы начать.Это выглядит как довольно простой запрос, предполагающий, что функции выполняют то, что они, кажется, делают, и с индексированием и соответствующим дизайном таблицы он должен возвращаться намного быстрее, чем это.

Рассматривали ли вы план выполнения для этого запроса:

SELECT Symbol, MAX(TradeDate)
FROM tblSymbolsMain
GROUP BY Symbol
HAVING MAX(TradeDate) < dbo.RecentTradingDateByNumber(3)

Скалярные функции могут вызывать проблемы с производительностью при многократном вызове на множествах с большим количеством строк, а также ухудшать возможность обработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...