quinta-feira, 25 de outubro de 2012

[SQLServerDF] Encontro XV - Entendendo e Utilizando o ColumnStore Index

!! DATA ATUALIZADA !!
Tivemos que alterar o agendamento, pois na data original o escritório da Microsoft estará fora de operação.

Para fechar o ano de 2012 teremos mais dois encontros do grupo SQLServerDF, e dessa vez eu saio de cena para dar espaço aos novos palestrantes! Espero que em 2013 nós possamos manter uma melhor regularidade com esse revezamento de profissionais, assim fica mais simples garantir conteúdo variado para aqueles que já devem estar cansados de sempre verem minha cara lá na frente, falando alucinadamente durante 2h.
Sem mais demora, o detalhamento está aqui:
Local: Auditório da Microsoft - Edifício Corporate Financial Center, sala 302 - Brasília
Data e horário: 29/11/2012, 17:00h ~ 19:30h
Tema: Entendendo e Utilizando o ColumnStore Index
Descrição: Esta sessão têm por objetivo explicar o funcionamento do novo recurso do SQL Server 2012 o ColumnStoreIndex. Iremos entender porque esse novo recurso aumenta drasticamente a velocidade de pesquisa de uma consulta, veremos a grande diferença entre Row-Store e Column-Store, navegaremos internamente para entender o funcionamento de alocação, além de tocar em tópicos como: XVelocity, índices, melhores práticas, lados positivos, lados negativos e assim por diante.
Palestrante: Luan Moreno Medeiros Maciel
Mini-bio:
Luan Moreno M. Maciel (@LuanSQL) trabalha no Conselho Federal da OAB como especialista em SQL Server onde atua com administração, desenvolvimento, melhores práticas, gerenciamento e alta disponibilidade. Possui as certificações MCP, MTA, MCTS e MCITP de SQL Server Administrator e Developer 2008. Contribui ativamente com a comunidade nos Fóruns, TechNet Wiki e Blog.
Quer participar? Então mande para o grupo SQLServerDF um e-mail confirmando sua presença, pois a capacidade do auditório é limitada, portanto atendemos por ordem de recebimento de e-mails!
Abraços
sr. Nimbus Serviços em Tecnologia - www.srnimbus.com.br

sexta-feira, 19 de outubro de 2012

Treinamento Nimbus e mercado, uma análise

Olá caro leitor, hoje eu estou postando sobre um assunto que merece um texto maior! Treinamentos Sr. Nimbus, mercado de trabalho e como encaramos esse desafio de ser uma empresa que têm por um de seus objetivos é ser formadora de profissionais de alto gabarito técnico.
Antes de começar, se você ainda não viu os posts sobre minha pesquisa e resultado (obrigado a todos que participaram), comece lendo: http://luticm.blogspot.com.br/2012/08/respostas-da-pesquisa-de-treinamento-sr.html. Aproveite e também conheça um pouco da minha opinião sobre alguns assuntos relacionados à carreira e capacitação profissional, principalmente nos posts de ano novo:
Todos com o mesmo background dos links acima? Como sempre vou ser franco e direto, ok?! Então vamos começar...

Treinamento Sr. Nimbus


