Announcement

Collapse
No announcement yet.

Datenbank größe innerhalb eines monats fast verdreifacht!!!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datenbank größe innerhalb eines monats fast verdreifacht!!!

    am besten seht ihr euch das Bild im Anhang an, das beschreibt mein problem wol am besten.
    Ich habe keine ahnung woher dieser größenunterschied auf einmal kommt


    danke
    Flo
    Attached Files

  • #2
    Hallo Flo,

    was liefert

    EXEC sp_spaceused

    wenn Du das auf der Datenbank ausführst?
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Hallo!

      danke für deine Antwort.

      also ich hab den Befehl jetzt ausgeführt und auf der aktuellen datenbank bekomme ich folgendes:
      Code:
      database_name                                                                                                                    database_size      unallocated space
      -------------------------------------------------------------------------------------------------------------------------------- ------------------ ------------------
      XXXData                                                                                                                          879.81 MB          0.36 MB
      
      reserved           data               index_size         unused
      ------------------ ------------------ ------------------ ------------------
      869200 KB          715656 KB          49600 KB           103944 KB
      und auf einer sicherung vor ca einem monat
      Code:
      database_name                                                                                                                    database_size      unallocated space
      -------------------------------------------------------------------------------------------------------------------------------- ------------------ ------------------
      XXXData                                                                                                                          332.13 MB          0.65 MB
      
      reserved           data               index_size         unused
      ------------------ ------------------ ------------------ ------------------
      321320 KB          181088 KB          45568 KB           94664 KB
      mfg Flo

      Comment


      • #4
        Das sieht doch soweit "gut" aus; je nachdem, was man unter Gut versteht.

        "Unused" ist die leere Luft in der Datenbank; das hat sich kaum erhöht; daran liegt es also nicht.

        Man sieht klar, das die Nettodaten von 181 MB auf 715MB gestiegen sind, während sich die Indexdaten sich kaum erhöht haben.

        Da werden entweder reichlich Daten in eine nicht-indizierte Tabelle (Heap) geschrieben oder es sind BLOBs.!?
        Mit dem folgenden Script kannst Du selektieren, welche Tabelle wieviel Platz verbraucht.
        Lass es nach STAT.reserved_page_count DESC sortieren, dann ist die Größte oben.

        [highlight=sql]-- Detailsicht auf alle Datenobjekte mit Aufteilung der Partitionen
        -- mit Anzahl Zeilen und den verwendeten + reservierten
        -- Speicherplatz in KiloByte
        SELECT SCH.name AS SchemaName,
        OBJ.name AS ObjName, OBJ.type_desc AS ObjType,
        INDX.name AS IndexName, INDX.type_desc AS IndexType,
        PART.partition_number AS PartitionNumber,
        PART.rows AS PartitionRows,
        STAT.row_count AS StatRowCount,
        STAT.used_page_count * 8 AS UsedSizeKB,
        STAT.reserved_page_count * 8 AS RevervedSizeKB
        FROM sys.partitions AS PART
        INNER JOIN sys.dm_db_partition_stats AS STAT
        ON PART.partition_id = STAT.partition_id
        AND PART.partition_number = STAT.partition_number
        INNER JOIN sys.objects AS OBJ
        ON STAT.object_id = OBJ.object_id
        INNER JOIN sys.schemas AS SCH
        ON OBJ.schema_id = SCH.schema_id
        INNER JOIN sys.indexes AS INDX
        ON STAT.object_id = INDX.object_id
        AND STAT.index_id = INDX.index_id
        ORDER BY SCH.name, OBJ.name, INDX.name, PART.partition_number
        [/highlight]
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Danke!

          hab das Script jez ausgeführt und mir fällt auf das die 4 größten Tabellen jeweils SystemTabellen sind. Ist das normal das diese so großt sind?...bzw was kann ich dagegen tun?

          Code:
          SchemaName                                                                                                                       ObjName                                                                                                                          ObjType                                                      IndexName                                                                                                                        IndexType                                                    PartitionNumber PartitionRows        StatRowCount         UsedSizeKB           RevervedSizeKB
          -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------ --------------- -------------------- -------------------- -------------------- --------------------
          sys                                                                                                                              sysdercv                                                                                                                         SYSTEM_TABLE                                                 cl                                                                                                                               CLUSTERED                                                    1               610074               610074               477160               477320
          sys                                                                                                                              sysdesend                                                                                                                        SYSTEM_TABLE                                                 cl                                                                                                                               CLUSTERED                                                    1               610074               610074               68144                68232
          sys                                                                                                                              sysconvgroup                                                                                                                     SYSTEM_TABLE                                                 clst                                                                                                                             CLUSTERED                                                    1               610023               610023               23000                23112
          sys                                                                                                                              sysobjvalues                                                                                                                     SYSTEM_TABLE                                                 clst                                                                                                                             CLUSTERED                                                    1               6617                 6617                 16120                17552
          EDIT:

          hab jez mal das script so abgeändert das er mir die größen der Dbo bzw der sys tabellen seperat berechnet da bin ich zum ergebniss gekommen dass:

          sich dbo tabellen von 252592 KB auf 266224 KB, nur leicht vergrößtert haben
          hingegen die sys tabellen von 68792 KB auf 605816 KB ca 9 mal so groß geworden ist!

          Ich kenne mich da leider zu wenig aus, als das ich wüste was da in den systabellen gespeichert wird.
          Ich verwende in letzter zeit in meinem C# Programm Transaktionen, das ist das einzige was mir einfallen würde was ich anders mache als früher.

          hoffe du kannst mir helfen, bevor die datenbanke "explodiert"

          Danke
          Flo
          Zuletzt editiert von Da_Flo; 11.08.2009, 08:20.

          Comment


          • #6
            Hallo Flo,

            das lässt sich doch schnell ergoogle.
            1. Andere haben auch das Problem: http://social.msdn.microsoft.com/For...e-3d8306f01f06

            2. Die Tabellen gehören zum "Service Broker" vom SQL Server 2005.

            Ob es eine interne "Verlaufs-Cleanup" Funktion gibt, weiss ich noch nicht, muss ich erst auch noch suchen.
            Olaf Helper

            <Blog> <Xing>
            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

            Comment


            • #7
              Wenn Du den ersten Link gefolgt bist, dürftes Du schon wissen, das Du die Daten der Systemtabellen mit
              [highlight=SQL]select *
              FROM sys.conversation_endpoints AS CEP
              INNER JOIN sys.services AS SER
              ON CEP.service_id = SER.service_id[/highlight]
              einsehen kannst.
              Dann ist da noch ein Script zum CLEANUP; das ist aber mit Vorsicht zu geniessen.
              Ich habe das mit meinem Demo-Service Broker mal ausprobiert.
              Das Script wirft auch Messages aus der Queue, die noch nicht vollständig abgearbeitet wurden. Bei der Menge an Daten in der Zeit, dürfte Dein Broker reichlich frequentiert sein und da Messages rausschmeissen ...

              Diese abgewandelte Variante berücksicht nur welche, die vom "security_timestamp" her älter als 2 Tage sind. Es gibt auch ein Feld "state", nur steht bei mir da nie das erwartetet "CD" drin.

              Wie gesagt: Vorsicht & auf eigene Gefahr.
              [highlight=SQL]-- Wieviele DS sind in Verlaufstabelle?
              SELECT COUNT(*)
              FROM sys.conversation_endpoints AS CEP
              INNER JOIN sys.services AS SER
              ON CEP.service_id = SER.service_id;
              GO

              -- Mit Cursor über Verlauf einen CLEANUP machen.
              DECLARE @guid uniqueidentifier;

              DECLARE conversations CURSOR LOCAL
              FOR SELECT CEP.conversation_handle
              FROM sys.conversation_endpoints AS CEP
              INNER JOIN sys.services AS SER
              ON CEP.service_id = SER.service_id
              WHERE CEP.security_timestamp < DATEADD(d, -2, GetDate());

              OPEN conversations;
              FETCH NEXT FROM conversations INTO @guid
              WHILE @@FETCH_STATUS = 0
              BEGIN
              END CONVERSATION @GUID WITH CLEANUP
              FETCH NEXT FROM conversations INTO @guid
              END
              CLOSE conversations;
              DEALLOCATE conversations;
              GO

              -- Wieviele DS sind jetzt noch in Verlaufstabelle?
              SELECT COUNT(*)
              FROM sys.conversation_endpoints AS CEP
              INNER JOIN sys.services AS SER
              ON CEP.service_id = SER.service_id;[/highlight]

              P.S: Erwarte nicht, das die DB deswegen schrumpf. Der Platz wird nur frei gegeben und im Laufe der Zeit wieder verwendet.
              Olaf Helper

              <Blog> <Xing>
              * cogito ergo sum * errare humanum est * quote erat demonstrandum *
              Wenn ich denke, ist das ein Fehler und das beweise ich täglich

              Comment


              • #8
                Danke!

                jez hab ich zwar 500 mb unused space aber das is ja egal

                noch ne frage...kann ich das in Zukunft irgendwie verhindern das dies erneut passiert das die Broker tabellen überläufen?

                Comment


                • #9
                  Wenn Dich die Unused Space stört, kannst Du die DB mit
                  DBCC SHRINKDATABASE(0)
                  verkleinern; empfiehlt sich aber nicht, wie erwähnt wird der freie Platz wiederverwendet.

                  das in Zukunft irgendwie verhindern
                  Den Service Broker deaktivieren; dann werden nur die Applikationen, die das nutzen, nicht mehr funktionieren. Also keine gute Lösung

                  Das Cleanup-Script regelmäßig über eine Wartungsplan / zeitgesteuert über den SQL Server Agent ausführen lassen.
                  Einmal täglich in der Nacht sollte ja reichen.
                  Olaf Helper

                  <Blog> <Xing>
                  * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                  Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                  Comment


                  • #10
                    hmmmm. is das ein fehler von microsoft? oder is das der sinn dahinter das die datenbank größer und größer wird?

                    hmm....ja ok, werd ich das script wohl öfter ausführen lassen

                    Comment

                    Working...
                    X