Usuário com melhor resposta
Rotina para monitorar o particionamento de tabelas no SQL Server

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
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
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 7 de janeiro de 2015 11:35
- Marcado como Resposta Durval RamosModerator sábado, 7 de março de 2015 04:08
-
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
- Marcado como Resposta Durval RamosModerator sábado, 7 de março de 2015 04:08
-
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"- Marcado como Resposta Durval RamosModerator sábado, 7 de março de 2015 04:08
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
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 7 de janeiro de 2015 11:35
- Marcado como Resposta Durval RamosModerator sábado, 7 de março de 2015 04:08
-
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
- Marcado como Resposta Durval RamosModerator sábado, 7 de março de 2015 04:08
-
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"- Marcado como Resposta Durval RamosModerator sábado, 7 de março de 2015 04:08
-
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
-
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