web-dev-qa-db-fra.com

Ai-je besoin de faire des runstats après une reorg dans DB2?

La Documentation Reorg dit:

[~ # ~] Construire [~ # ~ #]

Builds indexes. Updates index statistics. 

Mais j'ai toujours entendu des reorg/runstats comme si elles devaient être jumelées. Quelqu'un peut-il vérifier que "Mises à jour des statistiques de l'index" atteint la même chose que les runstats?

4
Lucas

REORG est utilisé pour aider DB2 Pointe à des données précises (c.-à-d. Les index doivent prendre conscience des données fraîches et n'incluent plus les données supprimées), ainsi que "Collapse" espace de page vide créée par suppression des données et/ou index. Il peut également aider à déplacer les données qui se rapprochent les unes des autres pour un accès plus efficace (en particulier le vrai dans le cas d'un indice de cluster).

RUNSTATS est utilisé pour aider à recueillir des statistiques mises à jour sur le volume et/ou la distribution des données dans les tableaux et les index. Ces informations sont stockées dans les tables système et sont utilisées par de nombreuses choses, y compris l'optimiseur pour déterminer le chemin optimal pour interroger les données. Ceci est particulièrement vrai car les données grandissent. Les données peuvent distribuer de manière à ce que l'optimiseur incluait désormais un indice qu'il n'avait pas auparavant dans son chemin d'accès (ni vice-versa et choisit de ne pas utiliser d'index). RUNSTATS peut également affecter comment un REORG fonctionne - au moins dans les versions plus anciennes de DB2.

Basé sur ce que j'ai lu depuis DB2 DBA, vous voulez généralement courir

  1. RUNSTATS
  2. REORG
  3. RUNSTATS

Le premier RUNSTATS aide le REORG pour fonctionner de manière appropriée et efficace. Le RUNSTATS Après plus de vous assurer que les statistiques sont maintenant précises, compte tenu de tout le mouvement de données autour des pages. Selon l'endroit où vous avez lu, vous pouvez voir la mention de DBA Le dernier RUNSTATS n'est plus nécessaire avec de nouvelles versions de DB2. Comme nous n'avons pas vu des réponses définitives à ce sujet et, depuis la plupart des DB2 DBA, j'ai entendu parler de la commande ci-dessus, notre société a choisi d'utiliser cet ordre (pour le compte rendu, nous sommes sur DB2 LUW 9.7 FP4 et nous prévoyons de migrer vers V 10.1 Un jour l'année prochaine).

De plus, juste pour des raisons d'exhaustivité, généralement lorsque vous mettez à jour les statistiques et que vous affectez l'optimiseur, vous souhaitez que toutes les applications appellent à DB2 pour s'assurer qu'ils tirent parti de ces nouvelles optimisations. Ainsi, un REBIND de packages veillera à ce que les packages statiques connaissent les statistiques mises à jour et les chemins de requête optimisés et un FLUSH PACKAGE CACHE DYNAMIC Nettoie les requêtes dynamiques des choses comme Hibernate, de sorte que les requêtes seront rebondies avec les chemins de requête mise à jour. (-[~ # ~] note [~ # ~]]: sur z/os je vois que vous avez BIND et REBIND options. Peut-être que le FLUSH PACKAGE CACHE DYNAMIC est sous celles-ci ou a un nom différent sur z.)

Donc, finalement je ferais ce qui suit:

  1. RUNSTATS
  2. REORG
  3. RUNSTATS
  4. REBIND paquets
  5. FLUSH PACKAGE CACHE DYNAMIC (sur LUW) ou quel que soit l'équivalent sur z/os.
4
Chris Aldrich

Si vous exécutez DB2 sur IBM I, tout cela serait manipulé pour vous. Les index sont maintenus en temps réel. Les statistiques sont mises à jour automatiquement. Les plans sont optimisés de manière dynamique.

1
WarrenT