terça-feira, 14 de maio de 2013

De SQL Server geek para database geek

Algumas pessoas já sabem, mas a maioria não, e agora que estou conseguindo respirar um pouco quero escrever sobre um assunto importante: minha carreira (pelo menos EU acho importante J). Durante esse ano, em uma lista de discussão privada, eu vi diversos anúncios onde o mercado de SQL Server se mostrava bem agitado, então coincidência ou não, vou enviar meu e-mail depois de publicar esse post.
Em 1º de Abril de 2013 completaram exatos quatro anos que eu deixei a Microsoft, e coincidentemente a data também se tornou um marco importante, foi meu primeiro dia de trabalho no Sicoob. No mesmo dia eu postei o tweet abaixo, e claro todo mundo entendeu como a piada de 1º de Abril, só que realmente era verdade. E calma, eu explico...


Como é normal em toda virada de ano, passei por momentos de pensar na vida e de resoluções, mas somente em fevereiro eu realmente tive uma conversa séria comigo e tomei uma decisão que mudaria um pouco o ruma da minha vida: estava na hora de experimentar algo novo. A partir daí eu comecei a fazer um brainstorm de possibilidades: mudar de emprego, fazer concurso público, entrar para um mestrado, mudar de cidade ou indo mais longe, mudar de país. Só então em uma conversa informal com outro MVP de SQL Server, meu amigo Gustavo Aguiar, vi o que parecia uma ótima oportunidade e optei por ir trabalhar em sua equipe.
A escolha
Em 2008/2009 eu tomei a decisão de largar a Microsoft para testar algo novo, ter minha própria empresa. Na época era o momento certo para fazer parte dessa aventura, recém-casado e sem filhos, poderia me dedicar à empresa e seu gerenciamento. Para muitos pareceu loucura, ainda mais depois do início da crise mundial deflagrada em 2008, mas construímos uma empresa divertida e competente, que hoje tenho orgulho de poder dizer: somos referência em excelência técnica, principalmente em SQL Server.
Agora o momento é outro, a empresa está solidificada e eu estou com um sentimento de dever cumprido. Mas minha constante inquietação fica me questionando quais devem ser meus próximos passos.  Muitas dúvidas e apostas que acabaram levando-me para uma nova direção, junto com meu desejo de participar da concepção, desenvolvimento e o crescimento de projetos relacionados com banco de dados, oportunidade que raramente me foi concedida.
Então vou atrás do que falta na minha carreira profissional, um lugar em que eu possa ter a tranquilidade de construir uma solução e ficar com ela durante sua maturidade. Mas eu precisava de um lugar onde a tecnologia de ponta fosse valorizada e bem aplicada para o negócio, e não onde tecnologia é fim.
Um único cliente e novas tecnologias
Em minha carreira profissional eu trabalhei por mais de três anos em três lugares diferentes: Hepta, Microsoft e Nimbus, onde passei pelas áreas de desenvolvimento, treinamento, consultoria, suporte e até evangelismo técnico. O que todos esses lugares têm em comum: você chega a um cliente, ajuda-o com orientações arquiteturais, resolve problemas, ensina-o como usar a tecnologia, mas raramente fica com o cliente o tempo todo para ver seu projeto ou ideias crescerem.
Mas para onde levar a experiência que acumulei? Em Brasília as opções não são tantas... Concurso público: salários tentadores, tranquilidade financeira para o resto da vida, mas talvez um ambiente muito diferente do meu ritmo de trabalho; São Paulo: muitas oportunidades e empresas bem grandes, mas um custo familiar que não posso pagar; Outro país – quem sabe um dia, mas hoje com dois filhos pequenos fica muito complicado e provavelmente mataria algum avô de saudade.
Então minha escolha recaiu sobre o Sicoob (http://www.sicoob.com.br/). Organização em franco crescimento, eu conheço excelentes profissionais que trabalham lá, investimento sério em tecnologia, e uma oportunidade ímpar de expandir meu conhecimento técnico.
Quem já participou de meus treinamentos ou me conhece pessoalmente já deve ter me ouvido dizer como eu gostaria de trabalhar com outras tecnologias, seja Oracle ou DB2, conhecer mais de storage, redes e sistemas operacionais. Pois é, em meu novo cargo eu estou diretamente responsável por um ambiente DB2, vou ter a chance de trabalhar com Linux e conhecer o mainframe, com seu zOS.
Como um bom geek vocês não imaginam como eu estou empolgado, muita coisa nova e uma enxurrada de ideias, inclusive já estou lendo um novo livro: Linux Kernel Architecture (http://www.amazon.com/Professional-Linux-Kernel-Architecture-Programmer/dp/0470343435) e também muitos redbooks da IBM.
A Sr. Nimbus
Imagino que você deva estar se perguntando “E a Sr. Nimbus?”. A empresa continua e vai bem, obrigado.
Desde o primeiro dia da minha decisão por procurar algo diferente, sempre esteve claro em minha cabeça que eu vou continuar com a Nimbus, pois meu prazer em ministrar treinamentos e prestar consultoria de SQL Server vai continuar, e quero a empresa me oferecendo essa possibilidade.
Se aparecerem novos projetos vamos continuar crescendo e se possível atraindo geeks tão fantásticos como os que ajudam a Nimbus hoje. Obviamente que o Luti não terá como oferecer tantos treinamentos como vinha fazendo, mas na semana passada ministrei um Mastering, estou gravando treinamentos on-demand e aguardando ansiosamente para ajudar o Fabiano Amorim em um grande projeto de performance tuning para um cliente de São Paulo.
Então a empresa segue sua jornada, eu continuo dando meus palpites, ajudando a traçar seus caminhos e cobrando a excelência de todos que estão envolvidos com ela. Pensou nos melhores consultores de SQL Server no Brasil? Pode continuar olhando para a Nimbus.
SQL Server e o profissional de dados
Outra pergunta que ainda vou ouvir muito será relacionada ao meu futuro com o SQL Server e Microsoft. Faz doze anos que eu estou estudando a plataforma de desenvolvimento e de dados da Microsoft, é claro que não vou pegar tudo isso e jogar fora. Mas segue um pequeno devaneio...
No PASS Summit de 2012 eu fiquei por 3 horas assistindo uma sessão de SQLOS nível 500 com o famoso Bob Ward, nem preciso dizer que sonhei com essa sessão e foi muito legal. Mas já comentei em particular com algumas pessoas e digo aqui, imaginei que a sessão seria mais profunda (importante: não quero parecer pedante e sabendo da probabilidade em que vou queimar no fogo do inferno por esse comentário, ainda assim o escrevo aqui para ilustrar um dos meus dilemas). PQP Luti, uma sessão nível 500 com Bob Ward sobre SQLOS e você querendo que ele mostrasse mais detalhes?! Sim, realmente eu acho que estou ficando muito bitolado nos detalhes do SQL Server.
Também acho que nunca vivemos um momento tão interessante para o profissional de dados. São tantas possibilidades, tantos desafios e muitas tecnologias diferentes que para me tornar um profissional melhor eu tenho que explorar outras plataformas. E agora eu tenho a possibilidade de conhecer produtos diversos, ver o mundo sob uma ótica diferente (o lado do cliente), então esta é uma oportunidade que eu não posso deixar passar.
Resumindo meus amigos, eu não vou deixar o SQL Server e não vou renunciar tudo que eu conquistei, mas vou sim ralar muito para me tornar um melhor profissional de dados, um DBA, instrutor e consultor multiplataforma, de preferência sabendo muitos detalhes como todo bom geek.
O futuro
Minha bola de cristal está sem pilha, então não sei o que vai acontecer no futuro, mas claro que pensei demais no assunto e estou certo que foi a melhor decisão para o momento. Pode ser que daqui a algum tempo eu volte 100% para a Nimbus, mude de país, ou resolva largar o mundo de tecnologia para me tornar um monge tibetano... Independentemente do que acontecer, provavelmente você saberá por aqui.
Qual minha expectativa: ter mais experiência e ser um profissional cada vez mais completo, viver desafios diferentes e ser o mais feliz possível, profissionalmente e pessoalmente. E aproveitar um modelo de trabalho mais controlado para escrever mais nesse blog, estudar muito e continuar tendo prazer nas minhas atividades. Afinal, o tempo passa rápido e a vida precisa ser vivida ao extremo.
Tenho certeza que terei a chance de compartilhar com vocês o que eu for aprendendo ao longo do caminho e que nos encontraremos muitas vezes, seja em eventos de SQL Server, ou quem sabe eventos de DB2 ou até Oracle!
Perguntas
Vou deixar aqui uma área para as eventuais perguntas que eu receber. Ficou curioso e quer saber mais sobre minha decisão? Quer me chamar de maluco? Deixe seu comentário ou mande um e-mail para luciano.moreira@srnimbus.com.br.
Abraços

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.
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