Bagaimana saya bisa menentukan tabel mana yang menyebabkan pertumbuhan basis data?

8

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.

Kashif
sumber
Anda dapat menggunakan kombinasi T-SQL dan PowerShell - Tabel Pemantauan Pertumbuhan dengan PowerShell untuk memantau dan tren dari waktu ke waktu.
Kin Shah
Seberapa jauh Anda memiliki cadangan? Anda dapat memulihkan yang lebih lama dan melihat tabel, merekam info dan membandingkannya setelah memulihkan masing-masing.
Ali Razeghi
Informasi apa yang Anda miliki di tabel Anda? Jika kebetulan memasukkan info tipe audit, seperti last_updated_atcap waktu, Anda bisa membuat beberapa tebakan yang berpendidikan.
Clockwork-Muse
Anda dapat memeriksa jawaban sebelumnya untuk pemula. Tetapi kemungkinan besar daftar Harun adalah cara untuk pergi, memilih solusi dan membangunnya. Juga, periksa apa yang tumbuh, apakah itu file data atau mungkin file log?
Marian

Jawaban:

15

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:

  • Melihat laporan @Zane menyoroti dalam jawabannya , dan menyimpan file sesering mungkin;
  • Mengambil snapshot tampilan periodik Anda sendiri seperti sys.dm_db_partition_stats;
  • Melihat salinan cadangan lama yang dipulihkan, seperti yang disarankan oleh @Ali - namun siapa yang tahu sejauh mana cadangan Anda berjalan, dan jika ruang disk adalah masalah, Anda mungkin tidak memiliki kemewahan memulihkan banyak dari mereka untuk perbandingan berdampingan bagaimanapun.
  • Menggunakan alat eksternal seperti PowerShell untuk mengotomatiskannya, seperti yang ditunjukkan artikel @Kin ;
  • Menggunakan alat pemantauan lengkap yang melacak ruang, fragmentasi, dll. Dari waktu ke waktu (Penafian: Saya bekerja untuk SQL Sentry).

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.

Aaron Bertrand
sumber
13

Jika Anda belum menangkap dan menyimpan metrik tersebut, maka tidak ada cara untuk melihat riwayat. Namun Anda dapat dengan mudah melihat tabel mana yang menggunakan sebagian besar disk sekarang jika itu membantu.

Klik kanan

Zane
sumber
2

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
pengguna41207
sumber
1

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.

Lydia Simeane
sumber
5
Mengapa tidak membagikan skrip Anda?
Erik Darling
-2

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 /

Rossi
sumber