Treinamento gratuito: Fundamentos de IoT

Posted on


A Microsoft disponibilizou nesta semana em sua Virtual Academy o treinamento gratuito Fundamentos de IoT.

Este treinamento é dedicado a explicar os fundamentos da Internet das Coisas (Internet of Things ou IoT), tanto na parte de hardware quanto da parte de nuvem e processamento de informação. Ele também explica o conceito da Microsoft sobre Internet das SUAS coisas.

Treinamento gratuito: Fundamentos de IoT

Treinamento gratuito: Fundamentos de IoT

O treinamento gratuito Fundamentos de IoT é dividido em cinco módulos:

01 | O que é Internet das Coisas?
Explicação introdutória do conceito e algumas aplicabilidades da Internet das Coisas.

02 | Exemplos de casos de uso de IoT
Este módulo mostra exemplos de como o IoT pode ser usado em ambientes empresariais e ajuda na tomada de decisões. Nesse módulo também é explicado a diferença entre Sensores X Devices.

03 | Azure para IoT
Este módulo mostra quais serviços e ferramentas do Microsoft Azure podem ser usados para tratamento e análise dos dados na Internet das Coisas.

04 | Devices
Esse modulo mostra quais opções de devices os desenvolvedores tem para se trabalhar com Internet das Coisas e quais os pontos fortes de cada dispositivo.

05 | Cenários de IoT
Nesse módulo são apresentados alguns cenários de uso de devices IoT junto com serviços do Azure.

Confira o treinamento gratuito Fundamentos de IoT clicando aqui.

Sobre a Microsoft Virtual Academy
A Microsoft Virtual Academy (ou MVA) oferece treinamento online da Microsoft realizado por especialistas para ajudar os tecnólogos a aprender constantemente, com centenas de cursos em múltiplos idiomas.

A MVA é gratuita e o serviço inteiro é hospedado no Microsoft Azure. Além dos treinamentos, ela também oferece para download diversos ebooks gratuitos.

Fontes e Direitos Autorais: Baboo.com – Sid Vicious

Short Scripts – Agosto 2015

Posted on


Boa tarde, Comunidade!!!!

Tudo em paz? Mas que loucura este tempo aqui em São Roque e Sorocaba, hoje ás 6:30hrs da manhã estava 8º graus, agora ás 13hrs sensação térmica de 20º graus e subindo……

Nos últimos meses acabei deixando de publicar alguns posts relacionadas a minha sessão Short Scripts devido a correria da vida profissional e acadêmica, mas hoje vou pagar este dívida, compartilhando com vocês alguns dos meus novos short scripts.

Muitos tem me perguntado o porque acabou guardando tantos scripts ou códigos de exemplo, a resposta é bem simples e direta, sempre existirá alguém ou algo no mundo que poderá necessitar deste recurso e isso é que me mantem nesta jornada em cultivar minha biblioteca de scripts a cada dia mais atualização e completa(tarefa muito, mas muito complicada de se realizar).

Os Short Scripts apresentados hoje, estão relacionandos com os seguintes assuntos:

  • Block Process;
  • CTE;
  • Claúsula Output;
  • Comando Select;
  • Comando SET;
  • Concatenação de Valores;
  • Extended Events;
  • Índices;
  • Junção de Tabelas
  • Fatorial;
  • Funções; e
  • Tipos de Dados.

É isso galera, a seguir você vai poder encontrar os blocos de código que representam os Short Scripts, fique a vontade para copiar, compartilhar, sugerir melhorias e fazer suas críticas também.

 

— Short Script 1 –  Uitlizando claúsula Output em Delete com Inner Join + Select —

DECLARE @t TABLE

(nDex INT IDENTITY(1,1),

valu VARCHAR(9),

keey UNIQUEIDENTIFIER)

INSERT @t

VALUES (‘a’,NEWID()) , (‘b’,NEWID()),

(‘c’,NEWID()) , (‘d’,NEWID()),

(‘e’,NEWID()) , (‘f’,NEWID()),

(‘g’,NEWID()) , (‘h’,NEWID()),

(‘i’,NEWID()) , (‘j’,NEWID()),

(‘k’,NEWID())

DELETE t

OUTPUT DELETED.*

FROM @t AS t INNER JOIN (SELECT TOP 9 nDex FROM @t ORDER BY NEWID()) AS b

ON b.ndex = t.nDex

GO

 

 

— Short Script 2 – Uitilizando – CTE para separar palavras —

DECLARE @s VARCHAR(8000), @d VARCHAR(10)

SET @s = ‘separar por espaço em branco’

SET @d = ‘ ‘

;WITH split(i,j) AS

(

SELECT i = 1, j = CHARINDEX(@d, @s + @d)

UNION ALL

SELECT i = j + 1, j = CHARINDEX(@d, @s + @d, j + 1) FROM split

WHERE CHARINDEX(@d, @s + @d, j + 1) <> 0

)

SELECT SUBSTRING(@s,i,ji)

FROM split

 

— Short Script 3 – Simulando – Cenários de utilização de índices —

USE TempDB;

— Criando a Tabela Funcionário —

CREATE TABLE Funcionario

(ID int primary key,

NomeFunc varchar(200),

DataNasc date,

DataADM date);

Go

— Consulta 1 – Fazendo uso do Operador Clustered Index Scan —

SELECT * from Funcionario

Where DataADM between Convert(date, ‘1/1/2012’, 103) and Convert(date, ’31/1/2012′, 103)

Go

— Criando um novo índice chamado Ind_NC_Funcionario_DataADM —

CREATE Nonclustered Index Ind_NC_Funcionario_DataADM On Funcionario (DataADM);

Go

— Consulta 2 – Fazendo uso do Operador Clustered Index Scan —

SELECT * from Funcionario

Where DataADM between Convert(date, ‘1/1/2012’, 103) and Convert(date, ’31/1/2012′, 103)

Go

