Saya memiliki database di SQL Server 2008 yang terus berkembang, dan saya ingin tahu tabel mana yang paling banyak menyebabkan pertumbuhan selama 6 bulan terakhir.
last_updated_at
cap waktu, Anda bisa membuat beberapa tebakan yang berpendidikan.
Saya memiliki database di SQL Server 2008 yang terus berkembang, dan saya ingin tahu tabel mana yang paling banyak menyebabkan pertumbuhan selama 6 bulan terakhir.
last_updated_at
cap waktu, Anda bisa membuat beberapa tebakan yang berpendidikan.
Jawaban:
SQL Server tidak melacak informasi ini. Anda akan membutuhkan semacam pemantauan (apakah itu alat atau buatan sendiri) yang membuat snapshot ruang tabel seiring waktu, bergerak maju. Ini bisa sederhana atau kompleks:
sys.dm_db_partition_stats
;Karena belum menerapkan satu atau lebih metode ini, atau seseorang yang menciptakan mesin waktu, sebenarnya tidak ada cara yang baik untuk mengetahui seberapa besar tabel 6 bulan yang lalu, atau dua minggu yang lalu, atau 20 menit yang lalu.
Saya menjalankan ini setiap hari pada basis data pelanggan untuk melacak pertumbuhan tabel individu dari waktu ke waktu.
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
Saya Memiliki jadwal skrip SQL untuk menjalankan tugas setiap minggu. Cobalah menulis skrip yang mendapatkan semua info dari sp_spaceused, sys.schemas, dan sys.tables. dan Letakkan itu di tabel dengan tanggal dibuat. (dan Anda dapat mulai memantau untuk masa depan)
Tetapi jika Anda ingin mengetahui pertumbuhan tabel untuk bulan-bulan sebelumnya dan jika Anda tidak membuat skrip atau pekerjaan apa pun, Anda mungkin perlu mengembalikan cadangan dalam lingkungan pengujian dan melihat tabel tertinggi dan membandingkan berapa banyak itu tumbuh melewati waktu.
Bagaimana saya melakukannya di MySQL tanpa alat tambahan:
Jalankan kueri seperti "SHOW TABLE STATUS" dan simpan hasilnya dalam tabel dengan bidang cap waktu tambahan.
Dengan data ini, Anda memiliki riwayat setiap tabel dan dapat memilih tabel untuk panjang data, baris, atau perbedaan terbesar. lembur.
Karena data status tidak banyak byte, Anda dapat menjalankannya dengan cronjob harian. Berjalan dengan sempurna, mudah dan gratis dengan perintah onboard.
.
Prosedur yang sama seperti tautan yang diposting Marian sebelumnya. Perintah MS T-SQL harus seperti "SELECT * FROM INFORMATION_SCHEMA.TABLES" - hanya google. Saya menemukan 2 kemungkinan solusi dalam hitungan detik:
Cantumkan semua tabel dalam database dan jumlah serta ukuran barisnya: http://www.sqlmatters.com/Articles/Listing%20all%20tables%20in%20a%20database%20and%20their%20row%20counts%20and%20sizes.aspx
SQL SERVER - Permintaan untuk menemukan nomor Baris, Kolom, ByteSize untuk setiap tabel: http://blog.sqlauthority.com/2007/01/10/sql-server-query-to-find-number-rows-columns-bytesize- untuk-setiap-tabel-di-database-saat ini-cari-terbesar-tabel-di-database /