web-dev-qa-db-fra.com

Dans DB2 LUW, quand devrais-je utiliser un espace de tables 4K, 8K ou 16k plutôt que de simplement créer un espace de table de 32k et être fait avec elle?

Nous utilisons DB2 LUW 10.5 & 11.1 sur les systèmes Windows & Linux, au cas où il est pertinent pour répondre.

Question: Y a-t-il un moment où il serait correct d'utiliser 4K plutôt que 32k? Si oui, pourquoi? (Cela fonctionne-t-il mieux quand il peut être utilisé?) Ou est-ce juste un appendice hérité de quelques temps préhistoriques lorsque 4K n'étaient que la taille de la page?

Contexte: J'ai toujours simplement créé des espaces de 4k, 8k, 16k, 16k, et 32k et des tampons de buffler associés lorsque je crée DB2 DB's.

Mon manager me défie à ce sujet. (Bien pour lui - je devrais le savoir!) Il pense que nous devrions simplement créer un espace de table de 32k et être fait avec elle.

Je ne suis pas capable de trouver quoi que ce soit qui me dit, par exemple, que lorsque la taille de la ligne le permet, nous devrions utiliser 4K plutôt que 32k car xyz. Il me dit que je PEUT Faites cela, mais pas que/quand je devrais.

3
Joe Hayes

C'est une bonne question, mais la réponse est digne d'un chapitre entier dans un livre qui n'existe pas malheureusement. Ember Crooks 'Article que vous liez est un bon aperçu. J'ajouterai ici quelques facteurs aléatoires que l'on pourrait vouloir prendre en considération lorsque vous décidez de la tailles de la page de table.

TL; DR.

Choisissez une taille d'une page qui convient le mieux à vos données, en tenant compte des points ci-dessous. Si votre test de performance montre des problèmes pouvant être résolus en déplaçant certaines tables à un espace de table avec une taille de page différente, faites-le judicieusement.

facteurs de décision.

Comme vous l'avez mentionné, la largeur de la ligne de table détermine la taille de page minimale requise pour les accueillir. Cela ne suit pas cependant que vous voulez toujours "le plus petit qui fonctionnera pour vos données".

Premièrement, les arguments habituels de "éviter les E/S inutiles" et "manipuler moins de données à la fois" avec des tailles de pages plus petites peuvent être un peu égarées. Si votre conteneur à l'espace de table est situé sur un système de fichiers ZFS sur un volume LVM sur un disque virtuel VMWare sur un volume CEPH sur un nombre inconnu de périphériques RAID6 pouvant utiliser des disques de RAID6 inconnus pouvant utiliser des disques de filature ou des SSDS, savez-vous vraiment combien d'E/O votre 4K (ou 32k) lire la demande provoquera?

Les tailles de page plus petites aident certainement si votre charge de travail crée des hotspots d'espace à table (la plupart des demandes d'E/S se rendent à un nombre limité de pages) qui ne peuvent pas être résolus par d'autres moyens. Dans de telles situations, les petites pages peuvent améliorer l'efficacité du bufferpool et réduire les attentes de la page de page entre les agents en concurrence pour l'accès à la même page. D'autre part, la taille de la page plus petite signifie des chaînes LRU plus longues et donc éventuellement un nettoyage de page moins efficace.

Il existe également des arguments pour les plus grandes tailles de page.

Présence de données LOB.

Normalement, les données LOB sont stockées des rangées de table extérieures, dans des structures de données distinctes qui présentent plusieurs inconvénients de la performance:

  • Vous ne pouvez y accéder que via des lectures directes synchrones et écrites qui contournent les bufferpools de la base de données; La seule mise en cache disponible est celle du système de fichiers sous-jacents, s'il est activé pour l'espace de table; Les lectures directes ne profitent pas non plus de la préfettration de la page.
  • Les lobes ne sont pas chargés dans les bufferpools, l'accès répété aux mêmes données entraînera des demandes de lecture directe répétées.
  • Ils ne sont pas compressés, même si la compression de la table est activée.

Si la plupart de vos valeurs LOB sont relativement petites et pouvaient entrer dans la ligne elle-même donnée une taille de page plus grande (comme c'est souvent le cas), vous pouvez les stocker en ligne, atténuer ces inconvénients.

Compression.

Plus grandes tailles améliorent l'efficacité de la compression adaptative (niveau de la page). En règle générale, la compression des données l'emporte sur ses coûts de la CPU.

N'oubliez pas les espaces de température.

Même si chacune de vos tables individuellement peut être placée dans un espace de table 4K, un espace de table temporaire système avec une taille de page plus grande (et un bufferpool de tampon correspondant) peut être nécessaire. Si une requête joint des rangées sous-4k de deux tables ou plus, la largeur du jeu de résultats peut dépasser la limite de 4K et, si elle doit se déverser, une épisette de taille appropriée sera nécessaire.

Il convient de mentionner que la création de tables espaces de chaque taille possible "juste au cas où" n'est pas une bonne idée, car, comme vous l'avez dit, chacun nécessite un bufferpool dédié et plusieurs bufferpools, à moins que nécessaire, ne s'aggrave pas toujours (moins efficace) que un seul gros.

2
mustaccio

J'ai finalement appuyé simplement sur la bonne recherche Google et j'ai trouvé une note sur un post de Ember Crooks ( https://datageek.blog/2013/07/09/db2-luw -Qu'est-ce que-is-a-page / ) Les pages plus petites sont préférées pour OLTP ou des sites de commerce électronique afin que vous gérez des quantités de données plus petites. Je suppose que c'est la réponse , alors. Utilisez le plus petit qui fonctionnera pour vos données, reconnaissant que vous souhaitez obtenir plus d'une ligne sur une page.

Je vais laisser cela avec la réponse plutôt que de simplement le supprimer au cas où quelqu'un d'autre vient la chercher.

2
Joe Hayes