none
Tamanho do Banco RRS feed

  • Pergunta

  •  

    Senhores,
    Gostaria de saber o tamanho do banco de dados.
    Quando eu utilizo a procedure


    Code Snippet
    sp_helpdb americabus

     

     


    ou


     

    Code Snippet
    sp_databases

     

     

    Exibe o tamanho de 4096 KB, pq q quando eu insiro 1600 registros em uma tabela com 12 campos o tamanho do banco não é alterado?
    Os valores inseridos são aleatórios. 


    Vlw

    quarta-feira, 13 de agosto de 2008 20:05

Respostas

Todas as Respostas

  • Boa tarde Denismc,

    O tamanho náo foi alterado porque existem paginas de dados livres dentro dos datafiles e náo foi necessario ele aumentar o seu tamanho para criar paginas de dados vazias e armazenar as informacoes que voce esta inserindo.
    quinta-feira, 2 de abril de 2009 16:40
  • Denismc,

    A resposta do Renato está correta.

    Para você poder visualizar melhor, segue um script. Ele roda, com um errinho mas traz a resposta.



    ----------------------------------------------------------------------------------------------------------
    print ''
    print '5. Datafiles list'
    print '***********************'
    print ''

    if exists (select [id] from tempdb..sysobjects where [id] = OBJECT_ID ('tempdb..#TempForFileStats '))
    DROP TABLE #TempForFileStats

    if exists (select [id] from tempdb..sysobjects where [id] = OBJECT_ID ('tempdb..#TempForDataFile'))
    DROP TABLE #TempForDataFile

    if exists (select [id] from tempdb..sysobjects where [id] = OBJECT_ID ('tempdb..#TempForLogFile'))
    DROP TABLE #TempForLogFile

    DECLARE @DBName nvarchar(20)
    DECLARE @SQLString nvarchar (2000)
    DECLARE c_db CURSOR FOR
        SELECT name
        FROM master.dbo.sysdatabases
        WHERE status&512 = 0

    CREATE TABLE #TempForFileStats([Server Name]          nvarchar(40),
                                   [Database Name]        nvarchar(20),
                                   [File Name]            nvarchar(128),
                                   [Usage Type]           varchar (6),
                                   [Size (MB)]            real,
                                   [Space Used (MB)]      real,
                                   [MaxSize (MB)]         real,
                                   [Next Allocation (MB)] real,
                                   [Growth Type]          varchar (12),
                                   [File Id]              smallint,
                                   [Group Id]             smallint,
                                   [Physical File]        nvarchar (260),
                                   [Date Checked]         datetime)

    CREATE TABLE #TempForDataFile ([File Id]             smallint,
                                   [Group Id]            smallint,
                                   [Total Extents]       int,
                                   [Used Extents]        int,
                                   [File Name]           nvarchar(128),
                                   [Physical File]       nvarchar(260))

    CREATE TABLE #TempForLogFile  ([File Id]             int,
                                   [Size (Bytes)]        real,
                                   [Start Offset]        varchar(30),
                                   [FSeqNo]              int,
                                   [Status]              int,
                                   [Parity]              smallint,
                                   [CreateTime]          varchar(20))  

    OPEN c_db
    FETCH NEXT FROM c_db INTO @DBName
    WHILE @@FETCH_STATUS = 0
       BEGIN
          SET @SQLString = 'SELECT @@SERVERNAME                     as  ''ServerName'', '          +
                           '''' + @DBName + '''' + '                as  ''Database'', '            + 
                           '        f.name, '                                                      +
                           '       CASE '                                                          +
                           '          WHEN (64 & f.status) = 64 THEN ''Log'' '                     +
                           '          ELSE ''Data'' '                                              +
                           '       END                              as ''Usage Type'', '           +
                           '        f.size*8/1024.00                as ''Size (MB)'', '            +
                           '        NULL                            as ''Space Used (MB)'', '      +
                           '        CASE f.maxsize '                                               +
                           '           WHEN -1 THEN  -1 '                                        +
                           '           WHEN  0 THEN  f.size*8/1024.00  '                           +
                           '           ELSE          f.maxsize*8/1024.00 '                         +
                           '        END                             as ''Max Size (MB)'', '        +
                           '        CASE '                                                         +
                           '           WHEN (1048576&f.status) = 1048576 THEN (growth/100.00)*(f.size*8/1024.00) ' +
                           '           WHEN f.growth =0                 THEN 0 '                +
                           '           ELSE                                   f.growth*8/1024.00 ' +
                           '        END                             as ''Next Allocation (MB)'', ' +
                           '       CASE  '                                                         +
                           '          WHEN (1048576&f.status) = 1048576 THEN ''Percentage'' '      +
                           '          ELSE ''Pages'' '                                             +
                           '       END                              as ''Usage Type'', '           +
                           '       f.fileid, '                                                     +
                           '       f.groupid, '                                                    +
                           '       filename, '                                                     +
                           '       getdate() '                                                     +
                           ' FROM ' + @DBName + '.dbo.sysfiles f'
          INSERT #TempForFileStats
          EXECUTE(@SQLString)
          ------------------------------------------------------------------------
          SET @SQLString = 'USE ' + @DBName + ' DBCC SHOWFILESTATS'
          INSERT #TempForDataFile
          EXECUTE(@SQLString)
          --
          UPDATE #TempForFileStats
          SET [Space Used (MB)] = s.[Used Extents]*64/1024.00
          FROM #TempForFileStats f,
               #TempForDataFile  s
          WHERE f.[File Id]       = s.[File Id]
            AND f.[Group Id]      = s.[Group Id]
            AND f.[Database Name] = @DBName
          --
          TRUNCATE TABLE #TempForDataFile
          -------------------------------------------------------------------------
          SET @SQLString = 'USE ' + @DBName + ' DBCC LOGINFO'
          INSERT #TempForLogFile
          EXECUTE(@SQLString)     
          --
          UPDATE #TempForFileStats
          SET [Space Used (MB)] = (SELECT (MIN(l.[Start Offset]) +
                                           SUM(CASE
                                                  WHEN l.Status <> 0 THEN  l.[Size (Bytes)]
                                                  ELSE           0
                                               END))/1048576.00
                                   FROM #TempForLogFile l
                                   WHERE l.[File Id] = f.[File Id])
          FROM #TempForFileStats f
          WHERE f.[Database Name] = @DBName
            AND f.[Usage Type]    = 'Log'
          --
          TRUNCATE TABLE #TempForLogFile
          -------------------------------------------------------------------------
          FETCH NEXT FROM c_db INTO @DBName
       END
    DEALLOCATE c_db

    SELECT * FROM #TempForFileStats
    ------------
    DROP TABLE #TempForFileStats
    DROP TABLE #TempForDataFile
    DROP TABLE #TempForLogFile
    go



    Att,
    De Lima - MCTS SQL Server
    quinta-feira, 2 de abril de 2009 18:12
  • Boa Tarde,

    De fato as procedures do SQL Server contabilizam o espaço ocupado pelo arquivo e não o espaço ocupado pelos dados. Se houver espaço livre, os dados aumentaram mas não incorreram no aumento dos arquivos, pois, o espaço livre pode comportá-los.

    Só que não acho muito provável que um banco de 4MB tenha espaço livre para acomodar 1600 registros com 12 campos cada, mais índices, objetos internos, etc. Pode ser que a informação realmente esteja desatualizada. Normalmente isso ocorre por dois motivos: estatísticas desatualizadas após uma carga ou o processo de limpeza de registros fantasmas ainda está trabalhando (ghost cleanup). Como não se trata de uma exclusão, o segundo motivo está descartado.

    Se existe uma desconfiança atualize as estatísticas da tabela de 1600 registros e tente novamente. Acredito que os artigos abaixo também sejam do seu interesse:

    Como retornar o número de linhas e o espaço ocupado por tabela - Parte I
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!244.entry

    Como retornar o número de linhas e o espaço ocupado por tabela - Parte II
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!260.entry

    Como retornar o número de linhas e o espaço ocupado por tabela - Parte III
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!263.entry

    SQL Server DataSizer Tool
    http://www.microsoft.com/downloads/details.aspx?FamilyID=564c5704-d4f5-4ee8-9f3c-cb429499d075&displaylang=en

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Como realizar cálculos com horas no SQL Server – Parte I
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!516.entry 


    Classifique as respostas. O seu feedback é imprescindível
    sexta-feira, 3 de abril de 2009 16:56