коннектится к сиквелу, дёргает процедуру, которая выбирает данные из таблички, на табличке построен индекс по предикатам для выборки. Процедура скомпилирована с параметром SET QUOTED_IDENTIFIER ON и при запуске из студии отрабатывает за пару сек, запуск из приложения заставляет её выполняться пару минут и с использованием скана, фильтр из приложения по тем же предикатам. Вопрос, какое значение по умолчанию у драйвера JDBC на параметр QUOTED_IDENTIFIER, где приоритетнее установка параметра, в процедуре или у драйвера и как отловить строку подключения приложения к сиквелу ?
http://sqlcom.ru/dba-tools/sql-server-management-studio-optimization-part-1/
Тут наверное немножко не то, разница поведений наблюдается при установке параметра в значение OFF и дальнейшая перекомпиляция процедуры. По умолчанию процедура откомпилирована с значением ON. Видимо при вызове из приложения, в строке подключения указано OFF и оно управляет
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/create-procedure-transact-sql?view=sql-server-ver15
И как мне это отследить :) ?
Ну и да, Александр выше тебе дал ссылку, The Database Engine saves the settings of both SET QUOTED_IDENTIFIER and SET ANSI_NULLS when a Transact-SQL procedure is created or modified. These original settings are used when the procedure is executed. Therefore, any client session settings for SET QUOTED_IDENTIFIER and SET ANSI_NULLS are ignored when the procedure is running. Это значит, что процедурам вообще на это пофиг, и даже я тебе наврал (я спутал с другим случаем, когда выполнялись голые запросы, без процедур, либо динамические через EXEC)
То есть мораль: 0) ищи "дефектный" запрос 1) ищи от него план 2) смотри, как он выполняется, постигай, почему, и исправляй запрос/ставь хинты/создавай индексы.
Спасибо, если добью, опишу случай
Чёткий вариант, спасибо, сейчас попробую
В большинстве случаев разница бывает в arithabort, dateformat и language
Обсуждают сегодня