SelectEtoile : Base de connaissance SGBD

Posts Tagged 'explicit'

Autocommit contre Transaction explicite sous SQLServer

Le but de l'article est de démontrer la différence de performance entre une mise à jour faite en commit implicit ou autocommit et une transaction explicite.

C'est un exemple un peu extrême mais ça montre bien la différence de temps.

 

Commençons par se créer une petite table :

create table matable (i int,c varchar(50))
create clustered index ind on matable(i)
set statistics io,time on
go

 

Code de la requête avec AUTOCOMMIT :

-- AUTOCOMMIT ou COMMIT IMPLICIT
DBCC SQLPERF ('sys.dm_os_wait_stats', CLEAR)
declare @i int
select @i=0
WHILE @i < 60000
Begin
INSERT INTO matable values (1,'Name')
select @i=@i+1
End
select * from sys.dm_os_wait_stats s where s.wait_type='WRITELOG'

Temps d'execution : 40 secondes

Résultats :

wait_type      waiting_tasks_count    wait_time_ms    max_wait_time_ms    signal_wait_time_ms
WRITELOG    60045                       34054              260                         671

 

Code de la requête avec TRANSACTION EXPLICITE :

-- EXPLICIT TRANSACTION
DBCC SQLPERF ('sys.dm_os_wait_stats', CLEAR)
declare @i int
select @i=0
BEGIN TRAN
WHILE @i < 60000
Begin
INSERT INTO matable values (1,'Name')
select @i=@i+1
End
COMMIT TRAN
select * from sys.dm_os_wait_stats s where s.wait_type='WRITELOG'

Temps d'execution : 10 secondes

Résultats :

wait_type      waiting_tasks_count    wait_time_ms    max_wait_time_ms    signal_wait_time_ms
WRITELOG    1                              5                     5                             0

 

On va donc 4 fois plus vite avec une transaction explicite qu'en AUTOCOMMIT.

Cela s'explique très bien avec les temps d'attentes sur la Wait Task 'WRITELOG'. En effet, lors de la 1ère requête, on passe 34 secondes sur 40 à écrire dans le log.

'WRITELOG' indique que SQL serveur attend que les opérations IO relatives au transaction log soient terminées.

Il est généralement bon indicateur d'un problème de performance disque.

 

J'espère que ca vous a plu.