Нужно выяснить, сколько FileTable использует в пространстве

Мне нужно выяснить, сколько файлов было вставлено в файл-таблицу MS Sql Server, а также их средний размер.

FileTable уже довольно большой, он содержит около 27 ГБ данных.

Это SQL, который я использую, но он очень медленный. Он работает более часа, и он до сих пор не закончен. Есть ли способ ускорить запрос?

SELECT round(datalength([file_stream]) / 1048576.0, 2) As FileSizeMB, COUNT(*)
FROM [dbo].[Document] WITH(NOLOCK)
GROUP BY round(datalength([file_stream]) / 1048576.0, 2)
ORDER BY round(datalength([file_stream]) / 1048576.0, 2)

1 ответ

Не уверен, что это сработает, у меня не реализован FileTable, но получится размер таблиц.

SELECT  
s.Name AS SchemaName,
        t.NAME AS TableName,
        p.rows AS RowCounts,
        SUM(a.total_pages) * 8 AS TotalSpaceKB,
        ( SUM(a.total_pages) * 8 ) / 1024.0 AS TotalSpaceMB,
        (( SUM(a.total_pages) * 8 ) / 1024.0)/1024.0 AS TotalSpaceGB,
        SUM(a.used_pages) * 8 AS UsedSpaceKB,
        ( SUM(a.used_pages) * 8 ) / 1024.0 AS UsedSpaceMB,
        (( SUM(a.used_pages) * 8 ) / 1024.0) /1024.0 AS UsedSpaceGB,
        ( SUM(a.total_pages) - SUM(a.used_pages) ) * 8 AS UnusedSpaceKB,
        ( ( SUM(a.total_pages) - SUM(a.used_pages) ) * 8 ) / 1024.0 AS UnusedSpaceMB,
        (( ( SUM(a.total_pages) - SUM(a.used_pages) ) * 8 ) / 1024.0)/1024.0 AS UnusedSpaceGB,
       GROUPING(t.Name)
FROM    sys.tables t
        INNER JOIN sys.schemas s ON s.schema_id = t.schema_id
        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 t.is_ms_shipped = 0
        AND i.OBJECT_ID > 255
GROUP BY s.Name,
         t.Name,
        p.Rows
       WITH ROLLUP
       ORDER BY s.Name,
        t.Name
Другие вопросы по тегам