Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
Max_11111
Member

Откуда:
Сообщений: 198
Имею: SQL Server 2017 (build 14.0.3162.1). На одном сервере развёрнуты компоненты SQL (к ним идут все коннекторы) и SSIS (на сервере запускаю проекты SSIS)
Периодически при выполнение SSIS проект (только одного, для других всё работает) падает с ошибкой в одном из пакетов:
Ошибка: Код ошибки служб SSIS: DTS_E_OLEDBERROR. Возникла ошибка OLE DB. Код ошибки: 0x80004005.
Доступна запись OLE DB. Источник: "Microsoft SQL Server Native Client 11.0" Результат: 0x80040E14 Описание: "Не удается завершить отложенную подготовку.".
Доступна запись OLE DB. Источник: "Microsoft SQL Server Native Client 11.0" Результат: 0x80004005 Описание: "Ошибка связи".
Доступна запись OLE DB. Источник: "Microsoft SQL Server Native Client 11.0" Результат: 0x80004005 Описание: "Поставщик TCP: Удалённых хост принудительно разорвал существующее подключение.".
Ошибка всегда возникает только в компоненте "Уточняющий запрос", использующей подключение OLE DB (В других местах используется ADO.NET и работает без нареканий). Поставщик подключения: "Собственный поставщик OLE DB\SQL Server Native Client 11.0".
Ошибка возникает только на сервере SSIS, примерно в 5% выполнений. Затрагивает только 1 пакет, всегда произвольный. Т.к. SSIS и SQL работают на одном сервере, то ошибки сети исключены.
Ошибка может возникать как на этапе выполнения, так и на этапе валидации пакета.

Ошибку гуглил, везде пишут про нехватку памяти (обычно в 32-х разрядной среде) при обращении к объёмным данным. Но у меня 64-разрядная среда выполнения, данных уточняющий запрос возвращает совсем немного. Тем более, пишут что у народа ошибка воспроизводится, а у меня нет - возникает в произвольный момент. Памяти на сервере много, всегда есть запас для SSIS.

Ошибка возникла после перехода но новый физический сервер. SQL обновили то-ли с 2016 на 2017, то ли с ранней версии 2017 на более поздний CU. До этого ошибки не было. Заметили её не сразу, поэтому обратно откатиться уже не успели.

Есть идеи, что может быть причиной ошибки?
22 авг 19, 06:28    [21954983]     Ответить | Цитировать Сообщить модератору
 Re: SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
tunknown
Member

