Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Administration
Administration Forum d'entraide sur l'administration du dataserver, via SSM ou ligne de commande, les tables système, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/05/2011, 16h08   #1
Membre actif
 
Inscription : novembre 2004
Messages : 311
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 311
Points : 157
Points : 157
Par défaut SQL 2008R2 + Datafiles

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.
davy.g est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2011, 12h40   #2
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
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
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2011, 13h15   #3
Membre actif
 
Inscription : novembre 2004
Messages : 311
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 311
Points : 157
Points : 157
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.
davy.g est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2011, 13h37   #4
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
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
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2011, 13h50   #5
Membre actif
 
Inscription : novembre 2004
Messages : 311
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 311
Points : 157
Points : 157
Les index cluster se trouvent dans le groupe Primary.
Dans ce groupe j'ai aujourd'hui un datafile de 500Go.
davy.g est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2011, 15h23   #6
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 954
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 954
Points : 17 774
Points : 17 774
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 * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2011, 15h30   #7
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
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
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2011, 19h22   #8
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
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.

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 16h13   #9
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 158
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2007
Messages : 1 158
Points : 1 617
Points : 1 617
Bonjour,

Vous pouvez essayer le DBCC shrinkfile (filename, EMPTYFILE).

depuis BOL:
Citation:
Migrates all data from the specified file to other files in the same filegroup. Because the Database Engine no longer allows data to be placed in the empty file, the file can be removed by using the ALTER DATABASE statement.
http://msdn.microsoft.com/en-us/library/ms189493.aspx

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...
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 16h49   #10
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
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 )

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 17h31   #11
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 158
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2007
Messages : 1 158
Points : 1 617
Points : 1 617
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
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 17h36   #12
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 158
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2007
Messages : 1 158
Points : 1 617
Points : 1 617
Citation:
Envoyé par mikedavem Voir le message
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 )
Ah bon ?

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.
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 17h39   #13
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
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

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 10h09   #14
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 158
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2007
Messages : 1 158
Points : 1 617
Points : 1 617
Citation:
Envoyé par mikedavem Voir le message
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
++
Plus simple je sais pas - une seule commande pour shrinker c'est plus simple.

Plus propre et maitrise oui, je suis d'accord
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 11h32   #15
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 773
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 773
Points : 1 837
Points : 1 837
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 ?
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 11h47   #16
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
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.

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 11h58   #17
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 773
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 773
Points : 1 837
Points : 1 837
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 ?
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 18h56   #18
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Citation:
Envoyé par Jinroh77 Voir le message
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 ?
Oui

Citation:
Envoyé par Jinroh77 Voir le message
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 ?
Disons que si une table est répartie sur plusieurs fichiers l'accès à ses données pourront être parallélisés (plusieurs têtes de lectures pouvant en même temps récupérer les données) à condition bien sûr d'avoir un axe physique pour chaque fichier.

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 22h21   #19
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
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

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/06/2011, 07h07   #20
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
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
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h08.


 
 
 
 
Partenaires

Hébergement Web