Arquivo

Archive for maio \30\UTC 2012

Coursera.org

30/05/2012 1 comentário

O site https://www.coursera.org/ oferece cursos de diversas matérias (Humanities and Social Sciences, Healthcare, Medicine, and Biology, Computer Science, etc.) de grandes faculdades do mundo todo como Stanford University, University of Michigan, etc. E os professores responsáveis pelos cursos também são muito bem conceituados.
E muito interessante: DE GRAÇA.

A lista completa de cursos está em https://www.coursera.org/courses.

Aproveitem

Categorias:Dicas, Eventos

Agile Programming

Categorias:Bla bla bla

Visual Studio – Componente DPACK

Não sei como consegui viver sem o componente DPACK. Ele trás pequenas melhorias na IDE para alavancar o seu trabalho. Para baixar basta clicar em Tools -> Extension Manager e procurar na aba “Online Gallery” por “DPACK”.

As principais melhorias são:

Comando Alt + U você consegue procurar qualquer arquivo na sua solução e ele indica em qual pasta está. Para eu que trabalho com solutions que tem mais de 100 projetos, é muito útil.

Um botão “Collapse All Projects” para quando você quer fechar todas as pastas, projetos, subpastas.

Botão para fechar todos os arquivos abertos na IDE

DPACK vale a pena e ajuda muito no dia a dia.

Ordem de execução de Triggers no SQL

22/05/2012 1 comentário

Estou trabalhando com o desenvolvimento de triggers no SQL Server e achei o texto abaixo sobre como configurar a ordem em que elas são executadas. Segue o texto e o link relacionado:

O primeiro e o último gatilho AFTER a serem executados em uma tabela podem 
ser especificados com o uso de sp_settriggerorder. Somente um primeiro e 
um último gatilho AFTER para cada operação INSERT, UPDATE e DELETE podem 
ser especificados em uma tabela. Se houver outros gatilhos AFTER na mesma 
tabela, eles serão executados aleatoriamente.

 

http://msdn.microsoft.com/pt-br/library/ms189799.aspx

SQL Server – Most Expensive Querys

Vale a pena lembrar e ter essa query sempre próxima. Ela retorna as queryes mais custosas para o banco, ou seja, que estão utilizando mais recurso da máquina.

SELECT TOP 10 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_logical_reads DESC -- logical reads
-- ORDER BY qs.total_logical_writes DESC -- logical writes
-- ORDER BY qs.total_worker_time DESC -- CPU time

Teste de performance no SQL (via desenvolvedor)

Uma das coisas que sempre devemos tomar cuidado é no momento de criar um select, view, delete, procedure, view no banco de dados. Assim como outros desenvolvedores, a gente acaba tendo o perfil de desenvolver a procedure (por exemplo), verificar se ela está retornando informações corretas, e então está pronto. Fazemos a chamada pela aplicação e está tudo pronto.

Mas tem uma coisa errada nesse ponto. É muito importante analisar se o objeto criado tem uma requisito não funcional (performance) funcionando corretamente. Temos que verificar se as buscas na base de dados estão utilizando os índices corretos. Se os índices criados estão funcionando de forma correta e performática.

A primeira coisa é analisar o plano de execução que o SQL está utilizando para executar o objeto. Para exemplificar, criamos uma procedure CalcularFreteTeste que recebe alguns parâmetros.

exec CalcularFreteTeste ‘32000000’, 1, 2.00000, NULL, 39999999, 1, 1

Para analisar o plano de execução, preparamos a chamada dessa procedure e clicamos no botão “Dispaly Estimated Execution Plan”

O plano de execução exibe todo o processo que o SQL está fazendo para retornar as informações da procedure. Nesse plano aparece se o SQL está fazendo “Table Scan” em uma tabela, se está utilizando índice quando executa um comando. E principalmente, qual a porcentagem do tempo que está sendo gasta em cada fase.

Passando o mouse sobre cada um dos passos é possível verificar informações importantes como Logical Operation, I/O Coast, CPU Coast, etc

Depois de alinhar do o plano de execução e deixar o mais performático possível é necessário preparar o teste de performance. Precisamos saber se a procedure vai aguentar a quantidade de acesso que será feita, qual a quantidade de memória, cpu que será consumida. Para isso podemos criar um script simples que gera inúmeras chamadas na procedure como o exemplo abaixo:

select top 1000 'exec CalcularFreteTeste ''' + CAST(Frete.CepDe as varchar) 
+ ''', ' + CAST(Frete.idCentroDistribuicao as varchar) + ', ' + 
CAST(Frete.PesoDe as varchar) + ', ' + 'NULL' + ', ' +  
CAST(Frete.CepAte as varchar) + ', ' + CAST(Frete.IdFreteModalTipo as varchar) 
+ ', ' + CAST(Frete.idFreteentregatipo as varchar) as chamadaproc 
from Frete ORDER BY NEWID()

DICA: Lembre-se que se você executar 2 vezes o mesmo teste, passando exatamente os mesmos valores, o resultado estará em cache, não exibindo um “mundo real”. Para isso lembre-se sempre de rodar o comando DBCC FREEPROCCACHE do SQL (http://msdn.microsoft.com/pt-br/library/ms174283.aspx).

Outra coisa importante é colocar um comando “GO” depois de cada execução da procedure para que o SQL Server Profiler consiga capturar cada uma das execuções. Caso contrário você vai executar 1000 chamadas e o relatório exibirá somente 1 registro.

Então está na hora de abrir o SQL Server Profile, apontar para o mesmo banco de dados e criar um trace filtrando somente a procedure que está sendo executada. Além disso é importante selecionar campos como “Read”, “Write”, “CPU” .
Filtre somente o objeto que você está analisando, senão o trace buscará tudo que está sendo executado no banco.


Lembre-se que utilizar o SQL Server Profile consome recursos (memória e cpu) da máquina, então a utilização dele em servidores de produção somente em caso de extrema urgência.

Abaixo um print de como foi configurado o trace.

Então basta analisar o consumo de CPU, memória, read, write e verificar quanto seu objeto consumiu do banco de dados. Existe como salvar o resultado desse resultado em uma tabela do banco de dados e gerar relatórios e estatísticas de tempo médio de execução, quantidade de milissegundos por execução, etc. Basta clicar com o botão direito do mouse em cima do resultado e então

É importante testar várias opções de selects, índices,  configurações e verificar qual delas foi mais performática e executada com menos recurso da máquina.

Abraços e até a próxima.

Estatísticas tecnológicas

11/05/2012 2 comentários

O site http://www.secundados.com.br/ tem muitas informações estatísticas sobre o mundo de tecnologia. Dados estatísticos de internet, mobile, midias online, redes sociais, etc. Aproveitem os dados.

Categorias:Bla bla bla