Mostrando postagens com marcador Scripts. Mostrar todas as postagens
Mostrando postagens com marcador Scripts. Mostrar todas as postagens

quarta-feira, 24 de fevereiro de 2016

Script Powershell - Criar Data Collector Set

Não é de hoje que eu peço para meus clientes e alunos manterem um baseline do ambiente. E uma excelente forma de se ter uma visão geral do SQL Server e Sistema Operacional é através do Perfmon. Dito isso, há anos que mantenho um documento padrão com meu pedido de como criar o Data Collector Set e quais contadores devem ser capturados.

Recentemente aproveitei parte do tempo que estou dedicando para aprofundar no uso do Powershell e criei uma rotina simples, que ajuda no processo de criação do Data Collector Set.

O script chamado "Perfmon_CreateDataCollector.ps1" você encontra no repositório SQLServer em meu GitHub: https://github.com/luticm/SQLServer/blob/master/Powershell/Perfmon_CreateDataCollector.ps1. O script é autoexplicativo, abra o PS ISE e execute.

Obviamente muitos já devem ter formas diferentes de criar seu baseline, mas espero que esse script ajudar alguns de vocês.
Agradeço ao Edvaldo (http://edvaldocastro.com/), Raul e Rodrigo (http://thesqltimes.com/blog/), que acompanharam e ajudaram na evolução do script.

Por favor, testem o script e me contem se deu certo e, quando houver problema, me reportem para eu tentar melhorá-lo.

Se não quiser tocar na interface do Perfmon, depois de criar seu baseline use o logman.

> logman query
> logman -start nomeDC
> logman -stop nomeDC

Abraços

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

sexta-feira, 29 de junho de 2012

SQLServerDF - Material de Resource Governor

Olá visitante.
Na última terça-feira, dia 27/06/2012 eu fiz a apresentação sobre o Resource Governor para o grupo SQLServerDF. Tivemos um bom quórum (mais de 20 pessoas) e as discussões foram muito boas, o que mostra que a cada dia o grupo está ficando mais profissional e interativo, muito bom, muito bom mesmo.

O evento atrasou um pouco para começar devido a outro treinamento que estava acontecendo no auditório, o que também é interessante, pois o pessoal aproveita para bater um papo, fazer um networking e ainda de quebra assistimos o Amorim e o Ivan Lima disputando partidas de Fifa no XBOX 360. :-)

17:30h entramos em sala e durante as próximas 2 horas conversamos bastante sobre o Resource Governor e claro, muitas demos e todas em cima do SQL Server 2012, que trouxe algumas novidades para a funcionalidade. De quebra o Fabiano Amorim ainda fez uma demo sobre impacto do RG sobre o memory grant, hash warnings, ainda comentando sobre o temido hash bailout! Nível 400!

Coloquei o material no skydrive para download:
PDF da apresentação
Demos de Resource Governor


Até um próximo encontro do SQLServerDF! E por falar nisso eu preciso definir o tema e quando acontecerá...

[]s

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

terça-feira, 15 de maio de 2012

SQLServerDF - Material do evento sobre xEvents


Hoje nós realizamos o 13o encontro do grupo SQLServerDF, onde fiz uma apresentação de  2 horas sobre xEvents. Publiquei no skydrive o PDF e os scripts utilizados na apresentação. Você pode fazer o download aqui.

Extended Events deve ser um dos recursos mais fantásticos, porém menos utilizados do SQL Server. Muitas vezes acostumamos com uma maneira de atacar um problema e esquecemos que podem existir abordagens mais eficientes, o que é uma pena.

Poder apresentar para o grupo e ter a chance de estudar mais a fundo tecnologia, é um daqueles momentos onde você se questiona porque não está utilizando todo dia o xEvents. A partir de agora eu, e espero que o restante do grupo, possa explorar a fundo este recurso, principalmente no SQL Server 2012.

Até um próximo encontro do grupo!
[]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

quinta-feira, 4 de março de 2010

Quais consultas estão utilizando meu índice

Estou dando uma olhada nos scripts que temos como referência para a reunião do SQLServerDF que vai rolar hoje e, por coincidência, um amigo me pegou no messenger para fazer a seguinte pergunta: "Como sei quais são as consultas que estão usando determinado índice?".

Note que ele não quer saber quais são os índices mais ou menos usados (isso temos fácil por DMVs e ele sabe disso), ele quer saber COMO o índice está sendo utilizado.

A maneira que me veio a cabeça foi consultar o plan cache para descobrir os planos de execução que temos guardados e, através do XML, descobrir aqueles que possuem em seu plano o índice que você está analisando.

Para colocar alguma coisa em cache, use o AdventureWorks e faça a consulta "SELECT * FROM Sales.SalesOrderDetail", que vai fazer um scan no índice PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID. Feito isso você já pode consultar a cache de procedimentos para saber quem está usando o índice em questão, usando por exemplo, a consulta (tosca, ok!) abaixo:

SELECT *
FROM sys.dm_exec_cached_plans as ECP
CROSS APPLY sys.dm_exec_query_plan(ECP.plan_handle) AS EQP
CROSS APPLY sys.dm_exec_sql_text(ECP.plan_handle) AS EST
WHERE CAST(EQP.query_plan as varchar(max))
like '%PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID%'


O problema dessa consulta não está somente na ineficiência, mas por procurar pela string, você pode encontrar consultas que não utilizam o índice mas fazem menção ao nome, como essa que acabamos de executar.

Dando uma rápida olhada no XML dos planos de execução, podemos escrever uma consultinha utilizando o método exist() do tipo XML.

SELECT
*,
CASE
EQP.query_plan.exist(N'//*:Object[@Index eq "[PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID]"]')
WHEN 1 THEN 'Usa o índice'
WHEN 0 THEN 'Não usa o índice'
ELSE 'XML é NULL'
END
FROM sys.dm_exec_cached_plans as ECP
CROSS APPLY sys.dm_exec_query_plan(ECP.plan_handle) AS EQP
CROSS APPLY sys.dm_exec_sql_text(ECP.plan_handle) AS EST


Essa consulta analisa cada plano existente procurando pelo elemento Object (em qualquer posição/namespace no XML) que possua o atributo "Index=[NomeIndice]". Com essa consulta conseguimos tirar os casos onde o nome do índice não é usado no plano efetivamente.

Você também poderia usar o exist() no where da sua consulta.

SELECT
*
FROM sys.dm_exec_cached_plans as ECP
CROSS APPLY sys.dm_exec_query_plan(ECP.plan_handle) AS EQP
CROSS APPLY sys.dm_exec_sql_text(ECP.plan_handle) AS EST
WHERE EQP.query_plan.exist(N'//*:Object[@Index eq "[PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID]"]') = 1

Legal né?
Tenho que colocar um disclaimer aqui, eu não sei de cabeça o schema (XSD) que rege o XML dos planos de execução, então escrevi consultas genéricas que me parecem funcionar corretamente, mas pode ser que algum caso ou outro fuja a regra. Se você se deparar com isso, conte para nós!
A consulta não é eficiente, mas como você não vai ficar rodando isso a todo momento, serve de base para brincarmos um pouco com o SQL Server.

Com isso vemos claramente que, com a enorme quantidade de informações que o SQL Server nos oferece, basta usarmos um pouco a criatividade para resolver nossos problemas.

[]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, 31 de agosto de 2009

TechEd 2009 - Arquivos da sessão DBP402

Olá pessoal, tudo bem?
Depois de muita correira nas últimas semanas, por conta do TechEd e alguns projetos que eu estou tocando, volto ao blog para deixar - como prometi - os scripts e PPT utilizados na sessão (DBP402) Dicas e truques - Torne suas queries mais rápidas e eficientes.

Baixe o conteúdo aqui.
ou


Para quem não viu neste blog ou não estava no evento, nesse ano eu fiz duas sessões, uma sobre SQL Server Integration Services e outra sobre tuning e melhores práticas do SQL Server. As duas sessões estavam bastante cheias, abusei de demos (gosto disso!) e acho que o pessoal gostou, eu pelo menos me diverti muito, pena não ter mais uma 1:30h de palestra para dar tempo de ver tudo que eu preparo a mais (vai que dá tempo, né?)...

Amanhã publico o PPT da outra sessão e os arquivos de demo da bendita virão na forma de screencasts, pois quem assistiu viu que a coisa é divertida. Fiquem ligados.

[]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, 17 de junho de 2009

Arquivos do webcast - SQL Server 2008 ShowCase

Já faz alguns dias eu participei de um webcast da comunidade apoiado pelo MSDN Brasil, onde abordei o tema "Introdução a análise de desempenho de consultas". Esse webcast foi gravado e está disponível aqui: https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=pt-BR&EventID=1032414704&CountryCode=BR

Na descrição somente aparece o nome do Marcelo Sinic, mas como foi um evento 3 em 1, existe mais gente por detrás do webcast. Minha parte é a terceira, então você pode ir assistindo aos outros até chegar na minha vez, que começa por volta de 1h 54min. :-)

Os scripts que eu utilizei e o PPT estão disponíveis para download no meu skydrive.





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

Arquivos do último webcast para download

No dia 03 de junho eu gravei um webcast para o MSDN com o tema "SQL Server 2008 - Procedimentos, planos de execução, cache e compilação". Para quem não viu, a gravação está disponível no media center do MSDN em https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=pt-BR&EventID=1032417229&CountryCode=BR.

Como o assunto é bem detalhado, o webcast nunca sai igual a uma apresentação presencial, mas acho que o resultado final foi interessante. Como houveram poucas perguntas, no fim fiquei com a sensação de que alguns ouvintes estavam um pouco perdidos... espero que eu esteja errado. :-)

Quer baixar o PPT juntamente com o script que eu utilizei na apresentação? Faça o download através do meu skydrive.





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