|
7 | 7 | Lista o espaço ocupado por tabelas, incluindo consumo de index, LOB e compressão. |
8 | 8 | Útil para descobrir quais tabelas estão consumindo maior espaço. |
9 | 9 | O script considera todas as partições de uma tabela. |
| 10 | + |
| 11 | + Também, são incluídos os dados de Row Overflow e LOB. |
| 12 | + LOB são tipos para armazenar grande quantidades de dados. Eles são armazenados em estruturas separadas da linha na tabela. |
| 13 | + Row overflow é quando algumas colunas com varchar ultrapassam o limite da linha. Mais info aqui: https://learn.microsoft.com/en-us/sql/relational-databases/pages-and-extents-architecture-guide?view=sql-server-ver17#large-row-support |
10 | 14 | */ |
11 | 15 |
|
12 | 16 | SELECT |
|
18 | 22 | CROSS APPLY |
19 | 23 | ( |
20 | 24 | SELECT |
21 | | - p.object_id |
22 | | - ,TotalRows = SUM(CASE WHEN p.index_id <= 1 AND au.type_desc = 'IN_ROW_DATA' THEN p.rows ELSE 0 END) |
23 | | - ,TotalMB = SUM(au.total_pages)/128.0 |
| 25 | + p.object_id |
| 26 | + -- total de linhas estimado. Como faço join com a alloc units, preciso filtrar para não duplicar o total. |
| 27 | + ,TotalRows = SUM(CASE WHEN p.index_id <= 1 AND au.type_desc = 'IN_ROW_DATA' THEN p.rows ELSE 0 END) |
| 28 | + |
| 29 | + -- tamanho total, somando toda a estrutura envolvida (indices, lobs, compressão etc.). Isso é tudo que sua tabela ocupa nos arquivos. |
| 30 | + -- as próximas colunas representam uma parte desse total |
| 31 | + ,TotalMB = SUM(au.total_pages)/128.0 |
| 32 | + |
| 33 | + -- tamanho somente de lobs (todos os indices) |
24 | 34 | ,LobMB = ISNULL(SUM(CASE WHEN au.type_desc = 'LOB_DATA' THEN au.total_pages ELSE 0 END)/128.0,0) |
25 | | - ,RowOverMB = ISNULL(SUM(CASE WHEN au.type_desc = 'ROW_OVERFLOW_DATA' THEN au.total_pages ELSE 0 END)/128.0,0) |
26 | | - ,IndexSize = ISNULL(SUM(CASE WHEN p.index_id > 1 THEN au.total_pages ELSE 0 END)/128.0,0) |
27 | | - ,PageCompressionMB = SUM(CASE WHEN p.data_compression_desc = 'PAGE' THEN au.total_pages ELSE 0 END)/128.0 |
28 | | - ,RowCompressionMB = SUM(CASE WHEN p.data_compression_desc = 'ROW' THEN au.total_pages ELSE 0 END)/128.0 |
29 | | - ,TableCompressionMB = SUM(CASE WHEN p.data_compression_desc != 'NONE' AND p.index_id <= 1 THEN au.total_pages ELSE 0 END)/128.0 |
30 | | - ,TableSize = SUM(CASE WHEN p.data_compression_desc != 'NONE' AND p.index_id <= 1 THEN au.total_pages ELSE 0 END)/128.0 |
| 35 | + |
| 36 | + -- tamanho somente de row overflow (todos os indices). |
| 37 | + ,RowOverMB = ISNULL(SUM(CASE WHEN au.type_desc = 'ROW_OVERFLOW_DATA' THEN au.total_pages ELSE 0 END)/128.0,0) |
| 38 | + |
| 39 | + -- Tamanho de todos os índice (incluindo lobs e rowoverflow nesses índices)! |
| 40 | + ,IndexSize = ISNULL(SUM(CASE WHEN p.index_id > 1 THEN au.total_pages ELSE 0 END)/128.0,0) |
| 41 | + |
| 42 | + -- Tamanho total da estruturas comprimidas. |
| 43 | + ,PageCompressionMB = SUM(CASE WHEN p.data_compression_desc = 'PAGE' THEN au.total_pages ELSE 0 END)/128.0 |
| 44 | + ,RowCompressionMB = SUM(CASE WHEN p.data_compression_desc = 'ROW' THEN au.total_pages ELSE 0 END)/128.0 |
| 45 | + |
| 46 | + -- total da tabela apenas (Sem os indices) comprimido |
| 47 | + ,TableCompressionMB = SUM(CASE WHEN p.data_compression_desc != 'NONE' AND p.index_id <= 1 THEN au.total_pages ELSE 0 END)/128.0 |
| 48 | + |
| 49 | + -- Tamanho total da tabela (sem índices), indepentende está comrpimido ou não. Se estiver comprimido, será igual a coluna TableCompressionMB |
| 50 | + ,TableSize = SUM(CASE WHEN p.index_id <= 1 THEN au.total_pages ELSE 0 END)/128.0 |
31 | 51 | FROM |
32 | 52 | sys.allocation_units au |
33 | 53 | JOIN |
|
0 commit comments