Novidades – Microsoft SQL Server 2012 – Novas Windows Functions


Pessoal, boa tarde.

Estou de volta, com mais algumas novidades do Microsoft SQL Server 2012, hoje mais especificamente sobre as Novas Windows Functions: Lag e Lead.

Nesta última versão do time de desenvolvimento do SQL Server, introduziu no Microsoft SQL Server 2012, as funções Lag e Lead, ambas com a finalidade de análise análista de dados, o que normalmente não é realizado de forma simples para um Banco de Dados.

Até o Microsoft SQL Server 2005 e 2008, tinhamos a nossa disposição algumas Windows Functions, como por exemplo:

  • Row_Number;
  • Rank;
  • Dense_Rank; e
  • NTILE.

Sendo que estas 4 Windows Functions, são normalmente utilizadas em processo de Ranking de dados, possibilitando por exemplo definir um Ranqueamento de Valores, Contagem de Linhas ou Número de Linhas.

Além disso estas funções fazem uso da cláusula OVER, para realizar o agrupamento dos dados para possibilitar o retorno dos valores. Desta mesma forma, as funções Lead e Lag, também fazem uso da claúsula Over em sua sintaxe de comando, mas um diferencial, pois agora a cláusula Over possui suporte completo a funções de agregação com ORDER BY.

Depois desta pequena introdução, vamos conhecer um pouco mais sobre estas funções, começando pela função Lag:

Conhecendo a Windows Function Lag:

Por padrão, esta função acessa os dados de uma linha anterior no mesmo conjunto de resultados sem o uso de uma autojunção no SQL Server 2012. A Lag fornece acesso a uma linha a um determinado deslocamento físico que antecede a linha atual.

Use essa função analítica em uma instrução SELECT para comparar valores na linha atual com valores em uma linha anterior. Caso o conjunto de valores analisados pelo Lag, apresente algum valor solicitado inexistente, o SQL Server irá retornar Null como valor.

Windows Function Lag – Sintaxe:

LAG (scalar_expression [,offset] [,default])
OVER ( [ partition_by_clause ] order_by_clause )

Argumentos:

scalar_expression:O valor a ser retornado com base no deslocamento especificado.É uma expressão de qualquer tipo que retorna um único valor (escalar).scalar_expression não pode ser uma função analítica.

Offset:O número de linhas atrás da linha atual da qual obter um valor.Se não for especificado, o padrão será 1.offset pode ser uma coluna, subconsulta ou outra expressão que avalia para um inteiro positivo ou pode ser convertida implicitamente em bigint.offset não pode ser um valor negativo ou uma função analítica.

Default:O valor a ser retornado quando scalar_expression a offset é NULL.Se um valor padrão não for especificado, NULL será retornado.default pode ser uma coluna, subconsulta ou outra expressão, mas não pode ser uma função analítica.default deve ser de tipo compatível com scalar_expression.

OVER ( [ partition_by_clause ] order_by_clause):partition_by_clause divide o conjunto de resultados produzido pela cláusula FROM em partições nas quais a função é aplicada.Se não for especificado, a função tratará todas as linhas do conjunto de resultados da consulta como um único grupo. O order_by_clause determina a ordem dos dados antes de a função ser aplicada.Se partition_by_clause é especificado, determina a ordem dos dados na partição. A order_by_clause é obrigatória.

Muito bem, já conhecemos um pouco da Windows Function Lag, agora com base na Tabela 1 apresentada abaixo, foi desenvolvido o código exemplo utilizado para ilustrar o uso desta função.

Data INCC Lag Lead
2011-04-01 0,75 NULL 2,03
2011-05-01 2,03 0,75 1,43
2011-06-01 1,43 2,03 0,59
2011-07-01 0,59 1,43 0,16
2011-08-01 0,16 0,59 NULL

Tabela 1 – Relação de valores para demonstração de exemplos para funções Lag e Lead.

— Declarando a variável do tipo Table —

DECLARE @Valores TABLE  (Data DATE,  Valor DECIMAL(4,2))

 — Inserindo valores na variável —

INSERT INTO @Valores

VALUES (‘2012-04-01’,0.55),

(‘2012-05-01’,4.07),

(‘2012-06-01’,10.22),

(‘2012-07-01’,2.59),

(‘2012-08-01’,5.29)

— Executando o comando Select fazendo uso da Função Lag —

SELECT Data, Valor, LAG(Valor) OVER (ORDER BY Data) As ‘Posição Inicial’,

LAG(Valor,2) OVER (ORDER BY Data) As ‘Posição Intermediária’

FROM @Valores

—————————————————————————————————————————————————————————-

Conhecendo a Windows Funciton Lead:

A função Lead, acessa os dados de uma linha subsequente no mesmo conjunto de resultados sem o uso de uma autojunção no SQL Server 2012. A Lead fornece acesso a uma linha a um determinado deslocamento físico que segue a linha atual.

Use essa função analítica em uma instrução SELECT para comparar valores na linha atual com valores em uma linha seguinte. Da mesma forma que a função Lag, a função Lead, quando não encontra o dado solicitado retorna o valor Null, como valor não encontrado ou não especificado.

Windows Function Lead – Sintaxe:

LEAD ( scalar_expression [ ,offset ] , [ default ] )
OVER ( [ partition_by_clause ] )

Argumentos:

scalar_expression:O valor a ser retornado com base no deslocamento especificado.É uma expressão de qualquer tipo que retorna um único valor (escalar).scalar_expression não pode ser uma função analítica.

Offset:O número de linhas atrás da linha atual da qual obter um valor.Se não for especificado, o padrão será 1.offset pode ser uma coluna, subconsulta ou outra expressão que avalia para um inteiro positivo ou pode ser convertida implicitamente em bigint. O offset não pode ser um valor negativo ou uma função analítica.

Default:O valor a ser retornado quando scalar_expression a offset é NULL.Se um valor padrão não for especificado, NULL será retornado.default pode ser uma coluna, subconsulta ou outra expressão, mas não pode ser uma função analítica.default deve ser de tipo compatível com scalar_expression.

OVER ( [ partition_by_clause ] order_by_clause):partition_by_clause divide o conjunto de resultados produzido pela cláusula FROM em partições nas quais a função é aplicada.Se não for especificado, a função tratará todas as linhas do conjunto de resultados da consulta como um único grupo. O order_by_clause determina a ordem dos dados antes de a função ser aplicada.Se partition_by_clause é especificado, determina a ordem dos dados na partição. A order_by_clause é obrigatória.

Tendo como base a Tabela 1, utilizada para função Lag, foi desenvolvido o código de exemplo para a função Lead, conforme apresentado abaixo:

— Declarando a variável do tipo Table —

DECLARE @Valores TABLE  (Data DATE,  Valor DECIMAL(4,2))

— Inserindo valores na variável —

INSERT INTO @Valores

VALUES (‘2012-04-01’,0.55),

(‘2012-05-01’,4.07),

(‘2012-06-01’,10.22),

(‘2012-07-01’,2.59),

(‘2012-08-01’,5.29)

— Executando o comando Select fazendo uso da Função Lag —

 

SELECT Data, Valor,
LEAD(Valor) OVER (ORDER BY Data) As ‘Posição Posterior’,
LEAD(Valor,3) OVER (ORDER BY Data) As ‘Posição Final’
FROM @Valores

Com os códigos de exemplos apresentados acima, podemos observar que o uso destas funções é muito fácil e simples, no último código de exemplo, vou fazer uso das duas funções no mesmo select, conforme apresento a seguir:

— Utilizando as Windows Function Lag e Lead —

SELECT Data, Valor,

LAG(Valor) OVER (ORDER BY Data) As ‘Posição Inicial’,

LEAD(Valor) OVER (ORDER BY Data) As ‘Posição Posterior’,

LAG(Valor,2) OVER (ORDER BY Data) As ‘Posição Intermediária’,

LEAD(Valor,3) OVER (ORDER BY Data) As ‘Posição Final’

FROM @Valores

Com este último código de exemplo vou encerrar este post, espero que esta dica possa ser útil e demonstre o quando o Microsoft SQL Server 2012 pode ser revolucionário.

Um grande abraço.

Até a próxima.

Startup Brasil

Governo federal lança pacote para incentivar softwares e startups nacionais.


“O pacote existe agora por que o governo ficou com ciúmes do programa chileno”, diz o empreendedor Flavio Pripas sobre o pacote de investimentos TI Maior, lançado na semana passada pelo governo federal. Pripas, dono da startup Fashion.me e organizador do encontro Br New Tech, aposta que a chance de o plano vingar é justamente por meio das empresas nascentes de tecnologia.

O programa de investimentos oferecerá um estímulo de R$ 486 milhões a ser aplicado na produção de software no Brasil, e estabelecerá uma política de incentivo às startups. Cerca de R$ 40 milhões serão destinados a formar ao menos quatro empresas aceleradoras, responsáveis por orientar as novas iniciativas. Até 2014, espera-se que elas acompanhem 150 startups.

Pripas diz que o “custo Brasil” ainda é o principal problema para as startups nacionais. “É caro contratar pessoas e operar uma empresa aqui. A maior parte do dinheiro vai para o governo, contabilidade ou para publicar informes em jornais. A lei é atrasada. E minha empresa nem faturamento tem ainda!”, desabafa. O empreendedor, que está criando uma subsidiária em Nova York (“lá tudo é mais barato”), apoia a ideia do governo de direcionar a atuação das startups para áreas estratégicas como saúde, energia ou petróleo. “O governo tem que ter metas, não dá para replicar o modelo do Vale do Silício, nem o chileno, onde se investe em qualquer boa ideia. Mas também, se focar demais, às vezes não se dá abertura para inovações. Tudo tem que ser bem coordenado.” Protecionismo. Segundo o Ministério de Ciência, Tecnologia e Inovação (MCTI) os setores que receberão os investimentos serão educação, saúde, petróleo, energia, eventos esportivos e “tecnologias estratégicas”, como software livre e computação na nuvem. A Associação das Empresas Brasileiras de Tecnologia da

Informação (Assespro) elogiou o plano, mas chamou a meta do governo para dobrar o faturamento de TI de “conservadora”. Ainda disse esperar não estar diante de um “instrumento de marketing político”. A Associação Brasileira das Empresas de Software (Abes) questionou a preferência do governo pelo software livre, apontado como culpado pela baixa participação de software nacional no mercado interno. “Não temos o objetivo de restringir o mercado brasileiro”, defende Virgílio Almeida, secretário de política da informática do MCTI. Almeida elogia a ideia de certificar o software desenvolvido no País. Isso abriria uma brecha legal para que o governo garanta a preferência aos produtos certificados nas licitações. “Assim a gente privilegia a empresa nacional e equilibra a balança comercial.”

Fontes e Direitos Autorais: 26 de agosto de 2012| 19h03| Tweet este Post – Por Murilo Roncolato.

Windows 8: como saber quais aplicativos mais consomem espaço de armazenamento

Se o seu computador sofre do mal de HD superlotado, tirar os aplicativos mais pesados pode resolver o problema. Descubra quais programas ocupam mais espaço em disco.


Baixar diversos aplicativos da loja online do Windows 8 é algo muito divertido, mesmo porque algumas opções de programas são simplesmente irresistíveis. A grande quantidade de jogos disponíveis pode fazer com que você ocupe um bom espaço do HD do seu computador sem nem se dar conta.

Por isso, de vez em quando é importante verificar se está tudo bem com o armazenamento em disco. Caso você tenha ocupado mais espaço do que deveria, pelo menos é possível desinstalar alguns aplicativos para resolver esse problema.

Porém, nem todo mundo sabe como conferir essas informações no Windows 8, afinal de contas, a nova interface modificou o acesso a grande parte das funcionalidades, incluindo essa. Portanto, vamos ensinar como acessar os dados relacionados ao armazenamento em disco neste artigo. É muito simples e rápido!

Saiba quais são os aplicativos mais espaçosos

1. Quando você estiver com a interface aberta no computador, utilize o atalho das teclas Windows + C para abrir a Charm Bar, que aparece na coluna direita da tela;

2. Clique em “Configurações” (ou “Settings”, caso seu Windows 8 esteja em inglês);

(Fonte da imagem: Reprodução Baixaki/Tecmundo)

3. Ao se transformar, a tela passa a mostrar a função “Mudar configurações do PC” na parte inferior da interface. Clique sobre esse item;

(Fonte da imagem: Reprodução Baixaki/Tecmundo)

4. Quando a tela “Configurações” aparecer, selecione a aba “Geral” e clique em “Exibir tamanhos de aplicativos”, função localizada na seção “Armazenamento disponível”;

(Fonte da imagem: Reprodução Baixaki/Tecmundo)

5. Ao fazer isso, uma pequena janela é aberta mostrando uma lista com todos os aplicativos instalados no seu computador e o tamanho que cada um deles ocupa em disco. A partir disso, basta desinstalar os programas mais espaçosos e desnecessários para que seja liberado mais espaço no seu HD.

Fontes e Direitos Autorais: Luana  Lima em 22  de Agosto de  2012

Leia mais em:  http://www.tecmundo.com.br/como-fazer/28804-windows-8-como-saber-quais-aplicativos-mais-consomem-espaco-de-armazenamento.htm#ixzz24OC67Xfd

Dicas de senhas podem ser facilmente extraídas do Windows 7 e 8

Se as dicas forem óbvias demais, hackers podem facilmente recuperar as senhas dos usuários, mesmo sem ter acesso físico ao computador.


(Fonte da imagem: Reprodução/Ars Technica)

As versões mais recentes do sistema operacional da Microsoft trazem um  recurso para auxiliar os usuários a se lembrar da senha cadastrada no momento da  instalação (ou criação do perfil). Essas dicas de senhas ficam salvas no  registro do sistema em formato de código, mas podem ser facilmente convertidas  em palavras novamente.

Jonathan Claudius é um pesquisador de vulnerabilidades do SpiderLabs que  desenvolveu uma ferramenta que automatiza o processo de desencriptação desses  códigos. Ele publicou o serviço junto com a documentação completa sobre esse  recurso do Windows.

Essa informação pode ser utilizada por hackers para acessar os dados pessoais  dos usuários. Apesar de essas dicas de senhas serem visíveis para qualquer um  que tenha acesso físico ao computador, anteriormente se algum hacker tentasse  interceptar senhas pela internet, tudo o que ele conseguiria eram senhas  criptografadas, que não tinham muita utilidade. Essa nova descoberta pode fazer  com que os invasores possam ver à distância as dicas de senhas e, através disso,  descobrir qual o código de acesso cadastrado.

A segurança das senhas é um item muito discutido. Lembre-se de sempre  utilizar combinações de letras e números e, o mais importante: nunca use dicas  de senhas óbvias, como “nome do meu cão” ou “aniversário da minha avó”.

Leia mais em:  http://www.tecmundo.com.br/seguranca/28842-dicas-de-senhas-podem-ser-facilmente-extraidas-do-windows-7-e-8.htm#ixzz24O9nfecD

Microsoft espera vender 3 mi de tablets em 2012


São Paulo – A Microsoft deve embarcar 3 milhões de unidades de seu tablet Surface para o início das vendas do produto, marcado para o próximo dia 26 de outubro.

Segundo informou o analista do IDC, Bob O´Donnell, ao site Cnet, a empresa espera entregar pouco mais de 3 milhões de unidades do aparelho no último trimestre do ano.

Segundo o analista, o tablet deve ser ofertado em dois preços com pacotes distintos: o mais barato por 199 dólares e associado a um plano de assinatura de serviços e um outro por cerca de 599 dólares desbloqueado”.

A versão do Surface que poderá ser adquirida a partir desta data virá com processador ARM e Windows 8 RT, versão mais modesta do tablet. Sua opção mais sofisticada, com chip Intel Ivy Bridge Core i5 e Windows 8 Pro, chegará às lojas apenas no início de 2013.

Na semana passada, um site sueco disponibilizou a pré-venda do tablet por preço equivalente a 1 mil dólares, quase o dobro do previsto – e também do que custa o novo iPad nos Estados Unidos. Embora não tenha se pronunciado sobre o ocorrido, a Microsoft garantiu que o preço do Surface será “competitivo”.

Fontes e Direitos Autorais: , de INFO Online • Segunda-feira, 20 de agosto de 2012 – 08h58.

Após 25 anos, Microsoft reestiliza sua logomarca


Nova logomarca utiliza linhas e proporções mais claras e equilibradas

São Paulo – A Microsoft apresentou, nesta quinta-feira (23), a nova versão de sua logomarca. Há 25 anos, a Microsoft utilizava a mesma marca.

O novo logo é divido em dois módulos: o símbolo e o logotipo. Antes, em formato de flâmulas, o símbolo agora é formado por quatro quadros de proporções iguais e cores diferentes – as cores representam o portfólio de produtos da empresa.

Já o logotipo (a palavra Microsoft escrita) foi elaborado usando a fonte Segoe, antes utilizada em outros produtos da empresa.

Segundo comunicado, a identidade visual será aplicada em todos os novos produtos da empresa, como o Windows 8, Windows Phone 8, novo Office e serviços para a plataforma Xbox.

De acordo com a Microsoft, a nova identidade está em sincronia com a nova fase da empresa. “Nosso logotipo deve evoluir visualmente para acentuar este novo começo”, declarou o gerente de marketing, Jeff Hansen.

A partir de hoje, o novo logo já será utilizado no site e em três lojas físicas da Microsoft: em Seattle, em Boston e em Bellevue. Em breve, a nova identidade deve ser estendida para toda a comunicação da empresa fundada por Bill Gates.

Fontes e Direitos Autorais: , de INFO Online • Quinta-feira, 23 de agosto de 2012 – 12h07.

Criando Funções e Esquemas de Particionamento de Dados para oferecer possíveis ganhos desempenho e distribuição de dados no Microsoft SQL Server 2008 e Microsoft SQL Server 2008 R2.

Criando Funções e Esquemas de Particionamento de Dados para oferecer possíveis ganhos desempenho e distribuição de dados no Microsoft SQL Server 2008 e Microsoft SQL Server 2008 R2.


Pessoal, bom dia.

Estou de volta, com mais um artigo. Hoje vou falar um pouco de Particionamento de Dados no Microsoft SQL Server 2008 e Microsoft SQL Server 2008 R2, através do Partition Function e Partition Scheme.

Recentemente venho recebendo de alguns contatos, questionamentos sobre como podemos tentar melhorar o desempenho de nossos servidores SQL Server, de uma forma, que não impacte na estrutura interna de aplicações que estão fazendo acesso aos dados.

A princípio veio a minha mente utilizar o particionamento do banco de dados em diversos Filegroups, algo que normalmente eu utilizo e consigo mensurar e observar melhoras de desempenho.

Por outro lado, também pensei em utilizar particionamento horizontal de tabelas, fazendo com o banco de dados, cresça no seu tamanho de tabelas, mas isso vai impactar diretamente na aplicação.

Então, me deparei com a possibilidade de utilizar o Particionamento de Dados através do uso de Funções e Esquemas, o que poderia aliar ainda o uso de outros Filegroups.

Muito bem, um dos cenários mais atraentes para se utilizar este tipo de técnica, consiste na identificação de tabelas que possuem um volume grande de manipulações de dados, como também, sua quantidade de registro cresce constantemente, passando de centenas de dados, milhares ou bilhões de linhas de registros em pouco tempo.

Como de costumo vou destacar um pouco das finalidades e funcionalidades destes recursos, inicialmente pela Função de Particionamento.

Partition Function (Funções de Particionamento): Cria uma função no banco de dados atual que mapeia as linhas de uma tabela ou índice em partições com base nos valores de uma coluna especificada. Usar a instrução CREATE PARTITION FUNCTION é a primeira etapa na criação de uma tabela particionada ou índice.

No momento da criação uma função de particionamento, temos a necessidade de especificar o lado, sendo ele: Left ou Right, que determinada à forma de controle para alocação do dado em uma partição.

