Auteur de questions
Une requête update ne passe pas ou prend trop de temps

Discussion générale
-
Bonjour à tous,
j'ai une base de données ou il y a une table rapport :
[rapport_id] [varchar](50) NOT NULL,
[rapport_study_id] [varchar](65) NOT NULL,
[rapport_orale_state] [int] NOT NULL,
[rapport_written_file] [varbinary](max) NULL,
[rapport_orale_file] [varbinary](max) NULL,
[rapport_written_text] [nvarchar](max) NULL,[rapport_written_state] [int] NOT NULL,
[rapport_written_extention] [varchar](5) NULL,
[rapport_owner] [nvarchar](50) NULL,
[rapport_date_creat] [datetime] NULL,
[rapport_signe_owner] [nvarchar](50) NULL,
[rapport_signe_date] [datetime] NULL,
[rapport_modification_users_and_dates] [nvarchar](3000) NULL,
[rapport_printed] [numeric](1, 0) NOT NULL,
[rapport_extracted_user] [nvarchar](50) NULL,
[rapport_number] [int] IDENTITY(1,1) NOT NULL,
[rapport_serie_uid] [nvarchar](65) NULL,
[rapport_serie_number] [int] NOT NULL,
[rapport_pacs_id] [nvarchar](50) NULL,
[rapport_written_length] [int] NULL,
dans cette table il y a 60.000 lignes.
une requete update suivante ne passe pas (on a du l’arrêter après 45 min car utilisateurs bloqués):
update rapport set rapport_written_length = LEN(REPLACE(rapport_written_te
xt,' ','')) where rapport_written _length is nullmais lorsqu'on fait un backup de cette base et on la charge sur un autre serveur de caractéristiques similaire elle met 10 min et elle passe !
comment on peut savoir pourquoi cette requete ne passe pas ou elle met trop de temps pour passer ?
Merci
- Type modifié Aurel Bera mardi 26 mars 2013 10:08 Discussion
Toutes les réponses
-
Bonjour
Je ne peux pas vous donner une autre réponse que je l’ai déjà donne pour le thread initial ici :
http://social.technet.microsoft.com/Forums/fr-FR/1085/thread/a4cbe156-8e3a-426e-8330-02af1c430305
Vérifiez les I/O
http://blogs.msdn.com/b/askjay/archive/2011/07/08/troubleshooting-slow-disk-i-o-in-sql-server.aspx
et
http://support.microsoft.com/kb/224587
Cordialement,
-
Bonjour,
Est-ce que vous avez testé les solutions proposées ? Merci de partager avec nous les résultats, afin que d'autres personnes avec le même problème puissent profiter de cette solution.
Cordialement,
Aurel
-
Bonjour
J’ai tombé sur cet article :
Vérifiez si ça s’applique pour vous.
Aurel
-
Bonjour,
Pour diagnostiquer efficacement cette rq, lorsque celle ci s'exécute, jetez un oeil à la DM sys.dm_exec_requests (ou sys.dm_os_waiting_tasks). Vous avez une colonne wait_type qui vous donnera la réponse ...
Les causes probables : locks, pageiolatch, pagelatch, io splits, explosion du LDF (attention au zeroing du fichier), problème de statistiques ...
Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM
-
Bonjour,
Au vu de votre requête, et ne sachant pas trop le nombre de lignes qu'elle impacte, j'aurais tendance à vous conseiller plusieurs points :
- découper votre requête en plusieurs petits traitements, par exemple en utilisant la clause TOP de UPDATE (UPDATE TOP (1000) rapport ...) et une boucle de type WHILE (@@rowcount)>0
- afin que la recherche WHERE rapport_written_length is null ne soit pas bloquée par d'autres instruction, un HINT de type WITH (NOLOCK) au niveau de votre table pourrait être utile.
Mais en tout état de cause, je m'interroge sur la pertinence de votre structure de table. En effet, pourquoi votre colonne rapport_written_length n'est-elle pas de type calculée, éventuellement persistante (PERSISTED) ?
JN.
Jean-Nicolas BERGER
http://blog.sqlserver.fr -
-
C'est thread est ouvert depuis 28 novembre. Comme on n'a pas une réponse, je pense que n'est plus d'actualité.
Je transforme le thread en discussion générale.
Cordialement,