2009-08-20 7 views
0

Je charge des tables dans mon entrepôt à l'aide de SSIS. Comme mon SSIS est lent, il m'a semblé une bonne idée de créer des index sur les tables.Réglage de l'index pour les tâches SSIS

Il n'y a pas de clés primaires (et donc de clés étrangères), d'index (groupés ou non), de contraintes, dans cet entrepôt. En d'autres termes, il est 100% sans efficacité.

Nous allons mettre des index basés sur l'utilisation - en analysant les nouvelles requêtes et les performances de la requête en cours. Donc, au lieu de le faire à la manière usée de la lecture et de la lecture des instructions SQL et des plans d'exécution, je pensais que j'utiliserais le brillant nouveau moteur d'optimisation du moteur de base de données.

J'ai désactivé la journalisation SQL dans mon package SSIS et j'ai exécuté une trace de «réglage», l'ai enregistrée dans une table et j'ai analysé la sortie dans l'assistant de réglage. La plupart des recherches sont effectuées comme:

exec sp_executesql N'SELECT [Active], [CompanyID], [CompanyName], [CompanyShortName], [CompanyTypeID], [HierarchyNodeID] FROM [dbo].[Company] WHERE ([CompanyID][email protected]) 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][email protected]) 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][email protected]) 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][email protected]) AND ([StartDateTime] IS NOT NULL AND [EndDateTime] IS NULL)',N'@P1 int',4

et l'analyse, ces déclarations ont la raison "de l'événement ne fait pas référence à des tables". Huh? Ne voit-il pas le FROM dbo.Company ?? !! Qu'est-ce qui se passe ici?

Donc, j'ai plusieurs questions:

  1. Comment puis-je obtenir pour capturer la déclaration réelle d'exécution dans ma trace, pas ce qui a été présenté dans un lot?
  2. Existe-t-il des meilleures pratiques à suivre pour optimiser les performances des packages SSIS exécutés sur SQL Server 2008?

Répondre

1

Les entrepôts ont toujours des index, au moins dans mon univers :-). La charge ETL est généralement simple à indexer car les requêtes sont vraiment basiques. (Il suffit d'indexer les colonnes de clé métier pour accélérer l'extraction des clés d'entrepôt lors d'une recherche.)

E.G. "WHERE ([CompanyID] = @ P1) AND ([StartDateTime] n'est pas NULL et [EndDateTime] IS NULL)" ressemble à peut-être que CompanyID est une clé de recherche et a besoin d'un index.

Ce que vous voyez dans votre exemple est paramétré SQL (ce qui est bien). Avez-vous envisagé d'utiliser les DMV d'index manquants à la place de l'assistant d'optimisation? Personnellement, j'aime cette méthode, car elle est simple et directe. Ne prenez tout de suite pas tous les index suggérés; le jugement est nécessaire pour voir lesquels sont vraiment sages à mettre en œuvre. En outre, si votre charge est lente, cela peut être dû à d'autres facteurs. Les clés étrangères sont-elles en jeu? Êtes-vous en vrac de chargement (c'est difficile, car vous pouvez demander au serveur pour les insertions en vrac, et il peut ignorer votre demande basée sur les détails des index clusterisés et non-cluster dans les tables cibles)

+0

question édité sur la base de votre entrée . Je n'utilise pas le DMV. Je n'ai pas de FK ou PK - juste des indices dans l'entrepôt. Aucune contrainte de vérification - uniquement les consignes par défaut. Avez-vous des ressources pour DMV que je peux apprendre? –

+0

http://blogs.msdn.com/bartd/archive/2007/07/19/are-you-using-sql-s-missing-index-dmvs.aspx – onupdatecascade

Questions connexes