Automatische Vergrößerung der "tempdb"-Systemdatenbank

In MS SQL Server 2005 wird für die "tempdb"-Systemdatenbank mehr Speicherplatz benötigt als in früheren Versionen von SQL Server, dies kommt zu einem durch eine erhöhte Leistungsverbesserung , sowie enthaltender neuer Features zustande (siehe BOL tempdb). Somit sollte und muss dieser Systemdatenbank auch mehr Aufmerksamkeit geschenkt werden.

Die "tempdb"-Systemdatenbank wird bei jedem Start des MS SQL Servers neu angelegt. In der Standardinstallation wird die entsprechende Datendatei "tempdv" mit 8MB und das entsprechende Transaktionsprotokoll "templog" mit 1MB initialisiert, weiterhin wird die jeweilige Automatische Vergrößerung der Dateigröße auf 10 Prozent und die maximale Dateigröße auf unbeschränkt Vergrößerbar gesetzt.

Sicherlich werden Sie in einem Produktivsystem festgestellt haben - bei aktivierter Automatischer Vergrößerung -, das die eingestellten Anfangsgrößen der "tempdb"-Systemdatenbank schnell überschritten werden. Viele Datenbank-Administratoren wissen, dass die Automatische Vergrößerung, sprich das dynamische Dateiwachstum eine teure Dateioperation darstellt. Es wird mehr CPU-Zeit benötigt, Lese- und Schreibvorgänge müssen für die Dateivergrößerung blockiert werden und die übrigen Aktivitäten verlangsamt werden. Denken Sie zum Beispiel an eine Benutzerdatenbank, die eine Sortierung in der "tempdb"-Systemdatenbank ausführen lässt, der Telefonanruf eines aufgebrachten Benutzers sei Ihnen gewiss.

Alte und aktuelle Größe der "tempdb"-Systemdatenbank-Dateien?

Es ist somit sinnvoll, die alte und aktuelle Größe der "tempdb"-Systemdatenbank des MS SQL Servers zu erfahren. Das Ergebnis hilft Ihnen bei der Überlegung, ob die Datendatei tempdv oder das Transaktionsprotokoll templog größer dimensioniert werden sollte. Die unten aufgeführte Abfrage hilft Ihnen dieses herauszufinden, wobei der Status der Automatischen Vergrößerung mit abgefragt wird.

SELECT
	alt.filename AS 'FileName',
	alt.name AS 'LogicalName',
	alt.size * 8.0 / 1024.0 AS 'OriginalSizeInMB',
	files.size * 8.0 / 1024.0 AS 'CurrentSizeInMB',
	'AutoGrowth' =
		CASE files.max_size
			WHEN 0 THEN 'Autogrowth is off.'
			WHEN -1 THEN 'Autogrowth is on.'
			ELSE 'Log file will grow to a maximum size of 2 TB.'
		END,
	files.growth AS 'GrowthValue',
	'GrowthIncrement' = 
		CASE
			WHEN files.growth = 0 THEN 'Size is fixed and will not grow.'
			WHEN files.growth > 0 AND files.is_percent_growth = 0 
				THEN 'Growth value is in 8-KB pages.'
			ELSE 'Growth value is a percentage.'
		END
FROM
	master.sys.sysaltfiles alt INNER JOIN tempdb.sys.database_files files ON
	alt.fileid = files.file_id
WHERE
	DBID = DB_ID('tempdb')
	AND alt.size <> files.size --*

* beachten Sie das nicht veränderte Größen mit dieser Einschränkung von der Ergebnismenge ausgeschlossen werden.

Die Spalte «alt.size» in der sys.sysaltfiles-Tabelle enthält die Größe der Dateien, als der MS SQL Server das letzte Mal gestartet wurde. Die Spalte «files.size» in der sys.database_files-Tabelle speichert hingegen die aktuelle Größe der Dateien. Falls bei der Datendatei und/oder dem Transaktionsprotokoll die automatische Dateivergrößerung eingestellt ist, werden die Größen mit größter Wahrscheinlichkeit unterschiedlich sein.

Das Ergebnis dieser Abfrage liefert sieben Spalten: den physischen Dateinamen, den logischen Namen, die alte und die aktuelle Größe der Dateien und den Zustand inkl. Einstellungen für die automatische Vergrößerung.

Falls Sie nun feststellen, dass die Datendatei der "tempdb"-Systemdatenbank von 8 MB beim letzten Start des MS SQL Servers auf 500 MB angewachsen ist, können Sie die Dateigröße manuell (SQL Server Management Studio oder ALTER DATABASE-Anweisung) auf 501 MB setzen, so dass beim nächsten Start des MS SQL Servers die Datendatei mit einer Größe von 501 MB angelegt wird und sie die Anfangs aufgezeigten Engpässe vermeiden.

Das Script finden Sie als Anhang zu diesem Artikel.

CU
Torsten Schuessler