[sql server 2008, .Net] Нужна помощь full stack программистов

Alena_08_11

Есть inline table function с параметрами
Если выполнять запрос из ssms - 6-8 секунд
Когда то же самое делать из .Net winforms app (command.ExecuteReader()) то постоянно сваливается в краткосрочные pageiolatch_sh/io_completion (ну activity monitor такое кажет) и выполняться может от 1 до 20 минут.
При выполняющемся запросе из .Net если параллельно запустить такой же в ssms - он всё равно выполнится за 6-8 секунд не показав никаких lock-ов в activity monitor.
Одна и та же функция, одни и те же параметры, один и тот же хост, одни и те же cretials
WTF ?!?!?!?!111

Ulala

Ты уже убедился, что приложение выполняет ровно тот запрос, что ты ожидаешь? Я имею ввиду, что SQL Server profiler показывает ровно то, что ты ожидаешь? Что происходит "в окрестности" запроса в коде, другие потоки, транзакции?

Alena_08_11

Добрый человек, спасибо тебе ! Лови +
В profiler то я не лазил, лишь убедился в Activity Monitor что запросы идентичные.
Вскрытие profiler-ом показало, что .Net SqlClient по умолчанию ставит arithabort off, а ssms - arithabort on.
Хз как это влияет на выполнение, но как только я в command.CommandText в начале прописал "set arithabort on; ...." Всё стало так же быстро как и в ssms.
По прежнему нужна помощь full stack программистов, и нормальных тоже.
1. Как в ADO.NET минимальными усилиями сделать этот arithabort on для всех выполняемых запросов ? (чтобы не добавлять руками в каждый CommandText)
2. Объясните, на что оно влияет и почему ?
update :
По 1 - оказывается есть такая опция у БД. По ходу .Net sql client её просто не трогает и берёт по умолчанию для БД, а SSMS устанавливает принудительно.
Установить опцию можно либо через гуй пропертей БД в ssms, либо

use master
alter database <dbname> set arithabort on with NO_WAIT;

evgggg

Длинный ответ на 2 есть тут
http://www.somewheresomehow.ru/fast-in-ssms-slow-in-app-part...

Alena_08_11

Спасибо, почитал подиагонале. Завтра повдумчивее прочту.
Оставить комментарий
Имя или ник:
Комментарий: