none
Rotina para monitorar o particionamento de tabelas no SQL Server RRS feed

  • Pergunta

  • Olá,

    Gostaria de saber se existe alguma rotina para monitorar as tabelas particionadas.

    Objetivo:

    Verificar se está atingindo ou se ultrapassou a data limite do range estipulado na função da partição.

    --Função de Partição
    CREATE PARTITION FUNCTION Func_Part (DATETIME)
    AS RANGE RIGHT FOR
    VALUES ('01-01-2008', '01-01-2009', '01-01-2010') ;

    --RANGE RIGHT
    < 01-01-2008
    01-01-2008 até 31-12-2008
    01-01-2009 até 31-12-2009
    01-01-2010 até .......

    --Esquema de Partição
    CREATE PARTITION SCHEME Sch_Part
    AS PARTITION Func_Part
    TO (FG1, FG2, FG3, FG4);

    Alguém tem alguma idéia?

    Atenciosamente,

    Ricardo

    terça-feira, 30 de dezembro de 2014 16:43

Respostas

  • Ricardo,

         O SQL Server vai respeitar o seu PARTITION FUNCTION e não vai ultrapassar a data limite do range! Se você especificou no PF (por exemplo) de 01/01/2009 até 31/12/2009 ele só conterá dados nessa partição do intervalo configurado!

         Será que o que você quer saber é se há uma forma de monitorar quando deve mover as partições conforme os anos forem passando? Se for isso, dê uma olhada no Books Online sobre SWITCH Partitions.


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    terça-feira, 30 de dezembro de 2014 17:08
    Moderador
  • Ricardo,

    Veja se minhas consultas resolvem o seu problema...

    select	*
    from	sys.partitions where OBJECT_NAME (object_id)='nome da sua tabela' 
    order	by partition_number
    
    
    
    SELECT * FROM SYS.PARTITION_RANGE_VALUES
    select * from sys.partition_functions
    
    select * from sys.partition_schemes
    select * from sys.partition_range_values
    
    
    
    select * from sys.filegroups
    select * from sys.data_spaces
    select * from sys.database_files
    
    
    


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    terça-feira, 30 de dezembro de 2014 17:18
  • Ricardo,

    Como o Roberto indicou não há como "ultrapassar" os limites estabelecidos. O que for indicado como referência para o Particionamento será cumprido.

    Segue um script para você consultar o crescimento de linhas para cada partição de uma tabela:

    SELECT t.object_id, t.name, p.partition_id, p.partition_number, p.[rows] 
    FROM sys.partitions AS p
    INNER JOIN sys.tables AS t  
    ON p.object_id = t.object_id
    WHERE p.partition_id IS NOT NULL AND t.name = 'SuaTabela' ORDER BY p.partition_number 
    GO

    Veja na imagem abaixo o conteúdo particionado:

    Um outro modo, que pode ajuda você a entender como o SQL Server trabalha o particionamento das informações é na interface do "Compression". Para visualizar através do SSMS, seleciona uma tabela, clique com o botão direito e selecione "Storage" -> "Manage Compression...". Veja na imagem abaixo:

    A funcionalidade desta ferramenta é outra, mas ajuda a visualizar como está armazenado seus dados.

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    terça-feira, 30 de dezembro de 2014 18:53
    Moderador

Todas as Respostas

  • Ricardo,

         O SQL Server vai respeitar o seu PARTITION FUNCTION e não vai ultrapassar a data limite do range! Se você especificou no PF (por exemplo) de 01/01/2009 até 31/12/2009 ele só conterá dados nessa partição do intervalo configurado!

         Será que o que você quer saber é se há uma forma de monitorar quando deve mover as partições conforme os anos forem passando? Se for isso, dê uma olhada no Books Online sobre SWITCH Partitions.


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    terça-feira, 30 de dezembro de 2014 17:08
    Moderador
  • Ricardo,

    Veja se minhas consultas resolvem o seu problema...

    select	*
    from	sys.partitions where OBJECT_NAME (object_id)='nome da sua tabela' 
    order	by partition_number
    
    
    
    SELECT * FROM SYS.PARTITION_RANGE_VALUES
    select * from sys.partition_functions
    
    select * from sys.partition_schemes
    select * from sys.partition_range_values
    
    
    
    select * from sys.filegroups
    select * from sys.data_spaces
    select * from sys.database_files
    
    
    


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    terça-feira, 30 de dezembro de 2014 17:18
  • Ricardo,

    Como o Roberto indicou não há como "ultrapassar" os limites estabelecidos. O que for indicado como referência para o Particionamento será cumprido.

    Segue um script para você consultar o crescimento de linhas para cada partição de uma tabela:

    SELECT t.object_id, t.name, p.partition_id, p.partition_number, p.[rows] 
    FROM sys.partitions AS p
    INNER JOIN sys.tables AS t  
    ON p.object_id = t.object_id
    WHERE p.partition_id IS NOT NULL AND t.name = 'SuaTabela' ORDER BY p.partition_number 
    GO

    Veja na imagem abaixo o conteúdo particionado:

    Um outro modo, que pode ajuda você a entender como o SQL Server trabalha o particionamento das informações é na interface do "Compression". Para visualizar através do SSMS, seleciona uma tabela, clique com o botão direito e selecione "Storage" -> "Manage Compression...". Veja na imagem abaixo:

    A funcionalidade desta ferramenta é outra, mas ajuda a visualizar como está armazenado seus dados.

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    terça-feira, 30 de dezembro de 2014 18:53
    Moderador
  • Roberto,

    A idéia é monitorar o período definido no range para o Split conforme os anos forem passando em todas as tabelas particionadas da base de dados.

    Por exemplo:

    Defini o um range (01-01-2014 até 31-12-2014) para as tabela X, Y, Z, N, etc... Quero verificar em que ponto está cada uma delas, ou seja, verificar qual é a maior data nas tabelas com o intuito de fazer o Split, caso seja necessário.




    • Editado Ricardo Pellini quarta-feira, 31 de dezembro de 2014 11:31 Complemento
    quarta-feira, 31 de dezembro de 2014 11:20
  • Ricardo,

    Mas quando você fala de verificar a maior data entendo que isso não é um monitoramento, mas sim uma validação dos dados que estão contidos nesta tabela.

    Não existe a possibilidade de se realizar a consulta pelo range que esta associado ao Partition Function.

    Sinceramente ficou um pouco confuso isso.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    quarta-feira, 7 de janeiro de 2015 11:39