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 :

Problème de timing


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 14
    Points : 17
    Points
    17
    Par défaut Problème de timing
    Bonjour,

    Je suis sur SQL SERVER 2000 et j'ai développé une Procédure stocké en T-SQL. Lorsque j'exécute les instruction séparément dans Query analyzer, ils s'éxécutent en 1h24.

    Dans cette procédure stocké au sein d'un job, il lui faut 2h24 certaine fois et 1h30 d'autre fois pour s'executer.

    Pourriez-vous critiquer mon code pour que je puisse l'améliorer si nécessaire ?

    Merci à vous !

    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
    ------------------------------------------------------------------------------------------------------------
    --  TITRE :  		PB_01_MAJ_USER_DATA
    ------------------------------------------------------------------------------------------------------------
    --  DT CREATION :	19 MAI 2008
    --  AUTEUR :		HODAWA
    --  OBJECTIF : 		Mise à jour des données utilisateur en cas 
    --			d'échec de l'importation des données de 
    --			TERADATA
    ------------------------------------------------------------------------------------------------------------
     
    CREATE PROCEDURE PB_01_MAJ_USER_DATA AS 
     
    DECLARE
     
    	@Nb_Row int
     
    	BEGIN
     
    		-- Etape 00 : Déconnexion des USERs
    		UPDATE TABLE1 set C1= 'V'
     
    		INSERT INTO TABLE1 ( C1, C2, C3) 
    		SELECT 1, getdate(), 1 
     
    		-- Etape 01 : Suppression de la table TABLE2
    		TRUNCATE TABLE TABLE2
     
    		-- Etape 02 : Suppression des Indexes de la table TABLE2
    		IF EXISTS (SELECT name FROM sysindexes WHERE name = 'TABLE2_IDX1')
    		   DROP INDEX TABLE2.TABLE2_IDX1
    		IF EXISTS (SELECT name FROM sysindexes WHERE name = 'TABLE2_IDX2')
    		   DROP INDEX TABLE2.TABLE2_IDX2
    		IF EXISTS (SELECT name FROM sysindexes WHERE name = 'TABLE2_IDX3')
    		   DROP INDEX TABLE2.TABLE2_IDX3
    		IF EXISTS (SELECT name FROM sysindexes WHERE name = 'TABLE2_IDX4')
    		   DROP INDEX TABLE2.TABLE2_IDX4
     
    		-- Etape 03 : Insertion des datas dans la table de travail (environ 13 min pour 3 600 000 lignes)
    		INSERT INTO [DATABASE1].[dbo].[TABLE2]([C1],..., [Cn])
    		SELECT [C1], ..., [Cn]
    		FROM [DATABASE1].[dbo].[TABLE3]
     
    		-- Etape 04 : Reconstruction des Indexes de la table TABLE2
    		CREATE INDEX TABLE2_IDX1 ON TABLE2(C2, C3, C4) ON [INDEX_ATE_LARGE_F001]
    		CREATE INDEX TABLE2_IDX2 ON TABLE2(C5) ON [INDEX_ATE_LARGE_F001]
    		CREATE INDEX TABLE2_IDX3 ON TABLE2(C6) ON [INDEX_ATE_LARGE_F001]
    		CREATE INDEX TABLE2_IDX4 ON TABLE2(C7) ON [INDEX_ATE_LARGE_F001]
     
    		--Etape 05 :  Chargement de la variable @row avec le nombre d'enregistrement chargés dans TABLE2
    		SELECT	         @Nb_Row =  count(*) 
    		FROM		TABLE2
     
    		-- Etape 06 : Mise à jour de la table TABLE1 avec le nombre d'enregistrement chargés dans TABLE2 et 
    		-- l'indicateur de chargement en cours à  0 (C2).
    		UPDATE	       TABLE1
    		SET		nbenr = @Nb_Row , C2=0
    		WHERE	       C1= '1'
     
    		-- Etape 07 : Suppression des datas dans la table de travail
    		-- cette étape doit ce faire seulement si les lignes sont insérées dans ACLTOL
    		TRUNCATE TABLE	TABLE3
     
    	END
    GO

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 862
    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 862
    Points : 53 013
    Points
    53 013
    Billets dans le blog
    6
    Par défaut
    Vous mélangez du DDL et du DML. Ceci cause de multiples recompilation de la procédure en cours d'exécution. Groupez votre DDL au début. Mieux, créez des structures stables de données dès le départ.

    A +

  3. #3
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 14
    Points : 17
    Points
    17
    Par défaut
    Bonjour SQLPro,

    Le problème c'est que le code doit absolument se faire dans cette ordre.

    Merci pour ton aide !

    A+

  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 862
    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 862
    Points : 53 013
    Points
    53 013
    Billets dans le blog
    6
    Par défaut
    Je ne voit pas en quoi déplacer les DROP INDEX avant la proc stock pourrait y changer quelque chose.
    De même les CREATE INDEX sont inutile et peuvent être créés après la proc stock.

    A +

  5. #5
    Membre à l'essai
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 14
    Points : 17
    Points
    17
    Par défaut
    Merci de tes conseils SQLPro.

    Je vais les suivre immédiatement.

    A+

Discussions similaires

  1. Problème format TIME
    Par bosse_one1 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 04/09/2007, 18h53
  2. [Prototype] Timing / rafraichissement
    Par gdzami dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 20/06/2007, 14h59
  3. Problème de timed out
    Par benassis dans le forum Langage
    Réponses: 8
    Dernier message: 17/08/2006, 16h08
  4. [PHP-JS] problème avec time()
    Par maxtt dans le forum Langage
    Réponses: 14
    Dernier message: 31/07/2006, 04h12
  5. Problème de time-out avec un socket client.
    Par Depteam1 dans le forum MFC
    Réponses: 3
    Dernier message: 17/10/2005, 10h30

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