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 :

Optimisation d'une base LocalDB


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 199
    Billets dans le blog
    1
    Par défaut Optimisation d'une base LocalDB
    Bonjour,

    Chez un client, nous avons déployé une application qui utilise une base LocalDB.

    Cette base est beaucoup plus grosse que prévu (plus de 800 Mo) et lors de la synchro, un nombre immense de données sont modifiées.

    Il en résulte, je pense, une énorme fragmentation des données, des index, et des statistiques absolument déconnantes.

    Au final, l'application est extrêmement lente, au point d'être totalement inutilisable.

    Comment faire pour nettoyer la base (defrag des tables, index, recalcul des stats) ?

    En effet, j'ai pas les outils du genre "osql" sur la machine.

  2. #2
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 199
    Billets dans le blog
    1
    Par défaut
    Bon, ben j'ai écrit ce petit bout de code à l'arrache.

    Ça répond à mon besoin.

    Et ça marche beaucoup mieux tout d'un coup !

    Code csharp : 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
     
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
     
    namespace OptimisationBase
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Démarrage de l'optimisation de la base offline");
                using (SqlConnection cnx = new SqlConnection("Server=(localdb)\\v11.0;Integrated Security=true;AttachDbFileName=C:\\ProgramData\\update.crm_webofflinedb\\offline.mdf;"))
                {
                    Console.WriteLine("Connexion à la base de données");
                    cnx.Open();
                    using (SqlCommand cmd = cnx.CreateCommand())
                    {
                        Console.WriteLine("Mise à jour des statistiques");
                        cmd.CommandText = "exec sp_updatestats";
                        cmd.ExecuteNonQuery();
     
                        Console.WriteLine("Recherche des index");
                        cmd.CommandText = "SELECT 'ALTER INDEX [' + i.name + '] ON [' + OBJECT_SCHEMA_NAME(i.object_id) + '].[' + OBJECT_NAME(i.object_id) + '] REBUILD' FROM sys.indexes AS i where i.name is not null and OBJECT_NAME(i.object_id) like 'OFFLINE_WEB%'";
     
                        using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult))
                        {
                            List<string> indexes = new List<string>();
                            while (dr.Read())
                            {
                                indexes.Add(dr.GetString(0));
                            }
                            dr.Close();
     
                            foreach (string s in indexes)
                            {
                                Console.WriteLine(s);
                                cmd.CommandText = s;
                                cmd.ExecuteNonQuery();
                            }
                        }
                    }
                    Console.WriteLine("Déconnexion de la base de données");
                    cnx.Close();
                }
                Console.WriteLine("Fin de l'optimisation de la base offline");
            }
        }
    }

Discussions similaires

  1. [AC-2007] Optimisation d'une base de données Access
    Par Kaptin dans le forum Runtime
    Réponses: 7
    Dernier message: 07/11/2012, 08h54
  2. AIDE: Optimisation d'une base de données
    Par windkouni dans le forum Développement
    Réponses: 0
    Dernier message: 01/08/2012, 16h36
  3. Réponses: 1
    Dernier message: 08/08/2007, 13h19
  4. [phpBB] Question concernant l'optimisation d'une base de données MySql
    Par Evocatii dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 24/06/2007, 11h47
  5. Optimisation d'une base avec des tables liés
    Par snoopy69 dans le forum Access
    Réponses: 2
    Dernier message: 28/04/2006, 09h11

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