Как определить, какие таблицы вызывают рост базы данных с течением времени?

8

У меня есть база данных в SQL Server 2008, которая постоянно растет, и я хотел бы знать, какие таблицы вызвали наибольший рост за последние 6 месяцев.

Kashif
источник
Вы можете использовать комбинацию T-SQL и PowerShell - мониторинг роста таблиц с помощью PowerShell, чтобы отслеживать и отслеживать его с течением времени.
Кин Шах
Как далеко назад у вас есть резервные копии? Вы можете восстановить старые и посмотреть на таблицы, записать информацию и сравнить таким образом после восстановления каждой.
Али Разеги
Какого рода информация у вас есть в ваших таблицах? Если в него входит информация о типе одитинга, такая как last_updated_atвременная метка, вы можете сделать несколько удачных догадок.
Заводная муза
Вы можете проверить этот предыдущий ответ для стартера. Но, скорее всего, список Аарона - это то, что нужно, выбрать решение и использовать его. Кроме того, проверьте, что растет, это файл данных или это может быть файл журнала?
Мариан

Ответы:

15

SQL Server не отслеживает эту информацию. Вам понадобится какой-то вид мониторинга (будь то инструмент или самодельный), который будет сохранять снимки табличного пространства с течением времени в будущем. Это может быть просто или сложно:

  • Просматривая отчет @Zane выделяет в своем ответе и сохраняя файл время от времени;
  • Принимая ваши собственные периодические снимки просмотров, как sys.dm_db_partition_stats;
  • Рассматривая восстановленные копии более старых резервных копий, как предлагает @Ali, однако, кто знает, как далеко продвинулись ваши резервные копии, и если дисковое пространство является проблемой, вы не можете позволить себе роскошь восстанавливать кучу их для параллельного сравнения. тем не мение.
  • Использование внешнего инструмента, такого как PowerShell, для его автоматизации, как указано в статье @Kin ;
  • Использование полноценного инструмента мониторинга, который отслеживает пространство, фрагментацию и т. Д. С течением времени (Отказ от ответственности: я работаю для SQL Sentry).

За исключением того, что уже реализован один или несколько из этих методов, или кто-то изобрел машину времени, на самом деле нет никакого хорошего способа выяснить, насколько большой стол был 6 месяцев назад, или две недели назад, или 20 минут назад.

Аарон Бертран
источник
13

Если вы как-то не собирали и не сохраняли эти метрики, тогда нет способа просмотреть историю. Однако вы можете довольно легко увидеть, какие таблицы сейчас используют больше всего дисков, если это поможет.

RightClick

Зейн
источник
2

Я ежедневно запускаю это в базе данных клиентов, чтобы отслеживать рост отдельных таблиц с течением времени.

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
user41207
источник
1

У меня есть расписание сценариев SQL для задания, которое нужно запускать каждую неделю. Попробуйте написать скрипт, который получает всю информацию из sp_spaceused, sys.schemas и sys.tables. и положить это в таблицу с созданным на дату. (и вы можете начать мониторинг на будущее)

Но если вы хотите узнать рост таблицы за предыдущие месяцы и если вы не настроили какой-либо сценарий или задание, вам, вероятно, потребуется восстановить резервную копию в тестовой среде, посмотреть на самую высокую таблицу и сравнить, насколько она выросла. через время.

Лидия Симеан
источник
5
Почему бы не поделиться своим сценарием?
Эрик Дарлинг
-2

Как я делаю это в MySQL без дополнительных инструментов:

Запустите запрос типа «ПОКАЗАТЬ СТАТУС ТАБЛИЦЫ» и сохраните результат в таблице с дополнительным полем отметки времени.

С этими данными у вас есть история каждой таблицы и вы можете выбрать ваши таблицы для длины данных, строк или самой большой разницы. через некоторое время.

Поскольку данные о состоянии не имеют большого количества байтов, вы можете запускать их с ежедневным cronjob. Работает идеально, легко и бесплатно с помощью встроенных команд.

,

Та же самая процедура, что и ссылка, опубликованная ранее Мариан. Команда MS T-SQL должна выглядеть примерно так: «SELECT * FROM INFORMATION_SCHEMA.TABLES» - просто Google. Я нашел 2 возможных решения в считанные секунды:

Вывод списка всех таблиц в базе данных, их количества и количества строк: http://www.sqlmatters.com/Articles/Listing%20all%20tables%20in%20a%20database%20and%20their%20row%20counts%20and%20sizes.aspx

SQL SERVER - запрос для поиска количества строк, столбцов, ByteSize для каждой таблицы: http://blog.sqlauthority.com/2007/01/10/sql-server-query-to-find-number-rows-columns-bytesize- для-каждый стол-в-вольт- база-найти-самый большой стол-в-базы данных /

Росси
источник