Ich habe eine Datenbank in SQL Server 2008, die ständig wächst, und ich möchte wissen, welche Tabellen in den letzten 6 Monaten das größte Wachstum verursacht haben.
last_updated_at
Zeitstempel, können Sie einige fundierte Vermutungen anstellen.
Ich habe eine Datenbank in SQL Server 2008, die ständig wächst, und ich möchte wissen, welche Tabellen in den letzten 6 Monaten das größte Wachstum verursacht haben.
last_updated_at
Zeitstempel, können Sie einige fundierte Vermutungen anstellen.
Antworten:
SQL Server verfolgt diese Informationen nicht. Sie benötigen eine Art Überwachung (ob es sich um ein Tool handelt oder um ein selbst entwickeltes Tool), mit dem Sie in Zukunft Momentaufnahmen des Tabellenbereichs erstellen können. Dies kann einfach oder komplex sein:
sys.dm_db_partition_stats
;Ohne eine oder mehrere dieser Methoden bereits implementiert zu haben oder jemanden, der eine Zeitmaschine erfindet, gibt es keinen guten Weg, um herauszufinden, wie groß ein Tisch vor 6 Monaten, vor zwei Wochen oder vor 20 Minuten war.
Ich führe dies täglich in einer Kundendatenbank aus, um das Wachstum einzelner Tabellen im Laufe der Zeit zu verfolgen.
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
Ich habe einen SQL-Skript-Zeitplan für einen Job, der jede Woche ausgeführt werden soll. Versuchen Sie, ein Skript zu schreiben, das alle Informationen von sp_spaceused, sys.schemas und sys.tables abruft. und legen Sie das in eine Tabelle mit dem Erstellungsdatum. (und Sie können mit der Überwachung für die Zukunft beginnen)
Wenn Sie jedoch das Tabellenwachstum für die letzten Monate ermitteln möchten und kein Skript oder keinen Job eingerichtet haben, müssen Sie wahrscheinlich die Sicherung in einer Testumgebung wiederherstellen, die höchste Tabelle anzeigen und vergleichen, wie stark sie gewachsen ist durch die Zeit.
Wie mache ich das in MySQL ohne zusätzliche Tools:
Führen Sie eine Abfrage wie "SHOW TABLE STATUS" aus und speichern Sie das Ergebnis in einer Tabelle mit einem zusätzlichen Zeitstempelfeld.
Mit diesen Daten haben Sie einen Verlauf jeder Tabelle und können Ihre Tabellen nach Datenlänge, Zeilen oder größtem Unterschied auswählen. im Laufe der Zeit.
Da die Statusdaten nicht viele Bytes enthalten, können Sie sie mit einem täglichen Cronjob ausführen. Läuft perfekt, einfach und kostenlos mit integrierten Befehlen.
.
Gleiches Verfahren wie der Link, den Marian zuvor gepostet hat. Der MS T-SQL-Befehl sollte etwa "SELECT * FROM INFORMATION_SCHEMA.TABLES" lauten - einfach google. Ich habe in Sekunden 2 mögliche Lösungen gefunden:
Auflisten aller Tabellen in einer Datenbank sowie deren Zeilenanzahl und -größe: http://www.sqlmatters.com/Articles/Listing%20all%20tables%20in%20a%20database%20and%20their%20row%20counts%20and%20sizes.aspx
SQL SERVER - Abfrage zum Finden der Anzahl der Zeilen, Spalten und ByteSize für jede Tabelle: http://blog.sqlauthority.com/2007/01/10/sql-server-query-to-find-number-rows-columns-bytesize- für-jede-Tabelle-in-der-aktuellen-Datenbank-finden-größte-Tabelle-in-Datenbank /