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

Откуда: Таганрог
Сообщений: 536
Здравствуйте.

Есть запрос, который использует функцию_1, он отрабатывает нормально (~2 мин.). Функция_1 вызывает функцию_2, функция_1 также отрабатывает нормально (чуть меньше 2 минут).

Но при вызове:
select * from Функция_2 ( параметры ) -- точно такие как и использовались в первом запросе и передавались потом в функцию_1, функцию_2
Запрос может выполняться и 30 минут и не дождемся результата (дольше получаса не ждал).

За счет джоинов, используемых в функция_1 и запросе, количество строк не увеличивается, добавляются только новые поля к строкам, выданным в функции_2. Обе функции табличные.
Такое поведение функции наблюдается только на сервере-издателе (может быть как-то связано), на подписчиках функция отрабатывает за ~1 мин.

В чем может быть причина такого поведения функции? До того как обнаружилась эта проблема, один день функция_2 нормально отрабатывала, а до этого никто и не проверял её работу на этом сервере, т.к. на издателе пользователи не работают. Сейчас возникла необходимость получения данных именно на этом сервере.
Делал очистку планов из кэша, проверял при холодном буферном кэше, результат не меняется: на подписчиках функция работает, на издателе - нет. Блокировок во время выполнения функции нет, ну и они, как мне кажется, мешали бы и выполнению функции_1, вызывающей функцию_2

Подскажите, пожалуйста, в чем может быть проблема и как можно попробовать от нее избавиться?

Microsoft SQL Server 2005 - 9.00.4220.00 (Intel X86) Apr 2 2009 18:42:07 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
6 фев 12, 12:12    [12039279]     Ответить | Цитировать Сообщить модератору
 Re: Fn1, в которой вызывается Fn2. Проблема при выборке из Fn2.  [new]
iljy
Member

Откуда:
Сообщений: 8711
Xordal,

выкладывайте планы, а также текст функций и структуру задействованных таблиц.
6 фев 12, 12:21    [12039366]     Ответить | Цитировать Сообщить модератору
 Re: Fn1, в которой вызывается Fn2. Проблема при выборке из Fn2.  [new]
Crimean
Member

Откуда:
Сообщений: 13147
а я бы еще и на connection settings посмотрел
6 фев 12, 12:26    [12039397]     Ответить | Цитировать Сообщить модератору
 Re: Fn1, в которой вызывается Fn2. Проблема при выборке из Fn2.  [new]
Xordal
Member

Откуда: Таганрог
Сообщений: 536
iljy,

Запустил функцию, через полчасика должна отработать и выложу
6 фев 12, 12:31    [12039431]     Ответить | Цитировать Сообщить модератору
 Re: Fn1, в которой вызывается Fn2. Проблема при выборке из Fn2.  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Xordal
iljy,

Запустил функцию, через полчасика должна отработать и выложу


вы профайлером к примеру посмотрите конекшен сеты в audit logon для обоих случаев
6 фев 12, 12:33    [12039449]     Ответить | Цитировать Сообщить модератору
 Re: Fn1, в которой вызывается Fn2. Проблема при выборке из Fn2.  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Crimean
вы профайлером к примеру посмотрите конекшен сеты в audit logon для обоих случаев


или в existing connections. в общем дефолтного темплейта обычно хватает
6 фев 12, 12:35    [12039459]     Ответить | Цитировать Сообщить модератору
 Re: Fn1, в которой вызывается Fn2. Проблема при выборке из Fn2.  [new]
Xordal
Member

Откуда: Таганрог
Сообщений: 536
Crimean,

-- network protocol: TCP/IP
set quoted_identifier on
set arithabort on
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level read committed

Для обоих серверов (издатель и один из подписчиков), проблема с запросами при работе из студии.
6 фев 12, 13:11    [12039800]     Ответить | Цитировать Сообщить модератору
 Re: Fn1, в которой вызывается Fn2. Проблема при выборке из Fn2.  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Xordal,

это только один набор, а мы говорим про 2 разных окружения или второй такой же?
6 фев 12, 13:16    [12039857]     Ответить | Цитировать Сообщить модератору
 Re: Fn1, в которой вызывается Fn2. Проблема при выборке из Fn2.  [new]
Xordal
Member

Откуда: Таганрог
Сообщений: 536
Crimean,

Да, такой набор для обоих серверов, я видимо не совсем понятно выразился в последнем предложении :)
6 фев 12, 13:17    [12039879]     Ответить | Цитировать Сообщить модератору
 Re: Fn1, в которой вызывается Fn2. Проблема при выборке из Fn2.  [new]
Crimean
Member

Откуда:
Сообщений: 13147
формально издатель и подписчики запросто могут отличаться набором индексов
6 фев 12, 13:23    [12039939]     Ответить | Цитировать Сообщить модератору
 Re: Fn1, в которой вызывается Fn2. Проблема при выборке из Fn2.  [new]
Xordal
Member

Откуда: Таганрог
Сообщений: 536
Раз в сутки (ночью) выполняется перестроение индексов. Но проблема, как кажется обнаружена. Получается что дней 5 (именно тогда обнаружилась проблема) издатель не кэшировал планы... Т.е. в sys.dm_exec_cached_plans кроме планов выборки из кэша ничего не было, пока я обедал (только что), кэш заполнился записями (~6к) и процедура стала отрабатывать за 30 сек...
6 фев 12, 13:28    [12039978]     Ответить | Цитировать Сообщить модератору
 Re: Fn1, в которой вызывается Fn2. Проблема при выборке из Fn2.  [new]
Xordal
Member

Откуда: Таганрог
Сообщений: 536
Вроде бы найден виновник проблемы с кэшем: самописная репликация сертификатов, которая практически всегда вешает блокировки на свои же процессы. Из-за нее кэш постепенно уменьшается, сейчас в нем уже 91 (пока писал сообщение, стало 25) запись из 6-7 тыс :( Сама репликация ничему остальному не мешает, т.к. основные данные с которыми работают пользователи проливаются merge-репликацией. Тяжело мне со своим малым опытом увидеть взаимосвязь между блокировками на одну из таблиц и очисткой sys.dm_exec_cached_plans, может подскажете?
6 фев 12, 13:53    [12040220]     Ответить | Цитировать Сообщить модератору
 Re: Fn1, в которой вызывается Fn2. Проблема при выборке из Fn2.  [new]
Crimean
Member

Откуда:
Сообщений: 13147
был бы 2008 сервер - я бы сказал почему кеши чистятся. а вот за 2005 такого не замечалось
может тупо памяти не хватает? достаточно похоже
и обилие блокировок - тому подтверждение - память забирается под массив блокировок ибо дефицит
6 фев 12, 13:55    [12040242]     Ответить | Цитировать Сообщить модератору
 Re: Fn1, в которой вызывается Fn2. Проблема при выборке из Fn2.  [new]
Xordal
Member

Откуда: Таганрог
Сообщений: 536
Crimean,

Похоже что вы правы: на сервере 6 Гб, а выделяется 6.12 :(
Спасибо за участие в решении проблемы!
6 фев 12, 14:01    [12040297]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить