web-dev-qa-db-fra.com

Y a-t-il un moyen le plus rapide de réduire les données LOB dans SQL Server

Nous avons une base de données de taille totale de 3886 Go. Dont 778 gb est libre. Donc, une valeur totale de 3108 Go de données est présente.

Sur quels 2458 gb sont "LOB Data" et 400 Go vaut "régulier".

Étant donné que la base de données est hébergée sur AWS, afin de réduire les coûts, nous essayons de rétrécir le fichier de données afin de libérer de l'espace. Fils pour accueillir des données, nous avons déjà deux lecteurs de 2 TB chacun et les deux sont presque complets et que mon manager ne souhaite pas créer un autre lecteur et mettre de nouveaux fichiers là-bas.

Mais lorsque nous avons essayé de rétrécir 2 Go à la fois, il prenait beaucoup de temps (Saw DBCC LOBCompact en cours d'exécution dans SP_WHO2) et nous voyons parfois du blocage également. Après googling, je suis tombé en dessous du blog Post de Paul S. Randal et il déclare également que les données LOB sont en train de se contracter.

https://www.sqlskills.com/blogs/paul/why-lob-data-makes-shrink-run-sloooowly-t-sql-tauxday-006/

Ma crainte est:

Y a-t-il un moyen de faire diminuer plus vite dans ce cas ou il n'y a aucun moyen du tout?
Quelles autres personnes font dans de tels scénarios lorsqu'il s'agit de nuages ​​et qu'ils veulent économiser des coûts en réduisant la taille du stockage?
[.____ Si oui, alors comment puis-je le convaincre?

2

Rétrécissement d'une base de données n'est pas rapide. En fait, il a tendance à être incroyablement lent et il n'y a rien que vous puissiez faire pour accélérer, autrement que d'avoir moins de données à rétrécir.

Comment le rétrécissement fonctionne-t-il?

Lorsque vous réduisez un fichier de données, SQL Server prend les pages de 8 km à partir de la fin du fichier et les déplace vers un lieu (aléatoire) au début du fichier. Il déplace les pages une page à la fois. D'une certaine manière, le mouvement de page par page de données est similaire à la manière dont a REORGANIZE fonctionne, sauf en inversement. Parce que les pages sont déplacées individuellement, à un nouveau lieu (aléatoire), il "désorganisera" les pages en faisant des pages précédemment contiguës non contiguës, créant la fragmentation.

Le mouvement de page par page est intrinsèquement lent, c'est pourquoi il est plus rapide de REBUILD index hautement fragmentés qu'à REORGANIZE eux.

REBUILD à la place

Normalement, je vous suggère que vous venez de simplement REBUILD dans un nouveau groupe de fichiers, puis supprimez ou rétrécissez l'ancien groupe de fichiers (vide). Le REBUILD dans le nouveau groupe de fichiers sera plus rapide que la rétrécissement, car REBUILD si plus rapide alors REORGANIZE (et "en arrière REORGANIZE" AKA THRINK). Ensuite, avec l'ancien groupe de fichiers vide, il sera rapide à éliminer ou à rétrécir quand il est vide ou presque vide, car il n'y a pas/quelques pages à enlever.

Et parce que la rétrécissement crée une fragmentation, vous aurez besoin de faire un REORGANIZE après avoir rétrécir quand même.

Lobing une courbe de courbe

Dans votre scénario, les données LOB représentent 2458 Go sur 3108 Go de données totales (80%). Lorsque vous faites un REBUILD, il déplacera les pages B-Tree, mais elle ne déplacera pas les données LOB. Donc, si vous reconstruisez dans un nouveau groupe de fichiers, votre ancien groupe de fichiers sera toujours de 60 +%.

Pour la ou les tableaux qui ont une quantité importante de données LOB, vous devrez adopter une approche différente. Vous pouvez créer une nouvelle table dans le nouveau groupe de fichiers, migrer les données sur cette nouvelle table, puis échanger des noms de table et déposer l'ancienne table. Vous pouvez penser à ce processus en tant que "reconstruction manuelle" - sauf le faire de cette façon vous permettrait de copier des données LOB sur le nouveau groupe de fichiers. Je décris cette méthode dans n message de blog sur la modification des types de données , mais la même méthode exacte fonctionnerait dans ce cas - sauf que vous modifiez des groupes de données, plutôt que de modifier les types de données.

Des groupes de fichiers rétrécissants (presque) vides sont rapides

La rétrécissement est lente car il doit déplacer des pages allouées afin de créer un espace libre contigu à la fin du fichier de données. Si le groupe de fichiers est vide, la fin du fichier peut être tronquée sans déplacer des pages et sera très rapide.

Si le groupe de fichiers vous rétrécissez est PRIMARY alors vous ne pourrez pas l'obtenir complètement vide --PRIMARY contient toutes les tables et métadonnées système. En déplaçant toutes vos tables d'utilisateur sur PRIMARY, le groupe de fichiers sera presque vide, et il y aura un très petit nombre de pages bouger. Avoir quelques pages à déménager sera également assez rapide, notamment par rapport au déplacement de 2 To de pages.

1
AMtwo