Откуда:
Сообщений: 691
  • SQL стоит на реальном или виртуальном сервере?
  • Антивирус есть?
  • Зашедулены ли в виндовсе тяжёлые задачи на сервере?
  • Зашедулены ли в SQL Agent тяжёлые джобы?

    Предлагаю смотреть пересечения всяческих логов на этот момент времени, возможно- станет ясно что происходит.
  • 22 авг 19, 09:07    [21955048]     Ответить | Цитировать Сообщить модератору
     Re: SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
    Max_11111
    Member

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

    сервер реальный
    антивирус есть, но, по словам админов, порты он не блокирует, и ничему не мешает
    виндовым планировщиков на SQL сервере не пользуюсь
    SQL агент сам запускает только лёгкие job-ы. Если Вы намекаете на то что параллельные job-ы тормозят SSIS, то это не так. У нас есть параллельные задачи, даже в самом ssis проекте пакеты отрабатывают параллельно, но:
    1. предыдущий сервер был в несколько раз слабее по характеристикам, пакеты так-же параллельно отрабатывали, но ошибки не было.
    2. по логам ssis вижу что ошибка возникает зачастую сразу же после запуска запроса. Т.е., например, идёт событие OnPreValidate, следом в ту-же секунду уже получаю OnError.
    22 авг 19, 09:54    [21955102]     Ответить | Цитировать Сообщить модератору
     Re: SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
    Konst_One
    Member

    Откуда:
    Сообщений: 11479
    https://docs.microsoft.com/ru-ru/sql/connect/oledb/oledb-driver-for-sql-server?view=sql-server-2017
    22 авг 19, 10:13    [21955128]     Ответить | Цитировать Сообщить модератору
     Re: SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
    Konst_One
    Member

    Откуда:
    Сообщений: 11479
    ставьте этот драйвер вместо Native Client
    https://www.microsoft.com/en-us/download/details.aspx?id=56730
    22 авг 19, 10:15    [21955131]     Ответить | Цитировать Сообщить модератору
     Re: SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
    tunknown
    Member

    Откуда:
    Сообщений: 691
    Max_11111
    2. по логам ssis вижу что ошибка возникает зачастую сразу же после запуска запроса.
    Если смена драйвера не поможет, то предлагаю смотреть логи не только SSIS, но и SQL, и агента, и события виндовса, например, логины, если SQL сервер в домене.

    Max_11111
    Ошибка возникла после перехода но новый физический сервер. SQL обновили то-ли с 2016 на 2017, то ли с ранней версии 2017 на более поздний CU.
    Может быть, настройки соединения по-умолчанию изменились, например таймауты? Можно настроить детальный профилер(важно, чтобы не тормозил). Если соединение SSIS-SQL происходит и рвётся, то в трассе, возможно, получится увидеть что-то полезное.

    Если пакет несложный, то предлагаю полностью пересоздать его заново. SSIS очень плохо обращается с xml содержимым пакета при пересохранении не то что разными, но и одной версией. Но гарантировать успех не получится.
    22 авг 19, 12:13    [21955290]     Ответить | Цитировать Сообщить модератору
     Re: SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
    Max_11111
    Member

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

    Спасибо, поставил. Если всё ок, то через неделю отпишусь. Либо раньше, если не поможет
    23 авг 19, 06:46    [21956147]     Ответить | Цитировать Сообщить модератору
     Re: SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
    Max_11111
    Member

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

    Не помогло. Текст ошибки другой, но уже попадался ранее, и привёл к такому-же результату:

    Код ошибки служб SSIS: DTS_E_OLEDBERROR. Возникла ошибка OLE DB. Код ошибки: 0x80004005.
    Доступна запись OLE DB. Источник: "Microsoft OLE DB Driver for SQL Server" Результат: 0x80004005 Описание: "Ошибка связи".
    Доступна запись OLE DB. Источник: "Microsoft OLE DB Driver for SQL Server" Результат: 0x80004005 Описание: "Поставщик общей памяти: С обоих концов канала отсутствуют процессы.
    Буду мониторить логи
    26 авг 19, 02:18    [21957406]     Ответить | Цитировать Сообщить модератору
     Re: SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
    Massa52
    Member

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

    Памяти может быть и много, но она может быть фрагментирована. У нас из-за этого стало валится приложение с сообщением Out Of Memory, хотя памяти завались. Интересно, если приложение 32 битное и ей выделяется память за пределами ее адресного пространства?
    26 авг 19, 06:01    [21957430]     Ответить | Цитировать Сообщить модератору
     Re: SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
    Max_11111
    Member

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

    В общем посмотрел по логам, нашёл причину:

    2019-08-28 15:19:00.38 spid151 Process ID 153 was killed by hostname SERVERNAME, host process ID 6252.
    2019-08-28 15:19:00.38 spid153 Ошибка: 10982, серьезность: 16, состояние: 1.
    2019-08-28 15:19:00.38 spid153 Failed to run resource governor classifier user-defined function 'dbo.RGGroup'. Last error 3602, state 135. See previous errors in SQL Server error log from session ID 153 for details. Classifier elapsed time: 0 ms.
    Но дальше снова в тупике. У нас запущен resource governor, учётка, от которой выполнялись запросы попадает в пул default, настройки которого заданы по-умолчанию. Но, судя по ошибке, до RG дело не доходит по причине 10982 ошибки.
    Погуглив, наткнулся только на это обсуждение: https://www.sqlservercentral.com/forums/topic/error-17189-severity-16-state-1. Но тут опять я в тупике:
    1. версия SQL Server у меня последняя (и даже билд почти последний), а обсуждалась 2008 версия
    2. проблемы с памятью - но у меня довольно много памяти: 700 Гб отдано SQL Server, и ещё 60 свободны в системе под запуск SSIS
    3. количество пользовательских подключений - у меня стоит значение по-умолчанию = 0, т.е. без ограничений

    Сейчас остановлю RG, чтобы убедиться что без него ошибка не повторяется, но мне всё равно его нужно будет включить. Так что проблема остаётся пока не решённой
    28 авг 19, 10:40    [21958839]     Ответить | Цитировать Сообщить модератору
     Re: SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
    Владислав Колосов
    Member

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

    ну так это вы что-то с настройками намутили.
    28 авг 19, 11:22    [21958893]     Ответить | Цитировать Сообщить модератору
     Re: SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
    Konst_One
    Member

    Откуда:
    Сообщений: 11479
    https://stackoverflow.com/questions/31674302/resource-governor-is-not-running-correctly
    28 авг 19, 11:23    [21958895]     Ответить | Цитировать Сообщить модератору
     Re: SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
    Max_11111
    Member

    Откуда:
    Сообщений: 198
    Вот мои скрипты
    Функция:
    CREATE FUNCTION [dbo].[RGGroup]()
    RETURNS SYSNAME
    WITH SCHEMABINDING
    AS
    BEGIN
    DECLARE @WorkloadGroup AS SYSNAME
    SELECT TOP 1
           @WorkloadGroup = 
    	  CASE
                                WHEN IS_SRVROLEMEMBER ('rgAdminUsers') = 1
                                    THEN 'PoolAdminUsersGroup'
                                WHEN IS_SRVROLEMEMBER ('rgDWHUsers') = 1
                                    THEN 'PoolDWHUsersGroup'
                                WHEN IS_SRVROLEMEMBER ('rgDNSUsers') = 1
                                    THEN 'PoolDNSUsersGroup'
                                ELSE 'default'
                            END;
    
    RETURN @WorkloadGroup
    END
    

    Пулы:
    CREATE RESOURCE POOL PoolDNSUsers 
    WITH (  
         MIN_CPU_PERCENT = 0,  
         MAX_CPU_PERCENT = 20,  
         CAP_CPU_PERCENT = 20,       
         MIN_MEMORY_PERCENT = 0,  
         MAX_MEMORY_PERCENT = 20  
          );  
    
    CREATE RESOURCE POOL PoolDWHUsers 
    WITH (  
         MIN_CPU_PERCENT = 0,  
         MAX_CPU_PERCENT = 90,  
       --  CAP_CPU_PERCENT = 20,       
         MIN_MEMORY_PERCENT = 0,  
         MAX_MEMORY_PERCENT = 90  
          );  
    	 
    CREATE RESOURCE POOL PoolAdminUsers 
    WITH (  
         MIN_CPU_PERCENT = 80,  
         MAX_CPU_PERCENT = 100,  
       --  CAP_CPU_PERCENT = 20,       
         MIN_MEMORY_PERCENT = 0,  
         MAX_MEMORY_PERCENT = 100  
          );  
    
    USE [master]
    GO
    
    /******  ******/
    CREATE WORKLOAD GROUP [PoolDNSUsersGroup] WITH(group_max_requests=0, 
    		importance=Medium, 
    		request_max_cpu_time_sec=0, 
    		request_max_memory_grant_percent=25, 
    		request_memory_grant_timeout_sec=0, 
    		max_dop=0) USING [PoolDNSUsers], EXTERNAL [default]
    GO
    
    /******  ******/
    CREATE WORKLOAD GROUP [PoolDWHUsersGroup] WITH(group_max_requests=0, 
    		importance=Medium, 
    		request_max_cpu_time_sec=0, 
    		request_max_memory_grant_percent=40, 
    		request_memory_grant_timeout_sec=0, 
    		max_dop=0) USING [PoolDWHUsers], EXTERNAL [default]
    GO
    /******  ******/
    CREATE WORKLOAD GROUP [PoolAdminUsersGroup] WITH(group_max_requests=0, 
    		importance=Medium, 
    		request_max_cpu_time_sec=0, 
    		request_max_memory_grant_percent=100, 
    		request_memory_grant_timeout_sec=0, 
    		max_dop=0) USING [PoolAdminUsers], EXTERNAL [default]
    GO
    

    Итоговый:
    USE [master]
    GO
    
    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = [dbo].[RGGroup]);
    GO
    
    ALTER RESOURCE GOVERNOR WITH (MAX_OUTSTANDING_IO_PER_VOLUME = DEFAULT);
    GO
    
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    GO
    


    Пользователи по пулам распределяются, это вижу из sys.dm_resource_governor_resource_pools.
    Что не так с настройками?
    30 авг 19, 02:58    [21960210]     Ответить | Цитировать Сообщить модератору
     Re: SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
    Владислав Колосов
    Member

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

    значит выполнение пакета попадает в пул с 20% памяти.
    30 авг 19, 11:51    [21960412]     Ответить | Цитировать Сообщить модератору
     Re: SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
    Max_11111
    Member

    Откуда:
    Сообщений: 198
    Владислав Колосов,

    попадал в дефолтный с 25%. сменил на админский пул, без ограничений - не помогло.
    3 сен 19, 03:39    [21962196]     Ответить | Цитировать Сообщить модератору
     Re: SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
    Max_11111
    Member

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

    Нашёл причину. В агенте постоянно запускается запрос, который находит и отрубает слишком долгие сессии пользователей. Но в нём стоит фильтр на учётку, под которой запущены все обработки SSIS. Сессии получаю из [sys].[dm_exec_requests] и [sys].[dm_exec_sessions].
    Но пока не могу понять, почему фильтр не срабатывает. Могу предположить, что запросом отбираю "долгую" сессию от пользовательской учётки, но до того как произойдёт "KILL session", она сама завершается, и под этим же номером начинается другая сессия, которую "случайно" завершаю.
    30 сен 19, 03:50    [21982285]     Ответить | Цитировать Сообщить модератору
     Re: SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
    Max_11111
    Member

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

    Нашёл причину.
    В таблице [sys].[dm_exec_sessions], откуда я получаю "долгие" бездействующие сессии для их принудительного закрытия, встречаются записи с login_time = '01.01.1900'. Я предполагаю, что SQL Server сначала создаёт сессию, а только затем проставляет время её создания, причём не в одной транзакции. Вот как-раз в этот промежуток и попадал мой запрос, выдавая сессии, висящие без активности с прошлого века :)
    Фильтр = по такой дате решил проблему
    10 окт 19, 09:26    [21991037]     Ответить | Цитировать Сообщить модератору
     Re: SSIS непонятная ошибка связи с MS SQL через OLE DB коннектор  [new]
    invm
    Member

    Откуда: Москва
    Сообщений: 8797
    Max_11111,

    Бездействующие сессии нужно выявлять по status = 'sleeping' и last_request_end_time
    10 окт 19, 09:53    [21991052]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить