Как найти самые большие объекты в базе данных SQL Server?

Как я пошел бы о нахождении самых больших объектов в базе данных SQL Server? Во-первых, путем определения, какие таблицы (и связанные индексы) являются самыми большими и затем определяют, какие строки в конкретной таблице являются самыми большими (мы храним двоичные данные в БЛОБАХ)?

Есть ли какие-либо инструменты там для помощи с этим видом анализа базы данных? Или есть ли некоторые простые запросы, которые я мог выполнить против системных таблиц?

129
задан jamesaharvey 19 January 2010 в 15:09
поделиться

2 ответа

Из Интернета и других вопросов SO: используйте @ loader _ path/.. вместо @ executable _ path/.. . См.

-121--2827380-

Если вы не используете TFS 2010, я бы рекомендовал использовать Merge + Resolve для восстановления синхронизации двух ветвей.

# cancel out of conflict dialog
tf merge A B -r -force -version:T
tf resolve B -r -auto:acceptTheirs

Это должно уравнять все, за исключением файлов, которые были созданы только в B и никогда не слились обратно. Используйте функцию Folder Diff для их поиска и согласования.

Delete + переветвь в 2005/2008 рискует столкнуться с конфликтами пространства имен от кошмара до отладки в будущем. Другой вариант, если у вас есть 2008 год, это Destroy + переветвь. Очевидно, что вы в порядке с потерей всей истории из оригинальной копии B.

-121--1653715-

Я использовал этот скрипт SQL (который я получил от кого-то, где-то - не могу восстановить, от кого он пришел) в течение многих лет, и это помогло мне немного понять и определить размер индексов и таблиц:

SELECT 
    t.name AS TableName,
    i.name as indexName,
    sum(p.rows) as RowCounts,
    sum(a.total_pages) as TotalPages, 
    sum(a.used_pages) as UsedPages, 
    sum(a.data_pages) as DataPages,
    (sum(a.total_pages) * 8) / 1024 as TotalSpaceMB, 
    (sum(a.used_pages) * 8) / 1024 as UsedSpaceMB, 
    (sum(a.data_pages) * 8) / 1024 as DataSpaceMB
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.object_id = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
WHERE 
    t.name NOT LIKE 'dt%' AND
    i.object_id > 255 AND  
    i.index_id <= 1
GROUP BY 
    t.name, i.object_id, i.index_id, i.name 
ORDER BY 
    object_name(i.object_id) 

Конечно, можно использовать другие критерии упорядочения, например

ORDER BY SUM(p.rows) DESC

, чтобы получить таблицы с наибольшим количеством строк, или

ORDER BY SUM(a.total_pages) DESC

, чтобы получить таблицы с наибольшим количеством используемых страниц (блоков 8K).

268
ответ дан 24 November 2019 в 00:29
поделиться

Если вы используете SQL Server Management Studio 2008, существуют определенные поля данных, которые вы можете просмотреть в окне «Подробнее об экспортере». Просто просмотрите и выберите папку таблиц. В представлении деталей вы можете щелкнуть правой кнопкой мыши заголовки столбцов и добавьте поля на «Отчет». Ваш пробег может варьироваться, если вы находитесь на SSMS 2008 Express.

2
ответ дан 24 November 2019 в 00:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: