quinta-feira, 14 de abril de 2011

ADO.NET SqlParameter vs. Plan Cache

Oi pessoal, escrevi um novo artigo sobre o uso efetivo do SqlParameter e seu efeito no plan cache do SQL Server. Depois eu penso em atualizar o blog com o texto (sim, não tenho muita paciência para formatação), mas publiquei o PDF no skydrive.



Espero que vocês gostem...

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

quinta-feira, 7 de abril de 2011

Novo Treinamento! Database Mirroring

Um novo post direto do blog adormecido!
Como já fizemos no ano passado com o treinamento de Upgrade para o SQL Server 2008, a Sr. Nimbus e o MVP Gustavo Aguiar estão trabalhando juntos novamente. Desta vez com um novo treinamento, focado em Database Mirroring!

Se você faz parte do grupo que já percebeu a superficialidade dos capítulos de alta disponibilidade (incluindo o assunto do database mirroring) nos cursos de SQL Server encontrados por aí, e não vê a hora de participar de um treinamento que realmente vá mostrar em detalhes como o recurso funciona, explorar cenários complexos e, claro, ajudar você a resolver seus problemas, então vamos te ajudar.

Na última semana de Maio/2011, com duração de 24 horas, a Sr. Nimbus e Gustavo Aguiar vão ministrar o primeiro treinamento focado em Database Mirroring, que acontecerá em Brasília.

Ainda estamos ajustando alguns detalhes do local do treinamento e valor do investimento, mas desde já queremos montar uma lista de interessados, se você é um deles, mande um e-mail para contato@srnimbus.com.br.
A ementa completa para o treinamento está aqui:

Conceitos Básicos
· O funcionamento do Log de Transacoes
· Implementações básicas de Backup
· Modelos de Arquivamento de Log (Recovery Model)
· Deduplicação de dados (Database Snapshots)

Arquitetura
· Nomenclatura e conceitos chaves
· Papéis
· Modos de Operação
· Sessões e Estados
· Inversão de Papéis
· Redirecionamento Transparente das Aplicações
· Melhorias no SQL Server 2008

Planejamento
· Objetivos Primários e Objetivos Secundários
· Requisitos de Infraestrutura
· Requisitos de Design (Banco de Dados, Aplicações e Dependências)
· Preparação do Banco de Dados Espelho

Configuração
· Uso do Wizard
· Implantação Manual
· Uso de Certificados
· Migração das Dependências
· Inicialização, Testes e Problemas Comuns

Administração
· Controlando as sessões de espelhamento
· Monitorando o espelhamento
· Alertas
· Ferramentas
· Views, Contadores e Eventos

Cenários de Recuperação
· Queda do Banco de dados Principal
    § Cenário 1: High Availability
    § Cenário 2: High Protection e High Performance
· Queda do Banco de dados Espelho
· Queda do Banco de dados Testemunha
· Queda de mais de um banco de dados (Principal, Espelho e Testemunha)

Melhores Práticas
- Criptografia e Segurança em bancos espelhados
· Rotinas de Manutenção em bancos espelhados
· Considerações sobre a rede em bancos espelhados

Outras Técnicas de Alta Disponibilidade
· FailOver Clustering
· Log Shipping
· Replicação
· Comparativo das técnicas de alta disponibilidade
· Combinação de outras técnicas de alta disponibilidade com o Database Mirroring
· Soluções equivalentes em outros SGBDs

Gostou? Está interessado? Aposto que sim!


PS: Pode haver alguma alteração ou outra na ementa até a data do treinamento, sempre pensando em como melhorá-lo, claro.

[]s

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

quarta-feira, 2 de fevereiro de 2011

SQL Server CLR Unload e GC.Collect

Já existem diversos programadores usando o CLR (Common Language Runtime) que está hospedado dentro do SQL Server. Recentemente em um grupo de discussão apareceu um problema relacionado ao CLR e foi comentado uma maneira de se fazer o unload dos AppDomains que estão no SQL Server.

Se você utilizar o DBCC FREESYSTEMCACHE('ALL'), vai forçar o SQL Server a ativar o mecanismo de limpeza de cada cache store, e no caso do CLR vai forcar um appdomain unload.
Além do que foi citado, existe uma outra abordagem para brincar com o CLR, que é forçar a entrada do Garbage Collector, usando o DBCC FREESYSTEMCACHE('GarbageCollect'). Esse comando não é documentado, mas foi apresentado publicamente pelo Bob Ward no PASS Summit de 2008, então não vejo problema em compartilhar com vocês.

Para vermos a coisa funcionando, vamos monitorar os contadores abaixo, somente para a instância sqlservr e olhar algumas DMVs.

> .NET CLR Loading > Total appdomains unloaded
> .NET CLR Memory > #Gen0 Collections
> .NET CLR Memory > #Gen1 Collections
> .NET CLR Memory > #Gen2 Collections

select * from sys.dm_clr_appdomains
select * from sys.dm_clr_loaded_assemblies

Se você executar uma procedure que trabalha com o CLR e consultar as DMVs, verá uma entrada para o AppDomain e assemblies carregados para execução da sua rotina.
Use o comando para forçar o Garbage Collector e verá que os contadores Gen0, Gen1 e Gen2 serão acrescentados de 1, como meu procedimento é simples e não tenho nenhuma pressão na memória, me parece que é um GC.Collect(2) e não um GC.Collect(), pois a limpeza vai até a geração 2, coisa que não aconteceria em um simples collect com o CLR sem pressão na memória e espaço disponível na gen0.

Quando chamamos o procedimento que faz um AppDomain unload, vamos ver um collect até a geração 2 (provavelmente parte do processo de unload) e depois o contador de unload será acrescido de 1. Consultando logo em seguida as DMVs, verá que nada é retorando, pois o appDomain já foi removido.

Notem que não é uma boa recomendação ficar chamando o GC ou forçando o unload, ainda mais que esse irá interferir em outras cache stores, mas em casos excepcionais isso pode ser útil...


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

quinta-feira, 27 de janeiro de 2011

Conteúdo da palestra sobre Unit Test com T-SQL

Oi pessoal.
Conforme planejado, ontem nós fizemos o nosso nono encontro do grupo SQLServerDF para falar sobre testes unitários e T-SQL. Dentre os presentes, somente um desenvolvedor trabalha com testes unitários, então parte do desafio era mostrar que a ideia é válida e que não é perda de tempo.


Quando você já fez muitas palestras acaba ficando um pouco crítico, e mesmo com um início um pouco distraído da minha parte, achei muito bom o resultado. Começamos com um exemplo bem simples de procedure e testes, e de pouco em pouco fomos aumentando a complexidade, trocando um insert básico com um MERGE bem complexo, mostrando erros comuns de programação, e como poderíamos evitar de sermos queimados na fogueira dos erros em produção, tudo garantido pelos testes.


No fim acredito que consegui mostrar o valor de se ter uma massa de testes confiável e como último ato, fizemos um refactoring do banco e algumas alterações no procedimento, rodamos os testes e foi só sucesso! :-)


Eu gravei a apresentãção com o Camtasia e estou produzindo o vídeo, mas como eu não tenho um microfone bluetooth, provavelmente o áudio não irá ficar satisfatório. De qualquer forma você pode baixar o PDF e demos AQUI.





E a frase que mais foi dita: "E aí, vai para produção ou não vai?". Com testes? Vai sim, fácil...


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

quinta-feira, 20 de janeiro de 2011

[SQLServerDF] Encontro IX - Testes de unidade com T-SQL

Bom dia pessoal, tudo bem?
Vamos começar as atividades de 2011 com mais um encontro do grupo SQLServerDF? Anotei as dicas de vocês e estou em contato com alguns palestrantes para organizar nossa agenda, mas como eu ainda estou negociando datas e não quero adiar mais nosso início, vou aproveitar e falar sobre um tema que gosto e tenho utilizado bastante.

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

Local: Auditório da Microsoft - Edifício Corporate Financial Center, sala 302
Data e horário: 26/01/2011, 17:00h ~ 19:30h
Tema: Testes de unidade com T-SQL
Descrição: Um desenvolvedor profissional utilizando C# ou Java está acostumado a criar testes de unidade (xUnit tests) para desenvolver um código mais robusto, resistente e verificável quando temos alterações de regras de negócio ou refactorings. Porque o programador T-SQL não pode usar os mesmos princípios com T-SQL?
Nessa sessão eu vou demonstrar como escrever testes de unidades eficientes para os procedimentos e funções, testando o curso básico correto, cursos alternativos, exceções esperadas e se o dado está sendo corretamente manipulado por seu código. Nesse primeiro encontro provavelmente não teremos tempo para utilizar o Visual Studio 2010 ou outra ferramenta de terceiros, somente código T-SQL e batches para nos ajudar a automatizar os testes (o que lá fora eles chamariam de poor man´s T-SQL testing :-)).
Palestrante: Luciano [Luti] Moreira


Favor mandar para o grupo um e-mail confirmando sua presença, pois o tamanho do auditório não é ilimitado.


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