Ao especificar qual lado de cada intervalo de valor de limite, esquerdo ou direito, os valores devem pertencer. Estamos definindo a forma com que os intervalos serão classificados pelo Mecanismo de Banco de Dados em ordem crescente da esquerda para a direita. Se não for especificado, LEFT é o padrão.

O escopo de uma função de partição está limitado ao banco de dados no qual ele for criado. No banco de dados, as funções de partição residem em um namespace separado das outras funções.

Quaisquer linhas cuja coluna de particionamento tenha valores nulos serão colocadas na partição mais à esquerda, a menos que NULL seja especificado como um valor de limite e RIGHT sejam indicados. Nesse caso, a partição mais à esquerda será uma partição vazia e os valores NULL serão colocados na partição seguinte.

Qualquer uma das permissões a seguir pode ser usada para executar CREATE PARTITION FUNCTION:

  • Permissão ALTER ANY DATASPACE. Essa permissão tem como padrão os membros da função de servidor fixa sysadmin e das funções de banco de dados fixas db_owner e db_ddladmin.
  • Permissão CONTROL ou ALTER no banco de dados no qual a função de partição está sendo criada.
  • Permissão CONTROL SERVER ou ALTER ANY DATABASE no servidor do banco de dados no qual a função de partição está sendo criada.

Partition Scheme (Schemas de Particionamento): Cria um esquema no banco de dados atual que mapeia as partições de uma tabela particionada ou índice para grupos de arquivos.

Uma função de partição deve primeiramente ser criada em uma instrução CREATE PARTITION FUNCTION antes de criar um esquema de partição.

Ao criarmos um Esquema de Particionamento, temos a obrigatoriedade de vincular as áreas de particionamento e alocação de dados, de acordo com os limites especificados, como faixa de valores na Função de Particionamento. Neste caso, se especificamos três limites de valores em nossa função, deveremos utilizar quatro áreas de alocação de dados em nosso esquema, para podermos armazenados todos os possíveis limites de dados.

Para criar um Esquema de particionamento, através do comando CREATE PARTITION SCHEME, devemos ter uma das seguintes permissões:

  • Permissão ALTER ANY DATASPACE. Esta permissão tem como padrão os membros da função de servidor fixa sysadmin e das funções de banco de dados fixas db_owner e db_ddladmin.
  • Permissão CONTROL ou ALTER no banco de dados no qual o esquema de partição está sendo criado.
  • Permissão CONTROL SERVER ou ALTER ANY DATABASE no servidor do banco de dados no qual o esquema de partição está sendo criado.

Agora que conhecemos um pouco do que uma Função de Particionamento e um Esquema de Particionamento devem realizar, vamos agora, começar a criar o nosso ambiente, para colocarmos em uso estes dois recursos.

Vale ressaltar que somente a Edição Enterprise do Microsoft SQL Server 2005 em diante tem a capacidade de trabalhar com Funções e Esquemas de Particionamento de Tabelas e Índices.

Começamos pela criação do nosso banco de dados, vou definir o nome deste Banco como Particionamento, conforme apresenta o Código 1.

— Código 1 – Criando o Banco de Dados –

Create Database Particionamento

ON PRIMARY

(NAME = Particionamento_Dados,

  FILENAME = N’C:\SQL\Teste_Dados.mdf’,

  SIZE = 2MB,

  MAXSIZE = Unlimited,

  FILEGROWTH = 10%)

LOG ON

(NAME = Particionamento_Log,

 FILENAME = N’C:\SQL\Particionamento_Log.ldf’,

 SIZE = 4MB,

 MAXSIZE = Unlimited,

 FILEGROWTH = 10%)

 

O próximo consiste no adicionamento de novos Filegroups (Agrupamento de Arquivos) e em seguida a criação de novos arquivos de dados, que serão utilizados em conjunto com a nossa função e esquema de particionamento. Na primeira parte do Código 2, vamos criar os dois novos Filegroups, denominados: ParticionamentoFG1 e ParticionamentoFG2.

— Código 2 – Parte I – Criação de novos Filegroups –

Alter Database Particionamento

Add FileGroup ParticionamentoFG1

