Certains documents sur la compression des données SQL Server que j'ai lus indiquent que le coût d'écriture augmente jusqu'à environ quatre fois ce qui serait normalement requis. Cela semble également impliquer qu'il s'agit du principal inconvénient de la compression des données, ce qui implique fortement que pour une base de données d'archives en lecture seule, les performances seront (à quelques exceptions près) améliorées par l'utilisation de la compression des données de pages remplies à 100%.
- Les affirmations ci-dessus sont-elles vraies?
Quelles sont les principales "variations" entre la compression des données et autrement (pour la lecture)
- "CPU + x%"?
- "IO -y%"?
- occurrence de partage de page?
- utilisation de tempdb?
- Utilisation de la RAM?
- Et pour écrire?
Aux fins de cette question, vous pouvez limiter le contexte à la compression de niveau PAGE d'une grande base de données (> 1 To) , mais des commentaires supplémentaires sont toujours les bienvenus.
Les références:
Blog du moteur de stockage SQL Server (le scénario DW montre que la compression est très avantageuse)
Compression des données: stratégie, planification de la capacité et meilleures pratiques
Une approche plus détaillée pour décider quoi compresser consiste à analyser les caractéristiques de la charge de travail pour chaque table et index. Il est basé sur les deux mesures suivantes:
U: pourcentage d'opérations de mise à jour sur une table, un index ou une partition spécifique, par rapport au nombre total d'opérations sur cet objet. Plus la valeur de U est faible (c'est-à-dire que la table, l'index ou la partition est rarement mis à jour), meilleur est le candidat pour la compression de page.
S: pourcentage d'opérations d'analyse sur une table, un index ou une partition, par rapport au nombre total d'opérations sur cet objet. Plus la valeur de S est élevée (c'est-à-dire que la table, l'index ou la partition est principalement analysée), meilleur est le candidat pour la compression de page.
Les deux éléments ci-dessus sont manifestement biaisés pour recommander la compression de page pour les bases de données de style DW (lecture intensive / exclusive, opérations de Big Data).
Réponses:
Juste mes 2 cents de mes propres expériences sur du matériel vieux de 1 à 2 ans:
Opérations en lecture seule (analyses de style DW, tris, etc.) sur des tables compressées par page (~ 80 lignes / page) J'ai trouvé le seuil de rentabilité à une réduction de la compression de ~ 3x.
C'est-à-dire que si les tables tiennent en mémoire de toute façon, la compression de page ne profite aux performances que si la taille des données a diminué de plus de 3 fois. Vous numérisez moins de pages en mémoire, mais il faut plus de temps pour numériser chaque page.
Je suppose que votre kilométrage peut varier si vos plans sont en boucle imbriquée et lourds. Entre autres, cela dépendrait également du matériel (pénalités d'accès aux nœuds NUMA étrangers, vitesse de la mémoire, etc.).
Ce qui précède n'est qu'une règle de base approximative que je suis, basée sur mes propres tests en utilisant mes propres requêtes sur mon propre matériel (Dell Poweredge 910 et plus récent). Ce n'est pas du gospel hein!
Edit: Hier, l'excellente présentation SQLBits XI de Thomas Kejser a été mise à disposition sous forme de vidéo. Tout à fait pertinent pour cette discussion, il montre le visage «laid» du coût du processeur pour la compression des pages - les mises à jour ont été ralenties de 4x, les verrous maintenus un peu plus longtemps.
Cependant , Thomas utilise le stockage FusionIO et il a choisi une table qui n'est «juste» éligible pour la compression de page. Si le stockage était sur un SAN typique et que les données utilisées étaient compressées 3x-4x, l'image aurait pu être moins dramatique.
la source
Je peux ajouter quelques mots de mon environnement Data Warehouse.
L'implémentation de la compression (PAGE dans mon cas) sur une table de test avec 30 millions de lignes (18 Go) réduit la taille de la table de 18 Go à 3 Go! (efficacité de stockage à coup sûr) mais augmentez le temps de chargement (écriture) de 22 à 36 minutes.
Donc, pour lire ou lire et placer les données en mémoire, cela pourrait être une bonne solution, mais pour le chargement quotidien des données, cela pourrait entraîner une dégradation des performances.
la source