Eu herdei um banco de dados do SQL Server bastante grande. Parece ocupar mais espaço do que eu esperava, dados os dados que ele contém.
Existe uma maneira fácil de determinar quanto espaço no disco cada tabela está consumindo?
sql-server
tsql
Eric
fonte
fonte
Respostas:
fonte
Se você estiver usando o SQL Server Management Studio (SSMS), em vez de executar uma consulta ( que no meu caso retornou linhas duplicadas ), poderá executar um relatório padrão .
Nota: O nível de compatibilidade do banco de dados deve ser definido como 90 ou superior para que funcione corretamente. Consulte http://msdn.microsoft.com/en-gb/library/bb510680.aspx
fonte
O sp_spaceused pode fornecer informações sobre o espaço em disco usado por uma tabela, exibição indexada ou todo o banco de dados.
Por exemplo:
Isso relata as informações de uso do disco para a tabela ContactInfo.
Para usar isso para todas as tabelas de uma vez:
Você também pode obter o uso do disco na funcionalidade Relatórios padrão do SQL Server. Para chegar a este relatório, navegue do objeto servidor no Pesquisador de Objetos, desça até o objeto Bancos de Dados e clique com o botão direito do mouse em qualquer banco de dados. No menu exibido, selecione Relatórios, Relatórios padrão e "Uso do disco por partição: [DatabaseName]".
fonte
sp_msforeachtable
no SSMS possa facilmente desencadear umSystem.OutOfMemoryException
caso você tenha um grande número de tabelas; portanto, seria uma idéia melhor usar uma tabela temporária para armazenar os resultados.Aqui está outro método: usando o SQL Server Management Studio , no Pesquisador de Objetos , acesse seu banco de dados e selecione Tabelas
Em seguida, abra os Detalhes do Pesquisador de Objetos (pressionando F7 ou indo para Exibir-> Detalhes do Pesquisador de Objetos ). Na página de detalhes do explorador de objetos, clique com o botão direito do mouse no cabeçalho da coluna e ative as colunas que você gostaria de ver na página. Você também pode classificar os dados por qualquer coluna.
fonte
Após algumas pesquisas, não consegui encontrar uma maneira fácil de obter informações sobre todas as tabelas. Existe um procedimento armazenado útil chamado sp_spaceused que retornará todo o espaço usado pelo banco de dados. Se fornecido com um nome de tabela, ele retornará o espaço usado por essa tabela. No entanto, os resultados retornados pelo procedimento armazenado não são classificáveis, pois as colunas são valores de caracteres.
O script a seguir irá gerar as informações que estou procurando.
fonte
Para todas as tabelas, use .. (adicionando os comentários de Paul)
fonte
exec sp_helpdb
que não mostra nada sobre tabelas, para oexec sp_spaceused
que mostra - mas apenas para uma tabela de cada vez ... não fornece uma visão geral de quais tabelas você possui, quantas linhas elas possuem e como muito espaço que eles ocupam.As consultas acima são boas para encontrar a quantidade de espaço usada pela tabela (índices incluídos), mas se você quiser comparar quanto espaço é usado pelos índices na tabela, use esta consulta:
fonte
where [i].[is_primary_key] = 0
. Agora os tamanhos devem corresponder.sp_spaceused
. Eu medi GBs, então alguns megas não correspondentes não são muito. Eu não me importo com tamanhos exatos, apenas uma ideia.Se você precisar calcular exatamente os mesmos números, que estão na página 'table properties - storage' no SSMS, precisará contá-los com o mesmo método usado no SSMS (funciona para o sql server 2005 e superior ... e também funciona corretamente para tabelas com campos LOB - porque apenas contar "páginas_utilizadas" não é suficiente para mostrar o tamanho exato do índice):
fonte
Extensão para a resposta @xav que manipulava partições de tabela para obter tamanho em MB e GB. Testado no SQL Server 2008/2012 (comentou uma linha em que
is_memory_optimized = 1
)fonte
Para o Azure, usei isso:
Você deve ter o SSMS v17.x
Eu usei;
Com isso, como o usuário Sparrow mencionou :
Abra o seu
Databases
> e selecione Tabelas .Em seguida , pressione a tecla F7. Você deve ver o seguinte
row count
:
O SSMS aqui está conectado aos bancos de dados do Azure
fonte
Usamos o particionamento de tabela e tivemos alguns problemas com as consultas fornecidas acima devido a registros duplicados.
Para aqueles que precisam disso, você pode encontrar abaixo a consulta executada pelo SQL Server 2014 ao gerar o relatório "Uso do disco por tabela". Suponho que ele também funcione com versões anteriores do SQL Server.
Ele funciona como um encanto.
fonte
fonte
Uma pequena alteração na resposta de Mar_c , já que voltei a esta página com tanta frequência, ordenada pela maioria das linhas primeiro:
fonte
Isso fornecerá os tamanhos e as contagens de registros para cada tabela.
fonte
{ }
) na barra de ferramentas do editor de bem formato e sintaxe destacá-lo!Para obter todo o tamanho da tabela em um banco de dados, você pode usar esta consulta:
E você pode alterá-lo para inserir todos os resultados na tabela temporária e depois selecionar na tabela temporária.
fonte
Em um prompt de comando usando o OSQL :
fonte
Aqui está uma maneira de obter todos os tamanhos de tabelas rapidamente, com as seguintes etapas:
Escreva os comandos T-SQL fornecidos para listar todas as tabelas do banco de dados:
Agora copie a lista de tabelas do banco de dados e copie-a para uma nova janela do analisador de consultas
No analisador de consultas SQL , selecione na opção da barra de ferramentas superior Resultados para o arquivo ( Ctrl+ Shift+ F).
Agora, finalmente, pressione o botão Executar , vermelho, marcado na barra de ferramentas acima .
O tamanho do banco de dados de todas as tabelas agora está armazenado em um arquivo no seu computador.
fonte
Adicionei mais algumas colunas sobre a resposta marc_s:
fonte
Minha postagem é relevante apenas para o SQL Server 2000 e foi testada para funcionar em meu ambiente.
Esse código acessa todos os bancos de dados possíveis de uma única instância , não apenas um único banco de dados.
Uso duas tabelas temporárias para ajudar a coletar os dados apropriados e depois despejar os resultados em uma tabela 'Ao vivo'.
Os dados retornados são: DatabaseName, DatabaseTableName, Rows (na tabela), dados (tamanho da tabela em KB que parece), dados de entrada (acho útil para saber quando eu executei o script pela última vez).
A queda desse código é o campo 'data' não é armazenado como um int (os caracteres 'KB' são mantidos nesse campo) e isso seria útil (mas não totalmente necessário) para classificação.
Espero que este código ajude alguém por aí e economize algum tempo!
Caso você precise saber, a tabela rsp_DatabaseTableSizes foi criada por meio de:
fonte
Como uma extensão simples da resposta de marc_s (a que foi aceita), isso é ajustado para retornar a contagem de colunas e permitir a filtragem:
fonte
Usando a resposta @Mark acima, adicionou @ updateusage = 'true' para forçar as estatísticas de tamanho mais recentes ( https://msdn.microsoft.com/en-us/library/ms188776.aspx ):
fonte
Aqui está um exemplo de consulta para obter tabelas maiores que 1 GB ordenadas por tamanho decrescente.
fonte