|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre actif
![]() Inscription : novembre 2004 Messages : 311 ![]() |
Bonjour,
J'ai une base qui est composé de 2 group files : PRIMARY et INDEX. Chaque group file est composé d'un datafile. J'ai ajouté 1 datafile supplémentaire à chaque groupfile et relancer un job de recréation des indexs en pensant que mes data allaient être dispatchées entre mes différents datafiles. Mon 1er datafile du groupe PRIMARY fait 500Go environ. Après le job de recréation d'index mon second datafile ne fait que 2Go. Comment faire pour que le dispatch de mes datas se fassent de manière sensiblement identique entre mes différents datafiles? Merci pour votre aide. |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Bonjour,
Je ne suis pas sûr qu'en reconstruisant vos index vous parveniez à répartir les données dans les fichiers de données qui composent votre groupe de fichiers. La règle c'est qu'il faut que les fichiers fassent très exactement la même taille pour que les données soient réparties de façon à peu près équitable en terme de volume dans les fichiers qui composent le groupe de fichiers. Il vous faut donc tailler le fichier à la même taille que l'actuel. @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#3 |
|
Membre actif
![]() Inscription : novembre 2004 Messages : 311 ![]() |
Y a t il un moyen alors de découper ma base de 500Go en 3 datafiles de 200Go chacun pour mon groupe PRIMARY et en faisant la même chose pour mon groupe INDEX ?
Merci. |
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Je ne pense pas que cela soit possible pour le groupe de fichiers PRIMARY, s'il ne contient aucun index.
En effet, à la reconstruction d'un index cluster, qui vous aurait permis de déplacer les tables d'un groupe de fichiers à l'autre, on ne peut pas spécifier de fichier : on spécifie seulement le nom du groupe de fichiers, et le moteur de stockage fait le reste ... En revanche pour le groupe de fichiers INDEX, je pense effectivement qu'ajouter des fichiers de taille identique sera la bonne, mais il vous faudra reconstruire les index pour que cela se fasse. Je suppose que tous vos fichiers sont sur des axes physiques différents. Pour connaître la taille occupée par les données dans chacun de vos fichiers, vous pouvez utiliser cette requête. @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#5 |
|
Membre actif
![]() Inscription : novembre 2004 Messages : 311 ![]() |
Les index cluster se trouvent dans le groupe Primary.
Dans ce groupe j'ai aujourd'hui un datafile de 500Go. |
|
|
00
|
|
|
#6 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 954 ![]() |
Le plus simple est de créer un autre base à côté et de migrer les données dedans.
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#7 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Oui mais c'est un peu brutal
Reconstruire les index cluster dans le filegroup INDEX après lui avoir ajouté un second fichier devrait aider @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#8 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Brutal pas tant que cela
En fait il faudra jouer au jeu des vases communiquants pour que les données soient réparties correctement. Le fait de reconstruire l'index dans le même groupe de fichiers en ajoutant un fichier ne changera pas grand chose. Les données sont déjà dans le vase et elles y resteront. Pour pouvoir bénéficier de l'algorithme de répartition de SQL Server il faudra à chaque fois créer un nouveau groupe de fichiers avec les fichiers désirés ayant la même taille, la même valeur d'expansion et reconstruire les index dans ce nouveau groupe. Ceci est valable pour les données des tables + index non clusters. Solution un peu moins brutale que celle proposée par SQLPro mais finalement l'idée reste bien la même. ++ |
|
00
|
|
|
#9 | |
![]() ![]() Administrateur de base de données Inscription : août 2007 Messages : 1 158 ![]() |
Bonjour,
Vous pouvez essayer le DBCC shrinkfile (filename, EMPTYFILE). depuis BOL: Citation:
Si vous avez de nouveaux fichiers proprement tailles, vos datas devraient bouger toutes seules ou il faut et vous permettre d'enlever le fichier en question. Preferez un test avant de lancer ca en prod, j'ai jamais essaye encore... |
|
|
|
00
|
|
|
#10 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Cela ne fonctionnera pas pour le groupe PRIMARY car toutes les données du premier fichier ne pourront pas être déplacés notamment les données concernant les tables systèmes.
De plus vider un fichier via cette méthode ne permet pas de répartir de façon équitable les données dans les fichiers (il faut le savoir ++ |
|
00
|
|
|
#11 |
![]() ![]() Administrateur de base de données Inscription : août 2007 Messages : 1 158 ![]() |
Ca pourrait permettre de reduire au maximum le fichier, ensuite de le verouiller (verouiller l'autogrow) et avoir la repartition des donnees plus ou moins egale dans les autres fichiers.
Ou bien alors le shrinker a 200MB comme les autres, ce qui devrait engendrer un mouvement de donnees aussi. A tester |
|
|
00
|
|
|
#12 | |
![]() ![]() Administrateur de base de données Inscription : août 2007 Messages : 1 158 ![]() |
Citation:
Quelle est la methode de repartition des donnees dans les fichiers d'un meme filegroup lorsque DBCC shrinkfile est utilise ? Est ce qu'il y a une doc quelque part ? Ca m'interesserait de lire ca. |
|
|
|
00
|
|
|
#13 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
En fait on ne contrôle pas dans ce cas le remplissage des fichiers.
Pour avoir déjà tester, il n'est pas forcé d'avoir un 1er fichier rempli puis le second avec le reste des données ... Mais personnellement je trouve beaucoup plus simple dans ce cas de créer des FILEGROUP à côté avec les fichiers correctement dimensionnés et transférer les données d'un FILEGROUP à un autre en reconstruisant les index. Cette méthode est je trouve plus propre car elle permet en même temps d'avoir des index non fragmentés. La méthode SHRINKFILE ne garantit pas cela ++ |
|
00
|
|
|
#14 | |
![]() ![]() Administrateur de base de données Inscription : août 2007 Messages : 1 158 ![]() |
Citation:
Plus propre et maitrise oui, je suis d'accord |
|
|
|
00
|
|
|
#15 |
![]() ![]() Alexandre ChemlaConsultant en Business Intelligence Inscription : février 2006 Messages : 1 773 ![]() |
D'après tout cela, si l'on souhaite répartir certains objets sur des axes physique distinct, le mieux est alors, non pas de créer plusieurs DataFiles dans un même group, mais plutôt de créer plusieurs GrouFiles (autant que d'axes) et de ne créer qu'un seul DataFile dans chacun ?
On pourrait alors attribuer soit-même la répartition des objets sur les GroupFiles ? |
|
|
00
|
|
|
#16 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
L'attribution des objets se fait au niveau du groupefile et pas au niveau des fichiers directement. La réponse est donc oui. Pour contrôler l'attribution des objets il faut créer un FILEGROUP distinct sur chaque axe physique.
Cela peut être utile sur des tables concernés par des "grosses" jointures par exemple. Cela permet de paralléliser l'accès à ces tables et d'augmenter les temps de traitement. ++ |
|
00
|
|
|
#17 |
![]() ![]() Alexandre ChemlaConsultant en Business Intelligence Inscription : février 2006 Messages : 1 773 ![]() |
Merci pour la précision. Je continue donc un peu
Désolé si je reprends des lieux communs. Davy ne m'en voudra pas de squatter un peu son topic ![]() Si l'on affecte un GroupFile particulier, qui ne possède qu'un unique DataFile, à une table, c'est donc toute la table qui se retrouve sur un axe ? Lors d'une requête utilisant une "grosse" jointure, les accès seront donc plutôt séquentiel ? Par contre si la table est affectée à un GroupFile possédant plusieurs DataFiles, à force d'utilisation dans de "grosses jointures", est-ce que les données de la table se trouveront réparties entre les différents DataFiles afin de gérer un accès parallélisé aux données ? |
|
|
00
|
|
|
#18 | ||
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Citation:
Citation:
++ |
||
|
00
|
|
|
#19 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Un petit bémole à ce que j'ai pu poster sur le sujet.
La réindexation répartit plus ou moins bien les données à partir du moment où il ne concerne pas le premier fichier du groupe PRIMARY (ajout de 2 fichiers supplémentaires). Il faut bien penser par contre à dimmensionner correctement les fichiers cibles. Cf billet ++ |
|
10
|
|
|
#20 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Merci pour le billet, très clair et concis
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
Copyright © 2000-2012 - www.developpez.com