2009-06-19 2 views
2

У нас есть эта странная проблема, касающаяся службы уведомления по SQL-запросам. У нас есть основное веб-приложение, работающее с QN-службой, поэтому элемент кэша в Интернете получает уведомление от SQL при изменении данных мониторинга. И это работает хорошо. Что странно, когда другая поддерживающая веб-служба пытается зарегистрировать подписку QN в SQL 2005 с пакетом обновления 2 (SP2), и эта ошибка возникаетОшибка уведомления о запросе

«Исключение системы: SqlDependency.Start был вызван для сервера, который выполняет команда более одного раза, но не существует соответствующего вызова сервера/пользователя/базы данных Start() для текущей команды «

Эта ошибка возникает только при SQL-запросе в SQLDependency в отношении конкретного экземпляра DB. Другой экземпляр DB работает просто отлично.

Ресурсов QN/service broker нет. Желание, которое любой человек имеет сходный опыт, может поделиться своими знаниями.

+0

Эта проблема была решена, ошибка в нашем коде в глобальном масштабе, которая не выполняла SQLDepenedncy.start() все экземпляры в SQL. Однако, без запуска SQLDependency, ошибка должна быть примерно такой: «При использовании SqlDependency без предоставления значения параметра SqlDependency.Start() должен вызываться для каждого сервера, который выполняется против». Поэтому мне все еще интересно, почему SQL генерирует эту странную ошибку. – RocketsLee

ответ

1

Это одна из тех предметных областей SQL Server, где не слишком много специалистов знаний, доступных там, inluding осмелюсь сказать, сам ;-)

Мое предложение было бы разместить свой запрос на официальный SQL Форум брокерской службы сервера в MSDN. Ссылка ниже для справки:

http://social.msdn.microsoft.com/Forums/en-US/sqlservicebroker/threads

1

это означает, что метод Start() уже был вызван для этого БД. У пускового метода есть ограничения, которые вы можете видеть here внизу.

1

Это не является прямым ответом на эту тему, но по вопросу о QN/ОБП ресурсов У меня есть несколько статей на моем сайте:

Я бывший разработчик с SQ L и я принимали участие как в обслуживающем брокере, так и в большей или меньшей степени со своими собственными приложениями, такими как уведомления о запросах и SqlDependency, уведомления о событиях, dbMail и т. Д.

+0

Спасибо за информацию, мы знаем, что QN подписывает ресурсы ресурсов SQL. Можете ли вы рассказать нам, сколько подписей QN слишком велико для сервера SQL Server уровня предприятия? Мы внедряем QN в нашем приложении, протестируем OK, но у вас есть проблемы с производительностью на рабочем сервере. В прошлый раз, когда я проверил, у них около 3000 подписей QN в SQL. Мне интересно, что это проблема или нет. Благодаря! – RocketsLee

+0

3000 QN шаблонов, QN подписали querries или 3000 подписных подписей? Каждый appdomain, который подписывается на SqlDependency, отправляет WAITFOR RECEIVE на сервер, который блокирует потоки. Вам нужно настроить «максимальные рабочие потоки» на более высокие значения, добавив все ожидаемые клиентские приложения в «нормальное» значение. Каждый шаблон запроса создает фальшивое индексированное представление только для метаданных, которое замечает изменения, что влияет на планы INSERT/UPDATE/DELETE. И каждый подписанный запрос требует немного состояния (памяти, диска). –

+1

Настоящий убийца запускает уведомление, которое берет ресурсы (отправляет уведомление, получая его = 1 вставку, 3 обновления и 1 удалить (отправить) + 1 удалить (получать). Если у вас есть 3000 QN, стреляющих каждую минуту , это дополнительные 300 операций DML в секунду для вашего ввода-вывода, то есть без учета стоимости повторной подписки. –