none
spazio DB su disco RRS feed

  • Domanda

  • Buongiorno,

    da alcuni mesi ho notato un anomalo aumento dello spazio occupato dal DB su disco.

    Il DB in uso è SQL Server 2000 SP4 (8.00.2039) installato su Windows Server 2003.

    Indagando tra le dimensione delle singole tabelle si nota che lo spazio riservato (reserved  size) cresce esageratamente in rapporto non proporzionato ai dati inseriti (data size). Per ovviare al problema ho gia eseguito i seguenti comandi per cercare di ridurre le dimensioni:

    EXEC SP_SPACEUSED @updateusage = 'TRUE'

    EXEC sp_MSforeachtable @command1="print '?' DBCC DBREINDEX ('?', ' ', 0)" 

    BACKUP LOG MSEasyCo WITH TRUNCATE_ONLY   

    DBCC SHRINKDATABASE (mseasyco,10)

    DBCC SHRINKFILE (mseasyco_data,10)

    a seguito di queste esecuzioni la dimensione del file fisico si è ridotta drasticamente, ma poi ha ripreso a crescere con lo stesso ritmo.

    Ad esempio una nuova semplice tabella creata un mese fa con 4 campi di tipo VARCHAR(10), nella quale sono stati inseriti 19.000 record oggi presenta queste caratteristiche:

    Spazio riservato: 605mb

    Spazio dati: 75mb

    Spazio indici: 0mb

    Spazio inutilizzato: 530mb

     Lo spazio inutilizzato ha ovviamente dimensioni assurde, ma anche 75mb sui dati sono eccessivi.


    Ringrazio per qualsiasi eventuale consiglio/aiuto per risolvere questo problema.

    mercoledì 13 aprile 2011 10:49

Tutte le risposte

  • da alcuni mesi ho notato un anomalo aumento dello spazio occupato dal DB su disco.

    Ciao,

    Ti riferisci al Master Data File (.mdf) o al Transaction Log (.ldf)?

    Che recovery model è impostato per il database?

    Ciao!


    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.technet.microsoft.com/Forums/it-IT/sqlserverit
    mercoledì 13 aprile 2011 11:27
    Moderatore
  • Ciao (grazie),

     

    mi riferisco al mdf.

    Il Ricovery Model è FULL

     

    CIAO

    mercoledì 13 aprile 2011 13:34
  • salve,

    puoi verificare quali siano le impostazioni di crescita "automatica" del datafile?

    nell'esempio indicato, la tabella parrebbe senza indici... nel caso contrario, i valori di fillfactor degli indici sono molto bassi?

    saluti


    http://www.asql.biz - DbaMgr2k - DbaMgr and further SQL Tools http://www.hotelsole.com/ - http://www.hotelsolericcione.de
    venerdì 15 aprile 2011 00:20
    Moderatore
  • Ciao

     

    il file MDF è impostato per la crescita automatica di 500 Mb, il file LDF invece di 30 Mb.

    La tabella TEST è in effetti senza indici ma è cresciuta lo stesso tantissimo, quindi non credo che il fillfactor possa influire.

    Comunque il fillfactor non è mai stato toccato, è quello di default, quindi credo sia 80.

     

    ciao

    lunedì 18 aprile 2011 07:00
  • Nessuna idea a riguardo?

    :(

    Grazie in qualsiasi caso.

    martedì 3 maggio 2011 15:39
  • Claudio,

    che tipo di operazioni vengono eseguite sul database ? Ci sono variazioni "a fisarmonica" sui dati (tante insert/update/delete) o tanti update ?

    Faccio un esempio: quando faccio degli aggiornamenti massivi sui dati, inserisco tanti records su tabelle transitorie ed il database cresce di dimensione (anche eventualmente per effetto dell'auto growth), poi magari faccio una serie di update sui dati già presenti e per finire elimino i dati transitori. In questo caso ti ritrovi con il db rimasto alle dimensioni aumentate, per effetto delle insert o dell'auto growth, e con un sacco di spazio libero.

    Oppure, in caso di update di massa, potresti incorrere in un problema di questo tipo: faccio l'aggiornamento massivo di tanti records sostituendo il vecchio valore testuale con uno di dimensioni maggiori. Se il nuovo record non entra nella pagina dove si trovava già il record da aggiornare, viene inserito in una nuova pagina del database (occupando quindi più spazio) e nella posizione originale viene messo un puntatore al nuovo record. Anche in questo caso il database cresce di dimensione anche significativamente.

    Nell'esempio da te citato (75MB per 19000 records) le dimensioni corrispondono ad una media di circa 30 caratteri per tutti e quattro i campi della tabella citata, che potrebbe anche essere plausibile.  Potresti fare un analisi più precisa di quanto spazio occupano i tuoi dati utilizzando le formule indicate nel BOL, in particolare nel tuo caso riferendosi al calcolo senza indici clustered.

    Esiste anche una stored procedure, sp_calcspace, a cui puoi passare il nome della tabella ed il numero di records e ti viene restituita la dimensione (con tutti i campi pieni) della tabella.

    A proposito del gli indici, non utilizzarli è comunque una pratica poco raccomandabile: significa che ogni volta che esegui una query SQL Server deve leggere TUTTA la tabella per ritornare il dato che cerchi. E all'aumentare del numero di records questo impatta molto pesantemente sulle prestazioni. Ti consiglierei di utilizzare l'Index Tuning Wizard per verificare se e quali indici vanno creati.

    Spero di essere stato sufficientemente chiaro.

    Ciao.


    Danilo Dominici MCP MCDBA MCITP MCSE MCAD ..::.. Questo post è fornito "così com'è". Non conferisce garanzie o diritti di alcun tipo. Ricorda di usare la funzione "segna come risposta" per i post che ti hanno aiutato a risolvere il problema e "deseleziona come risposta" quando le risposte segnate non sono effettivamente utili. Questo è particolarmente utile per altri utenti che leggono il thread, alla ricerca di soluzioni a problemi similari. ENG: This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" on the post that helps you, and to click "Unmark as Answer" if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.
    martedì 3 maggio 2011 17:33