Archive Page 2

SSRS – Utilizando calculo de variação em uma matriz

Olá pessoal,

Depois de alguns dias de jejum de posts por aqui, recentemente passei por uma situação que quero compartilhar com vocês. Estava ajundando alguns colegas na construção de alguns relatórios em Reporting Services quando surgiu a situação descrita neste post.

Tinhamos um relatório utilizando uma matriz contendo em seu conjunto de linhas uma lista de produtos, no eixo de coluna o período e o dado era a quantidade vendida (tudo funcionando como o esperado!).

Neste relatório era necessário termos uma coluna que demonstrasse a variação ou melhor evolução entre o período atual e o período anterior  (O usuário até enviou um excel de exemplo, isso no excel é muito simples, mas em um relatório do SSRS utilizando matriz não é tão trivial), sendo assim teriamos o seguinte layout:

image

A fórmula para a variação seria (AnoAnterior(2011)-AnoCorrente(2012))/ (AnoAnterior(2011)+(AnoCorrente(2012)).

Após algumas horas de reflexão e tentativas, olhando o artigo Advanced Matrix Reporting Techniques (que por sinal é mais complexo que o meu cenário) tive uma idéia que foi a criação de uma função em VB conforme a seguir:

Public Function GetGrowthValue(ByVal PreviousValue, ByVal CurrentValue)
As Object
    If IsNothing(PreviousValue) OR IsNothing(CurrentValue) Then
        Return Nothing
    Else if PreviousValue = 0 OR CurrentValue = 0 Then
        Return Nothing
    Else 
        Return (CurrentValue - PreviousValue) /
               (CurrentValue + PreviousValue) 
    End If
End Function

Criei esta função no corpo do relatório, em seguida adicionei dentro do grupo de colunas um novo campoa e inseri uma expressão chamando a função criada anteriormente:

=Code.GetGrowthValue(Previous(Sum(Fields!salesAmount.Value),
"CalendarYear"),Sum(Fields!salesAmount.Value))

Note que como estamos trabalhando com Matriz eu preciso passar o escopo, por isso utilizo o “CalendarYear” que é o nome do meu grupo de colunas.

Com isso, conseguimos gerar uma coluna de variação entre um ano e outro, e quando não há dado para comparação exibimos em branco. A imagem a seguir ilustra o resultado obtido utilizando a base de dados de exemplo AdventureWorks:

image

 Bom, não é algo de outro mundo, mas resolvi montar este post depois de procurar algumas coisas a respeito na internet e em alguns fóruns e não ter encontrado, espero que seja útil pra vocês!

Abraços e até o próximo post.

Ass: Giuliano B. Cardoso

Segurança em bancos de dados–Artigo SQL Magazine

Galera,

Acaba de sair na SQL Magazine edição 103 o artigo que escrevi sobre a aplicação de normas e procedimentos para garantir a segurança em bancos de dados.

image

Somente para aguçar um pouco a curiosidade de vocês, neste artigo comentamos sobre algumas coisas bem interessante “extra e intra” SQL, como:

– Uso das normas ISO

–  Análise de riscos

–  Ferramentas para auditoria

Estes são alguns dos assuntos abordados, há muito mais, espero que gostem.

Este artigo foi fruto de um trabalho conjunto com o Ricardo Moraes a quem quero aproveitar a oportunidade para agradecer a contribuição.

Neste link vocês podem ver uma prévia do artigo: http://www.devmedia.com.br/seguranca-em-bancos-de-dados-aplicando-normas-e-procedimentos-revista-sql-magazine-103/25669

Abraços e até o próximo post.

Estressando o SQL Server

Por vezes precisamos saber a capacidade do nosso sistema, para isso precisamos estressar o ambiente para saber o seu limite de funcionamento. É normal neste momento procurarmos alguns “robôs” que consigam disparar cargas automáticas contra nosso servidor, existem algumas ferramentas que podem nos apoiar nisso, mas nem sempre conseguimos extrair destas ferramentas tudo que precisamos, uma vez que nossos testes podem ter focos específicos; stress de processador, memória, disco ou contadores internos do banco de dados.

Neste post irei apresentar a vocês algumas ferramentas que tenho utilizado para fazer test de stress em servidores SQL Server, bem como montar um teste de stress de forma manual sem o uso destas ferramentas.

SQL Load Generator

Lançada em 2008, esta ferramenta é bastante simples, ela possibilita a execução de multiplas queryes e a simulação de diversas conexões simultâneas.

A figura abaixo apresenta a tela bem simples e intuitiva desta ferramenta.

O SQL Load Generator está disponível para download gratuíto no Codeplex, acesse: http://sqlloadgenerator.codeplex.com/

SQLQueryStress

Desenvolvida por Adam Machanic é uma outra ferramenta interessante, pois além de simular diversas conexões simultâneas também possibilita o uso de execuções dinâmicas de queryes baseadas em parâmetros. Outro ponto positivo é que a própria ferramenta já apresenta alguns contadores básicos de duração da execução, quantidade de execuções, utilização de CPU  entre outros.

O conjunto de telas abaixo ilustra a utilização da procedure “UspGetEmployeeManagers” onde devemos passar como parâmetro o Business EntityID, estes valores são obtidos a partir da tabela Employee no schema HumanResources, para isso clicamos no botão “Parameter Substitution” e inserimos a query para buscar os valores na tabela citada. Além da parametrização das execuções outro ponto a ser observado nas telas abaixo é a quantidade de execuções por conexão ou seja 5 execuções x 5 Conexões = 25 Interações.

image

image

image

Embora esta ferramenta seja meio antiga 2006, ainda continua sendo bastante útil para geração de cargas dinâmicas de queryes.

O download é gratuíto e está disponível em: http://www.datamanipulation.net/sqlquerystress/sqlquerystressdownload.asp

SQLStress

Esta também é uma boa alternativa, neste caso não precisamos definir as queryes, pois a carga de trabalho é gerada automáticamente. Nós podemos escolher o tipo de carga baseado em operações como Delete, Insert, Update e Select traçando um perfil de operação da base de dados. Isto se torna vantajoso quando não temos uma base de dados e queremos fazer um Sizing de hardware baseado na expectativa de carga de trabalho por operações e número de usuários.

A figura abaixo representa a tela onde podemos definir os parâmetros comentados e criar uma carga de trabalho com base nestes.

image

Outro destaque interessante desta ferramenta é a possiblidade de parametrizar o uso do NUMA (aba Affinity) , alem de preparar a base de dados criada para cada ciclo de testes, realizando limpeza de cache, checkpoints entre outras opções (aba Databases).

O download desta ferramenta também é gratuíto e está disponível em: http://www.sqlstress.com/Download.aspx

Fazendo de forma manual

Nem sempre temos a autorização de instalar estas ferramentas em nosso ambiente (ou no ambiente do cliente), nestes casos precisamos fazer um trabalho semelhante ao que estas ferramentas fazem, neste caso a nossa tarefa pode se tornar bem trabalhosa.

A primeira etapa para fazer estes testes de forma manual é a possibilidade de simular diversas conexões, a seguir apresento um script simplificado para esta tarefa.

Abrindo diversas conexões

Você pode criar um batch utilizando os parâmetros a seguir para abrir diversas conexões (instâncias) e com base em scripts sql (que deverão ser montados conforme sua necessidade) estas sessões serão disparadas contra o servidor definido, conforme os parâmetros da chamada do executável de linha de comando sqlcmd.

Veja abaixo um exemplo para a criação deste batch:

ECHO OFF
REM Inicia 100 instancias de um mesmo processo
for /l %%X in (1,1,100) do (start sqlcmd -S%1 -U%2 -P%3 -i%4 –o Log_%%XX.out)

Caso queira aumentar ou diminuir o número de conexões, altere o parâmetro 100 entre os parênteses (1,1,100). Além disso, você poderá personalizar os outros parâmetros embutidos na instrução do executável sqlcmd.

Para maiores detalhes acesse: Utilitário sqlcmd

Por fim, este post é apenas para dar uma idéia de como fazer e quais as ferramentas que tenho utilizado para este fim. Espero que este post tenha sido interessante e possa ajuda-los quando precisarem executar um trabalho de stress test.

Até a próxima galera!

Entendendo o Query Optimizer no SQL

Li algumas vezes sobre este assunto em alguns livros e em alguns blogs. Em sala de aula o nível abordado no material oficial da Microsoft é superficial e geralmente não há tempo suficiente para discutir mais de 1 hora sobre este assunto. 

Como estou sempre em busca não apenas de novos conhecimentos, mas manter e atualizar o conhecimento adquirido, hoje estava lendo a respeito do Query Optimizer quando encontrei um artigo do Paul White que me surpreeendeu pela forma como ele aborda o assunto, inclusive com diversos exemplos e uma apresentação, ambos podem serem baixados para consulta. Sem dúvida este artigo é o melhor que eu já li sobre este assunto e por isso quero compartilhar com vocês o acesso para este, são 4 sessões ao todo que podem serem acessadas pelo link abaixo:

Fiquem a vontade para comentarem este post.

Abraços e até a próxima!

Giuliano B. Cardoso

Microsoft BI – Boas Práticas

É comum em projetos e até mesmo em sala de aula me perguntarem sobre o uso de Boas Práticas para ferramentas de BI Microsoft.  Diante disso, resolvi montar este post com algumas documentações disponíveis para cada ferramenta do portfólio de BI Microsoft.

Segue abaixo algumas referências que geralmente utilizo:

DataWarehouse

SSAS

SSIS

SSRS

 

É isso aí galera, tenho certeza de que estas referências serão úteis a vocês, assim como são pra mim. 

Fiquem a vontade para comentar e sugerir outras referências sobre este tópico.

Abraços e até o próximo post.

Giuliano B. Cardoso

Minha instância SQL Server está atualizada?

Recentemente participando de um projeto de atualização de servidores SQL Server surgiram algumas perguntas simples como:

1. A instância SQL Server está atualizada com o ultimo build?

2. Como faço para saber?

Antigamente era mais simples responder, pois a quantidade de liberações era menor, mas com as atuais versões utilizadas pelo mercado SQL2012, SQL2008R2, SQL2008, SQL2005 e em alguns casos ainda a SQL2000 está dificil manter em mente as ultimas atualizações de cada uma.

Para conseguir responder esta questão facilmente temos alguns sites que podem nos ajudar, mas primeiro vamos verificar como saber qual é a versão do SQL  Server que está instalada, para isso utilizo o comando a seguir:

SELECT  SERVERPROPERTY(‘productversion’), SERVERPROPERTY (‘productlevel’), SERVERPROPERTY (‘edition’)

Conforme o artigo de suporte: http://support.microsoft.com/kb/321185/

Ou podemos utilizar o tradicional:  SELECT @@VERSION

A partir destas informações podemos acessar os blogs:

Estes blogs mantêm atualizado a lista de releases para cada versão.

É muito simples a coleta destas informações, mas saber o local exato onde temos a informação atualizada é uma mão na roda para mantermos nosso ambiente atualizado.

Abraços pessoal e até o próximo post.

Giuliano B. Cardoso

Entrevista com Steve Jobs & Bill Gates – 2007

Olá galera,

Para começar 2012 com tudo quero partilhar com vocês por aqui a entrevista que assisti neste final de semana na GloboNews com o Steve Jobs e o Bill Gates frente a frente.  Foi gravada em 2007 e alguns de vocês podem achar que não é atual, mas para quem não assistiu antes, como eu; Posso dizer que valeu cada minuto na frente da tv (olhem que não curto assistir tv), eles comentam do inicio da relação entre Apple e Microsoft e o mais impressionante é que há 4 anos atrás eles comentam de muita coisa que está acontecendo hoje é realmentre muito impressionante.

Segue abaixo a sequencia de vídeos:

Até a próxima pessoal!

Giuliano B. Cardoso


Giuliano B. Cardoso,
Administrador de Empresas com Habilitação em Informática, atua em Tecnologia da Informação há mais de 10 anos, especialista em banco de dados SQL Server, atualmente atua como consultor em Business Intelligence e instrutor de cursos oficiais Microsoft.
Possuí as seguintes certificações: ITIL-F, MCP,MCDBA SQL 2000, MCTS SQL 2005/2008, MCITP SQL2005/2008 e MCT

Mais acessados