powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Разное время выполнения запроса из C# и SQL Server Management Studio
39 сообщений из 39, показаны все 2 страниц
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39544758
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!

Сложилась забавная ситуация. При вызове запроса из ASP.NET Web Service метода - запрос выполняется 30 секунд (по статистике профайлера). Снимаю текст вызова в SQL Server Profiler. Выполняю его же из SQL Server Management Studio. Время выполнения меньше секунды. При повторном выполнении операции - та же картина. Из сервиса - 30 секунд, из студии - меньше секунды.
Не представляю с какой стороны подобраться к решению проблемы. Может кто-то подсказать?
К сообщению приложено два скрина из профайлера

Скрин 1 - 30 секунд


Скрин 2 - меньше секунды
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39544768
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39544867
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro http://www.somewheresomehow.ru/fast-in-ssms-slow-in-app-part1/
В моем случае
авторSET ARITHABORT OFF;
не привел к замедлению выполнения запроса в SSMS. Вобщем, первая часть не помогла - попробую покурить остальные.
Но - спасибо за помощь
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39544879
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чуть больше подробностей.
Хранимая процедура содержит большой запрос, пересекающий десятка полтора таблиц. При этом ожидается, что в результате будет не более 3-4 строк. Параметр процедуры - ИД записи в одной из таблиц.
Решил протестировать таким образом.
Сократил запрос до обращения к ОДНОЙ таблице, по ключу которой и идет поиск.
И... Все равно 30 секунд.
Выполнил следующее:
Код: sql
1.
EXEC sp_recompile sq_WSGetAppByLegId



и затем по совету автора статьи - запрос, возвращающий новый план из кеша
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
DECLARE @dbname    nvarchar(256),
        @procname  nvarchar(256)
SELECT @dbname = 'AmbQueue',
       @procname = 'dbo.sq_WSGetAppByLegId'
 
; WITH basedata AS (
   SELECT qs.statement_start_offset/2 AS stmt_start,
          qs.statement_end_offset/2 AS stmt_end,
          est.encrypted AS isencrypted, est.text AS sqltext,
          epa.value AS set_options, qp.query_plan,
          charindex('<ParameterList>', qp.query_plan) + len('<ParameterList>')
             AS paramstart,
          charindex('</ParameterList>', qp.query_plan) AS paramend
   FROM   sys.dm_exec_query_stats qs
   CROSS  APPLY sys.dm_exec_sql_text(qs.sql_handle) est
   CROSS  APPLY sys.dm_exec_text_query_plan(qs.plan_handle,
                                            qs.statement_start_offset,
                                            qs.statement_end_offset) qp
   CROSS  APPLY sys.dm_exec_plan_attributes(qs.plan_handle) epa
   WHERE  est.objectid  = object_id (@procname)
     AND  est.dbid      = db_id(@dbname)
     AND  epa.attribute = 'set_options'
), next_level AS (
   SELECT stmt_start, set_options, query_plan,
          CASE WHEN isencrypted = 1 THEN '-- ENCRYPTED'
               WHEN stmt_start >= 0
               THEN substring(sqltext, stmt_start + 1,
                              CASE stmt_end
                                   WHEN 0 THEN datalength(sqltext)
                                   ELSE stmt_end - stmt_start + 1
                              END)
          END AS Statement,
          CASE WHEN paramend > paramstart
               THEN CAST (substring(query_plan, paramstart,
                                   paramend - paramstart) AS xml)
          END AS params
   FROM   basedata
)
SELECT set_options AS [SET], n.stmt_start AS Pos, n.Statement,
       CR.c.value('@Column', 'nvarchar(128)') AS Parameter,
       CR.c.value('@ParameterCompiledValue', 'nvarchar(128)') AS [Sniffed Value],
       CAST (query_plan AS xml) AS [Query plan]
FROM   next_level n
CROSS  APPLY   n.params.nodes('ColumnReference') AS CR(c)
ORDER  BY n.set_options, n.stmt_start, Parameter



