Montag, 14. Juli 2014

Freien Speicher in SQL Partitionen finden und freigeben.

Beim automatischen Partitionieren fällt ganz logisch immer noch etwas freier Speicher an.
Wenn man jetzt große Partitionen hat, können 8% auf einmal schon ~700 MB darstellen - das jetzt in Wochenpartitionen und wir reden bei 52 Wochen von über 35 GB.

Damit wir jetzt Partition für Partition durchprüfen müssen, machen wir das via Script.

SELECT * FROM (
--get Files, Size, FreeSpace and Command for Shrink this Files
SELECT Name
,ShrinkCommand = 'DBCC SHRINKFILE (N''' + name + ''' , 0)' -- if 0 used, SQL Server shrink to max possible
,Size = CAST(CAST(ROUND(CAST(size AS DECIMAL) * 8.0 / 1024.0, 2) AS DECIMAL(18,2)) AS NVARCHAR)
,FreeSpace =
CAST(
CAST(ROUND(CAST(size AS DECIMAL) * 8.0 / 1024.0, 2) AS DECIMAL(18,2))
- CAST(FILEPROPERTY(name, 'SpaceUsed') * 8.0 / 1024.0 AS DECIMAL(18,2)
) AS NVARCHAR)
FROM sys.database_files
) InnerSql
WHERE CAST(InnerSql.FreeSpace AS DECIMAL) > 200
-- i know, cast to decimal > nvarchar > back to decimal ;)

Bei produktiven Systemen auf jeden Fall vorher testen! Und Support-Fenster planen, geht an die Ressourcen!

Evtl. hilft es dem Einen oder Anderen...

Keine Kommentare: