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/
SELECT CAST (power(CrazyIdeas, Curiosity) * (RealLifeExperience + MyMistakes)) / FreeTime) AS VARCHAR(MAX)) FROM MyBrain WITH (NOLOCK, INDEX('idx_Neuron')) WHERE ThingsIThinkIKnow in ('SQL Server', 'DB2', '.NET', 'Cloud')
quinta-feira, 14 de abril de 2011
ADO.NET SqlParameter vs. Plan Cache
Marcadores:
ADO.NET,
Artigo,
Plan Cache,
SQL Server,
Virtual PASS 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
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/
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/
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/
Marcadores:
Download,
SQLServerDF,
testes de unidade
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
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
Marcadores:
SQLServerDF,
T-SQL,
testes de unidade
Assinar:
Postagens (Atom)

