Eu gostaria de ver quantas páginas de 8K são tomadas por um registro específico.
Se você executar esta consulta no AdventureWorks2019:
SELECT ProductID
,Name
,DATALENGTH(Name) AS SizeInBytes
,LEN(Name) AS NumberOfCharacters
FROM Production.Product
ORDER BY 1
Você pode ter uma lista de mordidas feitas por cada registro:
ID do produto | Nome | SizeInBytes | Número De Caracteres |
---|---|---|---|
1 | Corrida Ajustável | 30 | 15 |
2 | Esfera de rolamento | 24 | 12 |
3 | Rolamento de esferas BB | 30 | 15 |
4 | Rolamentos de fone de ouvido | 42 | 21 |
316 | Lâmina | 10 | 5 |
Como posso adicionar uma coluna com o número de páginas ocupadas por esse registro?
Claro que posso fazer, DATALENGTH(Name) / 8 AS PagesTaken
mas gostaria de saber se existe algum comando que me permita encontrar o número de páginas através de um arquivo SELECT
.
Eu acho que você tem algo para trás aqui. Uma página tem 8 KB (8.192 bytes). As linhas dessa tabela têm um tamanho máximo da soma dos tamanhos dos tipos de dados de todas as colunas:
Na verdade, não vou somar tudo isso, mas vamos imaginar que a soma seja 500 bytes.
Você pode pesquisar o tamanho de cada tipo de dados percorrendo esta página nos documentos e clicando em cada tipo em que deseja encontrar informações de tamanho: Tipos de dados (Transact-SQL)
Devido a um cabeçalho de tamanho fixo em cada página e outra sobrecarga por linha, a quantidade de espaço disponível para linhas em uma página de 8 KB é 8.096 (consulte aqui para obter detalhes: Quais outras informações são armazenadas no cabeçalho da página ).
Isso significa que, nesta tabela, você pode ter até 8096 / 500 = 16 linhas por página. Pode ser possível ajustar um pouco mais linhas do que isso, dependendo do tamanho das
nvarchar
colunas de comprimento variável ( ).Você pode ver quantas páginas estão em um índice específico usando uma consulta como esta: SQL Server: Número de 8 mil páginas usadas por uma tabela e/ou banco de dados
A partir daí, você pode derivar uma média de quantas linhas por página você está obtendo (total de linhas na tabela / total de páginas na tabela).
Você também pode usar
DBCC PAGE
(conforme descrito no link "cabeçalho da página" acima) para visualizar informações detalhadas sobre cada página, incluindo quantas linhas existem na página.Observe que todos os itens acima se aplicam a "dados em linha". Se a tabela tiver tipos de dados LOB, eles serão armazenados fora da linha, potencialmente em várias páginas, se seu tamanho fizer com que o registro exceda o tamanho máximo de registro de 8.060 bytes.