Neu Alte Log-Einträge trotz anderer Einstellung in DB vorhanden

acut-fulfillment

Neues Mitglied
23. Januar 2023
2
0
Hallo,

die Überschrift ist nicht optimal, ich weiß, aber ist schwierig in wenigen Worten zusammen zu fassen.

Unser Problem ist, dass wir trotz entsprechender Einstellungen (Admin -> Globale Einstellungen -> Debugger/Protokolle -> Logdatein automatisch löschen), dass alle Logs älter als 14 Tage gelöscht werden sollen, noch viele alte Logs in der Datenbank haben. Nun sind wir heute Morgen in das Problem gelaufen, dass die Datenbank voll war, weshalb wir uns das mal genauer angeschaut haben.

Speziell sind hier zu nennen:

- tFullfillmentLog
- tAuftragLog
- tTrackingLogs
- tRechnungLog
- tLizenzlog

Ich denke mal, dass die Einstellung nicht für alle Log-Tabellen greift, aber zumindest für die tFulfillmentLog sollte das doch der Fall sein, da eine der Einstellungen "JTL- Ffn" heißt. Ich vermute, dass diese sich auf diese Tabelle bezieht.

Nun die Frage: Welche dieser Tabelle können wir mittel query selbständig leeren. Ich habe mir noch nicht alles im Detail angeschaut, aber ich würde mal denken, dass keine andere Tabelle irgendwelchen Foreign Keys auf Log-Tabellen besitzt und ich mir somit auch keine Gedanken um Constraints machen muss, oder weiß da jemand mehr?

Wir reden hier bei den o. g. Tabellen über knapp 6 GB, das ist eine Menge Holz...

Vielleicht weiß da jemand etwas mehr :)

Viele Grüße
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.296
352
Mich hat es interessert, ob wir auch so große Logdateien rumliegen haben.
Aber ich habe hier die von dir genannten Tabellen gar nicht (bis auf die tLizenzLog und da sind < 2000 Einträge drin)
Welche Wawi Version habt ihr denn?
 

acut-fulfillment

Neues Mitglied
23. Januar 2023
2
0
Wir nutzen aktuell noch die 1.6.44.1.

Hier mal zur Verdeutlichung ein Screenshot der größten Tabellen

jtl.PNG

Klar, tAuftragPosition fällt als Pivot Table hier natürlich raus und die tArtikelHistory hat ohne Frage ihre Berechtigung, so groß zu werden, wobei man diese sicherlich auch von Zeit
zu Zeit mal etwas "aufräumen" könnte. Aber der Rest....

Falls jemand anderes auf diesen Thread aufmerksam wird: Die obige Ansicht erreicht man mit folgender Query, die ich ebenfalls hier im Forum gefunden habe:

SELECT t.NAME AS TableName, s.Name AS SchemaName, p.rows AS RowCounts, SUM(a.total_pages) * 8 AS TotalSpaceKB, SUM(a.used_pages) * 8 AS UsedSpaceKB, (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB FROM sys.tables t INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.NAME NOT LIKE 'dt%' AND t.is_ms_shipped = 0 AND i.OBJECT_ID > 255 GROUP BY t.Name, s.Name, p.Rows ORDER BY TotalSpaceKB DESC

// Edit:

Sorry, habe den Teil irgendwie überlesen, in dem Du sagst, dass Du die Tabellen gar nicht hast: Die anderen Tabellen liegen in einem anderen Namensraum. Der "Haupt-Namensraum" scheint hier dbo zu sein, da liegt wohl alles oder das meiste relevante für die Wawi, wie es scheint, aber es gibt beispielsweise auch einen eigenen fürs FFN. Im MSSQL Server Management Studio solltest Du das im Table-Tree durch die verschiedenen Prefixe sehen, also einmal "dbo." und einmal "FulfillmentNetwork." (siehe Screenshot). Gibt noch viele weitere.
 
Zuletzt bearbeitet:

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.296
352
Ach so, deshalb konnte ich das nicht nachvollziehen.
Wir sind hier noch auf der 1.5
Sorry, dann kann ich dir nicht weiterhelfen. Ich weiß nicht, was in den genannten Tabellen drinsteht bzw. wie/wo die Daten verwendet werden.

man mit folgender Query, die ich ebenfalls hier im Forum gefunden habe:

Code:
SELECT
t.NAME AS TableName,
s.Name AS SchemaName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
WHERE
t.NAME NOT LIKE 'dt%'
AND t.is_ms_shipped = 0
AND i.OBJECT_ID > 255
GROUP BY
t.Name, s.Name, p.Rows
ORDER BY
TotalSpaceKB DESC
unabhängig von deiner Anfrage, welche Tabellen geleert werden können:
Ich glaube, dieses Skript würde dir für jeden gefilterten Index mehrmals den Namen der entsprechenden Tabelle zeigen. Kann das sein?
Auch wenn die Tabelle partitioniert wäre, würde sie doppelt angezeigt werden.
Hat jetzt zwar nichts mit deiner konkreten Aufgabenstellung zu tun, aber prüfe doch mal wieviel Datensätze dein Skript zurückgibt und vergleiche mit der Anzahl der Tabellen:
select count(*) FROM eazybusiness.information_schema.tables WHERE table_type = 'BASE TABLE'
 

Ähnliche Themen