— Consulta 3 – Forçando o uso do índice IND_NC_Funcionario_DataADM, gerando Index Seek, Key Lookup e Nested Loops —

SELECT * from Funcionario with (index=Ind_NC_Funcionario_DataADM)

Where DataADM between Convert(date, ‘1/1/2012’, 103) and Convert(date, ’31/1/2012′, 103)

Go

— Consulta 4 – Utilizando realmente o índice IND_NC_Funcionario_DataADM —

SELECT ID, DataADM

From Funcionario

Where DataADM between Convert(date, ‘1/1/2012’, 103) and Convert(date, ’31/1/2012′, 103)

Go

 

— Short Script 4 – Função – Concatenar valores em ordem decrescente —

CREATE FUNCTION dbo.ConcatenaValores (@C1 int, @C2 int, @C3 int, @C4 int, @C5 int)

returns int as

begin

declare @Concatenado varchar(5);

set @Concatenado= space(0);

SELECT @Concatenado+= Cast(N as char(1))

from (values (@C1), (@C2), (@C3), (@C4), (@C5)) as Numeros(N)

order by N desc;

return Cast(@Concatenado as int);

end;

go

Select Valor= dbo.ConcatenaValores(1, 2, 3, 4, 5);

 

— Short Script 5 – Criando tipo de dados NotNull mas Null sobrepondo Not Null —

CREATE TYPE NotNullType FROM VARCHAR(10) NOT NULL;

GO

— table create

CREATE TABLE Test(TestId INT, NullTest NotNullType NULL);

GO

— insert

INSERT INTO Test(TestId) VALUES(1);

SELECT NullTest FROM Test;

 

— Short Script 6 – Comparando comportamento entre os comandos SET e Select —

DECLARE @a INT= 0;

DECLARE @b INT= 0;

 

CREATE TABLE #tmpPrice ( Value INT );