Como é hoje nosso carro chefe, vamos tratar de treinamentos SQL Server, mas a mesma filosofia se aplica para outros treinamentos. Nosso objetivo é fornecer uma capacitação essencial para o profissional, que tem que suportar ambientes críticos e é responsável pelo negócio da empresa onde trabalha, então não podemos ficar só nos treinamentos básicos, temos que tentar oferecer um espectro grande de treinamentos, para tentar melhor atender a todos.
O problema é que muitas vezes essa maior gama de ofertas parece gerar muita confusão, recebemos muitos mails pedindo orientação de como seguir na “carreira SQL Server - Sr. Nimbus”, então tentamos organizar isso dessa forma: .
Não focamos em treinamentos para a certificação Microsoft, nosso objetivo é que o aluno saia de nossos treinamentos e seja um profissional, profissional (com o perdão do trocadilho). Como consequência de estar presente em alguns cursos da Nimbus, você vai acabar triturando a prova sem ter que ficar “estudando” para ela, é o caminho natural.
Nossos treinamentos não são estáticos, a cada aula melhoramos o conteúdo, nossa didática e a qualidade da entrega. Eu sou extremamente chato com nossos funcionários, tenho certeza que tem hora que ficam me xingando, mas é para tentar fazer o melhor. E em que isso se traduz?
No momento eu tenho registrado em meu notebook 71 avaliações do treinamento SQL Server 2008 Internals e levo em consideração duas perguntas como mais importantes (e seu resultado):
·         Em geral, como você avalia o treinamento?
o   69 – Excelente
o   2 – Bom
·         Como você avalia o instrutor (didática, conhecimento, interesse pelo aprendizado do aluno, etc.)
o   70 – Excelente
o   1 – Bom
Não sei se você já participou de muitos treinamentos, mas eu considero o número acima bem significante, e sim, ver um aluno marcando o instrutor como bom e não excelente, me incomoda, quer dizer que eu poderia ter feito melhor.
Nos outros quesitos de treinamento: qualidade do material, infra-estrutura, etc., podemos notar uma melhora significativa desde a primeira turma até a de hoje, passamos a entregar o livro Internals, melhoramos PPT, demos, testamos novos locais de treinamentos. Portanto é natural que isso continue a evoluir, mas o que realmente importa para a Nimbus é o que aluno levou de conhecimento, não o que ele comeu no coffee-break (aliando os 2 ótimos).

O mercado


Sem querer incitar revolução ou algo parecido, mas nosso mercado é em geral fraco (em todas as áreas, não só SQL Server). Temos cases de sucesso, área financeira é referência mundial, mas isso eu considero pontos fora da curva. Na média temos problema com a administração do SQL Server, desenvolvimento de novos projetos, e a qualidade é duvidosa na maioria das vezes.
Sempre vamos fazer acertar tudo o que fazemos? Claro que não sou tão inocente assim, o que me preocupa é a falta de busca por qualificação, por entender melhor com o produto que você trabalha, e não ser um profissional que a cada pequeno detalhe diferente do ambiente está com o Google aberto procurando respostas (ok, eu uso o Google, e muito, só não pode ser só isso).
Talvez eu esteja exagerando, então imagine você ir ao médico e falar para ele “doutor, eu estou com uma dor assim, problema tal, etc.”, aí o médico olha para você e diz para esperar um pouco, abre o google e começa a fazer pesquisa, daqui a pouco olha para você e diz “Vamos tratar seu problema fazendo assim ...”. E aí, você confiaria nas recomendações desse médico? Pois é, hoje a maioria dos profissionais em TI trabalha assim, tratando do seu paciente (ex.: servidor SQL Server).
Hoje também passamos por uma situação contraditória, as empresas reclamam que não tem profissionais capacitados e estão com muitas vagas abertas, por outro lado temos gente reclamando de empresas que não oferecem benefícios, tempo para treinamento, etc. Desculpe-me a franqueza, mas nunca vivemos um momento tão cheio de oportunidades, e se você está na condição acima, o culpado é você, mais ninguém.

Uma análise


Primeiro em pontos chave...
·         Se você não investir na sua carreira, ninguém mais vai fazer isso por você.
o   Minha experiência é que você consegue recuperar o investimento de treinamento bem rápido.
·         Se sua empresa não investe em capacitação e mesmo com você pagando o treinamento ela não quer te liberar 40 horas, procure um novo local de trabalho.
o   Ah Luti, é que não tem ninguém para me substituir quando eu estiver fora, ou o negócio vai parar.
§  Mentira, você e eu somos substituíveis. Pode dar trabalho para a empresa, haver solavancos, mas o negócio é mais duradouro e resiliente que a ausência de um profissional.
·         Você não vai encontrar um treinamento que tenha 100% da customização que você deseje (a menos que estiver disposto a investir para isso), e o que é bom para você é ruim para outro. Adapte-se para sobreviver e se sobressair.
o   Na Nimbus optamos por fazer o treinamento o mais detalhado possível, assim você pode cobrir exaustivamente diversos tópicos.
·         Existem vagas pagando bem e exatamente da maneira que você sonha, ela pode ser sua. Não é sorte, é ser competente e melhor que o candidato ao lado.
Agora outros pontos que merecem uma descrição mais detalhada e reflexão sobre os feedbacks que recebemos e comentários da pesquisa.
Maior gama de treinamentos: sim, estamos trabalhando nisso. Já temos novas ofertas, como disaster recovery, segurança e powershell (com nosso mestre Laerte). Estamos finalizando um treinamento só de mirroring e tentando viabilizar um treinamento decente de clustering. Fora isso para ex-alunos de treinamentos avançados já está no forno um hands-on de troubleshooting, para colocar a prova (sem laboratório idiota) seu conhecimento.
Cobertura geográfica: com treinamento presencial, neste momento, é quase impossível. Fizemos algumas tentativas e não foram muito proveitosas, não desistimos da ideia, mas estamos investindo em outras formas para tentar ir mais longe, como treinamentos online e o novo on-demand (http://www.srnimbus.com.br/treinamentos-on-demand-na-sr-nimbus/). Caso você tenha uma turma fechada, aí o processo simplifica demais, normalmente começa a valer a pena se são 8 ou mais alunos.
Treinamento online: a experiência do treinamento online é diferente da presencial, claro. O que tentamos fazer é encontrar meios que usem os recursos técnicos para tentarmos proporcionar uma experiência semelhante à sala de aula com os benefícios do treinamento remoto. Sempre é 100%, não, principalmente por conta da nossa fantástica infra-estrutura de comunicação no Brasil, que figura entre as mais caras e com baixa qualidade. A tendência é que isso melhore para todos, aí você será beneficiado.
Treinamento no fim de semana: eu acredito que nós já trabalhamos demais durante a semana e que o fim de semana é feito para você passar com sua família, descansar e curtir seus hobbies. Se um funcionário da Nimbus quiser ministrar um curso no fim de semana, tem meu total apoio, mas eu não vou pedir isso para ninguém. E se você está fazendo isso porque sua empresa não te libera... a empresa é que está errada.
Treinamento full-time: tivemos o seguinte comentário na pesquisa “A única coisa que eu realmente não gosto na Sr. Nimbus são os horários em que os treinamentos são ministrados. Como não sou rico e preciso trabalhar, como faço um treinamento que me tome o dia todo???”... Que eu saiba nenhum aluno da Nimbus era rico e muitos já fizeram os cursos. Sua empresa não paga ou te libera, mude de empresa, ou negocie, compense essas horas depois, reembolse a empresa pelas horas não trabalhada, dê um jeito. Se você não priorizar sua educação e sua carreira, sempre haverá uma barreira financeira, não existem atalhos, tudo é resultado de seu esforço.
Valor do investimento: claro que todo mundo quer o maior ganho com o menor investimento, o que nós fazemos é tentar ser o mais justo possível, sempre. Por exemplo, quando eu acabar de trabalhar no SQL Server 2012 Internals, eu não vou cobrar de um ex-aluno do Internals o mesmo valor de um aluno novo, pois boa parte do material será repetido (afinal, a engine inteira não é reescrita), concorda? Mas a maioria das empresas não faria isso. E sinceramente, para quem já fez nossos treinamentos sabe que estamos alinhado com o preço médio de muitos outros cursos e entregando mais, então hoje considero nossa proposta de valor muito interessante.
Pagar por um treinamento: esse ponto é interessante, eu tenho uma empresa que prima também por sua área de treinamento e eu NUNCA paguei um curso do meu bolso (paguei meu MBA, mas nunca um curso técnico). Motivo: sempre a empresa onde eu trabalhei me pagava curso ou oferecia condições de fazer os cursos, então já participei de mais de 20 treinamentos, fora eventos e congressos técnicos. O que isso significa para a Nimbus? Que é nossa obrigação ter o maior respeito pelo seu investimento, se uma pessoa trabalha para pagar pelo seu curso, ele deve ter uma experiência de treinamento que seja no mínimo excelente, idealmente, perfeita. Se não tentarmos constantemente atingir isso, desculpe o termo, a empresa é FDP.
Experiência anterior ruim: um comentário me chamou a atenção, temos um aluno que passou anos sem participar de treinamento algum porque teve uma (ou várias) experiência ruim, e depois percebi que é o caso de muitos outros. Porque eu investiria em uma coisa que no passado foi ruim para mim?! A única coisa que eu posso dizer para isso é: fico triste por isso ter acontecido, espero que um dia você entre em uma turma da Nimbus e faça você mudar de ideia, como já mudamos a percepção de outros.
O lado do aluno: estou aqui tentando falar um pouco de como tentamos melhorar, mas uma coisa que complica bastante é a comunicação e a resposta do aluno. Isso é muito trabalhoso e toma tempo, então se estiver interessado nos nossos treinamentos, fique de olho no site, responda nossos e-mails, e se possível, ATUALIZE O SEU CADASTRO COM A NIMBUS!
o   Entre no site da Nimbus, escolha o treinamento que mais lhe interessa e clique em “Cadastre-se na lista de espera” (ex.: http://www.srnimbus.com.br/sql03/)
o   Depois nos confirme seu nome, e-mail, cidade e telefone.
§  Não se esqueça de selecionar todos os cursos que te interessam (além do contato vai orientar nossa agenda).
§  Informar o telefone é MUITO importante para que possamos melhorar ainda mais a comunicação com você.

Eu podia escrever aqui mais um mundo de ideias e “comentários sobre os comentários”, mas não vou utilizar mais do seu tempo.
Mensagem final: invista em sua formação e de forma contínua, você nunca vai saber tudo, porém esse conhecimento “extra” vai te trazer muitos benefícios. Na Nimbus estamos buscando a perfeição, espero sinceramente que você possa vivenciar isso e dizer o mesmo que muitos outros: “Excelente”.
Abraços
sr. Nimbus Serviços em Tecnologia - www.srnimbus.com.br

terça-feira, 9 de outubro de 2012

Bug na compilação do T-SQL

Hoje eu estava codificando uma função e encontrei um bug na compilação do SQL Server! Vamos ver se você encontra? No meu caso eram centenas de linhas de código, então para simplificar sua vida eu escrevi uma função e enchi um pouco de linguiça...
USE tempdb
GO

IF (OBJECT_ID('dbo.fn_Teste', 'FN') IS NOT NULL)
      DROP FUNCTION dbo.fn_Teste
go

CREATE FUNCTION dbo.fn_Teste(@P1 INT, @P2 INT)
RETURNS INT
AS
BEGIN

      DECLARE @Retorno INT

      IF (@P1 = 1)
      BEGIN
            SELECT @Retorno = COUNT(*)
            FROM sys.objects
            WHERE object_id > @P2
      END
 
      IF (@P1 = 2)
      BEGIN
            SELECT @Retorno = COUNT(*)
            FROM sys.indexes AS S
            WHERE S.index_id < @P2
      END
           
      IF (@P1 = 3)
      BEGIN
            SELECT @Retorno = COUNT(*)
            FROM sys.columns
            WHERE system_type_id = dbo.fn_Teste(1)
      END

      IF (@P1 = 4)
      BEGIN
            SELECT @Retorno = COUNT(*)
            FROM sys.allocation_units AS S
            WHERE S.total_pages > @P2
      END
     
      RETURN @Retorno
END
go

SELECT dbo.fn_Teste(1, 4)

Na hora que você executar o SELECT a consulta vai receber a seguinte mensagem de erro: “Msg 313, Level 16, State 2, Line 1 - An insufficient number of arguments were supplied for the procedure or function dbo.fn_Teste.“.

Oxi, número de parâmetros errados? Ou estou muito doidão ou estou certo e coloquei os 2 parâmetros na chamada da função, e pau! Já viu o problema? Se sim, ótimo, caso contrário continuemos... Na dúvida eu fui fazer outro teste, apago a função original, coloco um 2 no nome e executo o script abaixo.

IF (OBJECT_ID('dbo.fn_Teste', 'FN') IS NOT NULL)
      DROP FUNCTION dbo.fn_Teste
go

IF (OBJECT_ID('dbo.fn_Teste2', 'FN') IS NOT NULL)
      DROP FUNCTION dbo.fn_Teste2
go

CREATE FUNCTION dbo.fn_Teste2(@P1 INT, @P2 INT)
RETURNS INT
AS
BEGIN

      DECLARE @Retorno INT

      IF (@P1 = 1)
      BEGIN
            SELECT @Retorno = COUNT(*)
            FROM sys.objects
            WHERE object_id > @P2
      END
 
      IF (@P1 = 2)
      BEGIN
            SELECT @Retorno = COUNT(*)
            FROM sys.indexes AS S
            WHERE S.index_id < @P2
      END
           
      IF (@P1 = 3)
      BEGIN
            SELECT @Retorno = COUNT(*)
            FROM sys.columns
            WHERE system_type_id = dbo.fn_Teste(1)
      END

      IF (@P1 = 4)
      BEGIN
            SELECT @Retorno = COUNT(*)
            FROM sys.allocation_units AS S
            WHERE S.total_pages > @P2
      END
     
      RETURN @Retorno
END
go

SELECT dbo.fn_Teste2(1, 4)

Resultado: funcionou! Ihhh, lascou tudo. Por que a fn_Teste2 funcionou e a primeira não? Já sabe? Então te dou um tempinho para pensar antes de continuar lendo...
(Olha o tempo galera! Agora no placar Leitor 1 x 0 SQL Server...)

Vamos lá...

Isso não é BUG do SQL Server coisa nenhuma, só foi uma brincadeira da minha parte. O que estávamos vendo aqui é a resolução deferida do SQL Server em ação.
Quando criamos a função fn_Teste se você reparar no código da função eu estou chamando a função fn_Teste novamente (no IF = 3), só que com a parametrização errada (1 parâmetro somente). Na criação da fn_Teste esse objeto efetivamente ainda não foi criado, então o corpo da função referencia outra função que ainda não existe (ela mesma!), portanto a validação é deferida.
No momento que executamos a chamada a fn_Teste, o problema com os parâmetros não está na sua chamada (são 2 parâmetros, ok!), mas sim na chamada da função no meio do T-SQL, pois já que o objeto existe o SQL Server faz o binding e verifica o problema.
O curioso fica por conta da fn_Teste2, no script de propósito eu apaguei a fn_Teste para temos uma validação deferida. E na hora que a função foi executada a fn_Teste também não existia, então não tendo como validar a fn_Teste, a função executou com sucesso. Se você tentar executar a consulta “SELECT dbo.fn_Teste2(3, 4)”, aí vai receber um erro, pois sua chamada vai entrar no IF que precisa da função inexistente.
Curioso é o seguinte, quando você invocar fn_Teste2(1, 4) e depois consultar o plan cache vai ver a entrada da função, usecount sendo incrementado, porém o plano não está em cache! Nesse momento se você criar fn_Teste(), mesmo com o corpo do fn_Teste2 estando com a chamada errada para fn_Teste (somente um parâmetro), a chamada para fn_Teste2(1, 4) ainda vai funcionar!
Para ver o erro você vai precisar chamar DBCC FREEPROCCACHE e depois fn_Teste2(1, 4), aí nessa compilação como o fn_Teste existe, a operação não será deferida e o número incorreto de parâmetros será detectado.
Brincadeiras com o T-SQL, eu me diverti...
Abraços
sr. Nimbus Serviços em Tecnologia - www.srnimbus.com.br