Die Umbraco-Datenbank wächst schnell, wenn Contour-Formulare verwendet werden

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