Come posso determinare quali tabelle stanno causando la crescita del database nel tempo?


8

Ho un database in SQL Server 2008 che è in continua crescita e mi piacerebbe sapere quali tabelle hanno causato la maggiore crescita negli ultimi 6 mesi.


È possibile utilizzare una combinazione di T-SQL e PowerShell - Monitoraggio della crescita delle tabelle con PowerShell per monitorarla e svilupparla nel tempo.
Kin Shah,

Per quanto tempo hai i backup? Puoi ripristinare quelli più vecchi e guardare le tabelle, registrare le informazioni e confrontarle in questo modo dopo averle ripristinate.
Ali Razeghi,

Che tipo di informazioni hai nelle tue tabelle? Se dovesse capitare di includere informazioni sul tipo di auditing, come un last_updated_attimestamp, potresti fare delle ipotesi colte.
Clockwork-Muse

Puoi controllare questa risposta precedente per iniziare. Ma molto probabilmente la lista di Aaron è la strada da percorrere, scegliere una soluzione e costruire su di essa. Inoltre, controlla cosa sta crescendo, è il file di dati o potrebbe essere il file di registro?
Marian,

Risposte:


15

SQL Server non tiene traccia di queste informazioni. Avresti bisogno di un qualche tipo di monitoraggio (sia esso uno strumento o cresciuto in casa) che mantenga le istantanee dello spazio della tabella nel tempo, andando avanti. Questo può essere semplice o complesso:

  • Visualizzazione del rapporto @Zane evidenzia nella sua risposta e salvataggio del file ogni tanto;
  • Scattare le tue istantanee periodiche di visualizzazioni come sys.dm_db_partition_stats;
  • Osservando le copie ripristinate dei backup più vecchi, come suggerito da @Ali , tuttavia chissà fino a che punto vanno i backup e se lo spazio su disco è un problema, potresti non avere il lusso di ripristinarne alcuni per i confronti side-by-side Comunque.
  • L'uso di uno strumento esterno come PowerShell per automatizzarlo, come sottolinea l'articolo @Kin ;
  • Utilizzo di uno strumento di monitoraggio completo che tiene traccia dello spazio, della frammentazione, ecc. Nel tempo (Dichiarazione di non responsabilità: lavoro per SQL Sentry).

A parte aver già implementato uno o più di questi metodi o qualcuno che ha inventato una macchina del tempo, non c'è davvero alcun buon modo per capire quanto fosse grande un tavolo 6 mesi fa, o due settimane fa o 20 minuti fa.


13

Se non hai acquisito e archiviato queste metriche in qualche modo, non c'è modo di vedere la cronologia. Tuttavia, puoi vedere facilmente quali tabelle stanno utilizzando la maggior parte del disco ora, se ciò aiuta.

RightClick


2

Lo eseguo quotidianamente su un database di clienti per tenere traccia della crescita delle singole tabelle nel tempo.

DECLARE @names TABLE (
 tableName VARCHAR(128)
 )

INSERT INTO @names
SELECT [name] FROM customerdb.dbo.sysobjects WHERE xtype='U'

WHILE (SELECT COUNT(tableName) FROM @names) > 0
BEGIN

    DECLARE @thisTable VARCHAR(128)
    SET @thisTable = (SELECT TOP 1 tableName FROM @names)
    INSERT INTO mydb.dbo.mytable ([name], [rows], [reserved], [data], [index_size], [unused])
    EXEC sp_spaceused @objname=@thisTable

    DELETE FROM @names
    WHERE tableName = @thisTable

END

1

Ho una pianificazione di script SQL su un lavoro da eseguire ogni settimana. Prova a scrivere uno script che ottenga tutte le informazioni da sp_spaceused, sys.schemas e sys.tables. e inseriscilo in una tabella con la data di creazione. (e puoi iniziare a monitorare per il futuro)

Ma se vuoi scoprire la crescita della tabella per i mesi precedenti e se non hai impostato alcuno script o lavoro, probabilmente dovrai ripristinare il backup in un ambiente di test e guardare la tabella più alta e confrontare quanto è cresciuto attraverso il tempo.


5
Perché non condividere la tua sceneggiatura?
Erik Darling,

-2

Come lo faccio in MySQL senza strumenti extra:

Esegui una query come "MOSTRA STATO TABELLA" e salva il risultato in una tabella con un campo timestamp aggiuntivo.

Con questi dati hai una cronologia di ogni tabella e puoi scegliere le tue tabelle per lunghezza dei dati, righe o differenze maggiori. col tempo.

Poiché i dati di stato non sono molti byte, è possibile eseguirli con un cronjob giornaliero. Funziona perfettamente, facilmente e gratuitamente con i comandi integrati.

.

Stessa procedura del link precedentemente pubblicato da Marian. Il comando MS T-SQL dovrebbe essere simile a "SELEZIONA * DA INFORMATION_SCHEMA.TABLES" - solo google. Ho trovato 2 possibili soluzioni in pochi secondi:

Elenco di tutte le tabelle in un database e dei conteggi e dimensioni delle righe: http://www.sqlmatters.com/Articles/Listing%20all%20tables%20in%20a%20database%20and%20their%20row%20counts%20and%20sizes.aspx

SERVER SQL: query per trovare numero righe, colonne, byte per ogni tabella: http://blog.sqlauthority.com/2007/01/10/sql-server-query-to-find-number-rows-columns-bytesize- for-each-tavolo-in-the-corrente-Database-trovare-grande-tavolo-in-database /

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.