Go

Alter Database Particionamento

Add FileGroup ParticionamentoFG2

Go

Nossos Filegroups já estão criados, falta agora vincular os nossos arquivos de dados e estes repositórios, conforme apresenta a segunda parte do Código 2.

 

— Código 2 – Parte II – Criação de novos arquivos de dados e vínculo com os Filegroups –

Alter Database Particionamento

Add File

 (Name = Particionamento_Dados_Segundo,

  FileName = ‘C:\SQL\Particionamento_Dados_Segundo.ndf’,

  Size = 2MB,

  MaxSize = Unlimited,

  Filegrowth = 10%)

To Filegroup ParticionamentoFG1

Go

Alter Database Particionamento

Add File

 (Name = Particionamento_Dados_Terceiro,

  FileName = ‘C:\SQL\Particionamento_Dados_Terceiro.ndf’,

  Size = 5MB,

  MaxSize = Unlimited,

  Filegrowth = 10%)

To Filegroup ParticionamentoFG2

Go

Pois bem, nossos novos arquivos de dados estão criados e vinculados com seus respectivos filegrous, vamos utilizar a Visão de Catálogo de Sistema, sys.FileGroups para obter a relação de agrupamento de arquivos definidos para o nosso Banco de Dados Particionamento. Para isso podemos executar o Código 3, conforme apresento abaixo:

 — Código 3 – Consultando a relação de Filegroups –

Select * from sys.FileGroups

Após executarmos este código recebemos o seguinte resultado:

Figura 1 – Relação de Filegroups configurados para o Banco de Dados – Particionamento.

Podemos constatar e comprovar a existência dos três Filegroups alocados para este banco de dados, o próximo passo consiste justamente na parte mais importante deste artigo, onde estaremos fazendo a criação da nossa Função de Particionamento e Esquema de Particionamento de Dados.

Para isso, vou utilizar o Código 4 e Código 5, respectivamente:

— Código 4 – Criando a Função de Particionamento PF_Valores –

CREATE PARTITION FUNCTION PF_Valores (Int)

AS RANGE Left FOR VALUES (1,4,8)

GO

É possível notar que a função de particionamento PF_Valores, possui como faixa de valores os Número 1, 4 e 8, além disso, o controle para delimitação dos valores esta definido ao Esquerda. Outro detalhe importante que estes valores serão tratados e reconhecidos como Inteiros.

Podemos confirmar a criação desta função, através da Visão de Catálogo de Sistema: Sys.Partition_Functions, através do código: Select * from sys.partition_functions

— Código 5 – Criando a Esquema de Particionamento PS_Valores –

CREATE PARTITION SCHEME PS_Valores

AS PARTITION PF_Valores

TO (ParticionamentoFG1, ParticionamentoFG1, ParticionamentoFG2, ParticionamentoFG2);

GO

Fazendo uma rápida análise, podemos observar que o esquema de particionamento PS_Valores, esta vinculado em sua opção Partition a função PF_Valores, para as seguintes áreas de alocação de dados:

  • ParticionamentoFG1 e ParticionamentoFG2

Sendo assim, como a função PF_Valores tem o controle de limite de valores, a partir da Esquerda, respeitando sua faixa de valores: 1, 4 e 8. O SQL Server vai criar a seguinte estrutura para armazenamento de dados, conforme apresenta a Tabela 1:

Partition

1

2

3

4

 Valores

Int <= 1

Int > 1 AND Int <= 4

Int > 4 AND col1 <=8

Int > 8

Tabela 1 – Estrutura para alocação de dados de acordo com a partição.

A partir do momento em que o vínculo entre o Esquema de Particionamento é definido com a Função de Particionamento, o SQL Server define a sua falta de distribuição de dados, conforme a Tabela 1, mas atrelando os Filegroups especificados no esquema. Com isto, teremos a distribuição de dados apresentada na Tabela 2:

Partition

1

2

3

4

 Valores

Int <= 1

Int > 1 AND col1 <= 4

Int   > 4   AND Int <=8

Int > 8

Filegroups

ParticionamentoFG1

ParticionamentoFG1

ParticionamentoFG2

ParticionamentoFG2

Data_Space

2

2

3

3

Tabela 2 – Estrutura para alocação de dados de acordo com a partição e filegroup.

Estamos chegando ao final, agora falta pouco para concluirmos este artigo, nesta parte final vamos criar uma tabela chamada Valores e ao invés de vincular esta tabela com um Filegroups, vamos fazer o vínculo com nosso Esquema de Particionamento PS_Valores, através da coluna Valor que é do tipo inteiro, o mesmo tipo que configuramos na criação da Função PF_Valores. Com isso o SQL Server, terá a capacidade de distribuir os dados entre os Filegroups, conforme apresenta o Código 6.

— Código 6 – Criação da Tabela Valores –

Create Table Valores

 (Codigo Int Identity(1,1),

  Descritivo Varchar(20) Not Null,

  Valor Int Not Null)

On PS_Valores(Valor)

Nossa tabela esta criada e pronta para receber os dados, agora podemos realizar a série de comandos Inserts e observar o crescimento dos nossos arquivos de dados, vinculados de acordo com seus Filegroups.

Vamos então executar em partes do Código 7, neste código estamos realizando a inserção de massas de dados divididas em faixas de valores para forçar e apresentar o particionamento de dados. Vale ressaltar que estamos inserindo em cada porção o número de 100 mil linhas de registros, o que poderá demandar um certo tempo de processamento.

— Código 7 – Parte I – Inserção de Dados —

Insert Into Valores (Descritivo, Valor)

Values (‘Este é um teste’,1)

Go 100000

 

Insert Into Valores (Descritivo, Valor)

Values (‘Este é um teste’,10)

Go 100000

 

Insert Into Valores (Descritivo, Valor)

Values (‘Este é um teste’,2)

Go 100000

 

Insert Into Valores (Descritivo, Valor)

Values (‘Este é um teste’,9)

Go 100000

— Código 7 – Parte II – Inserção de Dados —

Insert Into Valores (Descritivo, Valor)

Values (‘Este é um teste’,3)

Go 100000

 

Insert Into Valores (Descritivo, Valor)

Values (‘Este é um teste’,8)

Go 100000

 

Insert Into Valores (Descritivo, Valor)

Values (‘Este é um teste’,4)

Go 100000

 

Insert Into Valores (Descritivo, Valor)

Values (‘Este é um teste’,7)

Go 100000

— Código 7 – Parte III – Inserção de Dados —

Insert Into Valores (Descritivo, Valor)

Values (‘Este é um teste’,5)

Go 100000

 

Insert Into Valores (Descritivo, Valor)

Values (‘Este é um teste’,6)

Go 100000

Após inserir todas as faixas de valores, foi possível observar que o SQL Server realizou a distribuição dos dados de acordo com as faixas definidas em nossa função, trabalhando em conjunto com o nosso esquema.

Todo este trabalho foi feito de forma transparente, sem que fosse necessário mais algum tipo de customização, na verdade toda a regra de negócio já havia sido definida na função e esquema. Isso nos mostra o quanto podemos evoluir com este tipo de cenário, fazendo uso deste recurso fantástico em nosso ambiente de trabalho, proporcionando uma forma de trabalho rápida, inteligente, simples e prática.

Como também, é importante destacar que momento em que estivermos realizando qualquer tipo de manipulação de dados, o SQL Server estará fazendo acesso a locais distintos, arquivos distintos e conseguindo ler dados distribuídos de forma contínua e simultânea.

Outro detalhe interessante foi à forma de crescimento de nossos arquivos de dados, sendo feito de acordo com a distribuição de dados, por parte do esquema, o que também indica todo processo de análise e inteligência realizado pelo SQL Server, conforme os dados estão sendo manipulados.

Bom, acredito que este artigo com certeza vai ajudar em muito o sua dia-a-dia, principalmente no que diz respeito à particionamento de tabelas, índices, dados e Filegroups. Por outro lado, poderá servir como base para outras soluções, dentre elas a melhoria para acesso a grandes tabelas e bancos de dados.

Mais uma vez agradeço a sua visita, nos encontramos em breve.