salut a tous j'ai besoin de votre aide afin d'optimiser une procédure stocké utilisant un curseur, parce que la consommation cpu (~67% sur un E6550 ) est délirante ainsi que le temps d'exécution, de plus cette procédure est relancer dès qu'elle prend fin je ne peut donc pas la laisser en l'état.

voici le monstre:

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
CREATE PROCEDURE scheduler_addblock
                   @dmax INT
AS
 DECLARE @dom_id BIGINT
 DECLARE @btime DATETIME
 SET @btime = ( SELECT GETDATE() ) 
 DECLARE Reader CURSOR FOR
                 SELECT A.dom_id
                 FROM [domain] A,infos B
                 WHERE B.dom_id = A.dom_id AND
                        B.info_download >= @dmax
 OPEN Reader
 
 FETCH NEXT FROM Reader INTO @dom_id
 WHILE @@FETCH_STATUS = 0
  BEGIN
    INSERT INTO blocked(block_type,block_time,dom_id) VALUES(1,@btime,@dom_id)        
  END
 
 CLOSE Reader
 DEALLOCATE Reader            
GO


merci a vous