segunda-feira, 30 de novembro de 2009

TechTalk #001 - LSN, page header e restart recovery

Parte importante do trabalho dos funcionários da Sr. Nimbus é prover conteúdo técnico de qualidade para a comunidade e profissionais de TI. Hoje isso ainda não é um pré-requisito de contratação e nem existe um processo formal para tal, mas não sei se um profissional que não possui esse perfil seria o candidato ideal. Parte do meu planejamento para a empresa é que tenhamos frequentes reuniões técnicas internas para troca de conhecimento e experiências, aproveitando para gerar informações preciosas para todos... Bom, vamos deixar isso para lá, são apenas elucubrações de uma manhã chuvosa em dia de feriado aqui em Brasília.

Dessa vez eu não chego aqui com um artigo, mas sim com o primeiro TechTalk da Sr. Nimbus. Os tech talks (ou papo técnico) são pequenos vídeos onde podemos explorar assuntos diversos, algumas vezes mais complexos, em um formato diferente além dos tradicionais artigos e posts que você já conhece.

Nesse primeiro vídeo eu falo um pouco sobre o log de transação e LSN (Log Sequence Number), sua associação com as páginas de dados e o processo de restart recovery (mais especificamente, sobre a etapa de UNDO). O assunto do vídeo eu extraí do meu curso de SQL Server 2008 "Internals" e espero que, mesmo sendo pequeno, esclareça um pouco do funcionamento do SQL Server.

Você pode assistir o vídeo seguindo no link abaixo ou fazer o download do skydrive. Eu gerei três versões com definições diferentes, mas somente publiquei o vídeo em WMV usando a resolução de 1280x800 (30 MB). Se você tiver alguma recomendação sobre o tamanho do vídeo e como podemos melhorar o TechTalk da Sr. Nimbus, deixe aqui seu comentário.

Após o comentário do Patricio eu notei que a geração do WMV não estava muito legal, então eu gerei uma nova versão (um pouco maior) e a publiquei no Screencast.com e no skydrive. Os links agora estão atualizado e refletem a nova versão, mas por ser um pouco maior eu recomendo o download.




Vídeo publicado no Screencast.com (é possível fazer download por lá também).
Ou baixe o vídeo no meu skydrive.

Espero que vocês gostem!

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

terça-feira, 24 de novembro de 2009

Gerando script das views para suas tabelas

Bom dia pessoal.

Hoje eu estava trabalhando em um cliente e precisei fazer uma coisa bem manual: Criar uma série de views com um nome diferente da tabela que estamos consultando, mas contendo todos os campos da tabela original.
Qual o motivo disso? Nós estamos criando um ambiente temporário onde estou jogando um monte de informações e vamos expor uma "interface" usando visões, que o usuário de negócio vai poder consultar à vontade e eventualmente criar consultas e relatórios. Então usaremos essa abstração, que nesse momento refletirá boa parte das tabelas, para evitar um pouco de retrabalho e atrito entre os lados, caso a estrutura mude, e dividir bem a questão de segurança.

Agora que vocês estão contextualizados vamos ver o que bolei... Eu poderia simplesmente sair escrevendo umas 50 visões com todos os campos, mas isso iria levar um tempão, então montei um script rápido que me ajudaria a gerar o código que preciso.

Seu mecanismo básico é o seguinte: tenho uma tabela temporária com N registros contendo o nome do esquema, da tabela existente e o nome que quero dar para a view. Bom base nessa tabela eu utilizo o CROSS APPLY para gerar uma string usando informações da sys.objects, sys.columns e sys.schemas, usando o truque com XML que já coloquei aqui no blog (http://luticm.blogspot.com/2009/06/gerar-registros-em-forma-de-colunas.html).

Segue o código T-SQL utilizando o AdventureWorks2008 para vocês brincarem e, quem sabe, utilizarem em algum momento, customizando o que será gerado.

USE AdventureWorks2008
go

WITH TabelaView AS
(SELECT Esquema, Tabela, Visao
FROM ( VALUES
('Sales', 'SalesOrderHeader', 'Venda'),
('Sales', 'SalesOrderDetail', 'DetalheVenda'),
('Production', 'Product', 'Produto'))
AS T(Esquema, Tabela, Visao))

SELECT
CodigoViews.Instrucao
FROM TabelaView
CROSS APPLY
(SELECT
'
IF OBJECT_ID(''vw_'+ TabelaView.Visao +''') IS NOT NULL
DROP VIEW dbo.[vw_'+ TabelaView.Visao +']
go

CREATE VIEW dbo.vw_' + TabelaView.Visao + '
WITH SCHEMABINDING
AS
SELECT ' +
STUFF(
(SELECT N', ' + QUOTENAME(SC.name) AS [text()]
FROM SYS.columns AS SC
INNER JOIN sys.objects AS SO
ON SO.object_id = SC.object_id
INNER JOIN sys.schemas AS SS
ON SO.schema_id = SS.schema_id
WHERE SO.type = 'U'
AND SO.name = TabelaView.Tabela
AND SS.name = TabelaView.Esquema
FOR XML PATH('')), 1, 2, N'') + '
FROM ' + TabelaView.Esquema + '.' + TabelaView.Tabela + '
go'
AS Instrucao) AS CodigoViews
go

E o código gerado é esse aqui:

IF OBJECT_ID('vw_Venda') IS NOT NULL
DROP VIEW dbo.[vw_Venda]
go

CREATE VIEW dbo.vw_Venda
WITH SCHEMABINDING
AS
SELECT [SalesOrderID], [RevisionNumber], [OrderDate], [DueDate], [ShipDate], [Status], [OnlineOrderFlag], [SalesOrderNumber], [PurchaseOrderNumber], [AccountNumber], [CustomerID], [SalesPersonID], [TerritoryID], [BillToAddressID], [ShipToAddressID], [ShipMethodID], [CreditCardID], [CreditCardApprovalCode], [CurrencyRateID], [SubTotal], [TaxAmt], [Freight], [TotalDue], [Comment], [rowguid], [ModifiedDate]
FROM Sales.SalesOrderHeader
go

IF OBJECT_ID('vw_DetalheVenda') IS NOT NULL
DROP VIEW dbo.[vw_DetalheVenda]
go

CREATE VIEW dbo.vw_DetalheVenda
WITH SCHEMABINDING
AS
SELECT [SalesOrderID], [SalesOrderDetailID], [CarrierTrackingNumber], [OrderQty], [ProductID], [SpecialOfferID], [UnitPrice], [UnitPriceDiscount], [LineTotal], [rowguid], [ModifiedDate]
FROM Sales.SalesOrderDetail
go

IF OBJECT_ID('vw_Produto') IS NOT NULL
DROP VIEW dbo.[vw_Produto]
go

CREATE VIEW dbo.vw_Produto
WITH SCHEMABINDING
AS
SELECT [ProductID], [Name], [ProductNumber], [MakeFlag], [FinishedGoodsFlag], [Color], [SafetyStockLevel], [ReorderPoint], [StandardCost], [ListPrice], [Size], [SizeUnitMeasureCode], [WeightUnitMeasureCode], [Weight], [DaysToManufacture], [ProductLine], [Class], [Style], [ProductSubcategoryID], [ProductModelID], [SellStartDate], [SellEndDate], [DiscontinuedDate], [rowguid], [ModifiedDate]
FROM Production.Product
go


Notem que o T-SQL é bem simples e fácil de ser alterado, então se eu quisesse omitir colunas do tipo uniqueidentifier ou remover campos com nome CodigoXXXXXXX, basta adicionar algumas cláusulas where no código.

Post rápido, mas espero que seja útil para alguém. Ou então pelo menos a idéia do T-SQL...
Você pode baixar o script aqui.

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

quinta-feira, 19 de novembro de 2009

SQLServerDF Encontro V - PASS Summit e Disaster Recovery

Bom dia meninos e meninas.
Apesar da correria e das noites com poucas horas de sono, o grupo SQLServerDF não pode parar (mesmo depois de um mês ausente e o PASS Summit 2009 rolando), certo?

Continuando as apresentações do nosso grupo, o Gustavo Maia volta para a frente da turma para falar um pouco sobre Disaster Recovery, onde ele vai aproveitar um pouco da apresentação que ele fez no SQLServerDay e eu, como acabei de passar 6 horas com o Paul Randall falando sobre isso, vou aproveitar para dar uns pitacos também, quem sabe apimentando um pouco a discussão e mostrando alguma demo.

Porém, antes da apresentação do Gustavo eu vou entrar para falar um pouco de como foi o PASS Summit 2009, tentando passar um pouco dessa incrível experiência e mostrar que já estamos fazendo o planejamento para 2010, onde espero ir com uma pequena caravana do Brasil. Gostou da idéia? Vai com a gente? Fique ligado neste blog.

Vamos ao convite formal:

Vai estar em Brasília no dia 25/11 (quarta-feira) com a noite livre e quer participar? Faça seu registro no grupo SQLServerDF (http://groups.google.com/group/sqlserverdf) e deixe lá a sua confirmação.

Agenda:
- SQLPASS Summit 2009 - Overview, análise e planejamento (Luti - 30 minutos)
- Disaster Recovery - Backup, Restore e Tópicos Avançados (Gustavo Aguiar - 2 horas)
- Detabe técnico.

Local: Auditório da Microsoft em Brasília, Edifício Corporate Financial Center, sala 302.
Horário: 19:00 ~ 22:00 (começaremos no horário, então cheguem na hora, ok?)

Esse encontro será realizado no auditório da Microsoft em Brasília, para mais informações acesse a página do grupo: http://sqlserverdf.sqlpass.org/

Quer convidar um amigo, sem nenhum problema, aquela sala é que nem coração de mãe, sempre cade mais um! :-)

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

quarta-feira, 18 de novembro de 2009

Webcast SQL Server Compact - demos e gravação

Bom dia povo!

Ontem eu gravei mais um webcast para o MSDN, dessa vez falando sobre o SQL Server Compact, com o título: SQL Server Compact 3.5 com qualquer tipo de aplicação.
Como eu já havia gravado um webcast sobre o Compact no passado, onde eu abordei uma série de assuntos relacionados a ele (inclusive alguns que estavam novamente nessa descrição), para não ficar repetitivo eu corri o risco e procurei explorar outros assuntos, sendo um pouco mais breve em alguns temas e detalhista em outros, tentando problematizar um pouco e apontar algumas características que as vezes passam desapercebidas.

A agenda da apresentação foi a seguinte:

1. Características
2. Qualquer tipo de aplicação?
3. Onde é utilizado?
4. DLLs
5. Entity Framework
6. Desempenho
7. Deployment
8. Evolução
9. Conclusão

No tópico 2 eu tentei não só fazer uma listagem, como também jogar um olhar crítico para as nossas escolhas. Depois disso falei um pouco do tipo de limitação que podemos encontrar (usando um exemplo do EF 4), mostrei comparativos de desempenho onde podemos ter o Compact respondendo melhor do que o SQL Server Express (sim, senhor!) e também alguns problemas com deployment de novas versões do seu projeto.

Como demos eu fiz uma BBBEEEMMM simples com Smart Device, que não é minha praia, então só quis mostrar ele funcionando com SQL Compact e diferentes maneiras de acesso com SqlCeCommand direto e TableAdapters. Também montei um exemplo com OBA - Office Business Application - onde eu mostrei que é possível termos um SDF trabalhando junto com um documento do Word e para fechar a outra demo eu usei testes de unidade com o SQL Compact, pois mesmo que você esteja trabalhando em um projeto pequeno, vale a pena fazer a coisa bem feita, não?

No fim ainda fiquei de 15 a 20 minutos respondendo uma série de perguntas que foram aparecendo na sequência, onde o pessoal colocou perguntas e pontos importantes, então quem for assistir a gravação não deixe de ver até o fim!

Para quem perdeu, segue o link da gravação: https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=pt-BR&EventID=1032423024&CountryCode=BR
Os projetos de demos que eu criei estão aqui: http://cid-e145f7753042d628.skydrive.live.com/self.aspx/Public/Apresentacoes/20091116%5E_DemosWebcast%5E_SQLCompact.zip



No fim a avaliação foi boa, mas teve uma pessoa que não gostou! Isso mexe comigo, pois o problema não é alguém não gostar, é eu não saber o motivo para tentar corrigir na próxima vez. Se alguma vez você viu alguma apresentação minha e não gostou, me escreva ok?

===========================

Por falar em avaliação, eu recebi as minhas avaliações do TechEd Brasil 2009 e foram muito boas, mas teve um quesito em particular que me chamou a atenção. Na sessão sobre desempenho de consultas, que estava muito cheia, eu quase consegui nota máxima no item "avaliação do palestrante", onde somente UMA pessoa não marcou a sessão como excelente! :-)
Caramba, como isso me deixou feliz, pois eu ralo muito para tentar fazer uma sessão diferente e legal, que não seja CTRL+C CTRL+V de outras, e o pessoal gostar do que eu fiz é a melhor recompensa de todas. Obrigado a todos e vou tentar sempre melhorar!

=============================

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

terça-feira, 17 de novembro de 2009

Microsoft PDC 2009

Bom dia pessoal, para quem não sabe hoje começou o PDC 09, evento que a Microsoft faz em anos aleatórios quando ela têm boas novidades para contar. Tivemos o PDC em 2008 onde foi anunciado o Windows Azure e temos novamente nesse ano. Teremos novidades saindo de lá, acho que a coisa será mais contida que em 2008, mas nada que tire o brilho do evento e que não mereça atenção.
Quer saber mais sobre o evento? Acesse http://microsoftpdc.com/. Hoje o keynote foi transmitido e amanhã teremos no palco o ScottGu, que sempre trás coisas bacanas e hoje prometeram muita novidade para o Silverlight.

Também vale a pena ficar ligado no Channel9 http://channel9.msdn.com/, que normalmente é o veículo de publicação das sessões e no ano passado disponibilizou TODAS para assitirmos, tomara que nesse ano seja igual. Acessei agora e já temos novidades, como o projeto Dallas.

Outra novidade para mim nesse ano é o acompanhamento através do twitter, basta colocar a hashtag #PDC09 como palavra de busca e vai chover de novidades pelo TweetDeck (ou software que você usa), colocados por diversos anônimos e também pelos muitos brasileiros que estão por lá!

Post rápido, pois está na hora de começar mais uma aula de SQL Server 2008 Internals!


[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

segunda-feira, 16 de novembro de 2009

CTP de novembro - Azure SDK e outros

Post rápido para os Azurianos...
Saiu o CTP de novembro do:


Alguns pontos que merecem destaque:

  • Um worker role pode definir endpoint externo: HTTP, HTTPS e TCP.
  • Tabelas podem ser criadas dinamicamente no Azure Storage. Lá se vai o batch que criamos para o devtablegen...
  • Suporte para o Visual Studio 2010 Beta 2 - como foi anunciado.
  • O exemplo do Storage client foi trocado por uma nova biblioteca com qualidade de produção! Isso foi legal, mesmo com o Steve Marx falando isso no fórum sempre ficava um sentimento ruim quando referenciávamos Microsoft.Samples em nosso produto... Ainda não vi a nova API, mas nessas horas eu agradeço pelos testes de unidade.

Conforme prometido, foi um post rápido.

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

sexta-feira, 13 de novembro de 2009

Treinamento de SQL Server 2008 Internals em São Paulo

===============================================================

Atualização: por questões de facilidade, melhor entendimento e divulgação, montei uma proposta do treinamento com mais detalhes, inclusive um mini-cv deste que vos escreve, e disponibizei no skydrive.



===============================================================

Pessoal, durante os últimos meses eu tenho recebido alguns e-mails isolados, vindo de várias pessoas e estados do Brasil, interessadas no treinamento de SQL Server 2008 internals. Tentando atender aos poucos essa demanda e não querendo postergar demais, eu estou propondo uma turma em São Paulo para o início de 2010.

Quando: 25/01/2010 a 29/01/2010 - 9:00h a 18:30.
1:30h de almoço livre e dois coffee-breaks de 15 minutos.
Onde: a definir - Idealmente zona sul de São Paulo perto da Berrini
Quanto: R$ 1600,00 (em até 4x sem juros)
Mínimo de alunos: 10
Máximo de alunos: 18
Material: Kit Sr. Nimbus de treinamento e certificado de conclusão (75% de presença).

Interessados, entrar em contato comigo: luciano.moreira@srnimbus.com.br

O treinamento somente será confirmado se um mínimo de 10 alunos efetuarem a inscrição e a nossa data limite para confirmação é dia 10/12/2009. Caso o curso não se confirme escolheremos outra data, provavelmente Maio por conta do meu calendário em Brasília.

Antes de chegarmos na ementa eu gostaria de dizer algumas palavras... Montei esse treinamento com base no que aprendi através dos livros, na Microsoft, vivência com o produto, e não acho que seja um curso para o público geral - como o de T-SQL Querying e T-SQL Programming que temos - tanto que não pretendo oferecê-lo em um pacotão para empresas, pois talvez sejam poucos os que realmente o aproveitarão da maneira que eu acredito que deveria ser absorvido pelo aluno.
Então, os alunos desse curso normalmente são aqueles que têm curiosidade para entender como as coisas funcionam e querem sair da média, um SQL geek mesmo! Pois veremos muitas coisas detalhadas que talvez você não irá utilizar diretamente no dia-a-dia, mas minha expectativa é que as pessoas entendam o porquê das coisas no SQL Server 2008. E esse conhecimento fará o profissional sair de lá e olhar para o ambiente de maneira diferente, deixando de achar que as coisas acontecem por acaso ou sorte, podendo falar com propriedade e defender o que é melhor para cada cenário.

Para quem me conhece, tento misturar uma boa teoria com demos interessante e, se possível profundas, colocando o aluno para refletir. É comum eu me empolgar e dificilmente termino alguma apresentação no tempo previsto, então adicionei algumas horas extras para cobrir tudo, pois originalmente esse treinamento seria de 32 horas.

Esse treinamento é diferente dos MOCs e outros cursinhos de SQL que vemos por aí. Sendo ele focado em internals, fica complicado eu disparar um laboratório do tipo: utilize o DBCC PAGE para analisar a estrutura da página e correlacionar o header dela com o log de transação atual utilizando o fn_dblog. Não acha? Fique tranquilo que isso é coberto na demo 04/04!
Por isso eu tento rechear o curso de demos (que vocês receberão com o kit e poderão executar junto comigo) e deixo o curso sem laboratórios, apenas sugestões de outros testes interessantes para casa e painéis de discussão, então posso dizer que vocês aproveitarão as 40 horas com conteúdo de verdade (uma overdose de Luti e SQL Server! :-)).
Mantendo a mesma idéia que eu havia proposto para um primeiro treinamento em São Paulo, penso eu alugar uma sala em um hotel, sem máquina para o aluno, mas com a bancada para que cada um traga seu notebook. Se cada um tiver uma instância do SQL Server 2008 instalada já será suficiente para acompanhar o curso.




Se você participar e sair dessa semana percebendo o tanto de coisas que ainda temos que aprender e que achando que sabe muito pouco, mas com um sentimento de que agora terá um maior controle sobre seu ambiente, minha missão foi cumprida!





SQL Server 2008: arquitetura, estrutura de armazenamento e funcionamento interno.

Duração: 40h
Nível do treinamento: 300/400
Referências: Inside Microsoft SQL Server 2005: the storage engine e SQL Server 2008 Internals.
Pré-requisitos: O aluno já deve trabalhar com o SQL Server, saber escrever de forma proficiente consultas T-SQL e conhecimento da teoria de banco de dados relacional.
Público alvo: desenvolvedores T-SQL e DBAs SQL Server, que querem entender como o SQL Server funciona em maiores detalhes e saber como utilizar os recursos disponíveis de forma eficiente, pois se não houver uma estrutura bem elaborada com uma programação bem feita, o desempenho da solução ficará comprometido. Alguém sem experiência com SQL Server ou que nunca trabalhou diretamente com o banco de dados, terá dificuldade em acompanhar o curso.
Descrição: Este treinamento visa oferecer ao aluno uma visão da arquitetura do SQL Server, juntamente com uma visão simplificada do sistema operacional, descrevendo os mecanismos que fazem o SQL Server funcionar. Após a visão arquitetural é ensinado como criar as estruturas em um banco de dados (tabelas e índices), sua organização física, funcionamento do log de transação, cache de planos e gerenciamento de concorrência.

Conteúdo programático:

Módulo 01: Arquitetura do sistema operacional - gerenciamento de memória (VAS, 32 e 64 bits, PTE, AWE, PAE), processos/threads, operações de I/O, storage e alinhamento de partição.
Módulo 02: Arquitetura do SQL Server - engine relacional, engine de armazenamento, SQLOS, schedulers , gerenciador de memória , lazy writer, métodos de acesso, buffer manager, otimizador de consultas, protocolos de rede, entre outros.
Módulo 03: Banco de dados – tipos de bancos, arquivos, modelo de alocação (GAM, SGAM, PFS e IAM), filegroups e melhores práticas, estados do banco, database snapshots (utilizações e desempenho), opções de configuração e a tempdb e suas otimizações.
Módulo 04: Log de transação – importância, características de funcionamento, protocolo WAL, LSN, checkpoint, modelos de recuperação, estruturação interna (VLFs), problemas comuns, crescimento e funções não documentadas.
Módulo 05: Tabelas – criação de tabelas, tipos de dados, uso do NULL, restrições, chaves estrangeiras, estrutura do armazenamento físico e alterações de dados (análise dos internals da página com DBCC PAGE).
Módulo 06: Índices - tipos e seu armazenamento físico (CL, NCL e heaps), criação e suas opções, modificação de dados e seu impacto, fragmentação (como evitá-la e corrigi-la), estatísticas e índices especiais.
Módulo 07: Armazenamento especial - objetos grandes (LOBs), tipo filestream (criação, manutenção e desempenho), colunas esparsas, compressão de dados e particionamento de dados e índices.
Módulo 08: Gerenciamento de concorrência – propriedades ACID , bloqueios (tipos, duração, granularidade e escalação), níveis de isolamento, deadlocks, estrutura interna (blocos e donos), deadlocks e versionamento de registros.
Módulo 09: Cache de planos – consultas adhoc e procedimentos, funcionamento e internals, problemas e benefícios, parametrização (sniffing, optimize for), recompilação e plan guides.

Estou com uma mega dúvida se vai dar tempo de cobrirmos também de forma detalhada o query optimizer, pois é um tópico complexo. Nesse momento eu deixei de fora para um futuro treinamento de tuning, mas quem sabe eu não mudo de idéia?

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

SQL Server 2008 R2 - CTP de novembro

Bom, na correria eu estou alguns dias atrasados e provavelmente essa notícia já ficou velha, mas lá vai.
A Microsoft anunciou na segunda-feira a disponibilização do SQL Server 2008 R2 CTP de novembro para assinantes do MSDN e TechNet, e disponível para o público geral em 11/11. O legal foi ver os nomes oficiais dos novos recursos, o Madison passou a ser chamado Parallel Data Warehouse e o Gemini de PowerPivot.

Já estou fazendo o meu download, o tempo para baixar é tranqüilo, o problema é achar tempo para brincar com o bichinho... 

Aqui está o anúncio oficial no blog da Microsoft Data Plataform: http://blogs.technet.com/dataplatforminsider/archive/2009/11/09/announcing-the-sql-server-2008-r2-november-ctp.aspx.

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

SQLPASS Summit 2009 - Dia 04

No último dia de palestras do evento eu dei uma passada na general session para ver o que o pessoal estava falando, mas não me pareceu muito interessante, então aproveitei para conversar com alguns clientes que a Microsoft levou para o PASS. Alguns deles que eu já conhecia da minha vida de PFE e DPE, e uma pessoa citou que me ouviu em um TechEd passado, muito legal esse tipo de relacionamento e saber um pouco do cotidiano de outros DBAs. Tempo mais do que bem gasto e divertido.

Depois me dirigi para a sessão Capturing and analyzing file & waitstats com Andrew Kelly. Como já ouvi do assunto no primeiro dia queria me aprofundar um pouco em alguns tipos específicos e consegui aprender algumas coisinhas interessantes. Não foi nenhuma palestra de outro mundo para quem já está brincou um pouco com suporte, mas é sempre ver a abordagem que outros profissionais utilizam para isolar um problema e resolvê-lo, pois nos ajuda a pensar na nossa maneira de trabalho. Aproveitei a sessão para montar um script usando file stats em conjunto com o Transaction log, para mostrar algumas características do log flush, script que inclusive usei ontem no meu treinamento. Também devo ressaltar que ele fala muito bem e de forma didática, colocando-o na minha lista de bons palestrantes.

Na segunda sessão eu me dirigi para a sala 613/614 movido pela curiosidade do que seria apresentado na sessão: Troubleshooting applications accessing SQL Server, com duas indianas do time de suporte (CSS), a Abirami Lyer e outra que esqueci o nome. Essa foi uma sessão para alimentar a alma de qualquer geek e, devo admitir, senti uma saudade do time de suporte PFE da MS e algumas das aventuras que passamos... bons tempos também.
No início da sessão foi mostrado como fazer um troubleshooting de conexão com o SQL Server, utilizar o BID tracing (ferramenta grátis que eu desconhecia - http://msdn.microsoft.com/en-us/library/cc765421.aspx aqui está um bom artigo) e o netmon, analisando um pouco do padrão de comunicação entre o cliente e servidor e o que procurar nos traces. No segundo momento a outra engenheira mostrou como utilizar o windbg e o debugdiag para verificar se existe um connection leak na aplicação, então o debugdiag era configurado para gerar um dump quando um evento específico do .NET acontecia e depois o dump era aberto pelo windbg, onde algumas method tables eram analisadas, estruturas e por aí vai, até conseguirmos identificar quem é o responsável pela conexão, que pode ser um pool. Sessão mmuuuiittoo deep e deliciosa, saí de lá agradecendo por ter deixado a curiosidade me levar.

Terceira sessão, como todos os outros horários, tive que escolher entre três sessões e acabei ficando com o Victor Isakov em The Problem With Parallelism. Sessão interessante para quem ainda não sabe muito sobre o assunto, mas acho que ficou devendo um pouco, pois não trouxe nenhuma grande novidade e eu esperava algumas demos mostrando problemas encontrados. Nada disso, muita coisa teoria e alguns pontos que eu discordo do palestrante, nada mais normal se tratando de um tema espinhoso no SQL Server.

E por fim fomos todos ouvir o Adam Machanic falando na sessão Advanced SQL Server 2008 Extended Events: Performance Profiling and Troubleshooting Techniques (nível 500). A sessão prometia e foi entregue! Além de saber muito, o palestrante tinha didática e mostrou uma série de detalhes interessantes, o problema é que como é muita coisa e muito XML para olhar, não conseguimos decorar tudo que foi dito, então fica registrada como uma sessão para rever e rever, além daquele gostinho de que esse é um tema que somente vamos dominar depois de muita prática. Esse assunto será um dos meus queridinhos depois do PASS, pois espero muito do ExEvents e acho que ele vai me ajudar bastante a entender maiores detalhes do SQL Server e resolver os casos mais cabeludos, mas se isso será verdade, só o tempo dirá.

Na quinta-feira Seattle passou a ser Seattle e a chuva caiu com vontade. Bye bye sol...

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

domingo, 8 de novembro de 2009

SQLPASS Summit 2009 - Dia 03

Hoje o dia começou com mais uma sessão de keynote e, devo dizer, eu não gosto muito de keynotes pois é muito marketing das novidades. Dei uma passada na sala algumas vezes para ver como estava e vi slides já conhecidos e o pessoal falando do algumas "novidades" de BI, muito do que eu já havia visto com o projeto Gemini.

Logo em seguida eu fui assitir a uma sessão sobre o SSIS: Applied SSIS Design Patterns. De acordo com o nome da sessão eu esperava discutirmos diferentes padrões, como carregamento incremental, Slow changing dimensions, manipulação de arquivos e por aí vai. O palestrante citou o padrão de incremental loading, falando sobre uso do CDC, timestamp ou hashing, mas depois ele ficou mostrando alguns truques que utilizou no SSIS e outras descobertas bem interessantes.
Apesar da sessão ter sido divertida, o tópico padrões - o que realmente me interessava - acabou ficando em segundo plano, e pelas minhas pequisas com o SSIS eu tenho percebido que não existem padrões bem definidos. Eu faço as minhas maluquices no SSIS (algumas considero bem interessantes), outros inventam coisas diferentes e no fim é a liberdade de desenvolvimento e experiência que conta. Sei que o time de consultoria da Microsoft possui um toolkit do SSIS e alguns padrões, mas não sei detalhes de cada um deles. O botton line para mim que fica é: vou mostrar ao mundo o que estou fazendo e quem sabe não sai daí um padrão ou dicas bem interessantes...

Após o almoço acounteu uma sessão que eu estava esperando bastante, com o Ben Nevarez: How the query optimizer works! Novamente a expectativa me pregou uma peça, a sessão foi interessante, mas não tinha nennuma novidade. Eu e outros que assistiram a palestra ficaram com a mesma impressão, que ele poderia ter explorado melhor demos, o assunto e a abordagem da palestra, que num tom de voz único deixou todo mundo cansado. Eu consideraria a palestra nível 300, não 400 como definido.

De última hora eu troquei uma palestra de SSIS por uma feita pelo Jonathan Kehaylan - Opening the SQL Server 2008 troubleshooting toolbox: an introduction to Extended Events. Apesar da palestra conter o nome "Introduction", não se engane, foi um nível 400 dos bons! Depois de um início um pouco devagar, o Jonathan embalou e, com a ajuda de alguns desenvolvedores do time de produto responsáveis pelo ExEvents (que estavam sentados atrás da gente!), ajudou-nos a entender como a coisa funciona e parte do seu poder. Os eventos ainda não possuem uma boa documentação, sendo colunas de descrição nas tabelas sys.dm_xe_****** a única fonte de informação, mas desde a primeira vez que vi isso no SQL Server 2008, já pude notar o excelente nível de detalhamento (está documentado em um webcast!).
Para quem não sabe, os ExEvents são uma maneira de coletar informações detalhadas do SQL Server, mais leve que o SQL trace, com mais informações e excelente para troubleshooting. O potencial é enorme e pouca gente sabe disso, então é um assunto que está na minha pauta para ser detalhado no curso de internals e tuning. Para ajudar, o Jonathan montou uma ferramenta que está disponível no codeplex, chamada de Extented Events Information (um add-on do SSMS) que parece bem bacana, vale a pena conferir!

Para fechar o dia, fui assitir o Erik Veerman na sessão Data Profiling and Cleansing with Integration Services 2008. A sessão foi bem legal, nada muito aprofundado no funcionamento do SSIS (já que não era objetivo da sessão), mostrando principalmente algumas técnicas de limpeza usando fuzzy lookup e fuzzy grouping. Mas além de ver a ferramenta eu gosto das dicas que a experiência ensina e esse pessoal nos passa, como por exemplo: você poderia fazer o matching de todos os seus registros contra uma fonte específica usando o fuzzy lookup, mas se você fizer primeiro um lookup (que é exato) e depois somente aplicar o operador de fuzzy para os registros sem pares (no matching) seu pacote será mais otimizado! Mesmo usando dois operadores a mais, o de lookup comum e o union (que juntará a saída dos dois lookups), interessante não?

Depois de um dia cansativo no evento, tivemos a noite de confraternização do Summit, onde eles fecharam o GameWorks - loja de fliperama que fica ao lado do centro de convenções - e ficamos lá algums horas comendo, bebendo e jogando tudo o que der vontade, não preciso dizer que foi massa!

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

quarta-feira, 4 de novembro de 2009

SQLPASS Summit 2009 - Dia 02

Bom dia pessoal, pelo menos por aqui ainda é manhã!

Ontem tivemos oficialmente nosso primeiro dia de evento do SQLPASS 2009, com muitas sessões interessantes e bem difícil de escolher entre elas. Logo no café da manhã encontrei dois amigos da Microsoft, o André Hass e Luiz Felipe Pimenta, que também estão no evento.
Depois fomos para a general session, onde o Bob Muglia falou um pouco da história do SQL Server, inclusive mostrando a caixa de comercialização do SQL Server 4.2, bem divertido! O Ted Kummert entrou dando um foco muito grande no Win2008 R2 e SQL Server 2008 R2, com uma demo muito legal do SQL Server usando 64, 128 e 192 processadores, para trabalhar com uma carga gerada por eles, tudo regado a task manager e contadores. Incrível ver a máquina respondendo a essa massa crítica com uso de 90% em todos os 192 processadores.

Depois eles mostraram um recurso bem legal do R2 para gerenciamento de vários servidores, tudo atrelado ao PBM (Policy Based Management) com uma série de políticas "out of the box", onde você define os thresholds de alerta e monitoração. Um recurso que pode ser atrelado a essa funcionalidade do SSMS de gerenciamento é o Data Tier Component, onde você relaciona o banco de dados a uma aplicação, com deployment e atualzação feitos de forma integrada com o Visual Studio 2010 (no estilo do VSTSDBPro ou DataDude, mas melhorado), inclusive editando políticas para deploymento do projeto, como haver uma configuração específica no servidor, por exemplo. O interessante da definição desse Data Tier Component é que os dados de saúde coletados pelo SQL Server serão segmentados, então você pode ter uma visão macro ou uma mais detalhada.

Se não estou engando, no VS2010 o DBPro vai fazer parte do Professional e não ser mais uma SKU separada. Mas isso EU ACHO e ouvi faz muito tempo isso, mas não vou parar para pesquisar agora, então se alguém souber o roadmap do produto, me avise por favor. :-)

Depois disso foi mostrado o Live Migration, recurso do Hyper-V que permite movimentar uma máquina virtual para outro local sem que o workload de trabalho seja interrompido, isso mesmo, eles dispararam uma aplicação com múltiplas threads e enquanto o bichinho ficava lá trabalhando numa boa, a máquina era movida em background. Muito legal.

Depois da general session, eu assisti uma sessão que valeu a passagem para cá: Inside SQL Server Wait Types, nível 500 com o Bob Ward, principal escalation engineer na Microsoft. O cara foi fundo, como sempre (adoro apresentações dele) e mostrou como eles analisam muitos problemas com base nos wait types. Saí de lá quase chorando de emoção, foi MMMUUUIIITTTOOO boa a sessão.

Mudei meu cronograma para assistir uma sobre cluster: Implementing and supporting SQL Server 2008 cluster, pois depois que saí do time de PFEs da Microsoft eu perdi um pouco de contato com esse lado. Essa sessão foi um pouco estranha, algumas coisa interessantes e outras mais viajantes, o ruim foi que o apresentador não deu uma linha lógica para a sessão, saiu falando de um bocado de coisas relacionadas a clustering no SQL2008 e Win2008. Uma coisa que você aprende nos eventos é que não existe um mapeamento 1:1 entre um excelente profissional (o cara sabia muito) e uma boa apresentação, enão você passa a conhecer quem vale a pena ser ouvido com o tempo, mas sempre temos que arriscar.

Depois eu fui atrás de uma sessão de consolidação e virtualização, mas infelizmente ela havia mudado de horário, o que me fez correr para uma outra sessão: SQL Server Execution Plans - from compilation to caching and reuse, com Maciej Pilecki. Essa sessão também foi muito boa e como nos últimos meses eu já havia feito uma série de apresentações sobre o Plan Cache, inclusive abordando algumas coisas que ele não teve tempo, já estava carimbado no assunto. O bacana foi que eu consegui verificar algumas coisas que eu sempre comento e aprendi alguns pequenos detalhes muito divertidos, como analisar os atributos de um plano em cache para saber se outro usuário vai reutilizá-lo ou outra entrada será colocada em cache.

Por fim nós saímos todos de lá e fomos no campus e nova lojinha da Microsoft. Eu ainda não conhecia os novos prédios, pois no ano passado eles estavam em construção, e ficou tudo muito bonito, como sempre. Olhar o campus da Microsoft é sempre uma coisa que eu gosto, um ambiente bem legal e tudo arrumadinho, dá vontade de ficar lá para sempre, mas não foi para isso que vim aqui, então no próximo post eu volto para falar sobre o evento.

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

segunda-feira, 2 de novembro de 2009

PASS Summit 2009 - Pré-conferência

Vamos a um resumão do primeiro dia de evento aqui em Seattle...

Eu e o Fernando, outro SQLGeek que está aqui para o evento, chegamos no Washington conference center por volta de 7:30 e fizemos o registro no evento, depois de um lanchinho eu fui para a minha sessão pré-conferência: Care and feeding of the transaction log, com a famosa autora Kalen Delaney. O Fernando foi ouvir a Kimberly Tripp falando sobre indexação, espero que depois ele coloque mais informações no seu blog.

Nem preciso dizer que eu estava super ansioso pela sessão, mas acho que expectativa demais sempre é ruim. Em uma sala parcialmente cheia nós tivemos os seguintes tópicos sobre T-LOG:

- Log Internals
- Physical Log Management
- Restore and Recovery
- Logging Experinence
- Best and Wort Practices

O primeiro e segundo tópicos foram de uma profundidade razoável, falando um pouco sobre VLFs, log cíclico, DBCC LOGINFO, Truncate, etc. Aqui eu esperava ver mais detalhes sobre o T-LOG, mas acho que se ela aprofundasse mais o material seria considerado MS Only (interno da Microsoft). A discussão sobre quantidade de VLFs no log file foi interessante e ela disse que existe um post bacana da Kimberly sobre o assunto, que deve ser esse: http://www.sqlskills.com/BLOGS/KIMBERLY/post/Transaction-Log-VLFs-too-many-or-too-few.aspx. Parece que no SQL11 teremos um warning que irá nos avisar quando o número de VLFs chegar a mais de 1000, vamos ver se aparece mesmo.

Uma pergunta boa que passou sem resposta foi: porque o FSeqNo começa em 34 (ou outro número qualquer) quando um novo banco de dados foi criado?
Eu não tenho absoluta certeza do que vou dizer agora pois não busquei na documentação, mas acho que existe uma boa chance de eu estar certo... Todos os bancos de dados são criados seguindo o banco Model, que precisou do log para registrar as instruções em sua criação, usando VLFs e gerando FSeqNos. Quando criamos um novo banco ele leva a estrutura do Model, inclusive a informação do FSeqNo, por isso a numeração não começa no 1 (ou zero). Usando o SQL Server 2008 SP1 eu vejo o seguinte resultado, utilizando o DBCC LOGINFO na model e em um banco recém criado (respectivamente):

FileId FileSize StartOffset FSeqNo Status Parity CreateLSN
----------- -------------------- -------------------- ----------- -----------
2 253952 8192 17 0 128 0
2 262144 262144 18 2 128 0

FileId FileSize StartOffset FSeqNo Status Parity CreateLSN
----------- -------------------- -------------------- ----------- -----------
2 253952 8192 18 2 64 0
2 253952 262144 0 0 0 0

É interessante notar que a paridade muda, então não me parece uma cópia da informação, pois esse bit é alterado (64 ou 128) a cada novo uso do VLF.

No tópico Restore and Recovery vimos checkpoints, recovery, REDO, UNDO, backup e restore, com RECOVERY, NO_RECOVERY, COPY_ONLY e STANDBY. Muitas dúvidas sobre o assunto, algumas bem viajantes, outras não, que formam respondidas pela Kalen. Uma coisa que eu gostaria de ressaltar aqui é que os registros do log são escritos em disco SOMENTE quando uma transação é commitada ou checkpoint ocorre (e mais outros momentos, se não me engano), e não a todo momento em que uma instrução é executada. Isso é uma coisa que não é muito falada e eu mesmo acreditava no passado que a todo instante o SQL Server estava escrevendo no log, o que é errado.

Dentro todos os tópicos o mais legal foi quando discutimos logging experience, que falamos sobre os recovery models, onde houveram muitas perguntas e eu anotei alguns cenários que ficaram no ar para testar em casa. Deixo aqui uma referência que eu já havia dado uma olhada mas acho que deve ficar na lista de leitura de todos: The Data Loading Performance Guide (http://msdn.microsoft.com/en-us/library/dd425070.aspx).

Ela também falou um pouco sobre os comando DBCC LOG e FN_DBLOG, que já são conhecidos de quem brinca com o SQL Server faz um tempinho, então não sei se foi grande novidade para o pessoal na sala. No fim ela passou por uma lista de recomendações que devem ser lidas por todos, para vermos se não estamos esquecendo de alguma coisa.

Durante o evento ela falou sobre algoritmos de logging, aí eu lembrei de um paper interessante para os mais viciados: ARIES: a transaction recovery method supporting fine-granularity locking and partial rollbacks using write-ahead logging (http://portal.acm.org/citation.cfm?id=128770).

Uma dica que deixo aqui é a página da Kalen, onde ela publica dados sobre suas apresentações em conferências. Dê uma olhada em: http://insidesqlserver.com/conferences/.

Minha avaliação sincera, sem querer parecer um babaca:

No fim eu achei a sessão regular, pois estava com a expectativa lá no céu, afinal é a KALEN DELANEY, e já faz algum tempo que estudo o T-LOG, inclusive com alguns dados mais detalhados enquanto estava na Microsoft. Porém para aqueles que já possuem experiência com o produto, mas não ficam alucinados com Internals e lendo livros atrás de livros, a sessão foi excelente, para os iniciantes, ela seria boa, mas um pouco viajante.
Também esperava que a Kalen tivesse a mesma energia contagiante que a Kimberly têm em suas sessões, pois gosto de ver o apresentador se empolgando com o que está falando...

Estou aqui no keynote de abertura oficial do evento, depois mando novidades para todos.

[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm