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

Développement SQL Server Discussion :

Transaction log - Alter column


Sujet :

Développement SQL Server

  1. #1
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

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

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut Transaction log - Alter column
    Bonjour,

    Soit le script de création de table de test suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    create table varchar2nvarchar
    (
    id int identity (1,1) not null,
    value varchar(255),
    nvalue nvarchar(255)
    )
     
     
    insert into varchar2nvarchar (value)
    select 'abc'
    union
    select 'def'
    union
    select 'ghi'
    union
    select 'jkl'
    union
    select 'mno'
    union
    select 'pqr'
    union
    select 'stu'
    union
    select 'vwx'
    union
    select 'yz'
    GO
     
    insert into varchar2nvarchar (value)
    select top 1000000 a.value + b.value
    from varchar2nvarchar a cross join varchar2nvarchar b
    GO 3
    Ensuite l'execution de la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alter table varchar2nvarchar alter column value nvarchar(255)
    Mon fichier journal grossis jusque 1500MB.
    Je n'arrive pas à expliquer une telle croissance pour un si petit nombre de rows (qui représente 35MB de données).

    Comment peut on expliquer une telle croissance ?
    Est ce que le grossissement du fichier log est une fonction linéaire?
    Est ce qu'un tel changement (alter table ... alter column...) va generer plus de "logs" en fonction de la taille totale d'une row ou est ce uniquement dépendant de taille de la colonne ?

  2. #2
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonjour,

    Ce comportement est tout à fait normal.

    La taille du fichier des transactions dépend du volume de transaction.

    D'après votre script vous insérez 1008190 lignes dans votre table.
    Votre fichier de transaction va grossir une première fois.

    Ensuite vous faites un ALTER TABLE ALTER COLUMN... Sqlserver va refaire un passage sur l'ensemble de votre table (donc les 1008190 lignes) et logger une nouvelle fois dans le fichier des transactions.

    ++

  3. #3
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

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

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Merci pour ta réponse.
    Je comprend bien le raisonnement derrière, je suis par contre surpris de l'espace nécessaire pour réaliser l'opération.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 021
    Billets dans le blog
    6
    Par défaut
    Dans le JT vous avez les valeurs avant modif et après modif. Or pour modifier une seule colonne, SQL Server supprime la table, mais avant il créée une table pseudo temporaires, puis recrée la table et enfin supprime la table pseudo temporaire. Ce que vous voyez doit donc être approximativement un peu supérieur à 4 fois la taille de la table. Comptez en sus tous les index (deux fois : suppression puis recréation) et les méta données manipulées...

    C'est d'ailleurs fortement déconseillé de changer le type des données d'une table en production !

    Il y a un script plus fin que j'ai donné ici : http://sqlpro.developpez.com/cours/s...partie2#L7.6.1

    a +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

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

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Merci Frédéric pour ta réponse détaillée.

    Dans le cadre de cette recherche j'ai aussi découvert le document ci-joint.
    Je trouve cette analyse intéressante et tenais à la partager.

    Thcuss,
    Dje
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/05/2006, 12h11
  2. [VB6] Alter table alter column syntaxe
    Par enibris dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 13/04/2006, 18h11
  3. Clauses ALTER COLUMN multiples sous Access 2000
    Par richardkiii dans le forum Access
    Réponses: 10
    Dernier message: 30/03/2006, 10h01
  4. Transaction log files
    Par abelman dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 30/11/2005, 18h00
  5. Alter column => passer de NOT NULL à NULL
    Par JohnGT dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/10/2003, 12h16

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