Die Umbraco-Datenbank wächst schnell, wenn Contour-Formulare verwendet werden
Inhaltsverzeichnis
Symptom
Die Umbraco-Datenbank wächst stetig an, weil Multi-Step-Formulare von Webseiten-Besuchern oder Spammern nicht abgeschlossen werden, sondern im Zustand „PartiallySubmitted“ verbleiben.
Ursache und Lösung
Bei einer großen Besucheranzahl, die Contour-Formulare mit mehreren Schritten/Seiten ausfüllen, häufen sich Daten von Formularen an, die nie vollständig abgeschlossen, also nicht bis zum letzten Schritt ausgefüllt wurden. Diese Daten verbleiben in der Umbraco-Datenbank in den Contour-Tabellen
• UFRecords
• UFRecordsXml
• UFRecordData*
Die Menge der Daten in diesen Tabellen wächst daher immer weiter. Bei vielen Umbraco-Installationen mit Contour-Formularen können diese Daten einen großen Anteil an der Gesamtgröße der Datenbank ausmachen.
Eine Lösung des Problems ist, unvollständige Formulardaten in regelmäßigen Abständen aus der Datenbank zu entfernen. Ein einfaches Datenbank-Skript übernimmt diese Aufgabe:
-- ==========================================================================
-- Author: m.a.x. Informationstechnologie AG
-- Create date: 2015-09-16
-- Description: Deletes all Contour records for the given form which are older
-- than @MaxAge days.
-- Possible @FormState values are:
-- 0 = Opened
-- 1 = Resumed
-- 2 = PartiallySubmitted (default)
-- 3 = Submitted
-- 4 = Approved
-- 5 = Deleted
-- @Limit (default: 50) limits the number of affected records.
-- ==========================================================================
CREATE PROCEDURE [dbo].[DeleteContourRecords]
@FormId UNIQUEIDENTIFIER,
@MaxAge INT = 50,
@FormState INT = 2,
@Limit INT = 50
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRANSACTION
-- Temporary table to store record IDs
CREATE TABLE #records (
id UNIQUEIDENTIFIER
)
-- Select records
INSERT INTO #records
SELECT TOP(@Limit)
u.Id
FROM UFRecords u
WHERE updated < GETDATE()-@MaxAge AND u.State = @FormState AND u.Form = @FormId
ORDER BY u.updated
-- Delete records from data table
DELETE FROM UFRecords WHERE id IN (SELECT id FROM #records)
-- Delete records from XML cache table
DELETE FROM UFRecordsXml WHERE id IN (SELECT id FROM #records)
-- Remove temporary table
DROP TABLE #records
COMMIT
END
Als Stored Procedure aufgerufen, können damit sehr einfach unvollständige Formulardaten (Partially-Submitted = 2), die älter als 180 Tage sind, gelöscht werden. Beispiel:
EXECUTE DeleteContourRecords '8B045F53-352A-4708-9A36-0DC8D67FD1AB' , 180, 2, 100
Weitere Informationen
Mehr Informationen zu unseren Softwarelösungen und unserem Service finden Sie auf
www.max-it.de/Softwarelösungen
Kontakt
Wenn Sie Fragen oder Anmerkungen zu diesem Artikel haben, wenden Sie sich bitte an uns:
techcorner@max-it.de.
Über m.a.x. Informationstechnologie AG:
Als etabliertes Münchner Systemhaus zeichnen wir uns seit 1989 als verlässlicher IT-Partner mittelständischer und großer Unternehmen aus. Unser Portfolio reicht von IT- Services über individuelle Softwareentwicklung bis hin zur ERP-Beratung.
Tags
Umbraco, Contour, SQL Server, Database Maintenance