sexta-feira, 29 de março de 2013

Material do MVP Virtual Conference

Ontem rolou o MVP Virtual Conference 2013, e fui um dos track owners da trilha de banco de dados e como sempre, muito trabalho para um resultado gratificante.
Eu estive presente em três sessões: na primeira eu tentei contextualizar o mundo de dados nos dias de hoje e para uma sessão sem demos (imagine!) gostei muito do feedback do pessoal. A segunda eu entrei rapidinho para pegar o ganho com o Nilton e falar do uso de readonly secondaries para cargas incrementais de dados e na última sessão diversos MVPs estiveram juntos para responder a perguntas dos participantes, e depois de um começo tímido tivemos várias perguntas, principalmente sobre BI.
Publiquei o conteúdo da primeira sessão: http://sdrv.ms/X0NjEy
E também o pacote de exemplo do SSIS, que para funcionar precisa do banco criado pelo script e das pastas “C:\Temp\MVPVC” e “C:\Temp\MVPVC\Saida”: http://sdrv.ms/X0NnUK
Assim que tiver o link das gravações eu atualizo o post.


====================================================================

ATUALIZADO em 12/06/2013

Eu falei que publicaria aqui o endereço dos vídeos do evento MVP Virtual Conference. Mesmo que atrasado aqui está:

http://channel9.msdn.com/Events/MVP-Virtual-Conference/MVP-Virtual-Conference-Brazil-2013

Foi parar lá no Channel 9, chique! :-)

====================================================================
Abraços

sexta-feira, 22 de março de 2013

MVP Virtual Conference

