Bom dia pessoal.
Mora em Brasília? É desenvolvedor ou DBA e quer aprimorar o seu T-SQL?
No dia 23/03 eu vou começar aqui em Brasília um intensivão T-SQL de 40 horas para aqueles que querem afiar seus conhecimentos e se tornarem melhores programadores T-SQL. A turma é fechada e pequena (máximo de 6 alunos), para ganharmos em produtividade e podermos ter discussões profundas, e vou compactar os nossos cursos SQL01 e SQL02~(você terá acesso a todo material e labs). Então se você não têm tempo a perder e quer eficiência no aprendizado... cá estamos!
Se tiver interesse em participar, envie um e-mail para mim.
[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
SELECT CAST (power(CrazyIdeas, Curiosity) * (RealLifeExperience + MyMistakes)) / FreeTime) AS VARCHAR(MAX)) FROM MyBrain WITH (NOLOCK, INDEX('idx_Neuron')) WHERE ThingsIThinkIKnow in ('SQL Server', 'DB2', '.NET', 'Cloud')
quinta-feira, 11 de março de 2010
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
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]
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
Marcadores:
Plan Cache,
Scripts,
SQL Server,
XML
quinta-feira, 25 de fevereiro de 2010
Você participaria de um treinamento online da Sr. Nimbus?
Falaê polvo.
Com boa frequência discutimos na Sr. Nimbus algumas abordagens diferentes que podemos utilizar para alcançarmos as pessoas que estão longe e estamos olhando com carinho para treinamentos online, mas também com receios.
No fim de Janeiro eu tive a oportunidade de ministrar o curso do SQL 2008 Internals em SP e com um resultado excelente, voltei super empolgado para Brasília, mas depois bateu uma pequena deprê.
Por um lado eu sei que é um material que não se encontra por aí e dedico muito para melhorá-lo, mas sei que talvez ele nunca chege a alguém lá no "interior" do país, e isso me deixa frustado.
É uma droga trabalhar diariamente sobre os treinamentos (já são 8 de SQL Server 2008) para incluir novos e melhores exemplos, colocar comentários, explicações, links, ajustar imagens, enfim, constamente correr atrás da excelência e não conseguir atender aos pedidos que chegam na minha caixa de e-mail. Pessoal fora de BSB e das grande capitais, estou pensando em vocês (sem gracinhas, ok!).
Então criei um pool neste blog para ver quem participaria de um treinamento online, mas o que eu quero ouvir mesmo são comentários. O que é essencial para você? O que faria o treinamento online realmente valer a pena?
Eu vejo vários pontos positivos, sendo o maior deles, conseguir atender um dos meus desejos com a empresa: Mostrar aos interessados como usar de forma eficiente a tecnologia em nossas mãos. E ainda teríamos:
- Flexibilidade de horário (forneceríamos as gravações para alguém que não conseguiu aparecer na hora).
- Menor custo com a logísitica
- Atingir pontos remotos e escalabilidade
- Etc.
Por outro lado, estamos com receio (é medo mesmo) de esbarramos em uma série de problemas:
- Banda larga sucateada no país
- Conseguir uma boa experiência
- Superar a imagem de que treinamento online = online bullshit and enrolation.
- Atender a demanda offline
Estamos pensando sério nessa possibilidade e gostaria de ouvir o que vocês pensam sobre treinamentos online.
GO OR NO GO?!
Espero que um sonoro "GO GEEK GO"!
[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
Com boa frequência discutimos na Sr. Nimbus algumas abordagens diferentes que podemos utilizar para alcançarmos as pessoas que estão longe e estamos olhando com carinho para treinamentos online, mas também com receios.
No fim de Janeiro eu tive a oportunidade de ministrar o curso do SQL 2008 Internals em SP e com um resultado excelente, voltei super empolgado para Brasília, mas depois bateu uma pequena deprê.
Por um lado eu sei que é um material que não se encontra por aí e dedico muito para melhorá-lo, mas sei que talvez ele nunca chege a alguém lá no "interior" do país, e isso me deixa frustado.
É uma droga trabalhar diariamente sobre os treinamentos (já são 8 de SQL Server 2008) para incluir novos e melhores exemplos, colocar comentários, explicações, links, ajustar imagens, enfim, constamente correr atrás da excelência e não conseguir atender aos pedidos que chegam na minha caixa de e-mail. Pessoal fora de BSB e das grande capitais, estou pensando em vocês (sem gracinhas, ok!).
Então criei um pool neste blog para ver quem participaria de um treinamento online, mas o que eu quero ouvir mesmo são comentários. O que é essencial para você? O que faria o treinamento online realmente valer a pena?
Eu vejo vários pontos positivos, sendo o maior deles, conseguir atender um dos meus desejos com a empresa: Mostrar aos interessados como usar de forma eficiente a tecnologia em nossas mãos. E ainda teríamos:
- Flexibilidade de horário (forneceríamos as gravações para alguém que não conseguiu aparecer na hora).
- Menor custo com a logísitica
- Atingir pontos remotos e escalabilidade
- Etc.
Por outro lado, estamos com receio (é medo mesmo) de esbarramos em uma série de problemas:
- Banda larga sucateada no país
- Conseguir uma boa experiência
- Superar a imagem de que treinamento online = online bullshit and enrolation.
- Atender a demanda offline
Estamos pensando sério nessa possibilidade e gostaria de ouvir o que vocês pensam sobre treinamentos online.
GO OR NO GO?!
Espero que um sonoro "GO GEEK GO"!
[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
Conteúdo do webcast sobre WCF Data Services
Hoje eu gravei outro webcast para o MSDN, "O que há de novo no WCF (ADO.NET) Data Services", onde falei um pouco da direção que a tecnologia está tomando, sobre REST, OData, novidades, arquitetura e um pouco de futuro, recheando o conteúdo com uma demo relativamente longa.
No fim eu acho que o pessoal gostou e foi 1:30h bem divertida. Se você perdeu a sessão, o vídeo estará no media center do MSDN (https://www.msdnbrasil.com.br/mediacenter/Default.aspx) em dois dias úteis.
Conforme prometido, aqui estão os arquivos do webcast de hoje: http://cid-e145f7753042d628.skydrive.live.com/self.aspx/Public/BlogPosts/20100225%20-%20WCF%20Data%20Services.zip
Até o próximo webcast, em Março.
[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
No fim eu acho que o pessoal gostou e foi 1:30h bem divertida. Se você perdeu a sessão, o vídeo estará no media center do MSDN (https://www.msdnbrasil.com.br/mediacenter/Default.aspx) em dois dias úteis.
Conforme prometido, aqui estão os arquivos do webcast de hoje: http://cid-e145f7753042d628.skydrive.live.com/self.aspx/Public/BlogPosts/20100225%20-%20WCF%20Data%20Services.zip
Até o próximo webcast, em Março.
[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
Marcadores:
Astoria,
Data Services,
Download,
MSDN,
Webcast
quarta-feira, 24 de fevereiro de 2010
Webcast - WCF Data Services
De última hora...
Amanhã eu farei um webcast sobre o WCF (antigo ADO.NET) Data Services, onde vou falar um pouco de REST, OData e um pouco do que o futuro nos reserva, também aproveitando para mostrar algumas novidades do WCF Data Services (demos included), utilizando claro, o Visual Studio 2010 RC.
As informações para o webcast do MSDN estão aqui:
https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032440163&EventCategory=4&culture=pt-BR&CountryCode=BR
Nos vemos amanhã.
[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
Amanhã eu farei um webcast sobre o WCF (antigo ADO.NET) Data Services, onde vou falar um pouco de REST, OData e um pouco do que o futuro nos reserva, também aproveitando para mostrar algumas novidades do WCF Data Services (demos included), utilizando claro, o Visual Studio 2010 RC.
As informações para o webcast do MSDN estão aqui:
https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032440163&EventCategory=4&culture=pt-BR&CountryCode=BR
Nos vemos amanhã.
[]s
Luciano Caixeta Moreira - {Luti}
Chief Innovation Officer
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm
Marcadores:
Astoria,
Data Services,
MSDN,
WCF,
Webcast
Assinar:
Postagens (Atom)

