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.
last_updated_at
timestamp, potresti fare delle ipotesi colte.
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.
last_updated_at
timestamp, potresti fare delle ipotesi colte.
Risposte:
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:
sys.dm_db_partition_stats
;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.
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
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.
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 /