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 :

Insert Time Out?


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Points : 123
    Points
    123
    Par défaut Insert Time Out?
    Bonjour,

    Je suis en maintenance sur un batch développé en dot net et j'ai un problème assez épineux.

    Le batch récupère des valeurs en base, les traites après avoir été transformé en objet.

    Les objets sont passé en requêtes insert et on exécute. depuis peux le batch tombe en time out au niveau de l'insert alors que ça passait avant.

    On a pensé a mettre un WITH(NOLOCK) sur nos select pour éviter les problèmes mais rien n'y fait.

    Y a t il une table systeme comme en oracle pour voir les objets locked?

    Ou avez vous une autre idée?

    Merci d'avance.

  2. #2
    Membre chevronné

    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 : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Points : 1 758
    Points
    1 758
    Par défaut
    Salut,

    Tu peux utiliser la fonction sp_lock pour avoir la liste des objets lockés.

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Points : 123
    Points
    123
    Par défaut
    Oui mais j'ai trouvé sur la msdn la vue systeme dm_trans_locks qui me semble m'apporte pas mal d'info.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MaTable	OBJECT		5	882102183	0	S	LOCK	GRANT	1	1	55	0	0	TRANSACTION	2792112	00000000-0000-0000-0000-000000000000	0x0A76ECE0:1:1	0x06EEBD60
    
    MaTable	OBJECT		5	882102183	0	IX	LOCK	WAIT	1	0	56	0	0	TRANSACTION	2792233	00000000-0000-0000-0000-000000000000	0x0A76EE20:2:1	0x03647E40
    Je retrouve le nom de ma table avec l'id et je me dis que le premier lock empêche le lock de mon insert mais a présent comment savoir quel select bloque mon insert (il me semble que c'est un select max(id) mais même avec un with no lock ça ne passe pas.

    je suis donc locked enfin bloqué....

    ps : vive oracle snif...

  4. #4
    Membre chevronné

    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 : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Points : 1 758
    Points
    1 758
    Par défaut
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    USE [master]
    GO
    /****** Object:  StoredProcedure [dbo].[sp_CheckBlockingProcesses]    Script Date: 11/04/2008 11:05:23 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     
     
     
    ALTER PROCEDURE [dbo].[sp_CheckBlockingProcesses] AS
     
    DECLARE @BlockedProcesses int
    SELECT @BlockedProcesses = count(*)
      FROM master..sysprocesses with(nolock)
      WHERE (blocked!=0)
            AND (waittime > 30000)
     
    IF ( @BlockedProcesses>0 ) BEGIN
     
      declare @CrLf char(2)
      set @CrLf=char(13)+char(13)
     
      declare @MailRecipients varchar(250)
      set @MailRecipients = ''
     
      declare @Server varchar(250)
      IF PATINDEX('\', @@SERVERNAME)>0 BEGIN
        set @Server = Left(@@SERVERNAME, PATINDEX('\', @@SERVERNAME))
      END ELSE BEGIN
        set @Server = @@SERVERNAME
      END
     
      declare @MailSubject varchar(250)
      set @MailSubject = 'Blocking Processes Report on ' + @@SERVERNAME
     
      declare @MailAttach varchar(250)
      set @MailAttach = '"\\' + @Server + '\BlockingProcessesReports\'
                        + @Server + '.'
                        + convert(varchar, getdate(), 102) + '.'
                        + right('00'+ltrim(str(datepart(hh,getdate()))),2) + '.'
                        + right('00'+ltrim(str(datepart(mi,getdate()))),2) + '.'
                        + right('00'+ltrim(str(datepart(ss,getdate()))),2)
                        + '.txt"'
     
      DECLARE @TextValue TABLE (
        LineNumber int Identity,
        TextLine varchar(1024)
      )
     
      INSERT INTO @TextValue (TextLine)
        SELECT distinct
               'User ' + rtrim(p.loginame)
               + ' on computer ' + rtrim(p.hostname)
               + ' running process ' + convert(varchar, p.spid)
               + ' is blocked by user ' + rtrim(p2.loginame)
               + ' on computer ' + rtrim(p2.hostname)
               + ' running process ' + convert(varchar, p.blocked)
               + ' since ' + convert(varchar,p.waittime/1000) + ' seconds.' + @CrLf
               + '   ==> Blocked resource are : Program = [' + rtrim(p.program_name) + '],'
               + ' Database = [' + rtrim(db.name) + '],'
               + ' Command = [' + rtrim(p.cmd) + '].'
          FROM master..sysprocesses p WITH(NOLOCK)
            INNER JOIN master..sysdatabases db WITH(NOLOCK) ON p.dbid = db.dbid
            INNER JOIN master..sysprocesses p2 WITH(NOLOCK) ON p2.spid = p.blocked
          WHERE (p.blocked!=0)
                AND (p.waittime > 30000)
     
      INSERT INTO @TextValue (TextLine)
        select distinct 'First blocking process : ' + convert(varchar,p.spid) + @CrLf
          from master..sysprocesses p with(nolock)
          where p.blocked = 0 and p.spid in (select blocked from master..sysprocesses with(nolock) where spid != 0)
     
      DECLARE Results CURSOR FOR
        SELECT TextLine FROM @TextValue ORDER BY LineNumber
     
      DECLARE @TextRow varchar(1024)
     
      declare @MailBody varchar(2500)
      set @MailBody = '=== Blocking report ( >30s )===' + @CrLf + 'Please consult details at ' + @MailAttach + @CrLf
     
      OPEN Results
     
      FETCH Results INTO @TextRow
      WHILE @@FETCH_STATUS=0 BEGIN
        set @MailBody = @MailBody + @CrLf + @TextRow
        FETCH Results INTO @TextRow
      END
     
      CLOSE Results
      DEALLOCATE Results
     
      set @MailBody = @MailBody + @CrLf + '=== End of report ==='
     
      declare @ShellCommand varchar(1024)
      set @ShellCommand = 'isql -E -S ' + @@SERVERNAME + ' -w 3000 -o ' + @MailAttach + ' -Q "exec sp_blocker_pss80"'
     
      -- Trigger Event to warn via pager
      exec master..sp_user_counter1 @blockedprocesses
      exec master..xp_cmdshell @ShellCommand
      exec msdb.dbo.sp_send_dbmail @profile_name = ''
    						   , @recipients=@MailRecipients
                               , @Body=@MailBody
                               , @subject=@MailSubject
     
    END ELSE BEGIN
      exec master..sp_user_counter1 0
    END
    Voici une procédure qui pourra t'aider.
    A configurer un petit peu en fonction de ton environment. A tourner toutes les minutes afin d'obtenir un rapport sur les process bloquants.

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Points : 123
    Points
    123
    Par défaut
    Merci pour ton aide.

  6. #6
    Membre chevronné

    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 : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Points : 1 758
    Points
    1 758
    Par défaut
    Citation Envoyé par matrix_ceg Voir le message
    Merci pour ton aide.
    Si tu remontes en Belgique et repasse en guindaille un de ces 4 à la limite préviens moi, on ira en boire une ensemble

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

Discussions similaires

  1. Time out sur insert multiple
    Par dubitoph dans le forum Requêtes
    Réponses: 7
    Dernier message: 27/07/2009, 05h51
  2. [Session]maîtriser le time out de la session
    Par croquedur dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 23/10/2007, 10h57
  3. MSXML2.serverXMLHTTP : The operation timed out
    Par malbaladejo dans le forum ASP
    Réponses: 1
    Dernier message: 06/12/2005, 08h50
  4. Problème de time-out avec un socket client.
    Par Depteam1 dans le forum MFC
    Réponses: 3
    Dernier message: 17/10/2005, 10h30
  5. error time out expired
    Par the_new dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2005, 13h03

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