SET @a = ( SELECT Value FROM #tmpPrice);

SELECT @b = Value FROM #tmpPrice;

SELECT @a AS, @b AS b

 

— Short Script 7 – Função para Calcular Fatorial com CTE encapsulada —

CREATE FUNCTION fatorial

(

@n INT

)

RETURNS INT

AS

BEGIN

DECLARE @val INT;

WITH fat(f, n) AS

(

SELECT CAST (1 as bigint) as f, 0 as n

UNION ALL

SELECT CAST (1 as bigint) as f, 1 as n

UNION ALL

SELECT f * (n + 1), n +1

FROM fat

WHERE n < 20 AND n <> 0

)

SELECT @val = f

FROM fat

WHERE n = @n

RETURN @val

END

GO

— Testando a função

SELECT dbo.fatorial(3);

SELECT dbo.fatorial(4);

SELECT dbo.fatorial(7);

 

— Short Script 8 –  CTE – Calculando fatorial —

WITH fat(f, n) AS

(

SELECT CAST (1 as bigint) as f, 0 as n — fat de 0 é 1

UNION ALL

SELECT CAST (1 as bigint) as f, 1 as n — fat de 1 é 1

UNION ALL

SELECT f * (n + 1), n +1

FROM fat

WHERE n < 20 AND n <> 0

— 20 é o limite neste caso, pois o fatorial de 21

— não cabe em um tipo bigint. O <> 0 é para cortar a recursão

— do primeiro âncora, senão repetiria tudo, faça o teste.

)

SELECT f

FROM fat

WHERE n = 12

 

— Short Script 9 – Capturar Blocked Process com Extended Events —

CREATE EVENT SESSION [Blocked] ON SERVER

ADD EVENT sqlserver.blocked_process_report

ADD TARGET package0.event_file

(SET filename=N’C:\xel\blocked.xel’)

GO

ALTER EVENT SESSION [Blocked]

ON SERVER

STATE = start;

GO

 

–Agora precisamos ler os arquivos .XEL gerados pela sessão e extrair os dados do XML para identificarmos as causas dos blocked process:

select theNodes.event_data.value(‘(//blocked-process/process)[1]/@spid’,‘int’) as blocking_process,

theNodes.event_data.value(‘(//blocked-process/process/inputbuf)[1]’,‘varchar(max)’) as blocking_text,

theNodes.event_data.value(‘(//blocked-process/process)[1]/@clientapp’,‘varchar(100)’) as blocking_app,

theNodes.event_data.value(‘(//blocked-process/process)[1]/@loginname’,‘varchar(50)’) as blocking_login,

theNodes.event_data.value(‘(//blocked-process/process)[1]/@isolationlevel’,‘varchar(50)’) as blocking_isolation,

theNodes.event_data.value(‘(//blocked-process/process)[1]/@hostname’,‘varchar(50)’) as blocking_host,

theNodes.event_data.value(‘(//blocking-process/process)[1]/@spid’,‘int’) as blocked_process,

theNodes.event_data.value(‘(//blocking-process/process/inputbuf)[1]’,‘varchar(max)’) as blocked_text,

theNodes.event_data.value(‘(//blocking-process/process)[1]/@clientapp’,‘varchar(100)’) as blocked_app,

theNodes.event_data.value(‘(//blocking-process/process)[1]/@loginname’,‘varchar(50)’) as blocked_login,

theNodes.event_data.value(‘(//blocked-process/process)[1]/@isolationlevel’,‘varchar(50)’) as blocked_isolation,

theNodes.event_data.value(‘(//blocking-process/process)[1]/@hostname’,‘varchar(50)’) as blocked_host

from

(select convert(xml,event_data) event_data

from

sys.fn_xe_file_target_read_file(‘c:\xel\blocked*.xel’, NULL, NULL, NULL)) theData

cross apply theData.event_data.nodes(‘//event’) theNodes(event_data)

 

Chegamos ao fim de mais um Short Scripts, espero que você tenha gostado destes códigos!!!

Nos encontramos em breve.

Até a próxima…..

Windows 95 completa 20 anos

Posted on


Lançado em 24 de agosto de 1995, o Windows 95 completa 20 anos de vida nesta segunda-feira. Conhecido internamente na Microsoft pelo codinome Chicago, esta versão do sistema operacional foi um grande marco na história da empresa.

Windows 95 completa 20 anos

WINDOWS 95 COMPLETA 20 ANOS

O Windows 95 trouxe diversas novidades em relação ao Windows 3.1, começando pela introdução do menu Iniciar, que foi aposentado no Windows 8 e reintroduzido no Windows 10, e da barra de tarefas.

w95_01

Ele também trouxe uma interface totalmente redesenhada e mais amigável “escondendo” o MS-DOS, suporte para a arquitetura 32 bits e para dispositivos plug and play.

Já o Internet Explorer 1.0 só foi disponibilizado através do pacote Plus! para Windows 95, que precisava ser adquirido separadamente.

w95_02
w95_03

Graças à enorme campanha de marketing da Microsoft na época, o Windows 95 foi um grande sucesso comercial, provocando filas e filas em diversas lojas na época do lançamento.

A campanha de marketing incluiu até mesmo a música ‘Start Me Up!’ dos Rolling Stones. Rumores dizem que a Microsoft pagou entre US$ 8 milhões e US$ 14 milhões pelos direitos de uso da música.

DESENVOLVIMENTO DO WINDOWS 95

A Microsoft iniciou o desenvolvimento do Windows 95 em 1992, pouco tempo depois do lançamento do Windows 3.1. Nesta época tanto o Windows for Workgroups 3.1 como o Windows NT 3.1 também estavam em desenvolvimento.

Quem participou do programa de testes na época, era necessário pagar US$ 19,95, também pôde utilizar gratuitamente por tempo limitado o serviço online The Microsoft Network (MSN).

Algumas imagens da versão de testes do Windows 95 podem ser vistas abaixo:

windows_95_beta_01
windows_95_beta_02
windows_95_beta_03
windows_95_beta_04

VÍDEO DE LANÇAMENTO DO WINDOWS 95:

Fontes e Direitos Autorias: Baboo.com – Sid Vicious @ 24 ago 2015 | 8:34 am.

Internet Explorer completa 20 anos

Posted on


Lançado em 16 de agosto de 1995, o Internet Explorer completa 20 anos de vida neste mês. A versão 1.0 do navegador foi distribuída inicialmente junto com o pacote Microsoft Plus! para Windows 95.

Para não deixar a data passar em branco, a equipe do Microsoft Edge publicou em sua conta no Twitter uma pequena mensagem desejando um feliz aniversário para o navegador:

Internet Explorer completa 20 anos

Internet Explorer completa 20 anos

O Internet Explorer 1.0, que pode ser visto na imagem abaixo, era baseado no Spyglass Mosaic, que foi licenciado pela Microsoft e usado para formar a base do código de outras versões do Internet Explorer.

MS_IE1.0_01

O Internet Explorer 3.0, lançado no dia 13 de agosto de 1996, foi a primeira versão do navegador realmente bem sucedida. A versão 3.0 também marca o início da integração do Internet Explorer com o Windows:

MS_IE3.0_02

O lançamento da versão 4.0 em setembro de 1997 marcou o início do domínio do Internet Explorer no mercado de navegadores (quando ele chegou a ter uma fatia de mais de 90%). Este domínio continuou até o lançamento da versão 6.0:

MS_IE4.0_03

Por falar na versão 6.0, ela foi lançada junto com o Windows XP em outubro de 2001 (embora tenha ficado pronta em agosto do mesmo ano) e até hoje é muito criticada por sua grande quantidade de falhas de segurança e problemas de compatibilidade com diversos padrões na Web:

MS_IE6.0_04

Já a versão 7.0, lançada em outubro de 2006, marcou a primeira grande mudança visual no navegador desde o lançamento do IE 1.0 com a inclusão do suporte para tabbed browsing (navegação por abas):

MS_IE7.0_05

A versão 8 foi lançada em março de 2009. Esta versão trouxe melhorias no suporte para alguns padrões da Web como CSS e diversas melhorias na segurança (para a época).

O Internet Explorer 8 também foi o primeiro navegador da Microsoft a passar no teste Acid2.

MS_IE8.0_06

Em 2009, a União Europeia determinou que a Microsoft incluísse no Windows uma tela listando diversos navegadores alternativos. A determinação visava garantir a liberdade de escolha dos usuários do Windows na Europa.

O Internet Explorer 9 chegou ao mercado oficialmente em março de 2011. O desenvolvimento desta versão começou logo após o lançamento da versão 8.

Ele foi anunciado pela Microsoft durante a edição de 2009 da sua Professional Developers Conference (ou PDC).

Esta versão trouxe o suporte para renderização acelerada via hardware, suporte para alguns elementos do HTML5 e um novo mecanismo JavaScript em sua versão 32 bits:

MS_IE9.0_07

O Internet Explorer 10 foi lançado junto com o Windows 8 em outubro de 2012 e em fevereiro de 2013 para Windows 7. O Windows Vista não é suportado.

No Windows 8, o Internet Explorer 10 foi dividido em duas interfaces, a tradicional para uso na área de trabalho e a versão “Moderna”, otimizada para uso com telas sensíveis ao toque.

A versão 10 também trouxe melhorias no suporte para a aceleração via hardware e para diversos padrões da Web, como o CSS3.

MS_IE10.0_08
Com a chegada do Windows 8.1, que foi lançado no dia 18 de outubro de 2013, a Microsoft também lançou o Internet Explorer 11. Esta versão do navegador também está disponível para o Windows 7.

O Internet Explorer 11 trouxe novidades como suporte para o protocolo SPDY, suporte para renderização de elementos 3D usando WebGL, novo modo protegido avançado, melhorias em seu mecanismo de renderização de páginas, melhorias no recurso de proteção contra rastreamento e melhorias em seu mecanismo JavaScript.

MS_IE11.0_09
MS_IE11.Metro_010
O Internet Explorer 11 também está presente no Windows 10, que foi lançado em 29 de julho de 2015. O detalhe é que ele foi substituído pelo Microsoft Edge como o navegador padrão do sistema operacional.

O Microsoft Edge foi desenvolvido como um app da Windows Store, o que agilizará o processo de atualização para novas versões.

O navegador está presente tanto no Windows 10 “tradicional” para PCs e laptops como no Windows 10 Mobile para smartphones e tablets pequenos.

MS_Edge_011
O Internet Explorer completa 20 anos neste mês. Qual foi a primeira versão usada por você?

Fontes e Direitos Autorais: Baboo.com – Sid Vicious

Windows 10: 6 dicas para usar melhor o Menu Iniciar e a Barra de Tarefas

Posted on


Alardeado como a versão definitiva do sistema operacional da Microsoft — que a partir de agora passa a receber apenas atualizações constantes em vez de uma mudança grande e drástica —, o Windows 10 trouxe alguns novos recursos e outros velhos conhecidos e repaginados para o público.

Porém, como é comum a cada atualização, alguns detalhes nem sempre ficam evidentes e há muita coisa “escondida” dentro dos cantinhos do sistema operacional. E é justamente para trazer à luz algumas dessas possibilidades que preparamos este texto. Aqui, você vai conhecer alguns truques para usar melhor dois recursos básicos do Windows 10: o Menu Iniciar e a Barra de Tarefas.

Dicas para você acessar alguns recursos de forma mais ágil ou então para obter ainda mais de cada um desses itens: tudo isso estará em nossa lista. Então, confira agora todas as nossas dicas.

1. Reativando a tela Iniciar (igual ao Windows 8)

Além dos novos detalhes gráficos, visualmente falando, o retorno do Menu Iniciar é a grande novidade do Windows 10. O espaço se apresenta agora como uma mistura bem interessante do Menu Iniciar clássico, presente até o Windows 7, e da tela Iniciar, disponível nas versões 8 e 8.1 do sistema operacional.

Porém, o Windows 10 permite que você use tanto o Menu Iniciar quanto a tela Iniciar, igual a do Windows 8. Para isso, abra o Menu Iniciar e clique em “Configurações”. Na janela que abriu em seu computador, clique em “Personalização” e depois vá até a seção “Iniciar”.

Dicas Windows 10

Lá, ative a opção “Usar tela inteira de Iniciar”.

Dicas Windows 10

Depois, é só clicar sobre o ícone do Windows no canto da tela ou então usar a tecla do Windows presente em seu teclado para abrir a tela Iniciar tradicional, igual à do Windows 8. Obviamente, é possível restaurar esta função para o modo padrão do Windows 10 a qualquer momento.

Dicas Windows 10

2. Redimensione a barra de pesquisa

Uma das principais novidades da Barra de Tarefas do Windows 10 é a presença de um menu de pesquisa por meio do qual você pode pesquisar por itens na web e também em seu computador. Por padrão, este menu vem expandido, ocupando um bom espaço, porém, caso isso seja um problema, é possível resolvê-lo de maneira bem simples.

Basta clicar com o botão direito do mouse em qualquer ponto da Barra de Tarefas e ir até o menu “Pesquisar”. Lá, selecione a opção “Mostrar ícone de pesquisa” para diminuir o tamanho da barra de pesquisa. Se quiser deixá-lo grande novamente, opte por “Mostrar caixa de pesquisa”.

Dicas Windows 10

Caso deseje, você pode ocultar este recurso clicando sobre a opção “Oculto”.

3. Fazer logon em sua conta rapidamente

Tradicionalmente, para sair de sua conta no Windows você abria o Menu Iniciar e escolhia a opção “Logout”. Ou então poderia usar o atalho Ctrl + L para tal, o que torna bastante ágil este processo. Porém, para quem não é adepto dos atalhos do teclado, fazer isso no Windows 10 ainda continua simples.

Tudo o que você precisa fazer é abrir o Menu Iniciar e clicar com o botão direito do mouse sobre a foto de sua conta. Ao fazer isso, surge ali uma pequena aba com três opções, entre elas a opção “Sair”, que faz logout instantaneamente.

Dicas Windows 10

4. Personalizar a área de notificação

A tradicional área de notificação do Windows também ganhou novidades no Windows 10. Agora, você pode personalizá-la de forma avançada, selecionando quais botões de ações rápidas devem ser exibidos ali e também gerenciar individualmente os ícones de notificações de cada aplicativo.

Para isso, clique com o botão direito do mouse em qualquer ponto da Barra de Tarefas e vá em “Propriedades”. Depois, na janela que surgiu na tela, clique em “Personalizar”.

Dicas Windows 10

Na tela de personalização, você conta com várias opções, então leia com atenção cada uma delas e ative ou desative alguns recursos conforme julgar necessário.

Dicas Windows 10

Outra forma de personalizar a área de notificação é clicando e arrastando qualquer ícone que é exibido ali. Assim, você define se um ícone deve ser sempre exibido ou deve ficar presente apenas no menu oculto deste espaço.

5. Personalizar cores e transparência do Windows

Talvez algumas pessoas estejam um pouco perdidas quanto à personalização do visual do Windows 10. Este recurso funciona de forma semelhante às versões anteriores do sistema operacional (W7 e W8/8.1), porém há alguns detalhes novos que podem estar confundindo usuários pelo mundo.

Atualmente, para alterar a cor e o nível de transparência das barras do Windows é preciso acessar um menu especificamente desenvolvido para isso. Abra o Menu Iniciar e clique sobre o botão “Configurações”. Depois, clique em “Personalização”.

Dicas Windows 10

Agora, acesse o menu “Cores” e então será possível personalizar este aspecto do sistema operacional. Role a página até o final para visualizar todas as opções disponíveis e customize o visual do Windows 10 do seu jeito.

Dicas Windows 10

6. Visão de Tarefas e múltiplas áreas de trabalho

No Windows 10, você pode acessar a Visão de Tarefas, uma espécie de visualização panorâmica do sistema na qual é possível pré-visualizar todas as janelas abertas naquele momento. Para acessar esta modalidade, utilize o atalho Tecla do Windows + Tab.

Ao acessar este menu, você pode adicionar novas áreas de trabalho virtuais ao sistema. Ou seja, é possível ter diversas Áreas de trabalho funcionando simultaneamente dentro do Windows 10, ideal para organizar melhor o seu conteúdo quando muitas coisas precisam ficar abertas ao mesmo tempo.

Dicas Windows 10

Se preferir, você pode utilizar o atalho Tecla do Windows + Ctrl + D para criar um novo ambiente. Depois, utilize Tecla do Windows + Ctrl + Setas direcionais da esquerda ou da direita para navegar rapidamente entre todos os ambientes abertos em seu computador.

Matéria completa: http://canaltech.com.br/tutorial/windows/windows-10-dicas-para-usar-melhor-o-menu-iniciar-e-a-barra-de-tarefas/#ixzz3jCCAROkU
O conteúdo do Canaltech é protegido sob a licença Creative Commons (CC BY-NC-ND). Você pode reproduzi-lo, desde que insira créditos COM O LINK para o conteúdo original e não faça uso comercial de nossa produção.

Fontes e Direitos Autorais: Canaltech.com – Douglas Ciriaco | 18.08.2015 às 10h33 

Monitorando o progresso de execução de querys em tempo real no Microsoft SQL Server 2014.

Posted on


Olá pessoal, boa tarde!!!

E ai quais as novidades? Estamos se aproximando da primavera, e pensar que nos encontramos no inverno com temperaturas na casa dos 30° graus que coisa, algo bastante fora do comum para esta época do ano, mas é a realidade que estamos vivendo.

Aproveitando esta onda de calor ou melhor dizendo de temperaturas um pouco mais elevados, quero também entrar nesta onda e compartilhar com vocês algo que considero quente para qualquer profissional de banco de dados.

Você pode estar se perguntando, algo quente para um profissional de banco de dados:

  • Será que ele esta falando em processos de restauração de dados?
  • Não, não, o Junior Galvão esta pensando em Failover Cluster, AlwasOn….
  • Putz, não é isso não, ele esta pensando em performance, tunning, estatísticas…

Talvez esta última possibilidade passe perto, na verdade como diria meu pai, “Estou matutando aqui….” sobre monitoramento em tempo real no SQL Server. E ai você diz, “monitoramento em tempo real do SQL Server”, ai isso é fácil, isso já existem a muito tempo, podemos utilizar:

  • O SQL Server Profiler;
  • Podemos fazer uso de Trace Files;
  • Podemos utilizar o Activity Monitor; e
  • Ou até mesmo Extendend Events.

Sim eu sei disso, já fazemos isso de diversas formas e em versões mais antigas do Microsoft SQL Server, mas o que realmente eu estou pensando e quero destacar é uma nova DMV que foi introduzida na versão 2014 do SQL Server e que mudou um pouco para não dizer bastante a maneira que podemos acompanhar em tempo real o que esta acontecendo no SQL Server, mas o quanto cada uma “transações” ou “querys” esta executando.

Então vamos nessa, a brincadeira de hoje é apresentar e destacar a nova DMV sys.dm_exec_query_profiles disponível a partir do Microsoft SQL Server 2014 em todas as suas edições, conforme destaca a documentação oficial da Microsoft: https://msdn.microsoft.com/pt-br/library/dn223301.aspx

 

Introdução

Você tem uma consulta no SQL Server que sempre demora muito para ser executada ou encerrada. Esta é o cenário mais comum que qualquer DBA passa pelo menos uma vez por mês em seu trabalho, e ai diversos e diversos questionamentos, análises, considerações são feitas. Você pensa, eu tenho o plano de execução, vou fazer a análise deste plano para reconhecer e entender o que esta consulta esta fazendo ou deveria fazer.

E ai uma das maiores dúvidas que pode passar sobre sua cabeça, o que será exatamente que esta consulta esta fazendo neste momento? Para tentar ajudar a responder a esta pergunta e muitas outras, foi que o time de desenvolvimento e engenharia do Microsoft SQL Server, teve a fantásitca ideia de liberar na versão 2014 a DMV sys.dm_exec_query_profiles.

Agora você já deve ter percebido que esta DMV(Dinamyc Management View ou Visão de Gerenciamento Dinâmico) é algo bastante especial, pois mostrar em tempo real o que a sua consulta esta fazendo naquele momento, somente o Microsoft SQL Server pode te oferecer isso.

 

Conhecendo a sys.dm_exec_query_profiles

Como destacado anterior a sys.dm_exec_query_profiles, consiste basicamente em uma das novas DMVs que foram disponibilizadas em conjunto com o Microsoft SQL Server na versão 2014. Por padrão sua finalidade é monitorar o progresso da consulta em tempo real, enquanto a consulta está em execução. Para tal objetivo, ela faz uso de contadores executados em segundo plano, trabalhando como threads.

Os contadores estão organizados em duas categorias:

  • Primeira categoria contadores cumulativos: Como row_count, elapsed_time_ms,
  • Segunda categoria: Conhecidos como “marcadores” ou “carimbos” de data/hora. Os carimbos de data/hora marcam o tempo que certos eventos acontecem e podem ser usados para correlacionar esses eventos com dados externos no SQL Server. Exemplos desses dados são perfmon, XPerf, etc.

Vale ressaltar, que os contadores fornecem dados em uma granularidade maior do que SET STATISTICS IO ON já que eles são por interpretados e tratados como thread.

Pensar como esta dmv trabalha não é algo fácil, mas como o SQL Server é repleto de funcionalidades, torna-se possível entender.

 

Comportamento

A sys.dm_exec_query_profiles durante seu período de execução, realiza a coleta de informações de forma serializada e apresenta estes dados após o final da sua execução no modelo do SHOWPLAN XML, ou seja, os dados são estruturados na forma de plano de execução que podem ser apresentados e analisados diretamente no Management Studio.

 

Considerações

A forma de uso da sys.dm_exec_query_profiles é bastante simples e comum para aqueles já acostumados a trabalhar com as DMVs ou Diretivas SETs existente no SQL Server, o primeiro passo consiste na utilização da SET STATISTICS PROFILE ON; ou SET STATISTICS XML ON; ambos diretivas novas introduzidas na versão 2014 do Microsoft SQL Server.

Para maiores informações sobre a SET STATISTICS XML ON acesse: https://msdn.microsoft.com/en-us/library/ms176107.aspx

Ao fazer uso da sys.dm_exec_query_profiles por padrão o SQL Server vai disponibilizar o resultado desta DMV através de uma tabela com a seguinte estrutura:

Nome da coluna Tipo de dados Descrição
session_id smallint Identifica a sessão na qual esta consulta é executada. Referencia dm_exec_sessions.session_id.
request_id int Identifica a solicitação de destino. Referencia dm_exec_sessions.request_id.
sql_handle varbinary(64) Identifica a consulta de destino. Referencia dm_exec_query_stats.sql_handle.
plan_handle varbinary(64) Identificar a consulta de destino. Referencia dm_exec_query_stats.plan_handle.
physical_operator_name nvarchar(256) Nome do tipo de operador físico.
node_id int Identifica um nó do operador na árvore de consulta.
thread_id int Distingue os threads (para uma consulta paralela) que pertencem ao mesmo nó do operador de consulta.
task_address varbinary(8) Identifica a tarefa do sistema operacional SQL que esse thread está usando. Referencia dm_os_tasks.task_address.
row_count bigint Número de linhas retornadas pelo operador até o momento.
rewind_count bigint Número de retrocessos até o momento.
rebind_count bigint Número de reassociações até o momento.
end_of_scan_count bigint Número de término de exames até o momento.
first_active_time bigint A hora em que o construtor foi chamado primeiro em milissegundos.
estimate_row_count bigint Número estimado de linhas. Pode ser útil comparar estimated_row_count com o row_count real.
last_active_time bigint A hora em que o construtor foi chamado por último em milissegundos.
open_time bigint Tempo total de CPU (em milissegundos) acumulados por operações do nó de destino (por exemplo abertura/fechamento/getrow) até o momento.
first_row_time bigint Carimbo de data/hora quando aberto (em milissegundos).
last_row_time bigint Carimbo de data/hora quando obtém a primeira linha (em milissegundos).
close_time bigint Carimbo de data/hora quando fechado (em milissegundos).
elapsed_time_ms bigint A última hora em que o nó foi visto no estado de execução até o momento.
cpu_time_ms bigint Tempo total decorrido (em milissegundos) acumulados por operações do nó de destino (por exemplo abertura/fechamento/getrow) até o momento.
database_id smallint O banco de dados no qual o conjunto de linhas é aberto.
object_id int A tabela na qual o conjunto de linhas é aberto.
index_id int O índice (se houver) no qual o conjunto de linhas é aberto.
scan_count bigint Número de verificações de tabela/índice até o momento.
logical_read_count bigint Número de leituras lógicas até o momento.
physical_read_count bigint Número de leituras físicas até o momento.
read_ahead_count bigint Número de read-aheads até o momento.
write_page_count bigint Número de gravações de página até o momento devido ao derramamento.
lob_scan_count bigint Número de verificações de tabela/índice LOB até o momento.
lob_logical_read_count bigint Número de leituras lógicas LOB até o momento.
lob_physical_read_count bigint Número de leituras físicas LOB até o momento.
lob-read_ahead_count bigint Número de read-aheads LOB até o momento.
segment_read_count int Número de read-aheads de segmento até o momento.
segment_skip_count int Número de segmentos ignorados até o momento.

 

Você deve ter observado que o conjunto de dados retornados por esta dmv apresenta uma relação com outras DMVs existentes no SQL Server, dentre elas destaco:

 

Colocando a mão na massa….na verdade no teclado

Pensando em uma forma bastante simples e prática para simular o uso desta dmv, vamos trabalhar em um cénario muito comum para qualquer profissional da área de banco de dados, desenvolvimento e análise. Basicamente nosso ambiente será estrutura da seguinte forma:

  • Banco de Dados – DBMonitor; e
  • Tabelas – Impostos e Paises.

Na tabela de impostas faremos o cadastro de uma lista de diversos impostos fictícios, informando a taxa base do imposto e uma taxa de equilíbrio. Já a tabela de Países iremos fazer o cadastro de alguns países e posteriormente estabeleceremos um relacionamento entres estas duas tabelas, apresentando seu plano de execução com seus operadores e em seguida vamos utilizar a sys.dm_exec_query_profiles.

Em mãos a obra, começando pelo Código 1:

— Código 1 – Preparando o ambiente –

— Criando o Banco de Dados DBMonitor —

Create Database DBMonitor

Go

 

— Acessando o Banco de Dados DBMonitor —

Use DBMonitor

Go

 

Observe que realizamos dois dos mais comuns procedimentos existentes no SQL Server, criar um banco de dados através do comando Create Database e acessar este banco através do comando Use.

Agora vamos criar nossas duas respectivas tabelas: Impostos e Países, conforme apresenta o Código 2:

 

— Código 2 – Criando as Tabelas —

— Criando a Tabela Países —

Create Table Paises

(Id Int Identity(1,1) Primary Key,

Nome Varchar(80))

Go

 

— Criando a Tabela Impostos —

Create Table Impostos

(ID Int Identity(1,1) Primary Key,

IdPais Int Not Null,

TaxaBase Float,

TaxaEquilibrio As (TaxaBase)*10)

Go

 

— Adicionando o relacionamento —

Alter Table Impostos

Add Constraint [FK_ImpostosxPaises] Foreign Key (IdPais)

References Paises(Id)

Go

 

 

Nosso próximo passo é gerar uma massa de dados para estas tabelas, vale ressaltar que a estrutura das tabelas e seus respectivos dados são totalmente fictícias, não existe nenhum tipo de relação, veracidade ou regra de negócio aplicada neste cenário. Vamos em frente, Código 3:

— Código 3 – Inserindo a massa de dados –

— Inserindo a massa de dados de Países —

SET NOCOUNT ON

Go

 

Insert Into Paises Values(‘Brasil’),

(‘Jamaica’),

(‘Kiribati’),

(‘Papau Nova Guiné’),

(‘São Tomé e Príncipe’),

(‘Estônia’)

Go

 

 

 

— Inserindo a massa de dados de Impostos —

SET NoCount On

Go

 

Declare @Contador TinyInt

 

Set @Contador = 0

 

While @Contador < 255

Begin

 

Insert Into Impostos (IdPais, TaxaBase)

Values(IIF(@contador <=50, 1,

IIF(@Contador >=51 And @Contador <=100, 2,

IIF(@Contador >=101 And @Contador <=150, 3,

IIF(@Contador >=151 And @Contador <=200, 4,

IIF(@Contador >=201 And @Contador <=220, 5, 6))))),

RAND()*4)

 

Set @Contador = @Contador + 1

End

 

Perfeito, já temos nossa massa de dados criada, ambas as tabelas já estão populadas, vamos então simular um junção destes dados, posteriormente ver o plano de execução em seguida faremos uso da dmv sys.dm_exec_query_profiles para verificar em tempo real o processamento da nossa query, seguindo em frente com o Código 4:

 

 

— Código 4 – Inserindo a massa de dados –

Select P.Nome,

Sum(I.TaxaBase) As SomaTaxaBase,

Sum(I.TaxaEquilibrio) As SomaTaxaEquilibrio

From Impostos I Inner Join Paises P

On I.IdPais = P.Id

Group By P.Nome

Order By SomaTaxaEquilibrio

 

Neste momento acabamos de fazer uma simples consulta solicitando para o SQL Server que retorne a relação de países, com a soma das respectivas taxa base e taxa de equilíbrio. Para ilustrar o resultado desta query apresento a Figura 1:

progresso1

Figura 1 – Resultado da query executada no código 4.

Agora vamos ver o plano de execução utilizado por este mesma query, para isso apresenta a seguir a Figura 2:

progresso2

Figura 2 – Plano de execução utilizado pelo SQL Server para processar a query do código 4.

Mas você pode estar se pergunta, a onde esta a dmv sys.dm_exec_query_profiles, em qual parte do código ela foi utilizada, até agora em nenhuma parte, este será o nosso próximo passo. Para isso utilizaremos o Código 5:

— Código 5 – Monitorando o processamento da nossa query em tempo real —

— Atividando o monitoramento da nossa query —

SET STATISTICS PROFILE ON;

Go

 

— Executando a query —

Select P.Nome,

Sum(I.TaxaBase) As SomaTaxaBase,

Sum(I.TaxaEquilibrio) As SomaTaxaEquilibrio

From Impostos I Inner Join Paises P

On I.IdPais = P.Id

Group By P.Nome

Order By SomaTaxaEquilibrio Desc

Go

 

Observe que utilizamos a mesma query declarada na código 4, a diferença é que agora fizemos a declaração da diretiva SET STATISTICS PROFILE ON, onde estamos orientando o SQL Server a fazer todo monitoramente em tempo real da nossa query, sendo assim, teremos o seguinte resultado, conforme apresenta a Figura 3:

progresso3

Figura 3 – Resultado do monitoramento em tempo real do processamento do código 5.

Mas ainda não temos realmente um monitoramente próximo ao que esta sendo executado em nosso SQL Server, para isso acontecer tempo que fazer uso da sys.dm_exec_query_profiles ao mesmo tempo que nossa query esta sendo processada, sendo assim, podemos imaginar que somente querys que venham a demandar um custo de processamento considerável pela SQL Server poderão ser acompanhadas.

Vamos então, turbinar um pouco mais o nosso cenário, vamos criar uma nova tabela chamada BigTable, com base, nesta tablea vamos tentar acompanhar e monitorar nossa query. Vamos então utilizar o Código 6:

— Código 6 – Criando a BigTable –

— Criando a Tabela BigTable —

CREATE TABLE BigTable

(OrderID int NOT NULL IDENTITY(1, 1),

CustomerID int NULL,

OrderDate date NULL,

Value numeric (18, 2) NOT NULL)

GO

 

— Alterando a Tabela Adicionando Primary Key —

ALTER TABLE BigTable

ADD CONSTRAINT PK_BigTable PRIMARY KEY CLUSTERED  (OrderID)

GO

 

— Inserindo 5 Milhões de Linhas de Registro —

Insert Into BigTable(CustomerID, OrderDate, Value)

SELECT Top 15000000

ABS(CONVERT(Int, (CheckSUM(NEWID()) / 10000000))) As CustomerID,

CONVERT(Date, GetDate() – ABS(CONVERT(Int, (CheckSUM(NEWID()) / 10000000)))) As OrderDate,

ABS(CONVERT(Numeric(18,2), (CheckSUM(NEWID()) / 1000000.5))) As Value

FROM sysobjects a, sysobjects b, sysobjects c, sysobjects d

GO

 

A BigTable já esta criada e populada com uma grande massa de dados, podemos dar continuidade em nosso estudo, fazendo justamente o monitoramento da nossa query, para isso vamos utilizar o Código 7:

— Código 7 – Consulta pesada –

SELECT a.CustomerID,

CASE (SELECT AVG(b.Value)

FROM BigTable b

WHERE b.CustomerID = a.CustomerID)

WHEN 1000 THEN ‘Média = 1 mil’

WHEN 2000 THEN ‘Média = 2 mil’

WHEN 3000 THEN ‘Média = 3 mil’

WHEN 4000 THEN ‘Média = 4 mil’

WHEN 5000 THEN ‘Média = 5 mil’

ELSE ‘Não é número exato’

END AS Sts

FROM BigTable AS a

GROUP BY a.CustomerID

ORDER BY a.CustomerID

OPTION (MAXDOP 1)

 

Note que nossa query utiliza o operador Case, algo que normalmente consumo muito do SQL Server, além disso, estamos fazendo agrupamento de dados, organização e removendo o uso do paralelismo com a opção MaxDop 1.

Agora vamos para os finalmente, abra uma nova query, volta para a query que você declarou o código 7 faça com que o SQL Server execute esta query, retorne para nova query e execute o Código 8, apresentado a seguir:

 

— Código 8 – Monitorando nossa query pesada em tempo de execução –

SELECT  session_id ,

node_id ,

physical_operator_name ,

SUM(row_count) row_count ,

SUM(estimate_row_count) AS estimate_row_count ,

IIF(COUNT(thread_id) = 0, 1, COUNT(thread_id)) [Threads] ,

CAST(SUM(row_count) * 100. / SUM(estimate_row_count) AS DECIMAL(30, 2)) [% Complete] ,

CONVERT(TIME, DATEADD(ms, MAX(elapsed_time_ms), 0)) [Operator time] ,

DB_NAME(database_id) + ‘.’ + OBJECT_SCHEMA_NAME(QP.object_id,

qp.database_id) + ‘.’

+ OBJECT_NAME(QP.object_id, qp.database_id) [Object Name]

FROM    sys.dm_exec_query_profiles QP

GROUP BY session_id , node_id , physical_operator_name ,

qp.database_id , QP.OBJECT_ID , QP.index_id

ORDER BY session_id , node_id

GO

 

Pronto, era justamente isso que precisavamos, neste momento enquanto nossa query pessada esta sendo processada, o Microsoft SQL Server 2014, através da dmv sys.dm_exec_query_profiles encontra-se em tempo real realizando o monitoramento do progresso de execução do nosso Código 7, para ilustrar e comprovar apresento a Figura 4:

progresso4

Figura 4 – Monitoramento em tempo real da execução do Código 7.

Caso você não tenha notado, existe uma coluna declarada como % Complete, esta coluna é um dos principais marcadores ou melhor indicadores do acompanhamento e evolução do progresso de execução da nossa query. Para realmente comprovar este monitoramento, repita mais duas ou três vezes a execução do Código 8.

Provavelmente a nossa query ainda encontra-se em execução e o SQL Server poderá retornar novas informações sobre o andamento de processamento a qualquer momento, desta forma, chegamos ao final de mais este post.

Conclusão

Neste post foi possível destacar como o Microsoft SQL Server 2014 esta a frente das demais versões, principalmente no que se relacionamento a monitoramento em tempo real, através da Visão de Gerenciamento Dinâmico – Sys.dm_exec_query_profiles, a Microsoft introduziu um novo mecanismos que nos permite obter dados importantes do que nossa query ou transação esta fazendo naquele exatamente.

Acredito que esta funcionalidade venho justamente como forma de possibilitar aos profissionais de banco de dados e aqueles que trabalham com este tipo de tecnologia, como é possível entender e identificar em qual ponto do processamento de nossas querys o SQL Server esta apresentando maiores dificuldades ou até mesmo lentidão.

Além dos recursos já existentes, dentro eles o SQL Server Profiler, a sys.dm_exec_query_profiles, nos garante de forma simples, fácil, rápida e prática uma outra maneira de interpretar e reconhecer todos os passos necessário que o SQL Server usa para conseguir coletar e resultar os dados solicitados á ele.

Mais uma vez a Microsoft inovou, mostrou como é possível evoluir uma ferramenta tão fantástica quando o SQL Server, sem impactar em sua estrutura, forma de trabalho e configurações, com certeza é um grande passo alcançado com esta nova feature.

Agradeço a você por sua visita, espero que tenha gostado deste artigo, fique a vontade para compartilhar com seus contatos.

Nos encontramos em breve.

Até mais.

Usuários apressados em usar o Windows 10 são as novas vítimas dos hackers

Posted on


Windows 10

A ansiedade de testar logo o Windows 10 tem deixado alguns usuários com sérios problemas em seus computadores. Como a Microsoft está liberando a atualização em etapas, hackers estão se aproveitando para atingir os alvos que não estão dispostos a esperar ainda mais pelo novo sistema operacional.

De acordo com a Talos Group, empresa de segurança da Cisco, os cibercriminosos estão enviando e-mails para os usuários oferecendo propostas de atualização imediata para o Windows 10. O remetente engana, pois parece legítimo e a mensagem ainda possui truques como indicações de que o e-mail passou por um serviço de antivírus e está seguro.

E-mail falso Windows 10

A mensagem oferece um programa executável que supostamente instala a atualização imediatamente, mas quando é executado dispara um alerta informando que houve um ataque do tipo ransomware. A praga utilizada é a CTB-Locked, que criptografa todos os dados da máquina, os trancando e exigindo um pagamento para resgate em até 96 horas. Inclusive, os donos dos computadores são ameaçados com mensagens para que o malware não seja deletado, caso contrário todas as informações serão perdidas.

A Cisco ainda reforça que a Microsoft não oferece atualização para o Windows 10 por e-mail, mesmo para os usuários que reservaram a sua cópia. O update é feito somente nos canais oficiais, seja com a compra da licença na Windows Store ou atualizando a cópia do Windows 7, e 8.1.

Fonte: Cisco