IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration SQL Server Discussion :

Déplacer data d'une table sur un autre filegroup


Sujet :

Administration SQL Server

  1. #1
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut Déplacer data d'une table sur un autre filegroup
    Bonjour,

    Après l'installation d'un programme, toutes les table de la base sont dans le même fichier, celui par défaut, primary.

    Afin d'optimiser la charge du serveur, je souhaite :
    - déplacer les tables "actives" sur un disque SSD
    - déplacer les tables "archivées" sur un disque de stockage, volumineux mais lent

    J'ai trouvé ce lien :
    http://sqlandme.com/2011/10/13/how-t...e-in-database/

    Je suis un peu surpris par la façon dont les données sont déplacées d'une table à une autre : on re-crée l'index clustered ailleurs et ça déplace la table

    Y'a pas une méthode plus... sémantique ?

    Quel est l'impact si on lance la chose pendant que le serveur est en pleine charge (lenteur, ou plantage ?)
    Pour tout ce qui est PK et autres procédures stockées, quel est le risque potentiel ?

    Existe-t-il un risque à faire ces déplacements ?
    On ne jouit bien que de ce qu’on partage.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Je suis un peu surpris par la façon dont les données sont déplacées d'une table à une autre : on re-crée l'index clustered ailleurs et ça déplace la table
    L'index cluster est la table elle-même. L'index cluster se confond avec la table et ne fait plus qu'un avec la table. Donc c'est tout à fait normal que le déplacement de l'index cluster revient à déplacer la table elle-même.

    Citation Envoyé par StringBuilder Voir le message
    Y'a pas une méthode plus... sémantique ?
    Une méthode plus "sémantique" si l'on peut dire est d'utiliser la clause WITH (MOVE TO ...) lors de la suppression de l'index Cluster.
    Exemple :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE dbo.MaTable
     DROP CONSTRAINT  PK_MaTable WITH (MOVE TO SecondaryFG)
    Dans l'exemple ci-dessus, l'index cluster sera supprimé, et les lignes de données qui se trouvaient au niveau des feuilles de l'index cluster seront déplacées vers le nouveau File groupe SecondaryFG

    Puis création de la clé primaire Cluster dans le nouveau File groupe SecondaryFG
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     ALTER TABLE dbo.Matable
      ADD CONSTRAINT PK_MaTable PRIMARY KEY  CLUSTERED   ( Id  ASC ) 
    ON SecondaryFG

    Citation Envoyé par StringBuilder Voir le message
    Quel est l'impact si on lance la chose pendant que le serveur est en pleine charge (lenteur, ou plantage ?)
    Lenteur Oui surement, plantage Non assurément ! En effet, depuis SQL Server 2005, vous pouvez créer l'index, soit en ligne (ONLINE) ou hors ligne (OFFLINE). En mode hors ligne (OFFLINE) la table est en lecture seule pendant la création de l'index.
    En mode en ligne (ONLINE), la table peut être utilisée en lecture et en écriture pendant la phase de création de l'index. SQL fusionne dans tous les changements qui se sont produits pendant la création ou la reconstruction de l'index.
    Il ne faut pas oublier par ailleurs, que les opérations de création ou de reconstruction de l'index sont journalisées, en ce sens que la cohérence de la base est préservée.

    Citation Envoyé par StringBuilder Voir le message
    Pour tout ce qui est PK et autres procédures stockées, quel est le risque potentiel ?
    Tu veux parler plutôt des FK. Concernant les FK, je dirais que le problème est le même que d'habitude, et ce, indépendamment du nouveau File group ; il faudra au préalable supprimer les FK avant de supprimer la PK puis recréer les FK après le création et le transfert de la PK dans le nouveau file Group.
    Concernant les procédures etc . et plus généralement les plans d'exécution des requêtes, la reconstruction des indexes a pour effet, le recalcul des statistiques, et le recalcul des statistiques a pour effet l'invalidation des plans d'exécution ce qui provoque donc la recompilation des plans impactés. il s'agit là d'un processus classique normale indépendant de l'ajout du nouveau du file group.

    Citation Envoyé par StringBuilder Voir le message
    Existe-t-il un risque à faire ces déplacements ?
    D'après moi, il n' y a aucun risque !

    A+
    "Une idée mal écrite est une idée fausse !"
    http://hamid-mira.blogspot.com

  3. #3
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Merci pour ta réponse détaillée.

    En effet, après lecture (y compris d'un article de la MSDN) il s'avère que l'index cluster est les données de la table elles-mêmes (même si je trouve que ce lien de cause à effet nuit à la sémantique : il y a la notion de table d'un côté et d'index cluster de l'autre, l'un pouvant vivre sans l'autre (une table peut ne pas avoir d'index cluster, et dans ce cas, visiblement on est obligé de dupliquer la table la supprimer, puis renommer le duplicata, ou alors créer un index cluster temporairement le temps de faire le déplacement).

    Pour ce qui est des FK, c'est vrai que j'avais pas percuté qu'il fallait tout droper avant de re-créer la PK...

    Bon, ceci dit, je ne crois pas qu'il existe de FK dans la base en question, base éditeur... donc pas de problème...

    Merci en tout cas !
    On ne jouit bien que de ce qu’on partage.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    Tu peux faire cette manipulation avec l'outil Filegroup Migrator de Kankuru (http://www.kankuru.fr/post/2013/01/2...-Migrator.aspx). Mais effectivement, pour déplacer une table, il faut déplacer le clustered index.
    Blog Perso | Kankuru (logiciel gratuit pour SQL Server)

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/08/2010, 18h30
  2. Réponses: 6
    Dernier message: 12/02/2008, 14h58
  3. Réponses: 7
    Dernier message: 23/11/2006, 10h45
  4. Copier/coller une table sur une autre fichier mdb
    Par berceker united dans le forum Access
    Réponses: 2
    Dernier message: 12/07/2006, 20h08
  5. SELECT sur l'une ou sur l'autre table
    Par griese dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/07/2006, 14h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo