none
Partitionierung und Page Compression RRS feed

  • Frage

  • Hallo,

    ich verwende SQL Server 2012 (SP3, CU6, Enterprise Edition) und habe eine Tabelle mit aktivierter Page Compression. Das Schema ist wie folgt:

    CREATE TABLE [DETAILED_ARCHIVE] (
      [DEVICE_ID] [uniqueidentifier] NOT NULL,
      [LOG_DATETIME] [datetime2](2) NOT NULL,
      [MEASURE_ID] [uniqueidentifier] NOT NULL,
      [MEASURE_VALUE] [bigint] NULL,
      CONSTRAINT [PK_DETAILED_ARCHIVE] PRIMARY KEY CLUSTERED
      (
        [DEVICE_ID] ASC,
        [LOG_DATETIME] ASC,
        [MEASURE_ID] ASC
      ) WITH (DATA_COMPRESSION = PAGE)
    )

    Für diese Tabelle soll nun Partitionierung auf monatlicher Basis eingerichtet werden. Für jede Partition habe ich eine Filegroup erstellt und eine entsprechende Partition-Function (auf Basis datetime2(2)) sowie ein Partition-Schema angelegt.

    Versuche ich nun den Clustered-Index auf dem Partition-Schema neu anzulegen (mit DROP_EXISTING), womit die Tabelle partitioniert werden sollte, dann explodiert der Speicherplatzbedarf in den neuen Filegroups für die Partitionen, obwohl ich für alle Partitionen weiterhin DATA_COMPRESSION = PAGE angebe.

    Folgenden Befehl verwende ich:

    CREATE UNIQUE CLUSTERED INDEX [PK_DETAILED_ARCHIVE] ON [DETAILED_ARCHIVE]
    (
    	[DEVICE_ID] ASC,
    	[LOG_DATETIME] ASC,
    	[MEASURE_ID] ASC
    )
    WITH (DROP_EXISTING = ON, ONLINE = OFF, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 100, DATA_COMPRESSION = PAGE)
    ON [PS_DateTime_Monthly_Detailed]([LOG_DATETIME])
    

    Die ursprüngliche Tabelle hat eine Größe von 160GB, die Größe der neuen Filegroups für die Partitionen ist inzwischen auf 590GB angewachsen und der Vorgang trotzdem noch nicht abgeschlossen.

    Kann es sein, dass der neue partitionierte Clustered Index zunächst unkomprimiert angelegt wird und dann erst im Nachhinein oder durch einen Rebuild die Komprimierung angewendet würde? Ich werde mir das wohl nächste Woche mit einem kleineren Testdatensatz nochmal genauer ansehen, aber vielleicht hat hier ja auch schon jemand eine Idee oder einen Hinweis.

    Vielen Dank!

    Samstag, 28. Januar 2017 12:53

Antworten

Alle Antworten

  • Update: Nachdem die Erzeugung des neuen Clustered Index auf dem Partitionierungschema nun abgeschlossen ist, ist auch der Speicherplatzbedarf wieder in Ordnung. Effektiv genutzt sind nun 160GB. Leider wurden die Dateien der Filegroups offenbar temporär massiv vergrößert, so dass die Dateien 725GB für effektiv 160GB Daten belegen.

    Hat jemand eine Idee, wie ich dies vermeiden kann?

    Mein Problem ist hier, dass es noch eine zweite Tabelle mit 872GB Daten gibt, welche partitioniert werden soll. Hier würde diese temporär benötige Dateigröße den verfügbaren Platz überschreiten (für die 872GB würden analog hochgerechnet ca. 4TB benötigt werden).

    Montag, 30. Januar 2017 08:41
  • Hallo Christian

    Deine Beobachtung ist ganz richtig.

    Und als Abhilfe: Versuch's doch mal mit "

     ...SORT_IN_TEMPDB = ON,...

    viel Erfolg


    Andreas Wolter (Blog | Twitter)
    MCSM: Microsoft Certified Solutions Master Data Platform/SQL Server 2012
    MCM SQL Server 2008
    MVP Data Platform
    www.SarpedonQualityLab.com | www.andreas-wolter.com

    Mittwoch, 1. Februar 2017 17:48