locked
Melhor maneira para fazer uma estimativa de crescimento RRS feed

  • Pergunta

  • Boa Tarde a todos,

    Estou enfrentando problemas  para fazer uma estimativa de crescimento, a principio eu tenho feito muito amador, tenho gerado um select que me traz o tamanho da base sempre no final do mês, fiz isso por 3 meses e gerei um grafico que tem a media entre as 3 dias de informação coletada.

    Eu tenho uma ideia a principio que me ajudaria bastante,porém estou postando justamente para saber se alguem tem algo melhor ou já passou por isso.

    Utilizo a versão 2005 e minha ideia é: Criação de uma procedure que insere todos os dias em um horário X o tamanhos dos dados e a data e mais o nome do BD.Feito isso eu exportaria para um excel e me viraria por la.A primeira etapa eu faria isso, depois eu iria refinando isso.

    Segue a select que utilizo para buscar as informções mas ainda falta a data do dia que faço, quem puder me ajudar eu agradeço.

    create table #temp1
    (dbname varchar(100),dbsize nvarchar(13),c_owner sysname,c_dbid smallint,created nvarchar(11),c_status varchar(500),cmptlevel tinyint)

    insert into #temp1 exec sp_helpdb

    select tb1.dbname,tb1.dbsize,tb1.c_owner,tb1.created,tb2.filename
    from #temp1 tb1, master..sysaltfiles tb2
    where tb1.c_dbid = tb2.dbid and tb2.fileid = 1
    order by tb1.dbname

    drop table #temp1

    Grato,
    Roberto Maccabelli Giovanini
    • Movido Gustavo Maia Aguiar sexta-feira, 8 de janeiro de 2010 18:01 (De:SQL Server - Desenvolvimento Geral)
    sexta-feira, 8 de janeiro de 2010 16:43

Respostas

  • Olá,

    Com ajuda de um artigo do Gustavo e uso do PowerShell, podemos fazer o seguinte script:

    ##region TABLE_SIZE
    #
    #foreach($srv in Get-Content "d:\databases.txt")
    #{
    #	if ($srv -eq "algumacoisa")
    #	{
    #		#region SQL
    #
    #		$sql = 
    #			"
    #			INSERT INTO dba.TB_TABLE_SIZE(
    #				SERVER_VC_T_S,
    #				NAME_TABLE_VC_T_S,
    #				NAME_INDEX_VC_T_S,
    #				ROW_SIZE_IN_T_S,
    #				QTD_LINE_IN_T_S,
    #				RESERVED_IN_T_S,
    #				DATA_IN_T_S,
    #				INDEX_IN_T_S,
    #				NOT_USED_IN_T_S,
    #				TYPE_DESC_VC_T_S
    #			)
    #			SELECT  
    #				'$srv' AS SERVER_VC_T_S,
    #
    #				OBJECT_NAME(SP.OBJECT_ID) AS TABELA, 
    #		
    #				I.NAME AS INDICE, 
    #		
    #				CAST(
    #					SUM(TOTAL_PAGES * 8.00) 
    #					/ 
    #					CASE
    #						WHEN ROWS > 0 THEN
    #							ROWS 
    #						ELSE
    #							1.00	
    #					END
    #					AS DECIMAL(15,2)
    #				) AS TAM_LINHA_KB,
    #		
    #				ROWS AS LINHAS,
    #				
    #				SUM(TOTAL_PAGES * 8) AS RESERVADO_KB,
    #				
    #				SUM(
    #					CASE WHEN SP.INDEX_ID > 1 THEN 
    #						0 
    #					ELSE 
    #						DATA_PAGES * 8 
    #					END
    #				) AS DADOS_KB,
    #				
    #				SUM(USED_PAGES * 8) 
    #				- 
    #				SUM(
    #					CASE 
    #						WHEN SP.INDEX_ID > 1 THEN 
    #							0 
    #						ELSE 
    #							DATA_PAGES * 8 
    #						END
    #				) AS INDICE_KB,
    #									
    #				SUM( ( TOTAL_PAGES - USED_PAGES ) * 8 ) AS NAOUTILIZADO_KB,
    #				
    #				AU.TYPE_DESC
    #				
    #			FROM 
    #				SYS.PARTITIONS SP
    #			INNER JOIN 	SYS.ALLOCATION_UNITS AU ON SP.HOBT_ID = AU.CONTAINER_ID
    #			INNER JOIN SYS.INDEXES I ON I.OBJECT_ID = SP.OBJECT_ID
    #			WHERE 
    #				I.INDEX_ID = SP.INDEX_ID 
    #				AND OBJECTPROPERTY(SP.OBJECT_ID, 'ISMSSHIPPED') = 0
    #				AND SP.OBJECT_ID <> OBJECT_ID('sysdiagrams') 
    #				AND OBJECT_SCHEMA_NAME ( SP.OBJECT_ID , DB_ID() ) <> 'dba'
    #			GROUP BY 
    #				OBJECT_NAME(SP.OBJECT_ID), 
    #				I.NAME, 
    #				ROWS,
    #				AU.TYPE_DESC
    #		";
    #		
    #		#endregion SQL
    #
    #		$conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=" + $srv + "; Initial Catalog=producao; Integrated Security=SSPI")  
    #	
    #		$conn.Open()
    #		
    #		$command = New-Object System.Data.SqlClient.sqlcommand( $sql, $conn )
    #		
    #		$command.ExecuteNonQuery()
    #	}
    #}
    #
    ##endregion TABLE_SIZE
    

    Daí fica a seu critério incrementar.



    Abraços
    Demétrio Silva
    quarta-feira, 13 de janeiro de 2010 01:15

Todas as Respostas

  • Nao entendi exatamente sua duvida....

    Se for para pegar a data do dia, use GetDate()


    select getdate() Data, tb1.dbname,tb1.dbsize,tb1.c_owner,tb1.created,tb2.filename 
    from #temp1 tb1, master..sysaltfiles tb2
    where tb1.c_dbid = tb2.dbid and tb2.fileid = 1
    order by tb1.dbname

    Mas vc pode esclarecer um pouco mais em que parte vc esta com problemas?

    Se estiver usando SQL Server 2005 Starndard, vc pode criar um pacote SSIS agendado para fazer isso... se for SQL Express pode usar um windows task com um batch que chama o OSQL e executa sua query...

    Att

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    sexta-feira, 8 de janeiro de 2010 16:48
  • William,

    Você deseja fazer uma estimativa de crescimento de uma determinada tabela ou banco de dados?
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sexta-feira, 8 de janeiro de 2010 23:48
    Moderador
  • Junior.... a duvida nao é minha... É do Roberto

    Att



    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    domingo, 10 de janeiro de 2010 14:23
  • William,

    Desculpe-me, foi uma pequena confusão.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    segunda-feira, 11 de janeiro de 2010 13:01
    Moderador
  • Olá,

    Com ajuda de um artigo do Gustavo e uso do PowerShell, podemos fazer o seguinte script:

    ##region TABLE_SIZE
    #
    #foreach($srv in Get-Content "d:\databases.txt")
    #{
    #	if ($srv -eq "algumacoisa")
    #	{
    #		#region SQL
    #
    #		$sql = 
    #			"
    #			INSERT INTO dba.TB_TABLE_SIZE(
    #				SERVER_VC_T_S,
    #				NAME_TABLE_VC_T_S,
    #				NAME_INDEX_VC_T_S,
    #				ROW_SIZE_IN_T_S,
    #				QTD_LINE_IN_T_S,
    #				RESERVED_IN_T_S,
    #				DATA_IN_T_S,
    #				INDEX_IN_T_S,
    #				NOT_USED_IN_T_S,
    #				TYPE_DESC_VC_T_S
    #			)
    #			SELECT  
    #				'$srv' AS SERVER_VC_T_S,
    #
    #				OBJECT_NAME(SP.OBJECT_ID) AS TABELA, 
    #		
    #				I.NAME AS INDICE, 
    #		
    #				CAST(
    #					SUM(TOTAL_PAGES * 8.00) 
    #					/ 
    #					CASE
    #						WHEN ROWS > 0 THEN
    #							ROWS 
    #						ELSE
    #							1.00	
    #					END
    #					AS DECIMAL(15,2)
    #				) AS TAM_LINHA_KB,
    #		
    #				ROWS AS LINHAS,
    #				
    #				SUM(TOTAL_PAGES * 8) AS RESERVADO_KB,
    #				
    #				SUM(
    #					CASE WHEN SP.INDEX_ID > 1 THEN 
    #						0 
    #					ELSE 
    #						DATA_PAGES * 8 
    #					END
    #				) AS DADOS_KB,
    #				
    #				SUM(USED_PAGES * 8) 
    #				- 
    #				SUM(
    #					CASE 
    #						WHEN SP.INDEX_ID > 1 THEN 
    #							0 
    #						ELSE 
    #							DATA_PAGES * 8 
    #						END
    #				) AS INDICE_KB,
    #									
    #				SUM( ( TOTAL_PAGES - USED_PAGES ) * 8 ) AS NAOUTILIZADO_KB,
    #				
    #				AU.TYPE_DESC
    #				
    #			FROM 
    #				SYS.PARTITIONS SP
    #			INNER JOIN 	SYS.ALLOCATION_UNITS AU ON SP.HOBT_ID = AU.CONTAINER_ID
    #			INNER JOIN SYS.INDEXES I ON I.OBJECT_ID = SP.OBJECT_ID
    #			WHERE 
    #				I.INDEX_ID = SP.INDEX_ID 
    #				AND OBJECTPROPERTY(SP.OBJECT_ID, 'ISMSSHIPPED') = 0
    #				AND SP.OBJECT_ID <> OBJECT_ID('sysdiagrams') 
    #				AND OBJECT_SCHEMA_NAME ( SP.OBJECT_ID , DB_ID() ) <> 'dba'
    #			GROUP BY 
    #				OBJECT_NAME(SP.OBJECT_ID), 
    #				I.NAME, 
    #				ROWS,
    #				AU.TYPE_DESC
    #		";
    #		
    #		#endregion SQL
    #
    #		$conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=" + $srv + "; Initial Catalog=producao; Integrated Security=SSPI")  
    #	
    #		$conn.Open()
    #		
    #		$command = New-Object System.Data.SqlClient.sqlcommand( $sql, $conn )
    #		
    #		$command.ExecuteNonQuery()
    #	}
    #}
    #
    ##endregion TABLE_SIZE
    

    Daí fica a seu critério incrementar.



    Abraços
    Demétrio Silva
    quarta-feira, 13 de janeiro de 2010 01:15
  • Demétrios,

    Muito legal o seu exemplo!!!!
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 13 de janeiro de 2010 10:57
    Moderador
  • Valeu Júnior,

    Peguei a idéia dos selects no blog do Gustavo e fiz em PS.

    Abraços
    Demétrio Silva
    quarta-feira, 13 de janeiro de 2010 12:18