Änderungsprotokollposten (Change Log Entry)

9. Mai 2023 08:40

Hallo Zusammen

Ich habe zwei Test Mandanten wo ich gerne das Änderungsprotokollposten (Change Log Entry) komplett löschen möchte.
beide haben rund 15 Mill Einträge drin.

Wenn ich das ja über Nav selber lösche dauert das ja ewig. Wie kann ich das über den SQL auf eine schnelle Art und Weise löschen ?

Danke Euch
Dan

Re: Änderungsprotokollposten (Change Log Entry)

9. Mai 2023 10:20

Code:
TRUNCATE TABLE [Mandant$Change Log Entry]

Re: Änderungsprotokollposten (Change Log Entry)

9. Mai 2023 10:26

Hi Dan,

ich hatte das gleiche Probleme, jedoch waren es bei mir ca. 440 Mio. Datensätze. Ich habe eine Codeunit in die Aufgabenwarteschlange eingebunden. Diese hatte im Hintergrund die Tabelle gelöscht.
Wichtig: dabei wurde nach X Löschungen immer ein Commit gemacht! Ich hatte sicherheitshalber auch noch ein "kurzes" Sleep nach X Löschungen eingebaut. :oops:

Vlt. ist dieses Vorgehen auch für dich geeignet.

Gruß Bastian

Re: Änderungsprotokollposten (Change Log Entry)

9. Mai 2023 11:05

Dafür ist NAV einfach nicht gebaut. Das kann gar nicht schnell gehen. (Dafür hat es andere Qualitäten) Deswegen ja die SQL Datenbank. Glaube mir, mit dem Truncate sind die Daten schneller weg, als du Aufgabenwarteschlange sagst.

Re: Änderungsprotokollposten (Change Log Entry)

9. Mai 2023 11:17

Bei einem Echtmandanten würde ich das eher auch über NAV mit Commit/Sleep häppchenweise erledigen, auch um das aktuelle Protokoll der letzten Wochen sicher zu erhalten. Im Testmandanten kann man das natürlich entspannter sehen und alles löschen.

Falls man über SQL nicht alles löschen möchte, muss man statt mit TRUNCATE mit DELETE arbeiten und einen Filter setzen z.B. für Cronus AG bis Posten 100000
USE [<Database Name>]
GO
delete from [dbo].[CRONUS AG$Change Log Entry] where [Entry No_] < 100000

Re: Änderungsprotokollposten (Change Log Entry)

9. Mai 2023 11:26

Hallo,

wenn du aber 15 Mio- Einträge hast, dauert das auch auf dem SQL-Server einige Zeit.

Wenn du das unter der Fahrt machen musst/willst, dann solltest du Bastians Lösung als SQL-Skript benutzen. Das funktioniert eigentlich ganz gut ohne die Anwender wirklich zu behindern.

Gruß fiddi

Re: Änderungsprotokollposten (Change Log Entry)

9. Mai 2023 11:47

Danke für Eure Antworten

Wie macht Ihr das beim Scharfen Mandanten ?
Ich habe bis jetzt immer Jährlich das Protokoll bis an ein Jahr zurück gekürzt.
Dies habe ich immer übers Nav gemacht mit Protokoll löschen mit der Datum Eingabe.
Und dort habe ich das immer so 2 Monate zusammen gelöscht damit das auch mal wieder fertig wird :-)

Das ist echt mühsam und eigentlich wäre es wirklich noch cool eine Automatische Löschung zu haben in der Aufgabenwarteschlagen mit einer Codeunit wo man immer die Zeile die älter als ein Jahr sind automatisch wegputzen könnte.

@BastianB
Dürfte ich mal einen Blick in deine Codeunit reinwerfen wie du das gemacht hast ? Würde das bei meinem Scharfen Mandant auch so lösen.

@Michael / Kowa
Wo im SQL Server führe ich den befehlt aus:
TRUNCATE TABLE [Mandant$Change Log Entry]
oder
USE [<Database Name>]
GO
delete from [dbo].[CRONUS AG$Change Log Entry] where [Entry No_] < 100000

Wenn ich das auf dem SQL Server ausführe was denk ihr wieviel mal schneller werden die Datensätze gelöscht ?

Danke Euch allen
Cheers Dany

Re: Änderungsprotokollposten (Change Log Entry)

9. Mai 2023 11:50

Hallo,

es wird auf dem SQL-Server um einiges schneller sein und weniger behindern, wenn man es richtig programmiert.

Aber wenn du das noch nie gemacht hast, würde ich die Finger davon lassen das im SQL zu machen.

Gruß fiddi

Re: Änderungsprotokollposten (Change Log Entry)

9. Mai 2023 12:51

riffaquarium hat geschrieben:Wenn ich das auf dem SQL Server ausführe was denk ihr wieviel mal schneller werden die Datensätze gelöscht ?

Also entwender du installierst dir das SQL Management Studio und erstellst eine neue Abfrage. Oder du instalierst dir in VSCode die mssql Extension.

riffaquarium hat geschrieben:Wenn ich das auf dem SQL Server ausführe was denk ihr wieviel mal schneller werden die Datensätze gelöscht ?

Also mit truncate ist die Tabelle eigentlich fast sofort leer.
Beim delete dauert es auch entsrprechend des Filters und der Serverperformance. Keine Ahnung wie lang genau. Deutlich kürzer als über den NAV-Server.

fiddi hat geschrieben:...Aber wenn du das noch nie gemacht hast, würde ich die Finger davon lassen das im SQL zu machen...

Dafür sind ja Test-Datenbanken da. ;-) Man sollte nur aufpassen, dass man die richtige Verbindung und Mandanten hat.

Re: Änderungsprotokollposten (Change Log Entry)

11. Mai 2023 16:32

Ich stand vor demselben Problem für unsere produktiven Mandanten.
Das Löschen vieler Datensätze (in meinem Fall auch diverse Mandanten mit jeweils mehreren hundert Millionen Zeilen) belastet den SQL-Server sehr und sorgt auch für ein rasantes Anwachsen des Transaktionsprotokolls, wenn zwischendurch kein commit erfolgen kann.

Daher lösche ich das Protokoll in Teilen zu jeweils 100.000 Zeilen. Das dauert nur wenige Sekunden, dann der nächste Teil usw.
Das Skript löscht in der Schleife bis alle zu löschenden Datensätze entfernt wurden. Das Transaktionsprotokoll bleibt klein und die Auslastung des SQL-Servers hält sich in Grenzen.

Beispiel für das Löschen aller Änderungsprotokollposten vor 2023.

Code:
DELETE TOP(100000) from [<Mandant>$Change Log Entry]  WHERE YEAR([<Mandant>$Change Log Entry].[Date and Time]) < 2023
WHILE @@rowcount > 0
    BEGIN
    DELETE TOP(100000) from [<Mandant>$Change Log Entry] WHERE YEAR([<Mandant>$Change Log Entry].[Date and Time]) < 2023
    END

Re: Änderungsprotokollposten (Change Log Entry)

12. Mai 2023 16:17

Wowwww

Also bei mir mit 47 Milionen Sätze ging das 1ne Sekunde und weg waren die :-)

Code:
TRUNCATE TABLE [Mandant$Change Log Entry]


Sehr nice :lol: :lol:

Re: Änderungsprotokollposten (Change Log Entry)

12. Mai 2023 17:33

Hallo,

man will aber ja manchmal auch noch ein paar behalten, und dann dauert das auch. :mrgreen: :roll:

Gruß Fiddi

Re: Änderungsprotokollposten (Change Log Entry)

12. Mai 2023 17:48

Ja klaro

aber in meinen Test Mandanten und Test Datenbanken kicke ich die raus brauchen ja nur platz für nix :-D
In der scharfen möchte ich immer 1 Jahr zurück behalten konnte so schmal Langfinger überführen hatte ich das nicht gehabt hätte ich das nicht beweisen können darum immer schön Loggen haha...

Jetzt bin ich aber trotzdem nicht ganz sicher ob ich für meinen scharfen Mandanten wo ich ein Jahr zurück behalten möchte ob ich die älteren mit einer Codeunit täglich weg gputzen sollte mit der Aufgabenwarteschlange es wären dann ja täglich auch nicht so viele Datensätze.


fiddi hat geschrieben:Hallo,

man will aber ja manchmal auch noch ein paar behalten, und dann dauert das auch. :mrgreen: :roll:

Gruß Fiddi

Re: Änderungsprotokollposten (Change Log Entry)

12. Mai 2023 18:07

Hallo,

wenn du das täglich machen willst, du ein Zeitfenster hast, das groß genug ist, dann kannst du das auch mit eine Codeunit machen. Das hast du besser im Blick, als ein Job der irgendwo auf einem SQL-Server läuft, nach dem keiner mehr schaut.

Gruß Fiddi