Bonjour,
Voilà, nous avons eu une grosse maintenance au niveau de notre gestion des prix.
Sur le principe, il n y a rien a signaler, en revanche, je dois maintenant créer les relations ventes prix rétroactivement sur les 30 dernière années.
Si je lance ma requête d'update j'ai estimer à ~80 jours de travail non stop en me basant sur le traitement de 50'000 records.
C'est bien évidement inenvisageable d'avoir une requête bloquante qui tourne pendant 80 jours (même 30 secondes en journée c'est trop).
Du coup j'ai fais une mesure en désactivant tous les triggers on update de cette table. Là je descend à ~6 jours.
Pour réglé le problème du blocage j’exécute des requêtes successives qui durent entre 2 et 4 secondes dans une séries de job du SQL Agent.
Je n'ai malheureusement qu'un créneau de 4h par nuit ou je suis certains de pouvoir coupé les triggers sans risque.
Je me demande donc si en englobant l'activation et la désactivation des trigger dans une même transaction, mon système restera fiable ?
J'imagine une requête du genre :
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 begin transaction T1; disable trigger [Trigger1] on [La table des ventes]; disable trigger [Trigger2] on [La table des ventes]; WITH V AS (SELECT top 1000 IdVente,Ref,IdPrix from [La table des ventes]WHERE IdPrix is null) Update V SET V.IdPrix=Px.IdPrix FROM V left JOIN [Le nouveau prix] P on P.Ref=V.Ref; enable trigger [Trigger1] on [La table des ventes]; enable trigger [Trigger2] on [La table des ventes]; commit Transaction T1; GO 10000;
Partager