Oi pessoal.
Na próxima semana teremos um grande evento, o MVP Virtual Conference (http://mvpvirtualconference.azurewebsites.net). São 3 dias de evento e eu estou diretamente envolvido com ele, mais especificamente no último dia.
Eu ajudei como um dos track owners da trilha BI, Big Data e Gerenciamento de Dados e estarei com outros MVPs no dia 28/03 apresentando uma série de assuntos bem interessantes. Confirma abaixo o que teremos:
Horário
Título
Descrição
Palestrante(s)
09:00-10:15
Cenário atual no mundo dos dados e a plataforma SQL Server
A importância dos dados sempre foi notada, mas com o aumento no volume de dados e o aparecimento de novas tecnologias e tendências, as empresas estão cada vez mais focando no controle e uso dos seus dados. Nessa sessão vamos apresentar o atual mundo dos dados e discutir o que temos hoje e o que está por vir: big data, Hadoop, column store, Hekaton, databases on the cloud, PDW, Data Explorer e, claro, melhorias da engine do SQL Server.
Luciano Moreira (MVP) / Fabiano Amorim (MVP)
10:15-11:30
Alta disponibilidade e integração de dados
Os requisitos de disponibilidade e acessibilidade para os seus dados só aumentam, e sua plataforma de dados deve oferecer condições de suportar o seu negócio sem surpresas. Nessa sessão vamos apresentar cenários de alta disponibilidade com o SQL Server 2012 AlwaysOn, combinando diferentes recursos e um misto de recursos, como espelhamento, clustering, replicação, etc. Será apresentado também como utilizar recursos do AlwaysOn juntamente com o Integration Services, para facilitar o acesso aos dados.
Luciano Moreira (MVP) / Nilton Pinheiro (MVP)
13:00-14:15
Cenário do mundo Real com Arquiteto do MTC
Nessa sessão um arquiteto do MTC (http://www.microsoft.com/brasil/mtc/) vai falar sobre a contextualização da história de big data e atuais soluções disponíveis. Apresentando em seguida um exemplo real de como podemos trabalhar com o Windows High Performance Computing (HPC), utilizando ferramentas do SQL Server para exploração e visualização dos dados.
Pericles Rocha (Microsoft)
14:15-15:30
Explorando dados e extraindo informações – Plataforma de BI
Business Inteligence sempre é um assunto que desperta muito interesse e área de grande investimento pelas empresas e a Microsoft está continuamente investindo na integração e desenvolvimento de novas ferramentas para análise dos dados. Nessa sessão vamos ver quais são as novidades do SQL Server Analysis Services, power view no Sharepoint e no Excel, power pivot, além do Data Explorer, plugin para o Excel para extração e transformação de dados de diferentes origens para facilitar a análise dos dados.
Felipe Ferreira (MVP)
15:30-16:45
Roundtable sobre cenários do mundo real
Palestrantes da trilha se reúnem para debater tópicos e tirar dúvidas de participantes sobre as tecnologias abordadadas na trilha de BI, Big Data e Gerenciamento de Dados.
Palestrantes e convidados

Reserve um tempo na sua agenda e não deixe de participar, pois sempre vale a pena conhecer um pouco mais!
Abraços

quarta-feira, 20 de março de 2013

System Center Advisor FREE

Post rápido, mas que merece destaque.
No passado eu bloguei sobre o System Center Advisor (http://luticm.blogspot.com.br/2012/03/system-center-advisor-introducao-e.html) e uma das restrições que atrapalhava demais era você ser obrigado a comprar o Software Assurance para poder usar o produto.

Rodando hoje pelo twitter eu vi uma chamada bbbeemm legal: "System Center Advisor is now a FREE service!".

Entrei no blog (http://blogs.technet.com/b/momteam/archive/2013/03/06/system-center-advisor.aspx) para ver mais detalhes e estava lá que somente eram para alguns países. Descrente eu abri a página com a listagem e o Brasil está na lista! Muito bom.

Vou voltar a usar o SCA e instalar para validar se está funcionando bem e, claro, se está 100% grátis. Mas o post não deixa dúvidas sobre isso.


[]s
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
@luticm
www.srnimbus.com.br

quarta-feira, 6 de março de 2013

Variável Decimal no SSIS 2012

Já faz alguns dias que eu estou andando de mão dada com o Integration Services 2012, gravando uma série de módulos para um treinamento completo de SSIS. Em breve vocês poderão ver as publicações nos treinamentos on-demand (http://www.srnimbus.com.br/calendario/turmas/treinamentos-on-demand/).
Uma questão interessante que destaquei em um dos vídeos é a variável do tipo Decimal, que não existia na interface do SSIS 2008 e está presente no SSIS 2012. Utilizando como base os testes que realizei, a não definição correta das características dessa variável pode trazer efeitos colaterais indesejados para seus pacotes.
Vou descrever alguns testes para que você possa simular no seu ambiente:
1.       Adicionar uma variável do tipo Double chamada vDouble (criativo, não?) ao pacote.
2.       Adicionar uma expression task com a seguinte expressão: @[User::vDouble] = 43 / 3
a.       Analisando o valor da variável após a expressão: 14
b.      Para termos um valor inteiro como resultado da divisão é porque estamos tratando dois inteiros como divisor e dividendo, então pela precedência dos tipos o resultado também é um valor inteiro.

3.       Alterar a expression task com a seguinte expressão: @[User::vDouble] = ((DT_DECIMAL, 4) 43) / 3
a.       Notem que estou fazendo a conversão do número 43 para DECIMAL com escala 4. No SSIS o tipo decimal possui precisão 29, diferente do tipo DT_NUMERIC (usando no pipeline) onde você pode definir até 38 como precisão.
b.      Analisando o valor da variável após a expressão: 14.3333333333
c.       Agora sim, o valor resultante possui casa decimal pelo tipo resultado ser um decimal e a variável um ponto flutuante.

4.       Adicionar uma variável do tipo Decimal chamada vDecimal ao pacote.
5.       Adicionar uma expression task com a seguinte expressão: @[User:: vDecimal] = 43 / 3
a.       Analisando o valor da variável após a expressão: 14
b.      Para termos um valor inteiro como resultado da divisão é porque estamos tratando dois inteiros como divisor e dividendo, então pela precedência dos tipos o resultado também é um valor inteiro.

6.       Alterar a expression task com a seguinte expressão: @[User:: vDecimal] = ((DT_DECIMAL, 4) 43) / 3
a.       Notem que estou fazendo a conversão do número 43 para DECIMAL com escala 4. No SSIS o tipo decimal possui precisão 29, diferente do tipo DT_NUMERIC (usando no pipeline) onde você pode definir até 38 como precisão.
b.      Analisando o valor da variável após a expressão: 14
c.       É aqui que o está o pequeno detalhe, o valor default para a variável decimal é 0, então o SSIS infere o tipo DECIMAL(29, 0). Então por padrão você NÃO vai ver casas decimais para a sua variável!

7.       Alterar o valor default da variável vDecimal para 0.01
a.       Analisando o valor da variável após a expressão que faz o cast, temos: 14.33
b.      Como você definiu o valor default para a variável como 0.01, então o SSIS infere o tipo DECIMAL(29, 2).

8.       Alterar o valor default da variável vDecimal para 0.0001
a.       Analisando o valor da variável após a expressão que faz o cast, temos: 14.3333
b.      Como você definiu o valor default para a variável como 0.0001, então o SSIS infere o tipo DECIMAL(29, 4).

9.       Alterar o valor default da variável vDecimal para 0.0000
a.       Analisando o valor da variável após a expressão que faz o cast, temos: 14
b.      Como você definiu o valor default para a variável como 0.0000, então o SSIS considerou o valor zero e infere o tipo DECIMAL(29, 0).
Isto é, se você quiser um decimal de 4 casas após a virgula e que no início do pacote o valor seja zero, você precisa definir o valor inicial como 0.0001 e no início do pacote alterar o valor para zero. Bem chato esse detalhe.
Eu revisei os novos livros do SSIS 2012 e nenhum parece tratar esse assunto, então resolvi colocar aqui para que seja validado com todos vocês (qualquer ponto que passou despercebido me avise!). Espero que você tenha cuidado e não introduza efeitos colaterais indesejados no seu pacote ao utilizar variáveis do tipo Decimal.
Em tempo, eu abri uma entrada no Connect sobre essa questão (https://connect.microsoft.com/SQLServer/feedback/details/780244/add-scale-property-to-a-decimal-variable-in-ssis, vamos ver se a Microsoft se pronuncia a respeito disso e quem sabe, de forma favorável.
Abraços

quinta-feira, 31 de janeiro de 2013

Múltiplos arquivos por filegroup

Melhor escrever alguma coisa para vocês saberem que ainda estou por aqui, não é?
Treinamento de internals (errr, Mastering) sempre é massa, muitas perguntas novas, ex-alunos que passaram X meses estudando e voltam com perguntas escabrosas, e um material que não consigo diminuir por dor no coração de deixar alguma coisa bacana de fora. Geek total.
Ontem falávamos de múltiplos arquivos por filegroup, distribuição das operações entre eles, etc., um bom prelúdio para falarmos da tempdb, e aí veio a pergunta: E se eu tiver muitos arquivos dentro do mesmo filegroup, ajuda ou atrapalha o desempenho?
Ter mais de um arquivo pode sim te beneficiar em diversas operações (como um backup ou restore) por conta de você ter mais threads para te ajudar ou ajudar na utilização proporcional/balanceamento, mas a discussão encaminhou para: o overhead para o SQL Server identificar o espaço livre em cada arquivo para uma distribuição proporcional é significativo?
Fiz o teste na minha máquina com um disco local tomando os cuidados: não ter crescimento do arquivo de log (está em auto truncate mode), não ter crescimento dos arquivos de dados (mesmo com IFI) e executar duas baterias de teste para cada banco com a máquina relativamente parada. Eis o resultado para uma inserção de 100.000 registros (um registro por página):
·         5 arquivos de 200MB = 1:24 / 1:20
·         50 arquivos de 20MB = 1:57 / 1:50
·         100 arquivos de 20MB = 2:12 / 2:20
·         500 arquivos de 20MB = 4:12 / 3:59
De aproximadamente 1 minuto e 20 segundos para quatro minutos é uma diferença bem significativa. Então existe um overhead, mesmo para um workload simples, e quanto mais “exagerado” você for com múltiplos arquivos dentro do mesmo filegroup, maior o impacto. O problema aqui é identificar onde é o overhead, o caso mais provável é que seja uma saturação do meu subsistema de I/O e não um overhead no balanceamento, mas independente da causa fica o aviso. 

Note que esse teste foi focado em mostrar o impacto de múltiplos arquivos. Vale ressaltar que ter mais de um arquivo de dados pode beneficiar o seu workload sim! O Paul Randal já escreveu sobre isso: http://www.sqlskills.com/blogs/paul/benchmarking-do-multiple-data-files-make-a-difference/ e em seu benchmark 8 arquivos apresentou o melhor desempenho. Então a regra é: faça testes em seu ambiente para encontrar a melhor configuração.
Se quiser brincar no seu ambiente, abaixo está o script que eu criei. E não deixe de compartilhar se encontrar algo novo ou que passou despercebido neste post.
USE master
GO

IF (DB_ID('MultipleFiles') IS NOT NULL)
      DROP DATABASE MultipleFiles
GO

CREATE DATABASE MultipleFiles
  ON PRIMARY
      (NAME = N'MultipleFiles',
      FILENAME = N'C:\Temp\MultipleFiles.mdf',
      SIZE = 15MB,
      MAXSIZE = 1GB,
      FILEGROWTH = 10MB)
  LOG ON
  (NAME = N'MultipleFiles_Log',
      FILENAME = N'C:\Temp\MultipleFiles_log.ldf',
      SIZE = 50MB,
      MAXSIZE = 300MB,
      FILEGROWTH = 100MB)    
go

ALTER DATABASE MultipleFiles
ADD FILEGROUP FG01
GO

DECLARE @i INT = 1
DECLARE @FileSize VARCHAR(10) = '20MB'
DECLARE @sql VARCHAR(8000)

WHILE @i <= 500
BEGIN

      SET @sql = '
      ALTER DATABASE MultipleFiles
      ADD FILE (NAME = N''MultipleFiles_Data' + CAST(@i AS VARCHAR) + ''',
            FILENAME = N''C:\Temp\MultipleFiles_Data' + CAST(@i AS VARCHAR) + '.ndf'',
            SIZE = ' + @FileSize + ',
            MAXSIZE = 1GB,
            FILEGROWTH = 10MB)
      TO FILEGROUP FG01'

      -- PRINT @sql
      EXEC (@sql)

      SET @i = @i + 1
END
GO

ALTER DATABASE MultipleFiles
MODIFY FILEGROUP FG01 DEFAULT
GO

use MultipleFiles
go

SELECT * FROM sys.database_files
SELECT * FROM sys.filegroups
go   

IF (OBJECT_ID('TabelaTeste') IS NOT NULL)
      DROP TABLE TabelaTeste
go

CREATE TABLE TabelaTeste
(Codigo INT IDENTITY NOT NULL,
 Texto CHAR(8000) NOT NULL,
 Hora DATETIME2 NOT NULL DEFAULT SYSDATETIME())
go

-- 5x 200MB = 1:24 / 1:20
-- 50x 20MB = 1:57 / 1:50
-- 100x 20MB = 2:12 / 2:20
-- 500x 20MB = 4:12 / 3:59
INSERT INTO TabelaTeste (Texto) VALUES ('Sr. Nimbus')
GO 100000

Abraços
sr. Nimbus Serviços em Tecnologia - www.srnimbus.com.br