У меня есть база данных в SQL Server 2008, которая постоянно растет, и я хотел бы знать, какие таблицы вызвали наибольший рост за последние 6 месяцев.
last_updated_at
временная метка, вы можете сделать несколько удачных догадок.
У меня есть база данных в SQL Server 2008, которая постоянно растет, и я хотел бы знать, какие таблицы вызвали наибольший рост за последние 6 месяцев.
last_updated_at
временная метка, вы можете сделать несколько удачных догадок.
Ответы:
SQL Server не отслеживает эту информацию. Вам понадобится какой-то вид мониторинга (будь то инструмент или самодельный), который будет сохранять снимки табличного пространства с течением времени в будущем. Это может быть просто или сложно:
sys.dm_db_partition_stats
;За исключением того, что уже реализован один или несколько из этих методов, или кто-то изобрел машину времени, на самом деле нет никакого хорошего способа выяснить, насколько большой стол был 6 месяцев назад, или две недели назад, или 20 минут назад.
Я ежедневно запускаю это в базе данных клиентов, чтобы отслеживать рост отдельных таблиц с течением времени.
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
У меня есть расписание сценариев SQL для задания, которое нужно запускать каждую неделю. Попробуйте написать скрипт, который получает всю информацию из sp_spaceused, sys.schemas и sys.tables. и положить это в таблицу с созданным на дату. (и вы можете начать мониторинг на будущее)
Но если вы хотите узнать рост таблицы за предыдущие месяцы и если вы не настроили какой-либо сценарий или задание, вам, вероятно, потребуется восстановить резервную копию в тестовой среде, посмотреть на самую высокую таблицу и сравнить, насколько она выросла. через время.
Как я делаю это в 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- для-каждый стол-в-вольт- база-найти-самый большой стол-в-базы данных /