segunda-feira, 19 de dezembro de 2011

Sala (de treinamento) da Nimbus

Nós na Sr. Nimbus já possuímos alguns anos de experiência com treinamentos e palestras, participando de diversos eventos e aprendendo muito com erros e acertos dos outros, inclusive um dos nosso sócios é MCT faz 13 anos e ministrou treinamentos MOC de VB4 (dinossauro -> será que ele vai ler isso?)!!!

Trabalhando para aprimorar a área de treinamento na Nimbus, resolvemos montar uma sala de aula no novo espaço da empresa e, mesmo sabendo que ainda temos muito a melhorar, na semana passada entregamos o primeiro treinamento na nova sede.

Compartilho com você algumas fotos do local e, de pouco em pouco, vamos construindo uma empresa melhor e do jeito que sonhamos... Quem sabe no futuro você não vai estar sentado em uma dessas cadeiras?!




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

sexta-feira, 2 de dezembro de 2011

SQL Server 2008 Internals no Rio de Janeiro

Bom dia pessoal!
A Sr. Nimbus estava focando seus treinamentos no eixo BSB/SP por conta da facilidade de logística e demanda por nossos treinamentos, mas recentemente eu comecei a receber uma série de requisições para executar o treinamento no Rio de Janeiro, então vamos ver se os pedidos vão se justificar!

Anunciamos hoje o treinamento SQL Server 2008 Internals no Rio de Janeiro! Você pode ver todos os detalhes do treinamento no site da Sr. Nimbus: http://intranet.srnimbus.com.br/paginas/noticia.aspx?ID=25

Data do treinamento: 23 a 27 de Janeiro/2011

Curiosamente eu tenho uma impressão do Rio de Janeiro como sendo uma cidade onde parece que os DBAs SQL Server não se falam. Então se você conhece profissionais SQL Server na cidade, não deixe de passar essa mensagem para frente! Tomara que eu esteja errado...

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

sábado, 26 de novembro de 2011

SQL Saturday #100: Por dentro dos wait types no SQL Server

Boa tarde pessoal, hoje no fim da manhã eu fiz minha apresentação para o SQL Saturday #100.

Tentei manter uma apresentação um pouco puxada (nível 400) e demonstrar para o pessoal alguns cenários com wait types mais comuns (mas não menos problemáticos). Consegui terminar mais ou menos no tempo certo e ainda contei com alguns minutinhos extras para tirar dúvidas.

Para não voltar à rotina e ficar devendo os scripts (ok, ok, ainda vou publicar os scripts do TechEd 2011, shame on me!), aqui estão...

PPT da apresentação:


Scripts da apresentação:


O bom do twitter que é difícil alguém ficar reclamando da sua palestra, e pelo que acompanhei, parece que o pessoal gostou. :-)
Comentários são sempre bem vindos!

Como eu disse no twitter, viajar, preparar a apresentação, noites mal dormidas, investmento do próprio bolso, tudo é cansativo e complicado. Mas depois que você encontra os amigos, faz uma apresentação interessante e vê a empolgação do pessoal, lembra que tudo isso vale mmmuuiittoo a pena.

Quem sabe até o próximo SQLSaturday no Brasil...

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

segunda-feira, 14 de novembro de 2011

Documentação: Bancos de dados, backups e planos de manutenção

Bom dia pessoal.

Um DBA (acho que todo profissional) deveria ter como um de seus focos a excelência na documentação do que ele está trabalhando, claro que isso não é verdade na maioria esmagadora dos casos, inclusive eu preciso melhorar bastante neste aspecto (hehehe). Fica registrada a tarefa e o heads up para nós.

Dito isso, na semana passada eu estava discutindo com um cliente a documentação do SQL Server e me agonia profundamente não termos living documents, mas sim aquele documento do Word ou Excel que em 10 dias já está todo desatualizado. Caímos dentro da rotina de backups e, quando feito através dos planos de manutenção, o diabo vira uma caixa preta.

Pergunto: em qual tabela de sistema temos uma listagem dos bancos de dados que estão cobertos pelo plano de manutenção?
Fiz algumas pesquisas rápidas e não encontrei nada referente a isso.
Consulta rápida no MSDB, encontramos o “dbo.sysssispackages” e lá está o binário do plano de manutenção. Brincando um pouco com o XML do plano de manutenção cheguei à consulta abaixo…

DISCLAIMER: não estudei o XSD ou referência detalhada ao XML dos pacotes do SSIS que contém os planos de manutenção, somente testei com o SQL Server 2008 R2 SP1, foi uma coisa rápida que eu produzi sem grandes cuidados e não garanto que vai funcionar em todos os casos, ok? É apenas um trecho que código que você pode evoluir ou eventualmente ser útil para alguém.

Código 01 – Consulta bancos do plano de execução
DECLARE @Dado XML
SELECT @Dado = CAST(CAST(packagedata AS VARBINARY(MAX)) AS XML)
FROM dbo.sysssispackages AS S
WHERE S.name = 'Plano01'

;WITH XMLNAMESPACES('www.microsoft.com/sqlserver/dts/tasks/sqltask' AS SQLTask
    , 'www.microsoft.com/SqlServer/Dts' AS DTS)
SELECT
    RelOp.op.value(N'(@SQLTask:DatabaseName)', N'VARCHAR(1000)') AS DatabaseName
    , (CASE RelOp.op.value(N'(../@SQLTask:BackupAction)', N'INT')
        WHEN 0 THEN 'Data'
        WHEN 2 THEN 'Log'
        ELSE NULL
    END) AS BackupType
    , RelOp.op.value(N'(../@SQLTask:BackupIsIncremental)', N'VARCHAR(100)') AS BackupIsIncremental   
FROM @Dado.nodes(N'//DTS:ObjectData/SQLTask:SqlTaskData/SQLTask:SelectedDatabases') RelOp (Op)
GO

Esse código já evoluiu bastante no meu projetinho, pois é possível você cruzar os dados com jobs, jobsteps, schedules, etc. Aí você vai ter um detalhamento completo entre planos de execução, jobs e seus agendamentos, sendo possível documentar propriamente sua rotina de backup e manter os documentos facilmente atualizáveis. Sem precisar especificar no WHERE qual o plano você está interessado (#KidsModeON).

Por curiosidade, achei muito fraco o elo que o SQL Server faz entre esses elementos, então vou ter que estudar mais um pouco para fazer uma crítica consistente, senão posso acabar falando besteira por aqui.

Se vou publicar o código completo? Ainda não sei, no momento a versão “full” faz parte do Script Master DBA Nimbus Automator Tabajara hehehe

Se você testar com outra versões do SQL Server, planos complexos ou qualquer outro cenário, me conte se funcionou.

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

Treinamento de SSIS da Sr. Nimbus

Bom dia pessoal.
Anunciamos um novo treinamento a ser ministrado em Brasília, dessa vez sobre o famoso SQL Server Integration Services.

Particularmente eu demorei demais a colocar esse treinamento no calendário, pois já estou trabalhando constantemente com ele desde 2009 e se tornou um dos meus grandes interesses na plataforma da Microsoft, então nada mais justo que mostrar para o público como o SSIS é fantástico através de um treinamento profundo e detalhado.

Originalmente eu pensei em somente ministrar um treinamento avançado de SSIS, mas discutindo a ementa internamente e com pontenciais clientes, todos foram a favor de se manter os dois módulos (básico e avançado), já que algumas coisas que eu vou apresentar no básico... não são básicas! Só para variar, claro, faremos um treinamento com detalhes que podem ser bem avançados, então até o profissional que já faz alguns pacotes no dia-a-dia irá se beneficiar de participar de ambos os treinamentos.

A ementa dos treinamentos estão aqui: SQL05 e SQL06.

Datas: dezembro/2011 e Janeiro/2012.
Local: Brasília

Para participar dos treinamentos, veja a chamada no site da Nimbus.

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

sexta-feira, 28 de outubro de 2011

Fabiano Amorim na Sr. Nimbus

Bom dia pessoal!
Esse é um daqueles textos que dá vontade de escrever mais vezes...

Tenho o prazer em anunciar que no dia 01/11/2011 o especialista em SQL Server Fabiano Amorim começa uma nova jornada, dessa vez junto à equipe da Sr. Nimbus!


Acho que o Fabiano já dispensa apresentação, afinal de contas até o Paul Randal já citou o distinto no seu blog (
http://sqlskills.com/BLOGS/PAUL/post/Two-great-blog-series-on-joins-and-query-plan-operators.aspx), mas vamos lá mesmo assim:
  • Foi nomeado Microsoft MVP na especialidade SQL Server em Julho/2011
  • Tem presença contínua na comunidade técnica de SQL Server, já gravou webcastS para MSDN, 24hs PASS Latam, etc.
  • É autor de uma série de artigos sobre o query processor e tarado por desempenho de consultas: http://www.simple-talk.com/author/fabiano-amorim/
  • Mantém seu blog em: http://blogfabiano.com/
  • Nesse ano palestramos juntos no TechEd Brasil, na sessão “Cenários de otimização com o SQL Server ‘Denali’ e 2008”
Na Nimbus, empresa que ajudei a fundar e dedico meu tempo, um objetivo que sempre tivemos foi de criar uma empresa gostosa de se trabalhar e que pudéssemos oferecer para nossos clientes soluções especializadas e com uma qualidade técnica fantástica. Para alcançar esse objetivo precisamos de pessoas que se alinhem ao perfil da empresa, e o Fabiano vem ao encontro a esse ideal.
Além do mais, curiosamente possuímos um perfil técnico bem semelhante, com um background de desenvolvimento e um “pequeno gosto” pelo SQL Server, querendo sempre entender como ele funciona, e compartilhando também o prazer de participar da comunidade técnica e de ajudar os outros.
O que será daqui para frente?! Realmente só o tempo vai dizer. Mas já temos uma listagem nada pequena de oportunidades que vamos perseguir, frentes de trabalho para discutir, clientes na fila para serem atendidos e ideias, muitas ideais do que podemos fazer juntos. Obviamente que em sua maioria (acho que 99.9873%) relacionado ao SQL Server.
Com esse anúncio eu tenho certeza de que a cada dia que passa a Nimbus dá um passo em direção a seus objetivos, e vamos construindo o ambiente que desejamos, focando em nossos clientes e melhorando nossa expertise técnica. Uma coisa é certa, como um #sqlgeek de carteirinha, as discussões técnicas da Nimbus ficarão cada vez mais divertidas!
Vida longa a Sr. Nimbus!

Fabiano, seja bem vindo! Nos sentimos hornados com a sua presença, e que sua participação ajude a Nimbus a se tornar uma empresa ainda melhor, técnicamente e pessoalmente!

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

quarta-feira, 5 de outubro de 2011

Treinamento SQL Server 2008 Internals em São Paulo

Povo do meu Brasil!
O nosso treinamento fodístico (posso usar esse termo?!) de SQL Server 2008, o famoso SQL Server 2008 Internals será ministrado em São Paulo entre 05 e 09 de Dezembro/2011. São 40 horas que fazem o profissional entender quando eu digo "conhecemos muito pouco do SQL Server".

Recebi muita demanda para este treinamento em São Paulo, então acredito que vamos conseguir o quórum mínimo rapidamente.

A proposta está aqui.
O anúncio completo está no site da Sr Nimbus.

De quebra eu estou indo na próxima semana para o PASS Summit 2011 em Seattle, e ainda vou passar dois dias no Campus da Microsoft e aproveitar o canal dos MVPs para conversar com o time de produto, então provavelmente o SQL Server 2008 Internals já vai ter algumas coisas de SQL Server "Denali" Internals.

Pena que são só 40 horas de treinamento...

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

terça-feira, 23 de agosto de 2011

Novo treinamento online - Sr. Nimbus

Bom dia pessoal.

Atualização 31/08/2011: as inscrições para o SQL07 estão finalizadas. Já anunciamos a próxima turma de indexação.

No próximo dia 05 de Setembro começamos outro treinamento online, dessa vez o SQL07 – Recursos de otimização para o desenvolvedor SQL Server. O treinamento terá duração de 32 horas e acontecerá toda segunda, quarta e sexta no período da manhã, entre 08:00 e 12:00.
Nota: dia 07 de setembro é feriado nacional e não teremos aula.

O treinamento serve tanto para DBAs e DEVs, mas neste treinamento não abordamos assuntos mais voltados ao DBA, como transaction log, estrutura de armazenamento interno, SQLOS, etc. O propósito dele é ressaltar detalhes de funcionamento do SQL Server que influenciam diretamente o desempenho das aplicações que são desenvolvidas e utilizam o SQL Server como repositório de dados. O nível do treinamento fica gravitando em torno de 300 (obs: meu nível 300 costuma ser um pouco mais puxado que de outros ;-) ).

Como o treinamento acontecerá pela manhã seu empregador terá que dispor de 32 horas (em um mês) para capacitação do funcionário. Sim, culturalmente tendemos a fazer treinamento fora do horário de trabalho, mas eu particularmente discordo e quero manter cursos também no horário comercial.
<Bronca> Se seu chefe não pode dispor esse tempo de trabalho para sua capacitação técnica, eu acredito que está na hora de procurar outro emprego. O mercado está cheio de oportunidades para profissionais SQL Server… </Bronca>

Os detalhes para inscrição estão aqui: http://intranet.srnimbus.com.br/treinamento/paginas/201102SQL07/default.aspx

[]s
Luciano Caixeta Moreira - {Luti}

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

quinta-feira, 4 de agosto de 2011

Oportunidade: Desenvolvedor SQL Server e Azure

Oi pessoal.
Estamos com duas vagas na Nimbus, ambas com perfil de desenvolvedor .NET, uma para se aventurar no Azure e outra com o SQL Server.

Mais detalhes de cada uma das vagas estão aqui:

Desenvolvedor SQL Server
Desenvolvedor Windows Azure

Para quem já havia me enviado currículos anteriormente, eles também serão considerados.

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

terça-feira, 2 de agosto de 2011

Minhas palestras no TechEd Brasil 2011

Oi pessoal.
Pelo quinto ano consecutivo eu vou ministrar algumas palestras no TechEd Brasil. Qual o produto? Quem adivinha?

Neste ano eu farei duas sessões sozinho, no estilo de sessão demo (ou headshot, conforme o Hara explica: http://www.fabiohara.com.br/2011/07/26/conheca-as-sessoes-headshot-do-teched-brasil-2011/) e compartilharei uma outra sessão com meu amigo Fabiano Amorim. São elas:

Melhorando o desempenho do seu pacote no SQL Server Integration Services (sessão Demo – 30 minutos)
Descrição: Nessa sessão serão demonstradas algumas boas práticas no desenvolvimento de pacotes no Integration Services, para otimizar a importação/exportação de dados. Analisaremos recursos como organização do pipeline, buffers, otimização do lookup, operações síncronas, uso do Balanced Data Distributor, entre outros.
Nível: 300

Otimizando carga de dados com o SQL Server (sessão Demo – 30 minutos)
Descrição: Nessa sessão será demonstrado como você pode utilizar recursos do SQL Server para otimizar suas cargas de dados. Será analisado desde a configuração do SQL Server, estruturas de dados que irão receber a massa de dados, utilização de bulk insert, operçãoes minimalmente logadas (e trace flag 610), entre outros.
Nível: 300

As sessões serão independentes entre si, porém complementares, então se você quer otimizar sua importação de dados tanto na parte do SSIS quanto no lado do SQL Server (sim, existe uma independencia entre eles), aconselho assistir ambas as sessões.

Cenários de otimização com o SQL Server “Denali” e 2008
Descrição: Nessa sessão serão apresentados alguns problemas vs soluções na otimização de códigos para o SQL Server, tais como: vantagens do columnstore index, consultas com window functions, Non-SARGs hard-coded, usando plan guide para suportar processo de otimização, PSP (Parameter Sniffing Problem), SQL dinâmico eficiente, index intersection, estatísticas não representativas, entre outros. A sessão têm por objetivo discutir alguns cenários de otimização para o SQL Server.
Nível: 400
Palestrantes: Luciano Moreira e Fabiano Amorim

Eu e o Fabiano estamos preparando uma sessão cheia de exemplos de problemas/soluções para cenários comuns no cotidiano do SQL Server. Não pretendemos ensinar metodologia de troubleshooting, tuning ou detalhes de como o SQL Server funciona, pelo contrário, vamos ser diretos “Está aqui o problema XYZ, ele acontece nesses casos e a solução é essa aqui!”, então partimos do pressuposto que as pessoas já possuem um conhecimento legal de SQL Server e, caso seja mencionado alguma coisa um pouco obscura, deixaremos referências em cada um dos assuntos para estudo futuro.

Gostaram?
Espero ver vocês no TechEd Brasil 2011!

[]s

sexta-feira, 8 de julho de 2011

[Artigo] O caso dos snapshots e data cache thrashing

Segue mais um artigo!
Data cache e database snapshots! Gostei bastante de escrevê-lo.
Oriundo de uma dúvida na DL do SQLServerDF, já estou começando a escrever outro post sobre Database Snapshots. Legal ou não?

https://skydrive.live.com/?cid=e145f7753042d628&sc=documents&uc=1&id=E145F7753042D628%211068

PS: já que esse artigo surgiu de uma última conversa com o Luan Moreno como funcionário da Nimbus, que agora está ajudando outra empresa com suas habilidades de DBA, fica aqui o meu obrigado para esse amigo e que possamos ter muitas outras conversas!

Sucesso Luan! Fica rico e depois volta para a Nimbus.

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

MVP 2.0 Reloaded– SQL Server

Tanta correria e nem tive tempo de saborear mais uma conquista. No dia 01 de Julho recebi a notícia de que o meu título Microsoft MVP foi renovado por mais um ano! Fiquei muito feliz. Além disso tivemos a nomeação do nosso amigo Fabiano Neves Amorim para MVP SQL Server, um título merecido que so vem a reforçar a importância de cada vez mais valorizarmos a competência técnica dos MVPs.

Continuo na especialidade SQL Server e até segunda ordem vou continuar brincando com o SQL Server. Agora o título me lembra uma coisa: tenho que contribuir mais! Estou cheio de idéias de posts, artigos e vídeos para gravar, mas se conseguir priorizá-los no dia a dia.

Que venha mais um ano com muita discussão técnica, Denali, SQL Server vNext, PASS Summit, MVP Summit e mais o que a gente conseguir achar tempo. E quem sabe no ano que vêm eu não coloco um novo post sobre o assunto… :-)

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

quinta-feira, 30 de junho de 2011

Treinamento SQL Server 2008 Internals em Natal

Bom dia pessoal.
O anúncio do treinamento em Natal está na página da Nimbus (www.srnimbus.com.br)  já faz alguns dias e estou próximo da confirmação da turma, mas tenho que saber ao certo quantas pessoas vão participar.

A essa altura do campeonato eu acho que o treinamento já anda dispensando apresentação, até hoje 100% dos alunos que fizeram o treinamento e responderam o questionário de avaliação disseram que fariam novamente um treinamento com a Nimbus e avaliaram o instrutor como excelente (sim, modéstia passou longe... :-)).

Se você quer participar, preencha a proposta de treinamento e mande para contato@srnimbus.com.br! A proposta com TODOS os detalhes está aqui: http://intranet.srnimbus.com.br/Lists/noticias/Attachments/19/11006%20-%20SQL%20Server%202008%20Internals%20-%20Julho_RN.pdf

E não, não penso ainda em fazer o Internals online, apesar do sucesso do treinamento de indexação.

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

quinta-feira, 2 de junho de 2011

Primeiro treinamento online da Sr. Nimbus

Ladies and gentlemen!

************************************************************************************
!!UPDATE!!

Recebemos questionamentos sobre o formato do curso e algumas pessoas querem testar o Live Meeting, então hoje (08/06/2011), entre 21:00 e 21:30 eu estarei online no LM para tirar dúvidas com relação ao formato do curso, ementa, material, certificados, além claro, de já testar a conectividade do LM.

Link para sessão aberta: https://www.livemeeting.com/cc/mvp/join?id=9WM6CF&role=attend&pw=AlunoNimbus20110608

Perto do horário eu publicarei aqui e no twitter o endereço para vocês acessarem a sessão do Live Meeting.

IMPORTANTE: hoje de noite eu estarei com uma conexão de modem 3G que NÃO é a conexão do treinamento, mas atende o propósito pontual. Para o treinamento temos dedicado um link de 10MB da GVT, e por todos os testes que conduzimos podemos dizer que a conectividade ficou muito boa.
************************************************************************************

Colocamos no nosso site a inscrição para o primeiro treinamento online oferecido pela Sr. Nimbus. O treinamento será o novo SQL10 - Indexação no SQL Server 2008 e eu serei o instrutor dessa turma.

Nesse treinamento vamos focar em um dos assuntos mais fascinantes e importantes do SQL Server: índices! Ficaremos 16 horas discutindo sua estrutura, tipos, melhores práticas de utilização e otimização.

A ideia é nos aproximarmos ao máximo uma aula presencial, com um moderador repassando as perguntas para o instrutor, que responderá perguntas ao vivo, apresentaremos PPTs, demos e, em paralelo, o aluno terá acesso a todos os scripts que poderá ir executando confortávelmente em sua casa. Antes de cada aula também ficaremos por 30 minutos na sala de aula, tirando dúvidas dos alunos por chat ou respondendo em voz alta para todos.

Temos muita expectativa no excelente aproveitamento dos alunos e na satisfação de todos, pois é um formato mais democrático, que possibilita a participação de todos, independente de onde você esteja.

Gostou?! Veja todos os detalhes aqui: http://intranet.srnimbus.com.br/treinamento/paginas/inscricoes/SQL10-201101.aspx

Estou contando os dias para o treinamento.

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

sexta-feira, 27 de maio de 2011

Balanced Data Distributor para o SSIS

Estava navegando pelos meus RSSs e encontrei algo fantástico para o SSIS. Um blog de performance do SQL Server, parado a mais de um ano, publicou um post sobre o Balanced Data Distributor que você pode ler aqui: http://blogs.msdn.com/b/sqlperf/archive/2011/05/25/the-balanced-data-distributor-for-ssis.aspx.

Olha que bacana, agora podemos colocar no data flow um componente que quebra o fluxo de dados em diferentes fluxos de saída (potencialmente com uma distribuição homogênea), permitindo utilizar um maior paralelismo no seu pacote e melhorar o desempenho na carga dos dados.

O post do Len Wyatt já dá uma explicação legal, discutindo possíveis casos de gargalos, então não vou ficar muito na teoria. Para alimentar o espírito geek eu baixei o BDD e fiz um pequeno teste no SSIS.

Cenário: criei um raw file com 30.000 registros e disparei da minha máquina (um dual core) o pacote. Este vai pegar esses registros e fazer 30.000 lookups contra um servidor SQL Server (nada parrudo, uma máquina bbeeemmm simples), inserindo os campos originais mais um campo retornado pelo lookup em uma tabela de destino (deixei como uma heap).
Minha intenção é conseguir paralelizar os lookups e ver o ganho de desempenho, já que o lookup é uma operação cara (ainda mais com a forma padrão que o SSIS trabalha).

Abaixo temos as três figuras, mostrando o BDD trabalhando com um, dois e quatro fluxos de dados.

BDD_1fluxo
Figura 01 – Somente um fluxo de dados

BDD_2fluxos
Figura 02 – Dois fluxos de dados

BDD_4fluxos
Figura 03 – Quatro fluxos de dados

Executei cada teste duas vezes e registrei os tempos de execução de cada pacote…

1 fluxo de dados
Tempo 1: Finished, 1:12:38 PM, Elapsed time: 00:01:00.123
Tempo 2: Finished, 1:15:12 PM, Elapsed time: 00:00:53.493


2 fluxo sde dados
Tempo 1: Finished, 1:17:07 PM, Elapsed time: 00:00:38.376
Tempo 2: Finished, 1:18:32 PM, Elapsed time: 00:00:33.650


4 fluxos de dados
Tempo 1: Finished, 1:21:04 PM, Elapsed time: 00:00:24.804
Tempo 2: Finished, 1:22:00 PM, Elapsed time: 00:00:23.962


Com o paralelismo do BDD e quatro fluxos o tempo caiu de quase um minuto para 24 segundos! E isso que as máquinas não são boas ou massivamente paralelas, imagine isso rodando em um servidor feroz.

Outro detalhe interessante do BDD que já dá para perceber pelos testes é a forma que ele trabalha. Ele não vai jogar uma linha para um fluxo, depois outra linha para outro fluxo e assim sucessivamente, o BDD pega o conteúdo do buffer e vai jogando para cada fluxo. Na figura 3 podemos notar que depois de já ter distribuido 28.671 registros, somente sobraram 1.329 para o quarto ramo. Uma implementação bem eficiente que nos dá indício que ainda podemos tirar vantagem de alguns ajustes do tamanho do buffer no pipeline.

Antes desse componente poderíamos tentar algo bem menos efetivo, fazendo um gatinho (mmiiaauuu) com o conditional split. Mas aí você deveria definir como são distribuídos os fluxos e a lógica teria que ser muito eficiente para não haver um desbalanceamento nos ramos… Algo como um campo que tivesse uma distribuição homogênea para os registros e estes intercalados, para garantir a distribuição igualitária durante o processamento dos buffers, senão você teria um ramo sendo usado primeiro, depois outro, etc. (sem um paralelismo efetivo). Isto é, antes do BDD a ideia é factível, mas improvável de ser implementado de forma eficiente.

E não, esse não é um componente que está no Denali, pelo menos eu ainda não vi nada a respeito sobre a inclusão dele e os CTPs não possuem esse componente… Mas bem que poderia ser incluído!

Eu me diverti, e você?

Atualização
{

A dúvida do Rodrigo é muito pertinente! A diferença do BDD para o multicast NÃO está no paralelismo, pois o multicast também pode usufruir de múltiplas thread, mas normalmente com os ramos fazendo operações diferentes entre si ou populando destinos diferentes.

Supondo que no multicast você têm 12 regsitros no pipeline, os mesmo 12 registros vão fluir em cada ramo. Então supondo 4 ramos, se você inserisse tudo na mesma tabela iria acabar com 48 registros, cada um aparecendo 4 vezes.

Com o BDD os 12 registros que entram no pipeline serão distribuídos entre os ramos, deixando 3 registros para cada ramo (exemplo hipotético, já que no fundo a divisão é feita pela quantidade de registros que cabe em um buffer do pipeline). Se inseridos em uma única tabela, como foi o meu exemplo, você teria os 12 registros sem duplicatas.

Espero ter sido claro, qualquer coisa grita!

}

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

terça-feira, 24 de maio de 2011

Intellisense do SQL Server 2008 R2 e o SP1 do Visual Studio 2010

Bom dia pessoal.
Nesse fim de semana formatei a minha máquina e aproveitei para deixar o SQL Server 2008 R2 como instância default, atualizar o VS 2010 com o SP1 e finalmente instalar o Win7 SP1.

Quando fui trabalhar na segunda-feira descobri que o intellisense do SQL Server Management Studio não estava funcionando. Fiz o troubleshooting básico de configuração do SSMS e nada! Pesquisando um pouquinho acabei por descobrir o culpado disso tudo: o Service Pack 1 do Visual Studio 2010!

A solução dada pela Microsoft é instalar o Cumulative Update 7 do SQL Server 2008 R2 para solucionar o problema. Eu instalei e tudo voltou a funcionar normalmente.

Algumas referências para o acontecido:
FIX: The IntelliSense feature in SSMS 2008 R2 may stop working after you install Visual Studio 2010 SP1
Cumulative Update package 7 for SQL Server 2008 R2

E um KB legal de acompanhar: The SQL Server 2008 R2 builds that were released after SQL Server 2008 R2 was released 

Eu vi que algumas pessoas tiveram um problema com projetos do DBPro depois de instalado do CU#7, mas não aconteceu comigo.

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

terça-feira, 10 de maio de 2011

Treinamentos Sr. Nimbus e curso online

Bom dia pessoal.
Recentemente temos recebido vários questionamentos sobre calendário e pedidos para que nossos treinamentos sejam executados em outros estados. Vamos a um rápido posicionamento:
  • Não fechamos turma para os treinamentos de querying e programming por conta dos horários. Tínhamos demanda, mas as datas/horas não coincidiam para os alunos.
  • Por conta dos nossos recursos, mais especificamente eu (sim, sou o culpado), tivemos que alterar o calendário por conta de alguns projetos em que estamos trabalhando. O que nos forçou a postergar algumas turmas para não fazer uma entrega corrida.
    • Estamos trabalhando em um novo calendário para os próximos meses, em breve publicarei no site da empresa e farei o anúncio aqui também.
  • O treinamento de database mirroring com o Gustavo Aguiar vai ser ministrado provavelmente em Junho. Estamos negociando uma parceria e trabalhando forte no conteúdo e, devo confessar, está espetacular.
Com relação a oferecer treinamentos em outros locais, a dificuldade de deslocamento ainda é grande e não conseguimos cobrir um espaço muito grande, então estamos estruturando uma oferta para um treinamento online de SQL Server, focado em indexação.
Para nos ajudar, montei uma pequena enquete e gostaria MMMUUIITTTOOO que você nos ajudasse. Na enquete estão os detalhes para o primeiro treinamento.


Responda a pesquisa!


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

terça-feira, 19 de abril de 2011

[SQLServerDF] Encontro XI - Recursos avançados do Service Broker

Bom dia pessoal, tudo bem?
Vamos com mais um encontro do grupo SQLServerDF...

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

Local: Auditório da Microsoft - Edifício Corporate Financial Center, sala 302
Data e horário: 10/05/2011, 17:00h ~ 19:00h
Tema: Recursos avançados do Service Broker
Agenda:
- Utilizando o SQL Service Broker e Mensageria de dados no SQL Server em cenários distribuídos
- Uma aplicação prática do Service Broker em cenários de múltiplos bancos em instâncias diferentes
Descrição: Essa é uma apresentação sobre implementações avançadas do Service Broker que apresentará o uso dessa feature em cenários complexos envolvendo processamento distribuído em várias instâncias. Trata-se de uma continuação da sessão do encontro anterior que fez uma apresentação do Service Broker.
Palestrante: Gustavo Maia Aguiar
Gustavo Maia Aguiar é pós-graduado em bancos de dados e trabalha com SQL Server desde 2003 possuindo larga experiência em projetos de implementação e manutenção banco de dados nessa plataforma. Possui as certificações MCP, MCDBA, MCITP, MCT e MVP em SQL Server. É membro ativo e moderador dos fóruns MSDN, Technet e das comunidades SQL Server Brasil e SQL Brasil (Orkut) e posta artigos técnicos em seu blog: http://gustavomaiaaguiar.wordpress.com

Favor mandar para o grupo um e-mail confirmando sua presença para luan.moreno@srnimbus.com.br, pois a capacidade do auditório não é ilimitado.

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

[SQLServerDF] Encontro X - Introdução ao Service Broker

Bom dia pessoal, tudo bem?
Vamos com mais um encontro do grupo SQLServerDF...

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


Local: Auditório da Microsoft - Edifício Corporate Financial Center, sala 302
Data e horário: 27/04/2011, 17:00h ~ 19:00h
Tema: Introdução ao Service Broker
Agenda:
- Introdução ao SQL Service Broker e Mensageria de dados no SQL Server
- Uma aplicação prática do Service Broker em cenários de vários bancos de dados na mesma instância
Descrição: Essa é uma apresentação sobre o Service Broker e aplicações de mensageria utilizando o SQL Server onde serão apresentados os fundamentos de aplicações baseadas em mensageria, conceitos e benefícios do Service Broker bem como um cenário prático de utilização do mesmo. Essa sessão irá servir de introdução para o próximo encontro, onde serão apresentados recursos e implementações envolvendo instâncias diferentes.
Palestrante: Gustavo Maia Aguiar
Gustavo Maia Aguiar é pós-graduado em bancos de dados e trabalha com SQL Server desde 2003 possuindo larga experiência em projetos de implementação e manutenção banco de dados nessa plataforma. Possui as certificações MCP, MCDBA, MCITP, MCT e MVP em SQL Server. É membro ativo e moderador dos fóruns MSDN, Technet e das comunidades SQL Server Brasil e SQL Brasil (Orkut) e posta artigos técnicos em seu blog: http://gustavomaiaaguiar.wordpress.com

Favor mandar para o grupo um e-mail confirmando sua presença para luan.moreno@srnimbus.com.br, pois a capacidade do auditório não é ilimitado.

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

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

terça-feira, 11 de janeiro de 2011

SSIS Fuzzy Lookup e SQLDumper

Ontem eu passei por um bug do SSIS que já está registrado no Connect, mas ainda não tem nenhuma informação de solução. Aproveitei para me distrair um pouco com o dump e resolvi blogar o bug, pois talvez você possa passar pelo mesmo. Então vamos lá...

Estou com minha máquina x64 e usando o BIDS montei um pacote simples que utilize fuzzy lookup (no meu caso contra uma tabela com 1 milhão de registros). Porém quando disparei a execução do pacote, no meio dela apareceu um prompt invocando o SQLDumper e a execução do pacote simplesmente parou, mostrando o mesmo em execução (amarelo), sem falhar ou terminar com sucesso. Mudei um parâmetro ou outro, a massa de dados e nada de resolver o problema, a execução do pacote sempre parava da mesma forma.

Uma pesquisa rápida na internet me mostrou a resposta, que estava lá no connect: Fuzzy lookup triggers SQLDUMPER, even with very small dataset with Run64BitRuntime set to false. Então basta ir à configuração do projeto, em Debugging, e colocar a opção Run64BitRuntime como true. Tentei novamente e tudo funcionou, mas particularmente ainda espero uma resposta definitiva, pois poderia ser um caso onde eu não tenho um driver 32 bits (veja comentário no connect) ou então eu quero após o lookup debugar um script component e, como vocês sabem, tenho que definir a opção acima como false para meu breakpoint funcionar corretamente.

Por curiosidade, peguei o mini dump no caminho “C:\Program Files (x86)\Microsoft SQL Server\100\Shared\ErrorDumps\SQLDmpr0003.mdmp” e abri no Visual Studio 2010, onde no dump summary podemos ver descrito claramente um access violation (0xC0000005) com a informação: “The thread tried to read from or write to a virtual address for which it does not have the appropriate access.”
 
Continuando a diversão, peguei o minidump e abri no windbg, então logo de cara ele mostra a thread de nosso interesse (número 204):

This dump file has an exception of interest stored in it.
The stored exception information can be accessed via .ecxr.
(36d0.204): Access violation - code c0000005 (first/second chance not available)

Carreguei os símbolos corretos e deu uma olhada na thread stack:

# 24 Id: 36d0.204 Suspend: 0 Teb: fff0e000 Unfrozen
ChildEBP RetAddr Args to Child
1186ea28 76c10816 00000770 00000000 1186ea70 ntdll!ZwWaitForSingleObject+0x15
1186ea94 75511184 00000770 00000064 00000000 KERNELBASE!WaitForSingleObjectEx+0x98
1186eaac 75511138 00000770 00000064 00000000 kernel32!WaitForSingleObjectExImplementation+0x75
1186eac0 00a9a0be 00000770 00000064 73773105 kernel32!WaitForSingleObject+0x12
1186eb48 00a99c99 737731c9 00000000 00000104 DtsDebugHost!CDmpDump::DumpInternal+0x32e
1186eb84 00a9325a 00a9d5fc 73773799 644b3000 DtsDebugHost!CDmpDump::Dump+0x59
1186edd4 00a932db 1186eea8 00000000 1186edf0 DtsDebugHost!SSISInternalPerformDump+0x19a
1186ede4 6419cccf 1186eea8 1186ee78 75539d57 DtsDebugHost!WEDExceptionFilter+0xf
1186edf0 75539d57 1186eea8 708ea443 00000000 mscorwks!InternalUnhandledExceptionFilter+0x16
1186ee78 774306e7 1186eea8 774305c4 00000000 kernel32!UnhandledExceptionFilter+0x127
1186ee80 774305c4 00000000 1186fb70 773ec390 ntdll!__RtlUserThreadStart+0x62
1186ee94 77430469 00000000 00000000 00000000 ntdll!_EH4_CallFilterFunc+0x12
1186eebc 77418799 fffffffe 1186fb60 1186eff8 ntdll!_except_handler4+0x8e
1186eee0 7741876b 1186efa8 1186fb60 1186eff8 ntdll!ExecuteHandler2+0x26
1186ef90 773d010f 0086efa8 1186eff8 1186efa8 ntdll!ExecuteHandler+0x24
1186ef90 769c99e4 0086efa8 1186eff8 1186efa8 ntdll!KiUserExceptionDispatcher+0xf
1186f2e8 75c4747e 80010088 660330a8 40600000 msvcrt!memcpy+0x1e0
1186f308 75404c78 1186f324 8001007c 1186f7f4 oleaut32!BSTR_UserMarshal+0x50
1186f344 75404c0d 1186f7f4 00359f8a 80010078 rpcrt4!NdrpUserMarshalMarshall+0x4b
1186f374 753e6f8a 1186f3e4 1186f7f4 00359f8a rpcrt4!NdrUserMarshalMarshall+0xd8
1186f3a0 7548013d 708da17a 1186f7ec 0300002c rpcrt4!NdrpClientMarshal+0xf6

1186f7b4 75c0ba02 00359b50 00359f28 1186f7ec rpcrt4!NdrClientCall2+0x19a
1186f7d4 75afc95d 00000020 00000014 1186f894 ole32!ObjectStublessClient+0xa2
1186f7e4 21c571a0 0f81a67c 02379a6c 660330a8 ole32!ObjectStubless+0xf
1186f894 21c571a0 000db174 02379a6c 660330a8 DTS!CGenericEventsImpl::OnCustomEvent+0x2d1
1186f944 21c57a84 000dcbc4 02379a6c 660330a8 DTS!CGenericEventsImpl::OnCustomEvent+0x2d1
1186f96c 227ec729 02379a6c 660330a8 003b8404 DTS!CComponentEventsImpl::FireCustomEvent+0x47
1186f998 227d6d5f 00000000 660330a8 003b8404 DTSPipeline!CErrorHandler::FireCustom+0x52
1186f9b8 6605a756 023eb850 660330a8 003b8404 DTSPipeline!CComponentMetaDataObject::FireCustomEvent+0x26
1186fa2c 2280f75f 023ea488 00000014 1fb555e0 TxBestMatch!CTxFuzzyLookup::ProcessInput+0x107
1186fa94 2280f387 2401e670 00000000 023f3c8c DTSPipeline!CPathExecutionItem::DoWorkPI+0x21a
1186fab4 228119b7 1186fad3 023ef018 00000000 DTSPipeline!CPathExecutionItem::DoWork+0x3d
1186fad4 22811a71 00000000 00000000 1186fb1c DTSPipeline!CSchedulerThread::ProcessWork+0x55
1186fae4 728d29bb 023f3c8c 708dad70 00000000 DTSPipeline!CSchedulerThread::ProcessWorkThreadProc+0x1f
1186fb1c 728d2a47 00000000 75513677 023ef018 msvcr80!_endthreadex+0x3b
1186fb24 75513677 023ef018 1186fb70 773f9d42 msvcr80!_endthreadex+0xc7
1186fb30 773f9d42 023ef018 597c16c4 00000000 kernel32!BaseThreadInitThunk+0xe

1186fb70 773f9d15 728d29e1 023ef018 00000000 ntdll!__RtlUserThreadStart+0x70
1186fb88 00000000 728d29e1 023ef018 00000000 ntdll!_RtlUserThreadStart+0x1b

Olhando a pilha acima, vemos que o pipeline do SSIS estava em execução e processando o nosso fuzzy lookup, quando ele foi fazer uma cópia de memória (memcpy), que gerou a exceção, pois logo depois temos o dispatcher da exceção que em breve utiliza o CDmpDump para gerar o mini dump.

Se executarmos a instrução .ecxr poderemos ver efetivamente que foi a instrução memcpy que gerou a exceção, inclusive quais foram as posições de memória, armazenadas nos registradores ESI e EDI, com o correto ajuste de segmento.

0:024> .ecxr
eax=a66330a8 ebx=1186f7f4 ecx=067f73d6 edx=00000000 esi=8000fffc edi=99fecfdc
eip=769c99e4 esp=1186f2e0 ebp=1186f2e8 iopl=0 nv dn ei pl nz ac po nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010612
msvcrt!memcpy+0x1e0:
769c99e4 f3a5 rep movs dword ptr es:[edi],dword ptr [esi]

Erro simples e solução mais ainda, mas valeu a diversão. Espero que você tenha gostado e até um próximo post!

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