Scroll Top

Datenbankoptimierung per Wartungsplan (SQL-Script)

Letzte Änderung:24. Juli 2024
Voraussichtliche Lesezeit: 2 min

Warum ein Wartungsplan für die SQL Datenbank notwendig ist

Eine Datenbank, die von einem SQL Server zur Verfügung gestellt wird, enthält zahlreiche Datensätze – ähnlich den Kapiteln eines Buches. Damit die benötigten Datensätze schnell gefunden werden können, werden Indizes und Statistiken verwendet, vergleichbar mit dem Inhaltsverzeichnis des Buches sowie Lesezeichen. Da sich die Datensätze jedoch im Vergleich zu einem gedruckten Buch ständig verändern, müssen Indizes und Statistiken stets aktuell gehalten werden. Und zwar am besten vollautomatisch! Denn wenn Indizes und Statistiken nicht regelmäßig, am besten durch einen Wartungsplan, aktualisiert werden, leidet die Datenbank-Performance. AMTANGEE Anwender ohne entsprechenden Wartungsplan können dieses Verhalten z.B. bei einem verlangsamten Wechsel der E-Mail-Kategorien beobachten.

Zur Optimierung der Datenbank-Performance haben wir für Sie ein SQL-Script vorbereitet, das Ihre Indizes und Statistiken auf den neuesten Stand bringt. Wie ein Wartungsplan erstellt wird, können Sie in unserem allgemeinen DevInside-Beitrag „So erstellen Sie einen Backup-Plan für Ihre AMTANGEE Datenbank“ nachlesen.

SQL-Script zur Optimierung der Datenbank-Performance

Das folgende Script wird im SQL Management Studio eingegeben. ACHTUNG! Arbeiten an der Datenbank sollten nur von Nutzern mit Erfahrung in der Administration von Datenbanken vorgenommen werden.

DECLARE @objectid int;
DECLARE @indexid int;
DECLARE @partitioncount bigint;
DECLARE @schemaname nvarchar(130);
DECLARE @objectname nvarchar(130);
DECLARE @indexname nvarchar(130);
DECLARE @partitionnum bigint;
DECLARE @partitions bigint;
DECLARE @frag float;
DECLARE @db_id int;
DECLARE @MessageText nvarchar(255);
DECLARE @command nvarchar(4000);
-- Conditionally select tables and indexes from the sys.dm_db_index_physical_stats function
-- and convert object and index IDs to names.
SELECT @db_id = (SELECT DB_ID())
SELECT
object_id AS objectid,
index_id AS indexid,
partition_number AS partitionnum,
avg_fragmentation_in_percent AS frag
INTO #work_to_do
FROM sys.dm_db_index_physical_stats (@db_id, NULL, NULL , NULL, 'LIMITED')
WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0;
-- Declare the cursor for the list of partitions to be processed.
DECLARE partitions CURSOR FOR SELECT * FROM #work_to_do;
-- Open the cursor.
OPEN partitions;
-- Loop through the partitions.
WHILE (1=1)
BEGIN;
FETCH NEXT
FROM partitions
INTO @objectid, @indexid, @partitionnum, @frag;
IF @@FETCH_STATUS < 0 BREAK;
SELECT @objectname = QUOTENAME(o.name), @schemaname = QUOTENAME(s.name)
FROM sys.objects AS o
JOIN sys.schemas as s ON s.schema_id = o.schema_id
WHERE o.object_id = @objectid;
SELECT @indexname = QUOTENAME(name)
FROM sys.indexes
WHERE  object_id = @objectid AND index_id = @indexid;
SELECT @partitioncount = count (*)
FROM sys.partitions
WHERE object_id = @objectid AND index_id = @indexid;
-- 30 is an arbitrary decision point at which to switch between reorganizing and rebuilding.
IF @frag < 30.0 SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REORGANIZE'; IF @frag >= 30.0
SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD';
IF @partitioncount > 1
SET @command = @command + N' PARTITION=' + CAST(@partitionnum AS nvarchar(10));
EXEC (@command);
Select @MessageText = (Select  N'Executed: ' + @command);
RAISERROR( @MessageText,0,1)  with NOWAIT
END;
-- Close and deallocate the cursor.
CLOSE partitions;
DEALLOCATE partitions;
-- Drop the temporary table.
DROP TABLE #work_to_do;
GO
datenbankoptimierungserverservicesqlsupport
War dieser Artikel hilfreich?
Gefällt mir nicht 0
Zurück: Fehlerhafte Datenbank reparieren
Weiter: AMTANGEE Datenbank auf neuen Server umziehen
Privacy Preferences
When you visit our website, it may store information through your browser from specific services, usually in form of cookies. Here you can change your privacy preferences. Please note that blocking some types of cookies may impact your experience on our website and the services we offer.