[MS SQL] Trigger veroorzaakt volle transaction logs

Pagina: 1
Acties:

  • marco_balk
  • Registratie: April 2001
  • Laatst online: 20-06 21:52
Ik heb voor een tabel een trigger geschreven die bij insert/update van data ook een timestamp moet wegschrijven. Maar sinds deze trigger loopt de transaction-log om de haverklap vol. Wat is er mis met deze trigger? De trigger verwijderen kan niet, omdat we afhankelijk zijn van goed bijgehouden timestamp en het systeem is te complex om alle queries aan te passen om timestamps mee te geven.
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CREATE TRIGGER [dbo].[UpdateJelAccounts] ON  [dbo].[jelACCOUNTS] AFTER INSERT, UPDATE
AS 
BEGIN
    SET NOCOUNT ON;
    DECLARE @date VARCHAR(14)

    IF UPDATE(UpdateDate)
    BEGIN
        RETURN
    END

    SELECT @date =
        CAST(YEAR(GETDATE()) AS VARCHAR) +
        CASE WHEN (LEN(MONTH(GETDATE())) = 1) THEN '0' + cast(month(getdate()) as varchar) ELSE cast(month(getdate()) as varchar) END +
        CASE WHEN (LEN(DAY(GETDATE())) = 1) THEN '0' + cast(day(getdate()) as varchar) ELSE cast(day(getdate()) as varchar) END +
        CASE WHEN (LEN(DATEPART(hh,GETDATE())) = 1) THEN '0' + cast(datepart(hh,getdate()) as varchar) ELSE cast(datepart(hh,getdate()) as varchar) END +
        CASE WHEN (LEN(DATEPART(mi,GETDATE())) = 1) THEN '0' + cast(datepart(mi,getdate()) as varchar) ELSE cast(datepart(mi,getdate()) as varchar) END +
        CASE WHEN (LEN(DATEPART(ss,GETDATE())) = 1) THEN '0' + cast(datepart(ss,getdate()) as varchar) ELSE cast(datepart(ss,getdate()) as varchar) END
        
    UPDATE jelACCOUNTS
    SET UpdateDate = @date
    FROM jelACCOUNTS j
    INNER JOIN Inserted i ON j.Email = i.Email
END


Het klopt dat het timestamp veld een varchar is. Tja, oud systeem :X
Daar kunnen we nu helaas niets aan doen.

Met die UPDATE(UpdateDate) probeer ik te voorkomen dat wanneer de kolom UpdateDate toch al in een insert/update statement zit, deze dubbel wordt gezet. En ook ter voorkoming van een eventuele loop (dat ie zichzelf gaat wijzigen omdat hij gewijzigd is, enz).

Extra info: het is voor een site die zo'n duizend bezoekers per dag ontvangt.

Is er iets mis met mijn trigger of moet ik het ergens anders zoeken? :?

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Gebruik je cascading triggers?

Nu met Land Rover Series 3 en Defender 90


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:48
was ook mijn eerste idee. :)

(Je trigger wijzigt iets in de tabel, waardoor de trigger opnieuw getriggered wordt ... etc... )

Cascading triggers uitzetten, of anders je trigger herschrijven naar een instead of trigger, waarbij je gewoon het statement dat moet uitgevoerd worden, in je trigger nog eens schrijft, maar dan door ervoor te zorgen dat je timestamp goed weggeschreven wordt.

https://fgheysels.github.io/


  • marco_balk
  • Registratie: April 2001
  • Laatst online: 20-06 21:52
Ik gebruik naar ik weet geen cascading triggers, maar aangezien ik dat dus niet zeker weet, ga ik daar wat dieper naar zoeken.

Die instead of triggers heb ik ook de revue laten passeren. Alleen worden er vele verschillende statements op de tabellen uitgevoerd, dus een instead of trigger lijkt mij dan ook niet van toepassing.

  • marco_balk
  • Registratie: April 2001
  • Laatst online: 20-06 21:52
Ik zie zojuist dat een van de triggers (die een identieke functie hebben, maar beide op een andere tabel) een relatie legt met een verkeerde tabel. Dit heb ik gewijzigd en ben nu aan het kijken of dit de bottleneck is geweest...

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

ipv

UPDATE jelACCOUNTS
SET UpdateDate = @date
FROM jelACCOUNTS j
INNER JOIN Inserted i ON j.Email = i.Email

(een update op je eigen tabel --> cascading!)

kun je toch new.updateDate=@date gebruiken?

/edit: Werkt dit op een after trigger? after triggers gebruik ik meestal voor validaties, before om waarden te vullen.

[ Voor 21% gewijzigd door leuk_he op 12-02-2009 15:57 ]

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.

Pagina: 1