Настройка индекса для задач служб SSIS - PullRequest
0 голосов
/ 20 августа 2009

Я загружаю таблицы на свой склад, используя SSIS. Поскольку моя служба SSIS работает медленно, создание индексов для таблиц показалось отличной идеей.

На этом складе нет первичных ключей (и, следовательно, внешних ключей), индексов (кластеризованных или иных), ограничений. Другими словами, это 100% бесплатно.

Мы собираемся разместить индексы на основе использования - путем анализа новых запросов и текущей производительности запросов.

Таким образом, вместо того, чтобы делать это по-старому и неуклюже, когда мы действительно читаем операторы SQL и планы выполнения, я решил использовать блестящий новый помощник по настройке компонента Database Engine.

Я отключил SQL-вход в свой пакет служб SSIS, запустил трассировку «Tuning», сохранил ее в таблицу и проанализировал вывод в Tuning Advisor. Большинство поисков выполняются как:

exec sp_executesql N'SELECT [Active], [CompanyID], [CompanyName], [CompanyShortName], [CompanyTypeID], [HierarchyNodeID] FROM [dbo].[Company] WHERE ([CompanyID]=@P1) AND ([StartDateTime] IS NOT NULL AND [EndDateTime] IS NULL)',N'@P1 int',1

exec sp_executesql N'SELECT [Active], [CompanyID], [CompanyName], [CompanyShortName], [CompanyTypeID], [HierarchyNodeID] FROM [dbo].[Company] WHERE ([CompanyID]=@P1) AND ([StartDateTime] IS NOT NULL AND [EndDateTime] IS NULL)',N'@P1 int',2

exec sp_executesql N'SELECT [Active], [CompanyID], [CompanyName], [CompanyShortName], [CompanyTypeID], [HierarchyNodeID] FROM [dbo].[Company] WHERE ([CompanyID]=@P1) AND ([StartDateTime] IS NOT NULL AND [EndDateTime] IS NULL)',N'@P1 int',3

exec sp_executesql N'SELECT [Active], [CompanyID], [CompanyName], [CompanyShortName], [CompanyTypeID], [HierarchyNodeID] FROM [dbo].[Company] WHERE ([CompanyID]=@P1) AND ([StartDateTime] IS NOT NULL AND [EndDateTime] IS NULL)',N'@P1 int',4

и при анализе эти утверждения имеют причину "Событие не ссылается ни на какие таблицы". А? Разве он не видит ОТ dbo.Company ?? !! Что здесь происходит?

Итак, у меня есть несколько вопросов:

  1. Как я могу получить фактический оператор, выполняемый в моей трассировке, а не то, что было отправлено в пакете?
  2. Существуют ли рекомендации по настройке производительности, связанные с пакетами служб SSIS, работающих под управлением SQL Server 2008?

1 Ответ

1 голос
/ 20 августа 2009

Склады всегда имеют индексы, по крайней мере, в моей вселенной :-). Загрузка ETL обычно проста для индексации, потому что запросы действительно просты. (Вы просто индексируете столбцы бизнес-ключей, чтобы ускорить выборку ключей хранилища при поиске.)

например. «ГДЕ ([CompanyID] = @ P1) И ([StartDateTime] НЕ НУЛЬ, И [EndDateTime] НУЛЬ))» похоже, что CompanyID является ключом поиска и нуждается в индексе.

То, что вы видите в своем примере - это параметризованный SQL (что хорошо). Рассматривали ли вы использовать отсутствующие индексные DMV вместо мастера настройки? Мне лично этот метод нравится, так как он простой и прямой. Только не принимайте сразу все предложенные индексы; необходимо суждение, чтобы увидеть, какие из них действительно целесообразны для реализации.

Кроме того, если ваша загрузка медленная, это может быть связано с другими вещами. Внешние ключи в игре? Являетесь ли вы массовой загрузки (это сложно, потому что вы можете запросить сервер для массовых вставок, и он может игнорировать ваш запрос на основе сведений о кластеризованных и некластеризованных индексов в целевых таблицах)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...