terça-feira, 31 de janeiro de 2012

Pesquisa: Desperdício no data cache

Parte da análise dos servidores SQL Server que nós fazemos está em olhar com carinho para o data cache, afinal de contas, é ele que ajuda o SQL Server a manter um bom desempenho e é quem consome boa parte do BPool.

Escrevi rapidinho uma pequena consulta que mostra quanto do BPool está sendo “desperdiçado” com fragmentação interna das páginas carregadas. Já tenho uma ideia da média de alguns servidores que tenho contato, mas gostaria de publicar um número, resultado de muitos outros servidores, para TODOS os DBAs terem uma ideia dessa média.

WITH DataCache AS (
SELECT 
ISNULL(CAST(database_id AS VARCHAR), 'Total') AS DatabaseID    
, ((COUNT(page_id) * 8192.0) / 1024.0) / 1024.0 AS TotalUtilizadoMB
, (SUM(CAST(free_space_in_bytes AS BIGINT)) / 1024.0) / 1024.0 AS EspacoLivreMB
FROM sys.dm_os_buffer_descriptors
GROUP BY GROUPING SETS ((database_id), ()))
SELECT 
DataCache.*
, EspacoLivreMB / TotalUtilizadoMB AS PercentualDesperdicado    
FROM DataCache
ORDER BY EspacoLivreMB DESC  

Para me ajudar basta executar essa consulta me enviar (ou colocar no comentário deste post) o resultado que aparece na linha do “Total”. Abaixo um exemplo de saída...

DatabaseID     TotalUtiliadoMB      EspacoLivreMB        PercentualDesperdicado
Total                 7404.281250           1212.929668423      0.163814640

Note que dependendo do tamanho do BPool o SQL Server pode ler muitas páginas, mas isso não deve causar nenhum grande impacto no ambiente, dado que a DMV não espera por um latch que está prendendo a página (
http://blogs.msdn.com/b/psssql/archive/2009/01/21/how-it-works-sys-dm-os-buffer-descriptors.aspx), mas nos dará uma boa média.

E aí, gostou da ideia? Então vamos ajudar os outros DBAs e executar a consulta. Depois publico o resultado aqui...



!! UPDATE !!
Enquanto conversava com o Fabiano pelo Lync, buscando algumas coisas sobre hobt_id e partition_id, esbarramos com dois posts do Paul Randall, publicados no ano passado, fazendo o mesmo que pedi para vocês. Coincidência é pouco! 
Mesmo assim o resultado dos servidores de vocês ainda é bem vindo, fico no aguardo de mais dados.

Aqui estão os links para ver o resultado dele: http://www.sqlskills.com/BLOGS/PAUL/post/Survey-how-much-server-memory-is-being-wasted-(code-to-run).aspx e http://www.sqlskills.com/BLOGS/PAUL/post/Performance-issues-from-wasted-buffer-pool-memory.aspx

No post de fechamento vou citar algumas coisas importantes, mas como o Paul já falou muito vou aproveitar para mostrar algo diferente do que ele cita no fim do artigo, onde sys.dm_db_index_physical_stats vai estar bem diferente do coletado no data cache.

Acho que isso foi um sinal, quem sabe no futuro a Sr. Nimbus não estará a altura do SQLSkills??!!! HEHEHE
E eu ACHO que existe a chance deles conseguirem mais dados de servidores do que nós. :-)

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

Corrupção de database snapshots

O DBA em última instância tem que proteger o dado da sua organização. “O dado é o bem mais importante da nossa empresa”, essa frase retumba os corredores de muitas empresas, mesmo elas não fazendo droga nenhuma para cuidar deles ou investir em recursos necessários para suportar a infraestrutura que justifique a frase.

Então você DBA deve realizar a importância do papel que desempenha na empresa e em última instância deve garantir que os dados não serão perdidos, e que estarão íntegros e consistentes. Se ainda não se deu conta da sua importância, pense novamente.

O Cenário


Depois deste pequeno preâmbulo, vamos ao acontecido. Segunda-feira cedo, meu telefone toca e um cliente menciona estar com um problema em um processo que criamos, impedindo que este continue a executar.

Neste ambiente nós trabalhamos com o snapshot de um banco de dados específico, que faz parte do funcionamento do procedimento de importação diário de uma massa considerável de dados, e é a maneira pela qual o ambiente garante a consistência dos dados nesta base. Um snapshot é criado, o arquivo é importado (podendo tocar inúmeras tabelas) e caso algum problema aconteça, podemos reverter o banco de dados à sua imagem original e trabalhar no problema, garantindo que não haverá meio arquivo importado e nem que teremos transações monstras com milhares de operações. Chamo este padrão do SSIS de consistência extrema e apresentei-o no evento em 2009, o virtual 24hs PASS LATAM.

O Problema


Analisando o estado do ambiente podemos verificar que se tratava de uma corrupção do database snapshot, seguem alguns registros. Os nomes foram trocados por XXXXX para garantir o sigilo do cliente.

Log do SQL Server:

1/29/2012 6:30:04 AM Starting up database 'XXXXX_20120129063004_XXXXX'.
1/29/2012 6:30:05 AM E:\Data\XXXXX_20120129063004_XXXXXXX.NDF: Operating system error 112(There is not enough space on the disk.) encountered.
1/29/2012 6:30:05 AM Database snapshot 'XXXXX_20120129063004_XXXXX' has failed an IO operation and is marked suspect. It must be dropped and recreated.

Seguindo o procedimento normal de importação automático, foi criado um snapshot para a importação do arquivo XXXXX, a importação dos dados começou normalmente e um segundo depois tivemos um problema relacionado ao subsistema de disco. Como não havia mais espaço disponível no disco, a operação de I/O que guarda os dados no snapshot não pode acontecer e o snapshot entrou em estado suspect.

Foi possível verificar que o arquivo de snapshot chegou a 6,71 MB, então efetivamente recebeu páginas que foram alteradas no banco de dados de origem. Consultando a tabela afetada notamos que alguns registros do arquivo haviam sido importados para o banco de dados, colocando o banco de dados em um estado inconsistente para o negócio.

Porém a partir desse momento o procedimento de recuperação automática do processo de importação falhou, pois não foi possível reverter o banco de dados para o estado original, dado que o snapshot estava corrompido. Abaixo alguns exemplos das tentativas de utilizar o snapshot, com a respectiva mensagem de erro:

USE 'XXXXX_20120129063004_XXXXX
GO

Msg 926, Level 14, State 1, Line 1
Database 'XXXXX_20120129063004_XXXXX ' cannot be opened. It has been marked SUSPECT by recovery. See the SQL Server errorlog for more information.

RESTORE DATABASE XXXXX
FROM DATABASE_SNAPSHOT = 'XXXXX_20120129063004_XXXXX'

Msg 3137, Level 16, State 1, Line 1
Database cannot be reverted. Either the primary or the snapshot names are improperly specified, all other snapshots have not been dropped, or there are missing files.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.



Uma curiosidade da interface do SSMS é que ela não indica que um database snapshot está marcado como suspect, da mesma forma que é feito para outros bancos de dados, então se você olhar pelo object explorer aparentemente está tudo ok. Consultando a sys.databases vemos o status 4, SUSPECT.

Solução do problema


Diferente de outros bancos de dados, as medidas de recuperação não podem ser aplicadas para o database snapshot.

Consultando a documentação do produto podemos ver claramente o que deve ser feito neste caso: “Database snapshots consume disk space. If a database snapshot runs out of disk space, it is marked as suspect and must be dropped. (The source database, however, is not affected; actions on it continue normally.)”. Para confirmar que efetivamente não existe possibilidade, buscamos outra referência (que não sabe quase nada de DR e teste de consistência em um banco de dados) sobre o problema: http://www.sqlmag.com/blog/sql-server-questions-answered-28/sql-server/why-can-a-database-snapshot-run-out-of-space-137145.

Como não podemos utilizar o snapshot, foi necessária uma intervenção manual. Apagamos o snapshot que estava corrompido e foram removidos do banco de dados todos os registros relativos a este arquivo. Depois disso o arquivo foi reprocessado com sucesso, bem como todos os outros arquivos que estavam parados por conta do snapshot que estava impedindo a importação automática de ocorrer.

Conclusão


Felizmente no nosso caso o problema aconteceu com um arquivo simples e a intervenção manual foi bem tranquila e em pouco tempo já tínhamos colocado o banco em estado consistente, com os arquivos importado, e pronto para ser utilizado por outras aplicações.

Porém suponhamos que o problema tivesse acontecido em outro arquivo mais complexo ou em um processamento pesado que devesse ter acontecido durante a janela da madrugada, provavelmente teríamos impactado o ambiente, que não teria os dados disponíveis dentro do SLA do serviço, ou pior, que a intervenção manual não fosse possível para colocar a base em um estado consistente, exigindo um restore... Nada bom.

Sinceramente, não acho que este post tenha uma grande relevância técnica. Mostra que em casos de falta de espaço em disco um snapshot pode se corromper facilmente e o banco de origem continua funcionando normalmente, ignorando o snapshot que passa a ser um arquivo inútil. O que eu gostaria de ressaltar são alguns pontos para reflexão...


A culpa do problema foi do DBA?


De bate-pronto muitos poderiam responder que sim, pois ele deixou acabar o espaço em disco. Mas acho que não podemos ser tão simplistas...

E se eu disser que durante o capacity planning para este servidor fui eu quem escreveu um documento recomendando o dobro de espaço que nos foi disponibilizado? E como fazemos com os procedimentos de manutenção? Deixamos rebuild de lado? Ou fazemos um rebuild de índice a índice, seguindo de um shrink após cada rebuild? (QUE IDEIA FANTÁSTICA! Potencialmente levando a uma fragmentação lógica do índice que acabou de ser reconstruído).

O DBA neste caso tem que fazer malabarismos com o ambiente que lhe foi entregue, tentando gerenciar a escassez dos recursos e, claro, será cobrado se o ambiente ficar fora do ar ou houver perda de dados (e têm que ser cobrado por isso!). Simples? Nem um pouco, é uma baita responsabilidade que não sei se todos os DBAs percebem. Então você DBA têm que continuar aprimorando seus conhecimentos, seu ambiente, e tratando dele com muito carinho e cuidado. Se esse cenário fosse uma extrema exceção à regra, ótimo, o problema é que parece ser muito comum. No fim acho que muitos DBAs têm que receber bem, quem sabe, muito bem...

Termino com uma pérola que ouvi de um gerente de infraestrutura. “Senhor C3PO, precisamos trabalhar com alta disponibilidade dado que nosso ambiente é crítico”, em resposta “Fica tranquilo, a máquina nova é um R2D2 com N processadores XWING, 999999999 de memória e ligado na storage”... Depois de um momento de perplexa reflexão eu gostaria de ir até a sala do gerente e perguntar “Também é feito de adamantium?”.


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

segunda-feira, 9 de janeiro de 2012

[SQLServerDF] Encontro XII - Por dentro dos wait types (versão estendida)

Bom dia pessoal, tudo bem?

Ano novo, gás renovado, então que tal retomarmos os nosso encontros do SQLServerDF?
Para iniciar nosso ano quero apresentar um dos assuntos que mais gostei de falar no ano passado: waits no SQL Server.
Fiz uma palestra de uma hora sobre esse assunto no SQLSat #100, mas quem esteve presente pode perceber que a sessão foi bem corrida, então vou aproveitar um maior tempo dos encontros do SQLServerDF para fazer uma introdução com mais calma, explorarmos as demonstrações com mais detalhes e, quem sabe, até analisarmos outros wait types? 

As informações sobre o encontro são:

Local: Auditório da Microsoft - Edifício Corporate Financial Center, sala 302 - Brasília

Data e horário:
 19
/01/2012, 17:00h ~ 19:30h

Tema:
 Por dentro dos Wait Types 
(versão estendida)

Descrição:
 
Essa sessão têm por objetivo explicar o que são wait types, discutir um pouco do funcionamento da engine do SQL Server, qual quais os wait types mais comuns e seu significado. Se você cansou de olhar para a sys.dm_os_wait_stats sem entender direito o que o SQL Server está te informando, essa sessão é para você.
Nota: não é uma sessão introdutória, então se usarmos xEvents ou outros recursos do SQL Server, provavelmente não teremos tempo de explicá-las em detalhes.


Palestrante:
 Luciano Caixeta Moreira
Mini-bio:
Luciano Caixeta Moreira é fundador da empresa Sr. Nimbus, onde atua como consultor e instrutor SQL Server/.NET. Trabalhou na Microsoft Brasil entre Janeiro de 2006 e Março de 2009, onde atuou como Premier Field Engineer de SQL Server e especialista em desenvolvimento. Formado em ciência da computação pela Universidade de Brasília, ele atua com desenvolvimento, consultoria e treinamento de tecnologias Microsoft desde 2000, sempre focado no desenvolvimento de soluções e banco de dados. Luciano obtém as certificações MCP, MCAD .NET, MCSD .NET, MCDBA, MCTS (SQL Server 2005/2008, .NET 3.5, ADO.NET 3.5 e ADO.NET 4.0), MCITP (SQL Server 2005/2008) e MCT, nomeado MVP de SQL Server em Julho/2010, também e escreve em seu blog: http://luticm.blogspot.com

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!
Para aqueles que perguntam: vai ser transmitido ao vivo? Não. Gravado: talvez. Estou pensando na ideia de colocar o Camtasia gravando a sessão, o problema fica sempre por conta do áudio... O SQLServerDF aceita doações de microfones bluetooth ou qualquer equipamento bacana que possa nos ajudar a conduzir melhor os encontros do grupo. :-)


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

segunda-feira, 2 de janeiro de 2012

2012 – Reflexões para o novo ano

Seguindo a tradição dos posts de início de ano, estou novamente aqui para escrever algumas palavras para você que acompanha este blog.

Revisando o ano de 2011

Aspecto profissional
Seu ano profissional foi bom? Conseguiu executar aquele projeto que quando acabou você pode olhar para trás e dizer “Putz, que belo serviço eu fiz!”? Independente das variações das bolsas, seu índice no mercado profissional está mais valorizado ou caiu?

Em uma análise direta do ano de 2011 eu digo que aprendi demais como profissional e consultor, mas tecnicamente poderia ter sido melhor, não que tenha sido ruim, porém ficou abaixo do que eu exijo.

A razão para tal análise foi que durante o ano que passou fiquei muito envolvido nas questões dos clientes em que trabalhei, entrega de treinamentos, organização da Sr. Nimbus e questões que vão além do aspecto técnico, então acho que saí de 2011 um profissional mais maduro, porém abaixo da linha técnica que gostaria atingir. Efetivamente não posso reclamar do resultado, pois não fui capaz de corrigir o curso (e nem sei se conseguiria) que tomei neste ano.

Um ponto muito positivo foi que praticamente consegui terminar meu MBA Executivo (que havia trancado em 2010), faltando apenas duas matérias e o projeto para concluir minha primeira pós-graduação.
Aspecto pessoal
Foi um ano muito diferente e muito especial, com a chegada do Bernardo em Outubro de 2010 eu passei a exercer uma nova profissão (e a mais gratificante), de ser pai. Foi um ano de aprendizado e muita felicidade em casa, gostamos tanto da brincadeira que seguindo planos traçados já tratamos de arranjar um irmão para o nosso filhote! Possivelmente em Março deste ano o Rafael virá ao mundo para compor nossa querida família.

Por conta da mudança de ritmo eu li menos do que gostaria (acho que somente 6 livros), fui pouco ao cinema, não joguei o poker em família e fui menos ao futebol. Parte por conta da minha desorganização e conflito de agenda, mas uma pena mesmo assim.
Sr. Nimbus
A empresa não poderia ficar de fora da análise. Em 2011 a Nimbus deixou de ser uma razão social com geeks e passou a caminhar para ser aquela empresa que sempre desejamos construir.

Hoje temos uma sala organizada e com qualidade, um planejamento estratégico, um corpo técnico mais maduro e com o perfil adequado, além de maior controle administrativo. Isso claro não veio de graça, foram muitas horas de reunião, execução, pesquisa, enfim, muito esforço despendido (e mais do que válido) para criarmos uma empresa onde o geek vive feliz!

Obviamente que nem tudo foi perfeito, tivemos que aprender duras lições com os erros do passado, fizemos investimentos que talvez não se justifiquem, passamos a analisar com mais cuidado o que movem os profissionais, analisamos problemas de previsibilidade do mercado e sua reação a abordagens mais rígidas.

Aproveito para compartilhar um acontecimento que me marcou. No primeiro trimestre de 2011 tivemos a oportunidade de trabalhar com um grande projeto de BI, conversamos com o cliente que já conhecia nosso trabalho e queria executá-lo com a Nimbus. Também disse que pagaria para uma empresa fazer o levantamento de requisitos de forma a ter uma proposta de projeto coerente.

Este cliente conseguiu 3 propostas, sendo nossa empresa a única da mesma cidade e segundo o cliente, o valor hora da Nimbus era o mas competitivo, porém nós pedimos 120 horas de levantamento enquanto as outras empresas pediram 40 horas. Em seguida nos pediu para executar o levantamento em 40 horas.

Qual foi o resultado: não atendemos o pedido e perdemos o projeto.

Já fui chamado de burro por um amigo que trabalha na área comercial: “Era só fazer um levantamento qualquer e depois colocar uma gordura grande no projeto, o que der errado depois você renegocia”. Claro que eu sei que haverão erros de estimativa no projeto, não sou idiota (e acredito em uma abordagem ágil), mas já começar um projeto com grande potencial de falha (BI não é simples, ok?!), em um negócio que é conhecidamente mmmuuiitttooo complicado e com N fontes de dados sem padrão… Nada confortável.

Isso ficou me martelando e depois de muito pensar acredito que acertamos na decisão. Esse projeto poderia ter garantido o ano de 2011 da Nimbus, mas também poderia levar a empresa à falência. A escolha da Nimbus é tentar fazer o que acreditamos ser certo, se o mercado nos mostrar que isso não é possível, então prefiro fechar a empresa e deixar que outros façam de qualquer jeito.

Claro que cometeremos erros de execução e sempre haverá como melhorar, mas na Nimbus vamos sempre buscar a excelência técnica, que agregue valor para concepção e projeto de soluções em software, buscando o que acreditamos ser o melhor para o cliente e sempre trabalhando ao lado dele.

Por fim fechamos o ano bem e sabendo que devemos respeitar o que acreditamos para criar uma empresa diferenciada.

O que nos espera de 2012

Aspecto profissional
Acho que todos devem ter uma prioridade na carreira: aprendizado contínuo. O resto é consequência, uma pessoa que sempre está se atualizando, estudando livros e artigos, participando de grupos de discussão e buscando certificações, com certeza será uma pessoa valorizada pelo mercado. No fim estamos todos disputando por uma melhor colocação no mercado (mais $$$), uma maior satisfação profissional e, claro, um local onde você se sinta em casa, afinal você passa pelo menos 40 horas da sua semana junto com outras pessoas.

Eu acredito que todo investimento em sua formação é justificável. E é melhor investir em algo que te dá prazer, mesmo que não seja a profissão da moda ou aquela grande tendência que o Gartner anunciou, mas que você seja bom e esteja feliz com o que faz.
Aspecto pessoal
Sempre recebemos muitos desejos para 2012 e um que eu gostei foi “Desejo que o pior dia de 2012 seja igual ao melhor dia de 2011”. Muito legal, porém uma coisa sempre me incomoda nesses desejos de fim de ano, eles são em sua maioria egoístas. Desejamos coisas boas que queremos para nós, mas em nenhum momento o que vamos fazer para melhorar o que está a nossa volta.

Então em 2012 eu desejo que você dedique tempo para sua família, valorize seus amigos e respeite qualquer um à sua volta, mesmo que você não goste do indivíduo. Que suas ações possam fazer com que ao fim de 2012 o mundo tenha se se tornado um lugar melhor para todos, pois nós ajudamos a construí-lo.
O mercado
Analisando o que vimos em 2011, acho que continuaremos a observar o mundo se adaptando a um choque de realidade econômica e social, isso significa que mesmo o Brasil em sua estabilidade econômica vai ver que parte das bonanças do passado poderão ficar mais escassas.

Outra curiosidade que notei no mercado em 2011: mesmo com empresas sedentas por profissionais qualificados e dispostas a pagar mais por isso, as vagas continuam abertas. Em paralelo conversei com muitas pessoas que estão reclamando de salários baixos! Algo está errado…

As empresas querem profissionais qualificados, porém não estão dispostas a investir no que está em dentro de casa. Quantos e-mails não recebi de pessoas que queriam participar dos treinamentos e a empresa não os liberava por ser no horário comercial (mesmo o profissional pagando do próprio bolso!). Beira o ridículo. As empresas devem respeitar seus funcionários, serem flexíveis e explorar o potencial de cada um, já passamos da era do fordismo, ainda mais em empresas de tecnologia. Ahhhh mais uma coisa, CARREIRA EM Y POR FAVOR!!!

Sobre os profissionais, tenho críticas duras, mas um alento. Entrei 2011 totalmente descrente dos profissionais no Brasil, ainda acredito que estamos caminhando para o sucateamento dos profissionais, por conta da má formação acadêmica e da facilidade em se encontrar um emprego “meia boca”, e ainda vamos viver uma escassez de mão de obra pior do que vivemos hoje. Conduzi entrevistas nada agradáveis e a pergunta que sempre me faço é: O que diabo as pessoas estão fazendo com seu tempo?

Mas por fim comecei a perceber à minha volta algumas pessoas se movimentando para aprender mais, buscando novidades, tentando melhorar o seu trabalho… Quem sabe não conseguirmos barrar a inércia dessa espiral descendente do mercado? Estou mais otimista para 2012.

Meu desejo para seu eu profissional é: não tenha medo da mudança, saia da sua zona de conforto.

Seja uma mudança de empresa, buscando melhores salários, satisfação, novos desafios, ou seja uma mudança de atitude, buscando ser um melhor profissional, executar de forma ótima suas tarefas, enfim, se valorizar e respeitar aquele que te contratou.
3 propostas para 2012
Não acredito naquela lista gigantesca de propostas para o novo ano, então deixo aqui as 3 propostas que tentarei seguir em 2012:
  • Disciplina: organização, foco, execução e acompanhamento.
  • Paixão: seja pela sua família, amigos ou no trabalho que você executa todo dia.
  • Altruísmo: o que fazer para deixar um mundo melhor?
Fecho este post com uma deixa para reflexão (mais uma!)… Já reparou que quando você termina um projeto, entra para um novo emprego ou faz seu planejamento para o ano vindouro, sempre está animado, quer mudar como fazia as coisas, planeja novas ações, enfim, você se sente revigorado com as possibilidades que se abrem à sua frente.

Você deveria se sentir assim todo dia pela manhã!

Feliz 2012!

[]s
Luciano Caixeta Moreira - {Luti}

luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br