Find database size allocated for LOB data in SQL Server database

SQL Server stores large object (LOB) data (e.g. varchar(max), text, image columns) in separate so called allocation units.

Query below can help you find how much space is allocated for LOB data.

Query

select case when spc.type in (1, 3) then 'Regular data'
            else 'LOB data' end as allocation_type,
    cast(sum(spc.used_pages * 8) / 1024.00 as numeric(36, 2)) as used_mb,
    cast(sum(spc.total_pages * 8) / 1024.00 as numeric(36, 2)) as allocated_mb
from sys.tables tab
    inner join sys.indexes ind 
        on tab.object_id = ind.object_id
    inner join sys.partitions part 
        on ind.object_id = part.object_id and ind.index_id = part.index_id
    inner join sys.allocation_units spc
        on part.partition_id = spc.container_id
group by case when spc.type in (1, 3) then 'Regular data' 
        else 'LOB data' end

Columns

  • allocation_type - type of space allcation:
    • LOB data - space allocated for LOB data columns
    • Regular data - space allocated for other columns
  • used_mb - space used in MB
  • allocated_mb - space allocated in MB

Rows

  • One row represents one type of allocation: LOB/regular
  • Scope of rows: query returns two rows

Sample results

Space allocation for LOB and other data types in AdventureWorks: