Bom dia pessoal.
Devido ao nascimento do meu filho eu não consegui me acertar ao novo ritmo e participar do WOTD (http://www.online.techday.net.br/), um belo evento que aconteceu hoje.
Minha sessão seria: "Otimizando carga de dados com o SSIS e SQL Server". Então para não deixar na mão os que haviam se cadastrado e cumprir o acordado, eu vou marcar um novo horário em novembro e apresentar o meu tema. Será através de uma sessão de live meeting que abrirei (e provavelmente vou passar da hora regulamentar! hahaha).
Fique ligado neste blog e no twitter, pois farei o anúncio em breve.
Me desculpem qualquer transtorno.
[]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')
sábado, 30 de outubro de 2010
quarta-feira, 27 de outubro de 2010
Bernardo
Oi. Não é do meu feitio, mas segue um post pessoal.
Dia 25/10/2010 15:19 nasceu meu primeiro filho, o Bernardo.
Todos comentam da emoção de ser pai, mas não adianta falar, é algo indescritível. Nada chega ao pés de você ver seu filho nascer, segurá-lo no colo e sentir que ele está seguro com você.
Sempre desejamos um mundo melhor, e nesse momento você quer se empenhar mais, ser uma pessoa cada vez melhor, tudo para garantir que seu filho ficará seguro e sempre feliz.
Segue uma foto do meu pequeno, algumas horas depois de nascer.
Dia 25/10/2010 15:19 nasceu meu primeiro filho, o Bernardo.
Todos comentam da emoção de ser pai, mas não adianta falar, é algo indescritível. Nada chega ao pés de você ver seu filho nascer, segurá-lo no colo e sentir que ele está seguro com você.
Sempre desejamos um mundo melhor, e nesse momento você quer se empenhar mais, ser uma pessoa cada vez melhor, tudo para garantir que seu filho ficará seguro e sempre feliz.
Segue uma foto do meu pequeno, algumas horas depois de nascer.
Não vou esticar aqui e escrever um post muito babão, mas espero que todos possam viver a emoção de ser pai um dia.
Vamos aos poucos construir um mundo melhor para todos nós...
[]s
Luciano Caixeta Moreira - {Luti}
sexta-feira, 22 de outubro de 2010
Backups de dados vs. Cache de dados
Quer uma formação decente (cansei de brigar com o Blogger vs Live Writer, Word 2010, etc)? Baixe o PDF. :-)
Será que o SQL Server utiliza as páginas que estão em cache para acelerar a realização do backup?
É uma pergunta que já me fizeram algumas vezes, então resolvi colocar um script bem simples para mostrar qual é a resposta à pergunta.
Por simplicidade eu vou colocando os scripts com comentários, então você pode ir acompanhando o que estou fazendo. Em primeiro lugar que tal criarmos um banco para nosso teste e tirarmos um backup para padronizar a brincadeira.
USE
Master
go
-- DROP Database BackupCache
-- Vamos criar uma estrutura simples para brincar...
CREATE
DATABASE BackupCache
go
USE BackupCache
go
CREATE
TABLE TabelaDados
(Codigo INT
IDENTITY(1,1) NOT NULL,
Texto VARCHAR(8000) NOT NULL)
GO
INSERT
INTO TabelaDados
(Texto) VALUES (REPLICATE('Sr. Nimbus', 1000))
go 1000
-- Cria um primeiro backup para deixar o exemplo padronizado
BACKUP
DATABASE BackupCache
TO DISK = 'C:\Temp\BackupCache.bkp'
WITH INIT, Format
go
Como podemos analisar se os dados estão sendo lidos do arquivo físico? Claro, sys.dm_io_virtual_file_stats!
-- Agora vamos a análise
-- Primeiro criamos uma tabela para armazenar filestats...
-- DROP TABLE FileStats
select *, SYSDATETIME() as Hora
INTO FileStats
from sys.dm_io_virtual_file_stats(null,
null) where 1=2
SELECT *
FROM FileStats
-- Qual nosso backup id?
select DB_ID()
-- = 46
-- O arquivo que me interessa mais é o 1 = MDF
SELECT *, SYSDATETIME()
from sys.dm_io_virtual_file_stats(46, null)
Se o backup estiver lendo os dados diretamente do disco vamos ver a quantidade de bytes lidos (num_of_bytes_read) aumentando, então para esse artigo eu estou me preocupando mais com o MDF. Primeiro vamos fazer um teste limpando primeiro a cache de dados...
-- Em um primeiro momento, vamos fazer um backup com a cache fria
DBCC DROPCLEANBUFFERS
INSERT INTO FileStats
SELECT *, SYSDATETIME()
from sys.dm_io_virtual_file_stats(46, null)
-- 1189 pages
BACKUP DATABASE BackupCache
TO DISK = 'C:\Temp\BackupCache.bkp'
WITH INIT, Format
/*
Processed 1184 pages for database 'BackupCache', file 'BackupCache' on file 1.
Processed 5 pages for database 'BackupCache', file 'BackupCache_log' on file 1.
BACKUP DATABASE successfully processed 1189 pages in 1.216 seconds (7.633 MB/sec).
*/
INSERT INTO FileStats
SELECT *, SYSDATETIME()
from sys.dm_io_virtual_file_stats(46, null)
go
Analisando a saída da DMV conseguimos ver que foram lidos 9953280 bytes, exatamente 1215 páginas. Um pouco a mais que o número de páginas processadas, talvez páginas lidas duas vezes ou algo que não vai para backup. O importante aqui é que as páginas foram lidas diretamente do arquivo físico.
Agora vamos testar com as páginas de dados em cache.
-- E se as páginas de dados já estiverem em cache?
-- Notem que o backup NÃO colocou as páginas em cache
select
*
from
sys.dm_os_buffer_descriptors
where database_id = 46
select
*
from TabelaDados
-- 1067 páginas em cache (o número pode variar)
select
*
from
sys.dm_os_buffer_descriptors
where database_id = 46
-- Agora vamos ao backup...
INSERT
INTO FileStats
SELECT
*,
SYSDATETIME()
from
sys.dm_io_virtual_file_stats(46,
null)
-- 1189 pages
BACKUP
DATABASE BackupCache
TO
DISK
=
'C:\Temp\BackupCache.bkp'
WITH
INIT, Format
/*
Processed 1184 pages for database 'BackupCache', file 'BackupCache' on file 1.
Processed 2 pages for database 'BackupCache', file 'BackupCache_log' on file 1.
BACKUP DATABASE successfully processed 1186 pages in 1.442 seconds (6.422 MB/sec).
*/
INSERT
INTO FileStats
SELECT
*,
SYSDATETIME()
from
sys.dm_io_virtual_file_stats(46,
null)
go
Fazendo novamente o cálculo com base nas leituras físicas que foram feitas...
-- Analisando as duas últimas entradas do arquivo de dados (BytesRead)
PRINT (38912000 - 29212672)
= PRINT 9699328 / 8192 = 1184 páginas
-- Foram lidas 1184 páginas do arquivo físico.
-- Alguma página que estava em memória foi utilizada? NÃO!
Então aqui já temos nossa resposta, mas só para deixar a coisa mais divertida, e se tivermos páginas sujas em cache?! Primeiro deixamos as páginas sujas (notem que já foi feito o flush de muitas algumas páginas alteradas, o que já forçou escritas no arquivo e isso pode ser confirmado pelo file stats) e depois realizamos o backup.
-- E com dirty pages? Veja coluna is_modified
select
*
from
sys.dm_os_buffer_descriptors
where database_id = 46
AND is_modified = 1
UPDATE TabelaDados
SET Texto =
REPLICATE('Sr! Nimbus', 1000)
-- Flush de dirty pages foi feito e sobraram N páginas sujas... (313 no meu caso)
select
*
from
sys.dm_os_buffer_descriptors
where database_id = 46
AND is_modified = 1
go
-- Agora vamos ao backup...
INSERT
INTO FileStats
SELECT
*,
SYSDATETIME()
from
sys.dm_io_virtual_file_stats(46,
null)
BACKUP
DATABASE BackupCache
TO
DISK
=
'C:\Temp\BackupCache.bkp'
WITH
INIT, Format
/*
Processed 1184 pages for database 'BackupCache', file 'BackupCache' on file 1.
Processed 2 pages for database 'BackupCache', file 'BackupCache_log' on file 1.
BACKUP DATABASE successfully processed 1186 pages in 1.322 seconds (7.005 MB/sec).
*/
INSERT
INTO FileStats
SELECT
*,
SYSDATETIME()
from
sys.dm_io_virtual_file_stats(46,
null)
go
select
*
from FileStats
-- Analisando as duas últimas entradas do arquivo de dados (BytesRead)
PRINT (48611328 - 38912000)
= PRINT 9699328 / 8192 = 1184 páginas
Analisando os file stats, vemos novamente que o SQL Server leu as páginas do disco! Hhuumm, e as páginas sujas que estavam em memória? Sumiram! Of course my horse, o backup disparou um checkpoint que fez um flush das páginas sujas! Duvida? Veja o log de transação.
-- Aonde foram parar mas minhas páginas sujas??? Somente 4 páginas?
-- Sim, lembra que o backup executa um checkpoint? Flush foi feito...
select
*
from
sys.dm_os_buffer_descriptors
where database_id = 46
AND is_modified = 1
/*
72057594039894016 DATA_PAGE
281474978283520 DATA_PAGE
6488064 FILEHEADER_PAGE
6488064 DIFF_MAP_PAGE
*/
-- O que, não acredita?
SELECT
*
FROM
fn_dblog(null,
null)
/*
Viu o BEGIN_CKPT e END_CKPT?
00000084:00000131:003a LOP_BEGIN_CKPT LCX_NULL
00000084:00000148:0001 LOP_END_CKPT LCX_NULL
00000084:00000149:0001 LOP_BEGIN_XACT LCX_NULL
00000084:00000149:0002 LOP_MODIFY_COLUMNS LCX_CLUSTERED
00000084:00000149:0003 LOP_PREP_XACT LCX_NULL
00000084:0000014a:0001 LOP_COMMIT_XACT LCX_NULL
00000084:0000014b:0001 LOP_FILE_HDR_MODIFY LCX_FILE_HEADER
00000084:0000014b:0002 LOP_MODIFY_ROW LCX_BOOT_PAGE_CKPT
00000084:0000014b:0003 LOP_MODIFY_ROW LCX_BOOT_PAGE_CKPT
00000084:00000150:0001 LOP_BEGIN_XACT LCX_NULL
00000084:00000150:0002 LOP_SET_BITS LCX_DIFF_MAP
00000084:00000150:0003 LOP_INSERT_ROWS LCX_HEAP
00000084:00000150:0004 LOP_INSERT_ROWS LCX_HEAP
00000084:00000150:0005 LOP_COMMIT_XACT LCX_NULL
Ô curioso, se você olhar no log as páginas que sofreram alterações, vai ver 4 páginas.
Nossa, que coincidência com o buffer descriptors! HAHAHAHA. Lindo.
*/
Resumindo a brincadeira, os backups do SQL Server vão ler diretamente as páginas que estão em disco e NÃO vão usar as páginas que estão em cache, independentemente de você tiver 64GB de dados já em memória. Então você deve tomar cuidado com os backups de dados durante o dia, pois eles podem sim impactar diretamente seu subsistema de discos.
Espero que você tenha se divertido.
[]s
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
http://www.srnimbus.com.br/
Marcadores:
Backup,
IO,
Perguntas,
SQL Server
quarta-feira, 13 de outubro de 2010
24 horas de SQL Server = 24H PASS LATAM
Bom dia pessoal.
Na próxima semana eu estou vou fazer mais uma apresentação virtual para todos aqueles que gostam de SQL Server e SSIS. E o melhor, não sou só eu quem vai falar, na verdade outros 23 feras de SQL Server também estarão falando sobre SQL Server 2008 (e R2).
O evento é uma organização do PASS (Professional Association for SQL Server - http://www.sqlpass.org/) na América Latina. Os detalhes do evento e toda as sessões você pode conferir aqui: http://www.sqlpass-latam.org/24horas.aspx.
Minha apresentação
Título: Padrões de pacotes no SSIS
Descrição: Não falamos muito de padrões de projetos e padrões de arquitetura? Por que não falar sobre padrões de pacotes no SSIS? Nessa sessão eu quero falar um pouco sobre a possibilidade de se reutilizar estruturas comuns para pacotes no SSIS e propor alguns padrões que eu tenho encontrado enquanto estou trabalhando com o Integration Services. Claro que não sou um Fowler ou Gamma, muito longe disso, mas se conseguir com a sessão incentivar alguma coisa em torno do assunto, será muito interessante.
Gostou da proposta? Então pare uma horinha e participe da sessão!
NOTA: As sessões estão marcadas para um horário e nosso fuso está três horas a frente deles, então quando a sessão que se inicia 7:00h para Brasília será 10:00h. Com isso minha sessão será 15:00h amanhã.
[]s
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
Na próxima semana eu estou vou fazer mais uma apresentação virtual para todos aqueles que gostam de SQL Server e SSIS. E o melhor, não sou só eu quem vai falar, na verdade outros 23 feras de SQL Server também estarão falando sobre SQL Server 2008 (e R2).
O evento é uma organização do PASS (Professional Association for SQL Server - http://www.sqlpass.org/) na América Latina. Os detalhes do evento e toda as sessões você pode conferir aqui: http://www.sqlpass-latam.org/24horas.aspx.
Minha apresentação
Título: Padrões de pacotes no SSIS
Descrição: Não falamos muito de padrões de projetos e padrões de arquitetura? Por que não falar sobre padrões de pacotes no SSIS? Nessa sessão eu quero falar um pouco sobre a possibilidade de se reutilizar estruturas comuns para pacotes no SSIS e propor alguns padrões que eu tenho encontrado enquanto estou trabalhando com o Integration Services. Claro que não sou um Fowler ou Gamma, muito longe disso, mas se conseguir com a sessão incentivar alguma coisa em torno do assunto, será muito interessante.
Gostou da proposta? Então pare uma horinha e participe da sessão!
NOTA: As sessões estão marcadas para um horário e nosso fuso está três horas a frente deles, então quando a sessão que se inicia 7:00h para Brasília será 10:00h. Com isso minha sessão será 15:00h amanhã.
[]s
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
Marcadores:
Eventos,
SQL Server,
SSIS,
Virtual
quinta-feira, 7 de outubro de 2010
Oportunidade Nimbus: Desenvolvedor de soluções na plataforma Microsoft .NET
A Sr. Nimbus é uma empresa de pequeno porte especializada em consultoria e treinamento na plataforma de desenvolvimento Microsoft. Um de nossos objetivos é auxiliar nossos clientes a atingirem o seu potencial máximo no uso das ferramentas desta plataforma. Para isto, temos que ter uma equipe bem preparada e experiente. E um de nossos desejos é conseguir este tipo de profissional através de nossas “categorias de base”: realizar a preparação e orientação de profissionais promissores, mas ainda sem grande contato com o mercado.
Nosso processo de trabalho emprega as seguintes disciplinas:
Se você se interessou, mande seu currículo para gilberto.uchoa@srnimbus.com.br.
Abraços
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
Nosso processo de trabalho emprega as seguintes disciplinas:
- Framework para gerenciamento de projetos: SCRUM (http://www.scrum.org/scrumguides/);
- Automação do ciclo de desenvolvimento de software: Microsoft Team Foundation Server 2010 (http://msdn.microsoft.com/en-us/library/fda2bad5.aspx);
- Desenvolvimento de aplicação para o Windows Azure (http://www.microsoft.com/windowsazure/)
- Desenvolvimento ASP.NET;
- TDD – Test-Driven Development (http://www.agiledata.org/essays/tdd.html);
- Microsoft Visual Studio 2010 como ambiente de desenvolvimento.
Estamos com uma vaga aberta na área de desenvolvimento de soluções. Os pré-requisitos da vaga são:
- Experiência em desenvolvimento C#.
- Experiência em desenvolvimento ASP.NET.
Nosso objetivo para este profissional é a formação de um consultor especializado nas principais tecnologias das plataformas de desenvolmimento Microsoft: .NET Framework, Windows Azure e SharePoint. A formação envolverá cursos, self-study, shadowing de nossos consultores sêniores nos seus atendimentos, além de, é claro, muita “mão-na-massa”.
Se você se interessou, mande seu currículo para gilberto.uchoa@srnimbus.com.br.
Abraços
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
Marcadores:
Desenvolvimento,
Sr.Nimbus,
Vagas
sexta-feira, 1 de outubro de 2010
SQL Server 2008 R2 install - Could Not Find Database Engine Startup Handle
Hoje eu resolvi montar uma nova VM e comecei pela instalação do SQL Server 2008 R2 em uma máquina virtual. Estou rodando o VirtualPC 2007 SP1 no Win 7 x64 e a máquina virtual está rodando o Windows Server 2008.
Seguindo normalmente a instalação que já fiz 48934932 vezes, tudo ia bem até que “Could Not Find Database Engine Startup Handle”. As ferramentas eram instaladas, mas a engine relacional nada. Fiz alguns testei, mudei algumas coisas e nada! Sempre que tentava instalar o SQL Server ele parava no mesmo ponto.
Pesquisando um pouco encontrei este artigo que me foi útil: http://www.msbicentral.com/Resources/Articles/tabid/88/articleType/ArticleView/articleId/80/FLASH-SQL-Server-2008-R2-Error-Could-Not-Find-Database-Engine-Startup-Handle.aspx.
Para não queimar uma mídia peguei o ISO, fiz um extract com o WinRar e copiei os arquivos para dentro da VM. Reiniciei a instalação e tudo funcionou perfeitamente.
Espero que possa ajudar.
[]s
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
Seguindo normalmente a instalação que já fiz 48934932 vezes, tudo ia bem até que “Could Not Find Database Engine Startup Handle”. As ferramentas eram instaladas, mas a engine relacional nada. Fiz alguns testei, mudei algumas coisas e nada! Sempre que tentava instalar o SQL Server ele parava no mesmo ponto.
Pesquisando um pouco encontrei este artigo que me foi útil: http://www.msbicentral.com/Resources/Articles/tabid/88/articleType/ArticleView/articleId/80/FLASH-SQL-Server-2008-R2-Error-Could-Not-Find-Database-Engine-Startup-Handle.aspx.
Para não queimar uma mídia peguei o ISO, fiz um extract com o WinRar e copiei os arquivos para dentro da VM. Reiniciei a instalação e tudo funcionou perfeitamente.
Espero que possa ajudar.
[]s
Luciano Caixeta Moreira - {Luti}
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
www.srnimbus.com.br
Assinar:
Postagens (Atom)