Pour maximiser les performances de la base de données, quelles commandes doivent être exécutées après le chargement de grandes quantités de données dans SQL Server 2008 via SSIS

11

J'ai écrit un package SSIS pour charger les données de test dans une base de données vide. Certaines tables sont très volumineuses (~ 700 millions de lignes). Une fois le package SSIS terminé, y a-t-il des commandes à exécuter (en tant qu'apprenti DBA!) Pour maximiser les performances de la base de données?

Par exemple, j'ai exécuté, EXEC sp_updatestatsmais il a signalé qu'aucun index ne nécessitait de mise à jour.

Y a-t-il une liste de choses à faire une fois que de grandes quantités de données ont été chargées ou SQL Server 2008 s'occupe-t-il de tout cela pour vous?

Mark Robinson
la source

Réponses:

8

Si vous chargez dans une base de données vide, vous pouvez / devez prendre des mesures pour éviter d'exiger des étapes de maintenance supplémentaires après le chargement. La fragmentation est l'ennemi, c'est ce que vous essayez d'éviter.

  • Supprimez tous les index CN avant le chargement.
  • Après le chargement, ajoutez les index NC pour chaque table en séquence, c'est-à-dire n'ajoutez pas d'index à TableA, puis à TableB, puis à nouveau à TableA. Cela n'a aucun effet sur la fragmentation, mais cela peut améliorer le temps nécessaire pour ajouter les index sur de très grands ensembles de données (réduit le taux de désabonnement du pool de mémoire tampon).
  • Si vous pouvez insérer des données dans une table dans un ordre d'index cluster, laissez l'index cluster en place. Si vous ne le pouvez pas, videz les données dans un segment et reconstruisez-les dans un post-chargement d'index clusterisé.

Plutôt que de copier-coller, je vais vous diriger vers la liste très complète de références pour l'optimisation ETL @Marian réunies dans une réponse à une question que j'ai posée sur BCP . Beaucoup d'entre eux seront également applicables à votre scénario.

Mark Storey-Smith
la source
2
Intéressant, sur le lien vers les vidéos de SQLCAT et SSIS, leur conclusion n'a jamais été de laisser tomber un index NC. Je suppose que c'est encore un autre cas de "ça dépend"
billinkc
2
@billinkc n'était-ce pas pour des charges incrémentielles, plutôt que pour la base de données vide à laquelle cette question fait référence également? Quoi qu'il en soit, les tests SQLCAT impliquent généralement une classe de matériel rarement vue dans les organisations typiques.
Mark Storey-Smith,
5

Cela dépend de la quantité de fenêtre dont vous disposez, mais généralement la mise à jour des statistiques et la reconstruction / réorganisation des index est une bonne étape à suivre. A part ça, il ne devrait pas y avoir d'autre chose à faire.

Les statistiques indiquent à l'optimiseur de requêtes combien de lignes sont susceptibles d'être affectées par une opération et cela indique à son tour à SQL quelle approche adopter pour exécuter vos requêtes. L'insertion de données peut fausser la distribution et si vous n'avez pas inséré suffisamment de lignes pour déclencher une mise à jour des statistiques en mode de mise à jour automatique, la manuelle devrait vous aider. Si vous avez la fenêtre, je dis de garder la partie mise à jour des statistiques.

Les index peuvent devenir fragmentés à mesure que des données sont ajoutées. La reconstruction ou la réorganisation permet de réduire cela, ce qui peut entraîner une amélioration des performances lors de l'accès réel à vos données.

Mike Walsh
la source
4
Dans la lignée des index, dans l'une des vidéos SSIS de SQLCAT , ils suggèrent également une règle empirique selon laquelle si la croissance de vos données est> 100% et qu'il y a un seul NCI, supprimez-les et recréez-les. S'il est supérieur à 10% et qu'il y a 2+ NCI, la suppression et la recréation donneront de meilleures performances.
billinkc
2
Juste pour clarifier le commentaire de Bill - je pense qu'il dit que la suggestion est pour les temps de drop-create, cela signifie Drop Index, Faites vos données, puis recréez votre index .. Plutôt que de laisser les index là pendant le chargement et reconstruire après. Je le pense quand même :-) et ouais, bon point, je +1 ce commentaire.
Mike Walsh