Как проверить, какие таблицы и поля занимают больше места? - PullRequest
0 голосов
/ 23 сентября 2010

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

Допустим, у меня есть только 2 таблицы

Table1.FieldOne
Table1.FieldTwo
Table2.FieldOne
Table2.FieldTwo

Допустим, 99,9% данных БД находятся в Table2.FieldTwo, как мне запросить базу данных?

Конечно, у меня много таблиц.

База данных находится на sqlserver 2000

1 Ответ

1 голос
/ 23 сентября 2010

Я не могу придумать, простой способ сделать это на макушке головы.

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

DECLARE @SQL VARCHAR(MAX)

SELECT @SQL = COALESCE(@SQL + CHAR(10) + 'UNION ALL' + CHAR(10), '') + 
    'SELECT ''' + QUOTENAME(t.name) + ''' AS TableName, ''' + QUOTENAME(c.name) + ''' AS ColumnName, SUM(DATALENGTH(' + QUOTENAME(c.name) + ')) AS TotalSizeBytes 
    FROM ' + QUOTENAME(t.name)
FROM sys.columns c
    JOIN sys.tables t ON c.object_id = t.object_id
WHERE t.name = 'VoterAccount'

SET @SQL = 'SELECT TableName, ColumnName, TotalSizeBytes FROM (' + @SQL + ') x ORDER BY TotalSizeBytes DESC'
PRINT @SQL -- Just PRINT the SQL out. You can then copy it, and execute manually

Что бы вернуть, например

TableName    ColumnName    TotalSizeBytes
Table1       Column1       123456789
Table1       Column3       34356464
Table2       ColumnA       33987987

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

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

...