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

MS SQL Server Discussion :

MS Server 2005 Connaitre le taux de remplissage d'un fichier de log


Sujet :

MS SQL Server

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut MS Server 2005 Connaitre le taux de remplissage d'un fichier de log
    Bonjour,

    Je souhaiterais connaitre le taux de remplissage de mon fichier de log.
    J'arrive a recuperer les parametre courant comme ca taille courante et sa taille max, mais je n'arrive pas a savoir son taux de remplissage.

    Merci

  2. #2
    Expert éminent sénior
    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 : 45
    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
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    DBCC SQLPERF(LOGPSPACE)

    ++

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Effectivement, merci ca marche bien!

    Mais question subsidiaire:
    Sur un pc j'ai cree une base, j'ai un soft qui logge sans arret, j'ai volontairement limiter(restricted) le fichier de log a 10MB et je m'apercois que le fichier se nettoie tout seul.
    Je n'ai pas besoin de faire de backup, avec DBCC SQLPERF(LOGPSPACE) je vois le "Log Space Used" tourné il passe de valeur basses a hautes et repasse a des valeur basse:
    t0 20%
    t1 40%
    t2 80%
    t3 10%
    ...

  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
    21 763
    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 : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Simplement parce que le mode de journalisation (recovery mode) doit être SIMPLE.

    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
    Expert éminent sénior
    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 : 45
    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
    Points : 12 891
    Points
    12 891
    Par défaut
    Quel est le mode recovery de votre base ?

    Si le mode est SIMPLE ce comportement est tout à fait normal car le fichier de log est vidé automatiquement après chaque CHECKPOINT

    PS : Dsl téléscopage avec SQLPro

    ++

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Bonsoir, merci je viens de regarder et non je suis bien en mode recovery Full.
    Je comprend pas...

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Alors c'est que des sauvegardes sont réalisées sur cette base de données de façon fréquente.
    Si vous êtes sous SQL Server 2005, vous pouvez exécuter la requête suivante :

    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
    SELECT F.physical_drive,
    		F.physical_name,
    		F.logical_name,
    		F.file_size,
    		S.name,
    		S.user_name,
    		S.database_creation_date,
    		S.backup_start_date,
    		S.backup_finish_date,
    		CASE S.type
    			WHEN 'D' THEN 'Base de données - Complet'
    			WHEN 'I' THEN 'Base de données - Différentiel'
    			WHEN 'L' THEN 'Journal de transactions'
    			WHEN 'F' THEN 'Fichier ou groupe de fichiers'
    			WHEN 'G' THEN 'Fichier - Différentiel'
    			WHEN 'P' THEN 'Partiel'
    			WHEN 'Q' THEN 'Partiel - Différentiel'
    		END,
    		S.database_name,
    		S.server_name,
    		S.machine_name,
    		S.recovery_model
    FROM msdb.dbo.backupfile F
    JOIN msdb.dbo.backupset S ON F.backup_set_id = S.backup_set_id
    WHERE CAST(FLOOR(CAST(S.backup_start_date AS FLOAT) AS DATETIME) = CAST(FLOOR(CAST(GETDATE() AS FLOAT) AS DATETIME)
    ORDER BY S.backup_start_date DESC
    qui vous donnera la liste de toutes les sauvegardes effectuées aujourd'hui.

    @++

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Merci pour la requête, mais je ne vois pas de sauvegarde a son execution.
    Elle marche bien, faut encore que je la comprenne, il y avait juste un manque au niveau des parenthèses.

    Je comprend toujours pas...
    Je fais faire plus d'essais.

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Si vous n'êtes pas passé par l'agent SQL pour faire vos sauvegardes, ceci est normal. Seules les BACKUP opérés à l'aide de SQL Agent dont tracées.

    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/ * * * * *

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Bonjour,

    Désolé de revenir à la charge mais...
    J'ai pu reproduire mon phénomène dans une table de test, voici mes requêtes de création, je les ai extrait a partir de SQL Management.

    Pour précision: je réalise mes tests sur WinXP Pro avec SQL Server 2005 sans service pack (Microsoft SQL Server Management Studio 9.00.1399.00 - Operating System 5.1.2600).

    Création de la BD:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    USE [master]
    GO
    /****** Object:  Database [DataBaseTest]    Script Date: 01/23/2009 17:22:07 ******/
    CREATE DATABASE [DataBaseTest] ON  PRIMARY 
    ( NAME = N'DataBaseTest', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\DataBaseTest.mdf' , SIZE = 102400KB , MAXSIZE = 102400KB , FILEGROWTH = 1024KB )
     LOG ON 
    ( NAME = N'DataBaseTest_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\DataBaseTest_log.ldf' , SIZE = 10240KB , MAXSIZE = 10240KB , FILEGROWTH = 10%)
     COLLATE SQL_Latin1_General_CP1_CI_AS
    GO
    EXEC dbo.sp_dbcmptlevel @dbname=N'DataBaseTest', @new_cmptlevel=90
    GO
    IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
    begin
    EXEC [DataBaseTest].[dbo].[sp_fulltext_database] @action = 'disable'
    end
    GO
    ALTER DATABASE [DataBaseTest] SET ANSI_NULL_DEFAULT OFF 
    GO
    ALTER DATABASE [DataBaseTest] SET ANSI_NULLS OFF 
    GO
    ALTER DATABASE [DataBaseTest] SET ANSI_PADDING OFF 
    GO
    ALTER DATABASE [DataBaseTest] SET ANSI_WARNINGS OFF 
    GO
    ALTER DATABASE [DataBaseTest] SET ARITHABORT OFF 
    GO
    ALTER DATABASE [DataBaseTest] SET AUTO_CLOSE OFF 
    GO
    ALTER DATABASE [DataBaseTest] SET AUTO_CREATE_STATISTICS ON 
    GO
    ALTER DATABASE [DataBaseTest] SET AUTO_SHRINK OFF 
    GO
    ALTER DATABASE [DataBaseTest] SET AUTO_UPDATE_STATISTICS ON 
    GO
    ALTER DATABASE [DataBaseTest] SET CURSOR_CLOSE_ON_COMMIT OFF 
    GO
    ALTER DATABASE [DataBaseTest] SET CURSOR_DEFAULT  GLOBAL 
    GO
    ALTER DATABASE [DataBaseTest] SET CONCAT_NULL_YIELDS_NULL OFF 
    GO
    ALTER DATABASE [DataBaseTest] SET NUMERIC_ROUNDABORT OFF 
    GO
    ALTER DATABASE [DataBaseTest] SET QUOTED_IDENTIFIER OFF 
    GO
    ALTER DATABASE [DataBaseTest] SET RECURSIVE_TRIGGERS OFF 
    GO
    ALTER DATABASE [DataBaseTest] SET  ENABLE_BROKER 
    GO
    ALTER DATABASE [DataBaseTest] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
    GO
    ALTER DATABASE [DataBaseTest] SET DATE_CORRELATION_OPTIMIZATION OFF 
    GO
    ALTER DATABASE [DataBaseTest] SET TRUSTWORTHY OFF 
    GO
    ALTER DATABASE [DataBaseTest] SET ALLOW_SNAPSHOT_ISOLATION OFF 
    GO
    ALTER DATABASE [DataBaseTest] SET PARAMETERIZATION SIMPLE 
    GO
    ALTER DATABASE [DataBaseTest] SET  READ_WRITE 
    GO
    ALTER DATABASE [DataBaseTest] SET RECOVERY FULL 
    GO
    ALTER DATABASE [DataBaseTest] SET  MULTI_USER 
    GO
    ALTER DATABASE [DataBaseTest] SET PAGE_VERIFY CHECKSUM  
    GO
    ALTER DATABASE [DataBaseTest] SET DB_CHAINING OFF
    On peut voir que le mode recovery est FULL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER DATABASE [DataBaseTest] SET RECOVERY FULL
    Et que j'ai bien limité la taille du log a 10MB.

    Création de ma table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    USE [DataBaseTest]
    GO
    /****** Object:  Table [dbo].[TableTest]    Script Date: 01/23/2009 17:24:56 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[TableTest](
    	[RowID] [bigint] IDENTITY(1,1) NOT NULL,
    	[Value] [nchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
    ) ON [PRIMARY]
    Voici mon code d'insertion pour tester(c'est petre pas ce qui se fait de mieux):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DECLARE @value as bigint
    SET @value=123456789
     
    WHILE 1=1
    	BEGIN
    		INSERT INTO [DataBaseTest].[dbo].[TableTest]
    			([Value])
    		VALUES
    			(cast(@value as nchar(10)))
    	END
    Et voici mon test:
    Après avoir créer la BD et la table, j'exécute mon code de test en continue boucle infini.
    En parallèle dans un autre onglet:
    J'exécute donc ceci régulièrement et je me retrouve avec:
    24%
    53%
    89%
    34%
    67%
    11%
    ...

    Donc je re-boucle, et j'avoue que je ne comprend pas. Soit il y a quelque chose que j'interprète mal ou que je comprend pas soit je suis fou!

  11. #11
    Expert éminent sénior
    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 : 45
    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
    Points : 12 891
    Points
    12 891
    Par défaut
    Effectivement.

    Mais faites le test suivant. Je pense que vous allez comprendre :

    - Interdiser le grossissement du fichier journal (taille fixe)

    Laissez votre script tourner comme vous l'avez fait.. Donc l'occupation du journal grossit et se réduit sans incidence.

    Maintenant en laissant votre script tourner, lancez une sauvegarde FULL de votre base en même temps. Regardez maintenant ce qui se passe ....

    ++

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Oui, effectivement, je me prend un "datalog is full" mais j'avoue ne pas comprendre.
    Est-ce que ça veut dire que si j'atteins la taille limite d'un coup ca bloque. Car ça bloque aussi les requêtes, jusqu'à ce que je joue un BACKUP LOG.
    Toujours est-il que je me demande aussi si mon test est pertinent, est-ce que SQL réagit pareil avec un log de 10MB ou de 10Giga?

    En tout cas merci pour le complément du test, ça m'est bien utile!

  13. #13
    Expert éminent sénior
    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 : 45
    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
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    Oui, effectivement, je me prend un "datalog is full" mais j'avoue ne pas comprendre.
    Cela peut paraître logique en fait.. Vous activez le mode FULL RECOVERY sur votre base et vous lancez votre script... Pour pouvoir restaurer votre backup de transactions il vous faut comme point de départ une sauvegarde FULL . Sans cette première sauvegarde vos sauvegardes du fichier log ne servira pas à grand chose et vous ne pourrez pas faire de sauvegarde de votre fichier log de toute façon ...

    Donc dans votre cas c'est normal. Le serveur sql reste en mode "AUTO TRUNCATE", c'est à dire qu'il tronquera votre journal tant que cette 1ère sauvegarde ne sera pas faite.. Vous avez observé ce phénomène avec un fichier de log qui se remplit et se réduit automatiquement après chaque CHECKPOINT automatique.

    Est-ce que ça veut dire que si j'atteins la taille limite d'un coup ca bloque. Car ça bloque aussi les requêtes, jusqu'à ce que je joue un BACKUP LOG.
    Oui si votre fichier de transactions est plein et que vous n'activez pas la croissance automatique, vos requêtes ne pourront effectivement plus se faire, tant que vous n'aurez pas fait de place dans votre fichier de transactions à l'aide d'un BACKUP LOG justement. Bien sûr en production vous n'interdirez pas cette croissance automatique pour des raisons évidentes de sécurité ...

    Toujours est-il que je me demande aussi si mon test est pertinent, est-ce que SQL réagit pareil avec un log de 10MB ou de 10Giga?
    Non votre serveur ne réagit pas de la même facon, votre ficher de transactions se remplira moins vite du fait de sa taille mais au bout du compte s'il se remplit à 100% le résultat sera bien le même. Après le but est de pouvoir dimensionner votre fichier de transactions pour que celui puisse acceuillir vos transaction sans avoir à grossir.. (la fameuse option autogrowth) mais cela est une autre histoire ...

    ++

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    C'est cool! merci je comprend beaucoup mieux maintenant!
    Par contre est-ce qu'il y a un endroit où MS en parle dans sa doc SQL?
    En tout cas les infos m'ont bien aidées!

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

Discussions similaires

  1. Sql server 2005 connaitre les instances nommées
    Par mims1664 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 04/08/2010, 10h07
  2. Réponses: 3
    Dernier message: 11/02/2008, 12h40
  3. Réponses: 3
    Dernier message: 11/02/2008, 12h40
  4. [SQL SERVER 2005] Connaitre les données modifiées.
    Par abrial dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/09/2006, 14h33

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