И вот - смотрю я в сгенерированный план... А там - Clustered Index Seek, при этом верно определяется Estimated Number of Rows - 1. И при этом - при выполнении из приложения - зачем-то все это длится около 30 секунд...
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39544906
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Romanenko,

в студии пробовали выполнять именно через exec sp_executesql ?
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39545244
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAVadim Romanenko,

в студии пробовали выполнять именно через exec sp_executesql ?

Проблема не на моем тестовом сервере. Самая печаль в том, что перенес базу локально к себе - проблема не повторяется
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39545256
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может надо обновить статистику на таблице?
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39545261
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

обновлял - еще вчера. Но не удивлюсь если поможет экспорт-импорт. Но на промбазе это делать не очень хорошо. Там и база под 60 гиг... Ну и хотелось бы понять в чем проблема и как ее решить кроме как экспортом-импортом.
ПС: пользовался вот этим ресурсом для получения скрипта сбора статистики
тынц
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39545274
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProМожет надо обновить статистику на таблице?
С другой стороны - может поделитесь Вашим скриптом по сбору статистики и обновлению индексов? Возможно, мой подход не торт
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39545279
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забавно, но экспорт-импорт в новую БД на проблемном сервере не привел к решению проблемы. Т.е. с импортированной копией БД и перенастроенным сервисом - та же проблема с производительностью.
Вот тут я уже совсем в шоке
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39545301
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нет, все на месте. Сейчас буду дальше тестировать. Не обновил все окружение, потому не шел на самом деле вызов... Пардоньте. буду экспериментировать
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39545305
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как насчет WITH (NOLOCK)?
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39545314
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProКак насчет WITH (NOLOCK)?
В случае, когда я экспериментирую с копией БД на моем рабочем ПК - доступ к восстановленной БД имею только я. Параллельные записи исключены. И соответственно блокировки со стороны других сессий.
Потому, видимо, этот параметр ни при чем.
Или я неверно понимаю для чего этот параметр нужен?
ПС: в запросе этого параметра нет
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39545316
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак, все-таки разобрался, что в восстановленной БД проблема осталась и это радует.
Предыдущие дергания попросил прибить модератора - извиняюсь за искривление описания задачи.
Сейчас попробую подключиться из студии и выполнить тот же самый запрос
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39545423
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim RomanenkoИли я неверно понимаю для чего этот параметр нужен?Дело не в сторонних блокировках, а в том, что сам запрос будет ставить блокировки на страницы, которые читает.

А вообще, обсуждать оптимизацию запроса в ASP вместо MSSQL наверное не очень логично, может стоить завести там новую тему, очистив ее от шелухи.
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39545439
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProVadim RomanenkoИли я неверно понимаю для чего этот параметр нужен?Дело не в сторонних блокировках, а в том, что сам запрос будет ставить блокировки на страницы, которые читает.

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

Shocker.ProА вообще, обсуждать оптимизацию запроса в ASP вместо MSSQL наверное не очень логично, может стоить завести там новую тему, очистив ее от шелухи.
Так проблема в том, что чисто сама процедура выполняется мгновенно :) Проблема именно при вызове из приложения...
Я не вполне понимаю что тут можно оптимизировать... Разве что попробовать вручную как-то хинтами зафиксировать план...
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39545440
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAVadim Romanenko,

в студии пробовали выполнять именно через exec sp_executesql ?
Наконец-то попробовал. Из студии запрос отрабатывает мгновенно. Проблем нет.
При вызове из приложения - 30 секунд...
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39545441
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Единственная разница, которая мне видна - это в профайлере в колонке Event Class - при медленном выполнении указано RPC:Completed, при быстром - SQL:BatchCompleted.
Что-то мне подсказывает, что где-то здесь и порылась собака.
Кто может подсказать - может мне как-то переписать вызов?
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39545443
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно, сейчас работа идет через OleDb (OleDbCommand)
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39545457
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim RomanenkoТак проблема в том, что чисто сама процедура выполняется мгновенно :) Проблема именно при вызове из приложения...Тем не менее, люди там в курсе, что у многих возникает проблема другого плана при вызове из приложения (и в курсе той статьи, которую я привел в начале) и они смогут дать совет, куда и как копать.
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39545470
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProVadim RomanenkoТак проблема в том, что чисто сама процедура выполняется мгновенно :) Проблема именно при вызове из приложения...Тем не менее, люди там в курсе, что у многих возникает проблема другого плана при вызове из приложения (и в курсе той статьи, которую я привел в начале) и они смогут дать совет, куда и как копать.

Ок, спасибо, попробую создать аналогичную тему в ветке про SQL Server.
ПС: попробовал через профайлер сравнить планы - навскидку они одинаковые :( Это была моя последняя версия...
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39545745
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim RomanenkoЕсли Вы предлагаете использовать этот хинт - то в моем случае это, мне кажется, бессмысленно. Потому что при тестировании сторонних блокировок быть не может.
Ну да, конечно не может быть. А на деле: 20917539
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39546002
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAVadim RomanenkoЕсли Вы предлагаете использовать этот хинт - то в моем случае это, мне кажется, бессмысленно. Потому что при тестировании сторонних блокировок быть не может.
Ну да, конечно не может быть. А на деле: 20917539

Да-да, я был неправ :) Похоже, причина столь странного поведения найдена. Хотя я так и не понимаю до сих пор - каким образом сервис таки получает данные
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39546326
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim RomanenkoХотя я так и не понимаю до сих пор - каким образом сервис таки получает данныеНу если Вы (его аффтар. Эдакий машинист-многостаночник. Имеющий сырцы абсолютно всех компонентов.
И допиливающий тоже все компоненты. И клиент-серверное приложение, и sql-серверную часть, и web services)
не понимаете, то скорее всего это...

Мистика!
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39546356
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и запишем - мистика :)
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39546366
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim RomanenkoСобственно, сейчас работа идет через OleDb (OleDbCommand)
У Вас в try что записано? Прямо копи-пастом из msdn?

// Start a local transaction with ReadCommitted isolation level.
transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
В случае срыва через 30 секунд блокировки Вы что делаете в catch (Exception ex)?

Выложите свой код на C#!
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39546374
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP,

не все так просто. Но основные моменты попробую осветить
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
public static List<Appointment> GetAppByLegId(long legId)
        {
            DBConnManager manager = DBConnManager.GetDBConnManager();
            IDbConnection conn = manager.GetConnection();
            List<Appointment> apps = null;
            DebugMessageService ds = DebugMessageService.GetService();

            try
            {
                OleDbDataReader dr = null;

                using (dr = DBUtils.ExecSQL(conn as OleDbConnection, null, "exec sq_WSGetAppByLegId ?", new object[] { legId }))
                {
                    apps = ParseDBResponce_Apps(dr);
                }
            }
            finally
            {
                manager.FreeConnection(conn);
            }
            return apps;
        }

...

        public IDbConnection GetConnection()
        {
            OleDbConnection conn = null;
            try
            {
                conn = new OleDbConnection(GetConnectionString());
            }
            catch (Exception e)
            {
                return null;
            }
            return conn;
        }

        public static OleDbDataReader ExecSQL(OleDbConnection conn, OleDbTransaction trans, string sql, object[] parameters)
        {
            OleDbCommand oleCmd = new OleDbCommand(sql);
            oleCmd.CommandTimeout = 300;
            oleCmd.Connection = conn;
            BuildParameters(oleCmd, parameters);
            if (conn.State == ConnectionState.Closed)
                conn.Open();
            if (trans != null)
                oleCmd.Transaction = trans;
            return oleCmd.ExecuteReader(CommandBehavior.Default);
        }



где BuildParameters - просто формирует набор OleDbParameter
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39546375
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ах, да, про try

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
        public String NotifyLegStateChanged(long legId, ILog logger)
        {
            String responce = null;

            try
            {
                String brokerEndpoint = ConfigService.GetInstance().GetBrokerEndpoint();
                if (String.IsNullOrWhiteSpace(brokerEndpoint))
                {
                    throw new Exception("Broker Endpoint is empty");
                }

                List<Appointment> apps = DALApps.GetAppByLegId(legId);
                
                if (apps == null || apps.Count == 0)
                    throw new Exception("App for Leg with ID " + legId.ToString() + " not found");

                if (!apps.Any(x => x.Legs.Any(l => l.AppLegId == legId)))
                    throw new Exception("App Leg with ID " + legId.ToString() + " not found");

                Appointment app = apps.First(x => x.Legs.Any(l => l.AppLegId == legId));
                Models.AmbDispatch.Leg leg = app.Legs.First(l => l.AppLegId == legId);
                if (!apps[0].AppIsForToday())
                    return null;
                
                responce = DALBroker.GetInstance().NotifyLegUpdated(app, leg);
            }
            catch (Exception e)
            {
                responce = "Exception in DAL.NotifyAppStateChanged: " + e.Message;
            }
            
            return responce;
        }



Хотя, скорее всего, это уже лишнее. Отмечу только, что responce не содержит сообщения об ошибке.
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39546381
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Romanenko,

"DBUtils.ExecSQL" - это что за ерунда такая? DBUtils - это же JDBC, откуда он в C#?
Внутренний компонент как черный ящик с передачей параметров conn as OleDbConnection, null, "exec sq_WSGetAppByLegId ?", new object[] { legId }), а внутри try и catch как угодно написаны?
Что за второй параметр, почему null? В компоненте не настраивается уровень изоляции для Connection?
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39546382
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP,

Понял. Это идет вызов вот отсюда. OleDbTransaction как null.

public static OleDbDataReader ExecSQL(OleDbConnection conn, OleDbTransaction trans, string sql, object[] parameters)
{
OleDbCommand oleCmd = new OleDbCommand(sql);
oleCmd.CommandTimeout = 300;
oleCmd.Connection = conn;
BuildParameters(oleCmd, parameters);
if (conn.State == ConnectionState.Closed)
conn.Open();
if (trans != null)
oleCmd.Transaction = trans;
return oleCmd.ExecuteReader(CommandBehavior.Default);
}
Сейчас разберемся дальше, что делать.
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39546383
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP,

это самописная утилита. Метод которой на вход получает несколько параметров:
- connection
- transaction (can be null)
- маску вызова (из серии "exec some_sp ?, ?")
- массив значений параметров хранимой процедуры

В данном случае объект транзакции пустой. Подключение к БД устанавливается на основе connection string. Из "подозрительного" там имеются следующие параметры:
- Persist Security Info=False;
- multipleactiveresultsets=True;
- Enlist=false;
Все остальное - я вроде бы привел

ПС: совпадение названия утилиты с какими-то существующими "в стороне" - исключительно случайное :)
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39546386
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP,

Мой главный вопрос - есть ли возможность создать честный параллельный thread, в который я бы перенес код обработки. При этом чтобы метод веб сервиса вернул управление вызвавшей его хранимой процедуре.

Самый логичный способ решения этой проблемы, на самом деле - был подсказан уже кем-то. Это сделать нотификацию на клиенте. После явного коммита в том самом клиенте. Но этот способ очень не хочется осуществлять - в связи с необходимостью провести обновление клиентского приложения у всех заказчиков. Основная проблема в административных трудностях.
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39546390
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPAndy_OLAP,

Понял. Это идет вызов вот отсюда. OleDbTransaction как null.

public static OleDbDataReader ExecSQL(OleDbConnection conn, OleDbTransaction trans, string sql, object[] parameters)
{
OleDbCommand oleCmd = new OleDbCommand(sql);
oleCmd.CommandTimeout = 300;
oleCmd.Connection = conn;
BuildParameters(oleCmd, parameters);
if (conn.State == ConnectionState.Closed)
conn.Open();
if (trans != null)
oleCmd.Transaction = trans;
return oleCmd.ExecuteReader(CommandBehavior.Default);
}
Сейчас разберемся дальше, что делать.

Идет вызовconn.Open();
Далее сразу на oleCmd выполняется ExecuteReader.
А нужно вставить далее например что-то типа
oleCmd.Transaction = onn.BeginTransaction(level, "DirtyReadFirst").

Не силен в C#, попросите коллег подсказать, как задавать уровни изоляции (а точнее режим блокировки транзакций для подключения) помимо дефолтного.
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39546391
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP,

спасибо за совет :) но мне нужны как раз ИЗМЕНЕННЫЕ данные из БД :) видимо, таки пойду допиливать клиентское приложение для вызова нотификации после коммита основной операции
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39546392
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Romanenko- multipleactiveresultsets=True;

Так у Вас же режим MARS включен. Ну и в соединение идут разные сеансы из кэша.
В рамках одного сеанса ставите блокировку, в рамках другого ждете через ExecuteReader, через 30 секунд достижение лимита и создается новый сеанс без ошибки (и никакой обработки и повторной попытки) - и в рамках его команда выполняется.
"Чтобы свести к минимуму затраты и повысить производительность, SqlClient кэширует сеанс режима MARS в рамках соединения. Кэш может содержать максимум 10 сеансов режима MARS. Это значение не может быть изменено пользователем. При достижении лимита сеансов создается новый сеанс - ошибка не формируется. Сам кэш и содержащиеся в нем сеансы принадлежат одному соединению, они не могут использоваться в нескольких соединениях".
Ну так нормально. 30 секунд пользователи подождут.
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39546393
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim RomanenkoAndy_OLAP,

спасибо за совет :) но мне нужны как раз ИЗМЕНЕННЫЕ данные из БД :) видимо, таки пойду допиливать клиентское приложение для вызова нотификации после коммита основной операции
Не нужно допиливать. Не пользуйтесь текущей conn as OleDbConnection, а создавайте явно новый conn2 as OleDbConnection внутри OleDbDataReader ExecSQL.
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39546396
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP,

А текущее предварительно закрывайте, чтобы транзакция отпустила и изменения зафиксировались. С другой стороны Вам этот ID и нужен, а для нового соединения он возможно будет другой. В общем, нужно проверять.
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39546404
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPVadim Romanenko- multipleactiveresultsets=True;

Так у Вас же режим MARS включен. Ну и в соединение идут разные сеансы из кэша.
В рамках одного сеанса ставите блокировку, в рамках другого ждете через ExecuteReader, через 30 секунд достижение лимита и создается новый сеанс без ошибки (и никакой обработки и повторной попытки) - и в рамках его команда выполняется.
"Чтобы свести к минимуму затраты и повысить производительность, SqlClient кэширует сеанс режима MARS в рамках соединения. Кэш может содержать максимум 10 сеансов режима MARS. Это значение не может быть изменено пользователем. При достижении лимита сеансов создается новый сеанс - ошибка не формируется. Сам кэш и содержащиеся в нем сеансы принадлежат одному соединению, они не могут использоваться в нескольких соединениях".
Ну так нормально. 30 секунд пользователи подождут.

Вах! Спасибо, не знал. Честно говоря, даже не знаю - кто и когда добавил этот параметр в конфиг проекта(-ов). Connection String мигрирует между проектами.

В любом случае. Всем еще раз огромное спасибо за помощь! Без коллективного разума я бы, наверное, эту проблему или не решил, или попал бы в дурку (в кругу очевидного-невероятного) или еще чего.
Проблема решена - через вызов веб-сервиса после коммита основной операции.
...
Рейтинг: 0 / 0
Разное время выполнения запроса из C# и SQL Server Management Studio
    #39546408
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...коллега подсказал мысль про multipleactiveresultsets=True:
"если копировал через проперти SqlServerExplorer in VS, то он действительно это дело туда лепит" (с)
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Разное время выполнения запроса из C# и SQL Server Management Studio
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]