Como verificar se estou atingindo o limite de tamanho do Express Edition?

10

Estou confuso. O AFAIK SQL Server 2005 Express tem um limite de tamanho de dados de banco de dados de 4 GB . No entanto, tenho os seguintes resultados de sp_spaceused:

qual é o tamanho real do banco de dados

  1. Como posso verificar se meu banco de dados está atingindo o limite de tamanho?
  2. O espaço não alocado é space leftaté eu atingir o limite?
  3. Quanto espaço me resta?
  4. Conta index_sizeno limite?
g00fy
fonte
Você pode verificar a coluna backup_size de msdb.dbo.backupset.

Respostas:

6

Aqui está um bom roteiro que eu descaradamente rasguei daqui :

use [Insert DB Name]

select
a.FILEID,
[FILE_SIZE_MB] = 
convert(decimal(12,2),round(a.size/128.000,2)),
[SPACE_USED_MB] =
convert(decimal(12,2),round(fileproperty(a.name, 'SpaceUsed')/128.000,2)),
[FREE_SPACE_MB] =
convert(decimal(12,2),round((a.size-fileproperty(a.name, 'SpaceUsed'))/128.000,2)) ,
NAME = left(a.NAME,15),
FILENAME = left(a.FILENAME,30)
from
dbo.sysfiles a

Isso é bom porque fornecerá o espaço livre em cada arquivo do banco de dados (você pode ter vários arquivos e talvez alguém o configure para colocar alguns objetos em cada um), bem como o tamanho livre.

Por exemplo, você tem um arquivo de dados de 4 GB com 3 GB de espaço livre. Talvez você tenha 1 MDF sem muitos dados, mas um NDF com muitos dados. Essa consulta informará o tamanho livre de cada arquivo e para qual banco de dados esse arquivo está alocado. Lembre-se de adicionar todos os 'SPACE_USED_MB' para cada banco de dados para obter o tamanho total.

Boa sorte!

Edit: Removido um comando não suportado e de buggy que eu pensei que poderia sair publicando aqui para esta consulta. :(

Ali Razeghi
fonte
PS: se você usar modos de exibição antigos e de compatibilidade com versões anteriores, poderá simplificar bastante sysaltfilesisso (isso anula a necessidade de acessar cada banco de dados).
Aaron Bertrand
11
Obrigado Aaron pelos arquivos de sysaltfiles, ainda não examinei esse! O sp_msforeachdb tem muitos problemas dolorosos, mas imaginei para uma instalação do SQL Express em que o cara apenas deseja executar uma consulta para ver quanto espaço livre ele possui.
Ali Razeghi
Exceto quando ele pula bancos de dados e não gera um erro ...
Aaron Bertrand
Sim, mas neste caso, você realmente acha que será um problema em que o usuário final deseja apenas uma contagem de tamanho de banco de dados? Acho que não devo publicá-lo, mesmo nos casos em que o usuário final absolutamente verá se ignorou o banco de dados que está procurando, para que não reforce o mau comportamento. Vou remover essa parte neste momento, você está certo, não precisamos desse comando estampado em nenhum outro lugar.
Ali Razeghi
5

O tamanho do banco de dados é o tamanho do arquivo. Veja o tamanho real do arquivo de dados (o log de transações não conta). Sim, os índices contam. Se estiver ficando sem espaço, considere uma atualização para o SQL 2012 Express, pois isso aumenta o limite de tamanho para 10 Gigs.

Mrdenny
fonte
6
SQL Server 2008 R2 expresso também tem um 10 GB limite (apenas para a completude)
marc_s
1

Quando sp_spaceused mostra o tamanho do banco de dados de cerca de 25 GB no seu primeiro conjunto de resultados, isso inclui o arquivo / índices de dados e o log de transações. Somente os dados e índices reais contam para os limites do SQL Server Express, portanto, você possui cerca de 3,3 GB de dados (como no seu segundo conjunto de resultados) e os 22 GB restantes serão o log de transações. Se você executar "sp_helpdb", isso mostra a imagem real, pois relata o uso de dados e o log de transações em duas linhas separadas.

Ubercoder
fonte