Microsoft Visual Studio 2019 – Lançamento oficial em 02 de Abril


No decorrer desta semana a Microsoft informou na página oficial do Visual Studio, a data de lançamento oficial da próxima versão conhecida como 2019.

A Microsoft lançou o primeiro preview do Visual Studio 2019 em dezembro de 2018, mas ela está se preparando para iniciá-lo a todos em breve. Visual Studio 2019 terá um evento formal para seu lançamento, muito em breve, no dia em 2 de abril, um dia inteiro repleto de sessões sendo transmitido ao vivo e Q&A de oportunidades para desenvolvedores disponível mundo a fora.

Visual Studio 2019 virá com várias melhorias, incluindo vários ajustes da interface do usuário e AI. A alteração mais óbvia se relaciona com sua nova tela de início, que foi redesenhada para trabalhar com repositórios Git. Uma vez que você começou um projeto, você vai notar mais mudanças de interface do usuário, como um novo ícone, um tema azul e uma interface mais limpa.

Além disso, a inclusão do chamado IntelliCode AI permite ao Visual Studio poder ser treinado em seus próprios repositórios, tornando-o melhor em sugerir padrões que são comuns aos projetos de codificação.

O mais recente lançamento também inclui compartilhamento que possibilita conhecer este novo padrão de desenvolvimento, algo que oferecer a quem esta utilizando o Visual Studio colaborar com outros em projetos de codificação.

Existem também melhorias de desempenho mais gerais, e você pode ter uma noção completa do que é novo com Visual Studio 2019, verificando notas de versão da Microsoft.

Para obter mais informações sobre o evento dedicado ao lançamento desta nova versão, acesse: Visual Studio 2019.

Fontes e Direitos Autorais: WindowsCentral.com – Dan Thorp-Lancaster  – 14/02/2019.

Windows 10 19H 1: novas alterações são reveladas


Microsoft está agora a trabalhar na próxima atualização para o Windows 10, codinome 19H característica 1 e programado para lançamento neste mês de abril. Esta atualização deverá incluir ainda mais mudanças, novas funcionalidades e mais refinamentos da interface do usuário e melhorias. Desenvolvimento deste lançamento é quase na marca do outro, ou seja, que não deve demorar muito tempo antes de 19H 1 é marcado como “característica completa” internamente e um foco na correção de bugs antes de lançamento começa.

  • Um novo tema de luz está disponível que fica na barra de tarefas, menu iniciar e outras áreas do Windows Shell branca.
  • Sombras estão agora presentes sob vários elementos de interface do usuário, incluindo menus de contexto do XAML e a janela pop-ups.
  • A tela de login agora apresenta efeitos de desfoque de acrílico.
  • O painel de Emoji é agora capaz de arrastar.
  • Emoji 12, Kaomoji e símbolos estão disponíveis no painel de Emoji.
  • Um novo ícone “globo” desconectado está presente na bandeja do sistema quando desconectado da internet.
  • Foco auxiliar irá agora automaticamente acender quando entrar em tela cheia em um aplicativo.
  • Você agora pode personalizar ações rápidas diretamente dentro do centro de ação.
  • Um novo controle de brilho está presente na área de ações rápidas no centro da acção.
  • O papel de parede padrão foi atualizado com cores mais claras e uma estética mais plana.
  • Ferramenta de recorte agora suporta recorte de janela para screenshotting fácil do windows app.
  • Iniciar e barra de tarefas saltar recurso de agora listas fluente projeto revelar e efeitos de desfoque.
  • Os poder e conta de menus no menu iniciar como inclui ícones.
  • O layout padrão do Start menu foi simplificado, agora usando uma única coluna, com uma configuração mais limpa.
  • Você agora pode desafixar grupos toda telha ao vivo no menu iniciar.
  • O ícone de arquivo Explorer agora é ligeiramente mais escuro se encaixar melhor com o tema luz.
  • Jogo de Bar foi atualizado com uma nova interface do usuário.
  • Nuvem de transferência interface do usuário foi ajustada para melhor uso de teclado e mouse de suíte.
  • Encontros amigáveis são agora o formato de data padrão no arquivo Explorer.

Pesquisa e Cortana

  • Pesquisa apresenta uma nova página de aterragem para atividades recentes e categoria da interface do usuário ao longo do topo.
  • Pesquisa e Cortana agora são separados.

Configurações

 

  • Homepage de configurações tem um novo banner personalizado na parte superior, que oferece acesso rápido a Microsoft Rewards, OneDrive, seu telefone e atualizações.
  • Os usuários podem agora tema o Shell do Windows separadamente do apps com um novo modo de cor personalizada.
  • Agora, você pode usar o aplicativo de configurações para definir configurações avançadas de Ethernet IP, incluindo configuração de endereços IP estáticos e configurações de servidor DNS preferenciais.
  • Gerenciador de tarefas agora irá dizer-lhe que os apps são dimensionamento por monitor ou pelo sistema.
  • Olá Windows configurações foram redesenhadas com uma experiência de usuário mais limpa.
  • Agora, você pode configurar uma chave de segurança diretamente nas configurações.
  • Um novo modo de pesquisa avançada fornece controle granular sobre arquivo pesquisando para aumento de desempenho.
  • Configurações de armazenamento foram atualizadas com um novo design e experiência de usuário mais limpa.
  • Agora, você pode desinstalar vários aplicativos de caixa de entrada mais incluindo:
    • Visualizador 3D.
    • Calculadora.
    • Calendário.
    • Música do sulco.
    • Correio.
    • Filmes & TV.
    • Pintura 3D.
    • Recorte & Sketch.
    • Notas autoadesivas.
    • Gravador de voz.
  • Um novo sistema de solução de problemas está presente e usa dados de diagnóstico enviados do seu PC para entregar um conjunto de correções de problemas que foram detectados no seu dispositivo de correspondência.
  • Microsoft agora irá recomendar uma correção quando o Windows detecta um problema.
  • “Correção de escalonamento para aplicações legadas” agora é ativada por padrão.
  • Atualização do Windows foi atualizada com um novo layout que traz várias funções, incluindo atualizações de pausa, horas ativas inteligentes e muito mais.
  • Horas de ativas inteligentes ajusta-se automaticamente seus conjunto ativas horas dependendo se mudam de suas horas de uso para evitar a falta de instalar uma atualização enquanto não interromper seu fluxo de trabalho.
  • Agora você pode sincronizar manualmente o relógio do sistema com a Microsoft para timekeeping exato.
  • Agora, você pode ajustar o tamanho do cursor.
  • Agora, você pode criar novas sem senha Microsoft Accounts com apenas um número de telefone.
  • Windows Enterprise 10 agora pode usar o reinício automático e Sign-On.
  • A experiência de redefinição de pin foi refinada.

Apps

  • Um novo aplicativo de escritório está presente e fornece acesso rápido aos seus documentos recentes e Office web apps.
  • O menu “Configurações e mais…” na borda agora pode quebrar fora da janela do aplicativo.

Diversas alterações

  • Corrigido um problema resultando no botão voltar em configurações e outros aplicativos, tornando-se o texto branco sobre um fundo branco se você pairou sobre ele.
  • Você agora pode ler ADLaM documentos e páginas da Web com a Windows jose fonte.
  • Um ícone de microfone está presente na bandeja do sistema quando o microfone estiver em uso.
  • Pressionando F4 quando no Editor do registro agora colocará o cursor no final da barra de endereço, expandindo a lista suspensa AutoCompletar.
  • Você pode agora ler frases próxima, atuais e anteriores no narrador.
  • Telex vietnamita e número baseada em chave teclados estão agora disponíveis.
  • Já está disponível para PC índicos fonético teclados.
  • Mais símbolos estão disponíveis sobre o teclado de toque.
  • Narrador agora irá alertá-lo quando você acidentalmente está digitando com Caps Lock ligado.
  • A caixa de diálogo impressão moderna agora suporta o tema luz.
  • O teclado de toque agora invisivelmente dinamicamente ajustar pontos para letras com base em como você digita.
  • Narrador tem uma nova experiência em casa que lhe permite lançar em características específicas do narrador.
  • Sandbox Windows vamos Pro e Enterprise usuários executados uma instância virtual do Windows 10 em cima de seu ativo instalam para testar apps.
  • Agora, você pode definir uma Tabulação padrão no Gerenciador de tarefas.
  • Agora você pode redimensionar o cursor através de um controle deslizante, com até 15 tamanhos diferentes para escolher.
  • 10 Windows Home usuários agora terá luz modo habilitado por padrão, depois de instalar um limpo. Windows 10 Pro e Enterprise continua a usar o modo escuro habilitado por padrão.

Fontes e Direitos Autorais: WindowsCentral.com – 07/01/2019 – Zac Bowden. https://www.windowscentral.com/windows-10-19h1-changelog

Microsoft Hyper-V Server 2019 disponível


Em conjunto com o anúncio da nova versão do Windows Server 2019, a Microsoft anunciou também a disponibilidade o Hyper-V Server 2019, produto gratuito que oferece virtualização de classe empresarial para seu datacenter e sua nuvem híbrida.

Através do Microsoft Hyper-V Server 2019 você poderá utilizar recursos novos e aprimorados que podem ajudar a suprir as necessidades de performance e escala das suas cargas de trabalho de missão crítica.

O Microsoft Hyper-V Server 2019 está disponível para download como um arquivo ISO apenas para plataformas 64 bits e nos seguintes idiomas:

Chinês (simplificado), Chinês (tradicional), Inglês, Francês, Alemão, Italiano, Japonês, Coreano, Português (Brasil), Russo e Espanhol.

Fontes e Direitos Autorais: Microsoft.com – Evaluation Center – 03/10/2019.

Microsoft SQL Server 2016 SP1 – Atualização Cumulativa 9


A Microsoft disponibilizou para download nesta semana a Atualização Cumulativa 6 para SQL Server 2016 SP1.

Atualização Cumulativa 6 para SQL Server 2016 SP1

O artigo KB4037354 com informações sobre o que a atualização traz de novo ainda não está disponível, publicado aqui pela Microsoft.

A tabela a seguir lista o status de artigos individuais da Base de conhecimento Microsoft. 

Número de bug do VSTS Número de artigo do KB Descrição Corrigir a área
10918636 4049027 CORREÇÃO: Erro de “AdomdConnectionException” quando a fonte de dados do SSRS 2016 usa msmdpump O Reporting Services
10868757 4040512 CORREÇÃO: Erro ao exportar um relatório do Reporting Services para PDF no SQL Server 2017 O Reporting Services
10868767 4039510 CORREÇÃO: Violação de acesso ocorre quando você usar sp_xml_preparedocument para abrir documentos XML no SQL Server 2014 ou 2017 XML
10067707 4019840 CORREÇÃO: Consultas em tabelas externas PolyBase retornam linhas duplicadas no SQL Server de 2016 e 2017 Mecanismo do SQL
10362525 4035062 CORREÇÃO: Uso de memória com muitos bancos de dados maiores no SQL Server 2016 que versões anteriores Mecanismo do SQL
11078704 4039592 CORREÇÃO: Não pode alterar a senha para um SQL Server 2014 ou 2016 conta de serviço quando é habilitada para proteção adicional da LSA Ferramentas de gerenciamento
11078711 4042232 CORREÇÃO: Violação de acesso quando você cancelar uma consulta pendente se os desaparecidos indexa o recurso está habilitada no SQL Server de 2014 e 2016 Desempenho de SQL
11078718 4043947 CORREÇÃO: Funcionalidade de favoritos não funciona completamente quando você abre um relatório em formato MHTML através do Outlook no SSRS 2014 e 2016 O Reporting Services
10868753 4033789 FIX: Um vazamento de memória pode ocorrer quando você executar operações de atualização de processo no SSAS Serviços de análise
10868722 4038882 FIX: SQL Server Backup gerenciado não exclui os backups antigos que estão para além do período de retenção no SQL Server Mecanismo do SQL
10868738 4039509 CORREÇÃO: SSAS falha quando você processa um cubo no SQL Server ou um banco de dados do SSAS Serviços de análise
10868725 4039511 CORREÇÃO: Conseguiu falhar Backup intermitentemente por causa de erro SQLVDI no SQL Server Mecanismo do SQL
10868770 4039735 CORREÇÃO: “Non-produzindo Scheduler” condição ocorre para consulta com muitas expressões em SQL Server 2014 e 2016 Desempenho de SQL
10868732 4040376 CORREÇÃO: Backup gerenciado no Microsoft Azure para depois de backup de banco de dados grande no SQL Server Mecanismo do SQL
11052450 4046056 CORREÇÃO: Afirmação ocorre sobre como acessar a tabela de memória otimizada através de Marte Mecanismo do SQL
10864945 3010148 CORREÇÃO: Papel Non-admin não pode receber correto ChildCount estimativas para membros da folha dimensão pai/filho no SSAS Serviços de análise
10965956 4034789 CORREÇÃO: Um erro de exceção inesperada ocorre quando uma medida de XTIR processa muitos registros no SSAS 2016 ou 2017 Serviços de análise
10870250 4040934 CORREÇÃO: Pacotes de serviço do SQL Server Integration pendurar aleatoriamente se log personalizado está habilitado Serviços de integração
11029968 4051356 CORREÇÃO: Restauração de banco de dados na memória falha com erros no SQL server 2016 Na memória OLTP
11031436 4052133 CORREÇÃO: Violação de acesso ocorre quando SQL Server 2016 tenta iniciar o Gerenciador de loja de consulta durante a inicialização Mecanismo do SQL
10980994 4052132 FIX: Um problema de Agendador não produzindo ocorre quando você usar o recurso de armazenamento de consulta do SQL Server no SQL Server Mecanismo do SQL
11124144 4052127 Hotfix: Mecanismo de alerta lê todo Log de eventos do aplicativo e envia aler Ferramentas de gerenciamento
10855950 4052125 CORREÇÃO: Log de auditoria para eventos de ROLLBACK TRANSACTION não está disponível no SQL Server 2016 Segurança do SQL
11060168 4052123 CORREÇÃO: Deslizamento de validade para o cookie de autenticação não está funcionando e falha redirecionar para a página de logon no SSRS 2016 O Reporting Services
11031058 4052121 CORREÇÃO: Violação de acesso para consultas de DMV correr contra um grupo de disponibilidade distribuídas no SQL Server Alta disponibilidade
10971673 4052119 CORREÇÃO: Transações distribuídas em um banco de dados AG falhar depois de reiniciar no SQL Server 2016 Mecanismo do SQL
10881290 4052131 CORREÇÃO: Sys.dm_os_windows_info Detran retorna valores errados para 10 de Windows e Windows server 2016 Mecanismo do SQL
10864854 4052572 CORREÇÃO: 2016 SSAS trava intermitentemente quando você renomear o banco de dados multidimensional usando script Serviços de análise
11127649 4052625 CORREÇÃO: Consultas de recuperação de dados usando a busca de índice não-agrupado demoram muito no SQL Server Mecanismo do SQL
10820931 4048942 CORREÇÃO: “Parado IOCP Listener” e “não produzidas IOCP ouvinte” dumps de memória gerado pelo SQL Server 2016 reiniciar Mecanismo do SQL
10921921 4048943 CORREÇÃO: Violação de acesso na réplica primária da AlwaysOn AG em SQL Server 2016 Alta disponibilidade
11018232 4046858 CORREÇÃO: Consulta que usa o plano de execução de consulta paralela com operação “merge join” lenta na atualização cumulativa 3, 4 ou 5 para SQL Server 2016 Service Pack 1 Desempenho de SQL
10935673 4052633 CORREÇÃO: Consulta SELECT que usa hash de modo lote operador agregado que conta várias colunas anuláveis retorna incorreto resulta em SQL Server Desempenho de SQL
10330560 4053550 CORREÇÃO: Processamento mensagem XML usando o Service Broker resulta em sessão pendurada no SQL Server 2016 Mecanismo do SQL
10678621 4037454 CORREÇÃO: Política de gerenciamento de diretiva não está funcionando depois de instalar o CU2 para SQL Server SP1 de 2016 Ferramentas de gerenciamento
10972567 4043624 CORREÇÃO: Limpeza manual de controle de alterações falhar com o erro de não-existência de tabela no SQL Server Mecanismo do SQL
10868776 3208545 FIX: SQL Server 2016 ou 2017 Analysis Services pode falhar em uma situação específica Serviços de análise
10868735 4022483 CORREÇÃO: Erro quando você exporta uma base de conhecimento DQS que contém domínios no cliente DQS no SQL Server Serviços de qualidade de dados (DQS)
10868748 4040401 CORREÇÃO: Violação de acesso para consulta a tipos de dados espaciais através de servidor vinculado no SQL Server Mecanismo do SQL
10930335 4044064 CORREÇÃO: Erro de “Solicitação expirou” quando você alterar as opções de segurança para um grupo de segurança MDS no SQL Server 2016 Serviços de qualidade de dados (DQS)
10934352 4045795 CORREÇÃO: Thread pool exaustão e contenção CMEMTHREAD na AAG com dados semeadura em SQL Server 2016 Mecanismo do SQL

A Atualização Cumulativa 6 para SQL Server 2016 SP1 está disponível para download aqui.

Fontes e Direitos Autorais: Microsoft Support – 21/11/2017 –https://support.microsoft.com/en-us/help/4037354/cumulative-update-6-for-sql-server-2016-sp1

Microsoft SQL Server 2016 – Atualização Cumulative 9


A Microsoft disponibilizou para download nesta semana a Atualização Cumulativa 9 para SQL Server 2016.

Atualização Cumulativa 9 para SQL Server 2016

De acordo com o artigo KB4037357 publicado pela Microsoft em seu site de suporte, esta atualização contém correções para os problemas que foram encontrados depois do lançamento do SQL Server 2016 e antes do lançamento do SQL Server 2016 SP1.

Entre os bugs corrigidos pela atualização estão um que causa um erro ao exportar um relatório do Reporting Services em PDF, um que faz com que uma violação de acesos ocorra quando você usar sp_xml_preparedocument para abrir documentos XML no SQL Server e um que causa o vazamento de memória quando você executa operações de atualização de processo no SSAS.

A tabela a seguir lista o status de artigos individuais da Base de conhecimento Microsoft.

Número de bug do VSTS Número de artigo do KB Descrição Corrigir a área
10868755 4040512 CORREÇÃO: Erro ao exportar um relatório do Reporting Services para PDF no SQL Server 2016 ou 2017 O Reporting Services
10868765 4039510 CORREÇÃO: Violação de acesso ocorre quando você usar sp_xml_preparedocument para abrir documentos XML no SQL Server XML
11078703 4039592 CORREÇÃO: Não pode alterar a senha para um SQL Server 2014 ou 2016 conta de serviço quando é habilitada para proteção adicional da LSA Ferramentas de gerenciamento
11078710 4042232 CORREÇÃO: Violação de acesso quando você cancelar uma consulta pendente se os desaparecidos indexa o recurso está habilitada no SQL Server de 2014 e 2016 Desempenho de SQL
11078717 4043947 CORREÇÃO: Funcionalidade de favoritos não funciona completamente quando você abre um relatório em formato MHTML através do Outlook no SSRS 2014 e 2016 O Reporting Services
10868752 4033789 FIX: Um vazamento de memória pode ocorrer quando você executar operações de atualização de processo no SSAS Serviços de análise
11077635 4035062 CORREÇÃO: Uso de memória com muitos bancos de dados maiores no SQL Server 2016 que versões anteriores Mecanismo do SQL
10868720 4038882 FIX: SQL Server Backup gerenciado não exclui os backups antigos que estão para além do período de retenção no SQL Server Mecanismo do SQL
10868737 4039509 CORREÇÃO: SSAS falha quando você processa um cubo no SQL Server ou um banco de dados do SSAS Serviços de análise
10868724 4039511 CORREÇÃO: Conseguiu falhar Backup intermitentemente por causa de erro SQLVDI no SQL Server Mecanismo do SQL
10868769 4039735 CORREÇÃO: “Non-produzindo Scheduler” condição ocorre para consulta com muitas expressões em SQL Server 2014 e 2016 Desempenho de SQL
11078700 4040108 CORREÇÃO: O Backup do banco de dados de disponibilidade através de aplicativo baseado em VSS pode falhar no SQL Server Mecanismo do SQL
10868731 4040376 CORREÇÃO: Backup gerenciado no Microsoft Azure para depois de backup de banco de dados grande no SQL Server Mecanismo do SQL
11061122 4046056 CORREÇÃO: Afirmação ocorre quando você acessar a tabela de memória otimizada através de Marte em 2016 de SQL Server Mecanismo do SQL
11057320 4052134 CORREÇÃO: Erros 33111 e 3013 quando você fazer backup de um TDE criptografada de dados no SQL Server Mecanismo do SQL
11124143 4052127 CORREÇÃO: O mecanismo de alerta lê o log de eventos do aplicativo completo e envia alertas sobre eventos antigos depois Windows é atualizado Ferramentas de gerenciamento
10881287 4052131 CORREÇÃO: Sys.dm_os_windows_info Detran retorna valores errados para 10 de Windows e Windows Server 2016 Mecanismo do SQL
11127656 4052625 CORREÇÃO: Consultas que recuperam dados por meio de busca de índice não-agrupado demorar mais no SQL Server Mecanismo do SQL
10870632 4042948 CORREÇÃO: Assinatura controlada por dados falha após você atualizar do SSRS 2008 a 2016 SSRS O Reporting Services
10868734 4022483 CORREÇÃO: Erro quando você exporta uma base de conhecimento DQS que contém domínios no cliente DQS no SQL Server Serviços de qualidade de dados (DQS)
10868746 4040401 CORREÇÃO: Violação de acesso para consulta a tipos de dados espaciais através de servidor vinculado no SQL Server Serviço do SQL

A Atualização Cumulativa 9 para SQL Server 2016 está disponível para download aqui.

Fonte e Direitos Autorais: Microsoft Support – 21/11/2017 – https://support.microsoft.com/en-us/help/4037357/cumulative-update-9-for-sql-server-2016

Dica do Mês – Conhecendo e aplicando o uso de atualização de estatísticas incrementais


Muito boa tarde pessoal, salve, salve comunidade e amantes de banco de dados.

Tudo bem com vocês? Estou aqui mais uma vez em um novo post do meu blog na sessão Dica do Mês, hoje falando de um assunto que até alguns dias atrás eu sinceramente nunca havia feito uso, mas com base em um post publicado do Ahmad Yaseen no MSSQLTips.com, acabou me servindo como fonte de inspiração para elaborar e compartilhar este post com vocês.

Antes de começarmos a falar sobre o post de hoje, nada mais justo começar agradecendo como de costume a você está aqui neste momento acessando meu blog. Espero que possa ter encontrado o que precisa, bem como, esteja gostando do conteúdo publicado, fique a vontade para entrar em contato expressando suas opiniões e demais pensamentos.

Dando continuidade, vamos conhecer um recurso adicionado na versão 2014 do Microsoft SQL Server a partir do Service Pack 2 e mantido no Microsoft SQL Server 2016 SP1 conhecido como Estatísticas Incrementais ou Incremental Statistics, pode parecer estranho o nome, mas é exatamente isso que este recurso permite, realizar o processo de atualização de estatísticas de maneira incremental, ou para muitos incrementar o processo de atualização de estatísticas aplicadas aos nossos bancos de dados e seus respectivos objetos.

Parece ser coisa de louco isso, mas posso garantir que não é, absolutamente é algo totalmente viável e aplicável a qualquer ambiente que se faça uso do Microsoft SQL Server em conjunto com as funções e scheme de particionamento de dados.

E ai esta curioso para saber um pouco sobre este recurso?

Eu estou, sendo assim, vamos em frente, seja bem vindo ao post Dica do Mês – Conhecendo e aplicando o uso de atualização de estatísticas incrementais.

Seguindo….


Introdução

O otimizador de consultas do Microsoft SQL Server depende fortemente das estatísticas na geração a execução de plano de consulta mais eficiente. Estas estatísticas fornecem ao otimizador a distribuição dos valores de colunas na tabela e o número de linhas, também chamada a cardinalidade que resultará da consulta.

A ausência destas estatísticas, ou a existência de estatísticas desatualizadas, proporciona a ocorrência de querys consideradas lentas, neste sentido, o otimizador de consulta “query optimizer” acaba sendo obrigado a utilizar estatísticas imprecisas para criar o plano de execução, que pode ser considerado um plano não ideal para executar a consulta neste caso.

O SQL Server geralmente faz o seu trabalho em manter estas estatísticas atualizadas, mas como um administrador de banco de dados, você deve fazer seu trabalho, em alguns casos, atualizando as estatísticas manualmente. Atualizar estatísticas manualmente em tabelas grandes pode ser como um grande desafio, bem como, em tabelas pequenas pode-se imaginar que a estatística já esteja atualizada, o que em alguns cenários isso acaba não ocorrendo.

Um dos cenários mais impactados pelo uso de estatísticas desatualizadas ou atualizadas parcialmente são as tabelas particionadas. Como destacado anteriormente através do uso das funções de particionamento de dados introduzido no Microsoft SQL Server 2008, temos a capacidade de distribuir nossos dados em partições “pequenos fatias de armazenamento de dados” que nos possibilitar distribuir respectivos valores com base em uma função que análise e identifica o local de armazenamento do mesmo.

Para este tipo de ambiente, o uso de estatísticas como mecanismo para auxiliar no obtenção mais rápida do dado, pode apresentar simultaneamente o papel de herói como também de vilão, isso pode parecer meio confusão, mas não é! Basicamente quando trabalhamos com estatísticas acreditamos que sempre teremos todas as informações armazenados no histograma atualizadas de forma automática de maneira mais precisa possível, algo que não acontece exatamente desta maneira quando trabalhando com particionamento de dados.

Uma das situações mais comuns quando se uso particionamento de dados é a possibilidade de ocorrer a atualização de estatísticas de maneira parcial, ou seja, apena um partição de todo estrutura de partições acaba tendo suas informações de estatísticas atualizadas, o que poderá provocar uma alteração no plano de execução ou a possibilidade de criação de um plano incoerente.

Sabendo desta possibilidade e comportamento, o time de engenheiros e desenvolvedores do Microsoft SQL Server, implementou a partir da versão 2014 SP1 as Estatísticas Incrementais, funcionalidade que nos permite justamente contornar este tipo de situação.

Estatísticas Incrementais – Incremental Statistics

As estatísticas Incrementais, ajudam na atualização de estatísticas para apenas a partição ou partições que você escolher. Em vez de analisar e varrer a tabela inteira para atualizar as estatísticas, a partição selecionada será verificada somente para a atualização, reduzindo o tempo necessário para executar a operação de atualização de estatísticas, atualizando-se apenas a partição modificada.

O outro ponto importante é que a porcentagem de alterações de dados necessário para acionar a atualização automática de estatísticas, sendo este o valor 20% de linhas alteradas, o que proporcionará o uso de atualização de estatísticas no nível da partição, comportamento que não era permitido anteriormente.

Muito legal este novo recurso e principalmente o comportamento do Microsoft SQL Server, agora que já conhecemos conceitualmente como as estatísticas incrementais funcionam, chegou a hora de colocar as mãos no teclado e começar a conhecer de maneira prática esta funcionalidade.

Preparando o ambiente

Para entender a atualizar as estatísticas incrementais, vamos preparar um banco de dados de teste com uma tabela particionada. Começamos com a criação de um novo banco de dados denominado IncrementalStatistics, formado por quatro novos grupos de arquivos além de grupo de arquivos primário padrão, para tal vamos utilizar o Bloco de Código 1 apresentado a seguir:

— Bloco de Código 1 —

— Criando o Banco de Dados IncrementalStatistics —
Create Database IncrementalStatistics
Go
— Adicionando os Filegroups —
Alter Database IncrementalStatistics
Add Filegroup IncrementalStatisticsGrupo1
Go
Alter Database IncrementalStatistics
Add Filegroup IncrementalStatisticsGrupo2
Go
Alter Database IncrementalStatistics
Add Filegroup IncrementalStatisticsGrupo3
Go
Alter Database IncrementalStatistics
Add Filegroup IncrementalStatisticsGrupo4
Go

 

— Adicionando os Arquivos aos seus respectivos Filegroups —

Alter Database IncrementalStatistics
Add File (Name = N’IncrementalStatisticsGrupo1′,
FileName = N’S:\MSSQL-2016\Data\Arquivo-Grupo1-Data.ndf’,
Size = 4096KB,
FileGrowth =1024KB) To Filegroup IncrementalStatisticsGrupo1
Go

Alter Database IncrementalStatistics
Add File (Name = N’IncrementalStatisticsGrupo2′,
FileName = N’S:\MSSQL-2016\Data\Arquivo-Grupo2-Data.ndf’,
Size = 4096KB,
FileGrowth =1024KB) To Filegroup IncrementalStatisticsGrupo2
Go

Alter Database IncrementalStatistics
Add File (Name = N’IncrementalStatisticsGrupo3′,
FileName = N’S:\MSSQL-2016\Data\Arquivo-Grupo3-Data.ndf’,
Size = 4096KB,
FileGrowth =1024KB) To Filegroup IncrementalStatisticsGrupo3
Go

Alter Database IncrementalStatistics
Add File (Name = N’IncrementalStatisticsGrupo4′,
FileName = N’S:\MSSQL-2016\Data\Arquivo-Grupo4-Data.ndf’,
Size = 4096KB,
FileGrowth =1024KB) To Filegroup IncrementalStatisticsGrupo4
Go

Uma vez que o banco de dados é criado com os novos grupos de arquivos e arquivos de dados, precisamos prepará-lo para hospedar a tabela particionada. Nosso próximo passo consiste na criação da função particionada PartitionFunctionIncrementalStatistics que classifica os dados de acordo com os quatro trimestres do ano, sendo assim, vamos utilizar o Bloco de Código 2 apresentado abaixo:

— Bloco de Código 2 —

— Criando a Partition Function PartitionFunctionIncrementalStatistics —
USE IncrementalStatistics
GO

CREATE PARTITION FUNCTION PartitionFunctionIncrementalStatistics (Int)
AS
RANGE RIGHT FOR VALUES
(20171, 20172, 20173, 20174)
Go

Note que nossa PartitionFunctionIncrementalStatistics é composta por quatro partições de valores subdivididos da seguinte forma: 

  • 20171 – Valor que representa o Primeiro Quartil;
  • 20172 – Valor que representa o Segundo Quartil;
  • 20173 – Valor que representa o Terceiro Quartil do Ano; e
  • 20174 – Valor que representa o Quarto Quartil do Ano.

    Talvez você ainda não esteja entendendo o porque estamos fazendo uso deste tipo de implementação, tenha calma no decorrer do post tudo vai ficar mais claro e você terá total noção do porquê estamos utilizando este recurso.

Continuando com a nossa longa caminhada, você deve saber que para se trabalhar com particionamento de dados devemos além de criar uma Partition Function devemos obrigatoriamente criar um Partition Scheme,  que estará vinculado lógicamente a nossa partition function, sendo assim, este é nosso próximo passo, fazendo uso do Bloco de Código 3:

— Bloco de Código 3 —

— Criando o Partition Scheme PartitionSchemeIncrementalStatistics —
CREATE PARTITION SCHEME PartitionSchemeIncrementalStatistics AS
PARTITION PartitionFunctionIncrementalStatistics
TO
(
IncrementalStatisticsGrupo1,
IncrementalStatisticsGrupo2,
IncrementalStatisticsGrupo3,
IncrementalStatisticsGrupo4,
[PRIMARY])
Go

Esta quase tudo pronto para nossa brincadeira, seguiremos com a criação na nossa tabela TableIncrementalStatistics, este é um ponto importante do nosso ambiente, onde estamos fazendo uso da tabela particionada para ilustrar como as estatísticas incrementais vão realizar o seu papel.

TableIncrementalStatistics será composta por algumas colunas, dentre as quais a coluna Quartil, responsável em armazenar o valor do quartil de acordo com o ano informado, como também, é através desta coluna que estaremos realizando o particionamento dos dados. Para isso utilizaremos o Bloco de Código 4 a seguir:

— Bloco de Código 4 —

— Criando a Tabela TableIncrementalStatistics —

CREATE TABLE TableIncrementalStatistics
(ID Int Null,
Acao NVarchar(40) Default NewID(),
Data DateTime Null,
Quartil  AS (datepart(year,[Data])*(10)+datepart(quarter,[Data])) PERSISTED
) ON PartitionSchemeIncrementalStatistics (Quartil)
Go

Ótimo, toda estrutura para armazenar nossos dados já esta pronta, bem como, a lógica para distribuir e particionar os dados que serão inseridos na tabela TableIncrementalStatistics.

Ufa, ainda temos um bom caminho pela frente, mas já avançamos bastante, agora temos realizar uma alteração nas configurações do nosso banco de dados IncrementalStatistics, sendo esta necessária para podermos aplicara o uso de estatísticas incrementais, estou me referindo a opção Auto Create Statistics muito conhecida, onde vamos alterar o seu valor default para Incremental = On, conforme apresenta o Bloco de Código 5 abaixo:

— Bloco de Código 5 —

— Habilitando o uso de Incremental Statistics —
Alter Database IncrementalStatistics
Set Auto_Create_Statistics On (INCREMENTAL = On)
Go

O próximo passo consiste na criação do índice que iremos utilizar em na TableIncrementalStatistics pois você deve ter notado que realizamos a criação da tabela sem a definição de uma chave primária, desta maneira  utilizamos o Bloco de Código 6 para criação dos respectivo índice em seguida confirmamos se esta tabela esta fazendo uso das estatísticas incrementais habilitada no bloco de código 5:

— Bloco de Código 6 —

— Criação do índice Clustered —
Create Clustered Index Ind_TableIncrementalStatistics_ID
On [TableIncrementalStatistics] (ID)
GO

— Confirmando se as estatísticas incrementais está habilita —
SELECT
OBJECT_NAME(object_id) TableName
,name
,is_incremental
,stats_id
FROM sys.stats
WHERE name = ‘Ind_TableIncrementalStatistics_ID’
Go

Figura 1 – Confirmando o uso das estatísticas incrementais no índice Ind_TableIncrementalStatistics_ID.

Observação: Note que ao executar o Select realizado na visão de sistema sys.stats a coluna Is_Incremental deverá retornar e apresentar o valor igual á 1, isso indica que TableIncrementalStatistics esta neste momento fazendo uso das estatísticas incrementais.

Muito bem, chegou a hora de popular nossas tabelas, realizaremos a inserção de 8.000 linhas de registros, sendo estes particionados em grupos de 2.000 registros para cada partição que forma e compõem a estrutura da nossa tabela. Vamos então utilizar o Bloco de Código 7 apresentado na sequência:

— Bloco de Código 7 —

— Inserindo os dados na TableIncrementalStatistics —
Insert Into TableIncrementalStatistics (ID, Data)
Values (1, ‘2017-11-22’)
Go 2000

Insert Into TableIncrementalStatistics (ID, Data)
Values (2, ‘2017-06-05’)
Go 2000

Insert Into TableIncrementalStatistics (ID, Data)
Values (3, ‘2017-01-25’)
Go 2000

Insert Into TableIncrementalStatistics (ID, Data)
Values (4, ‘2017-08-13’)
Go 2000

Após a inserção das 8.000 linhas de registros, vamos confirmar a distribuição dos dados através do Bloco de Código 8 declarado abaixo, conforme ilustra o resultado da Figura 2:

— Bloco de Código 8 —

— Consultando a distribuição e particionamento dos dados —
Select partition_number, rows
From sys.partitions
Where OBJECT_NAME(OBJECT_ID)=’TableIncrementalStatistics’
Go

Figura 2 – Distribuição dos dados na tabela TableIncrementalStatistics de acordo com o valor e partição.

Estamos chegando no final, agora vamos realizar algumas manipulações no conjunto de dados armazenados na tabela TableIncrementalStatistics afim de forçarmos o processos de atualização das estatísticas, procedimento que vai nos ajudar a entender o processo de incremento na atualização das estatísticas de armazenamento e processamento utilizados pelo Microsoft SQL quando solicitado acesso aos dados armazenados em nossa table, para tal operação vamos utilizar o Bloco de Código 9:

— Bloco de Código 9 —

— Consultando dados na TableIncrementalStatistics —
Select Id, Acao, Data, Quartil From TableIncrementalStatistics
Where ID = 1
Go

Select Id, Acao, Data, Quartil From TableIncrementalStatistics
Where ID >= 2
Go

Select Id, Acao, Data, Quartil From TableIncrementalStatistics
Where ID <> 3
Go

Pronto, realizamos algumas operações de Select com intuito de forçar a criação de novas estatísticas, e principalmente a atualização das estatísticas atuais. Por enquanto nada de diferente, na sequência vamos consultar as informações sobre as estatísticas relacionadas a nossa tabela, fazendo uso do Bloco de Código 10 e analisando o resultado apresentado através da Figura 3:

— Bloco de Código 10 —

— Consultando as informações sobre as estatísticas da tabela TableIncrementalStatistics —
Select object_id, stats_id , last_updated , rows , rows_sampled , steps
From sys.dm_db_stats_properties(OBJECT_ID(‘[TableIncrementalStatistics]’),1);
Go

Figura 3 – Dados relacionados a estatísticas da TableIncrementalStatistics.

Como você pode ver, o DMF sys.dm_db_stats_properties mostra-nos que as estatísticas foram atualizadas na data do dia 23/05/2017 ás 16:55, para a tabela que tem 8000 linhas.

Neste momento, podemos nos perguntar: Qual partição da tabela inclui as estatísticas atualizadas?

A resposta para esta sua pergunta vem justamente atráves do uso nova DMF sys.dm_db_incremental_stats_properties já apresentada aqui no meu blog. Sendo esta DMF responsável em apresentar as propriedades estatísticas incremental, recuperando as mesma informação obtida a partir do DMF sys.dm_db_stats_properties, também super conhecida e apresentada no meu blog. Neste caso a sys.dm_db_stats_properties vai apresentar dados de  cada partição da tabela particionada, fornecendo-lhe com os mesmos parâmetros; a identificação do objeto e a identificação de estatísticas.

Caminhando mais um pouco, estamos próximos do final, vamos então formar o SQL Server a justamente realizar o processo de atualização das estatísticas para nossa partição de número 3, realizando o processo de exclusão de 1.500 linhas de registros, em seguida consultando nossa TableIncrementalStatistics, conforme apresenta o Bloco de Código 11:

— Bloco de Código 11 —

— Excluíndo 1.500 linhas —
Delete Top (1500) From TableIncrementalStatistics
Where ID = 2
Go

— Consultando os dados —
Select Id, Acao, Data, Quartil From TableIncrementalStatistics
Where ID <> 4
Go

Agora vamos novamente consultar os dados estatísticas, sendo assim repita a execução do Bloco de Código 10, observe que você deverá receber um conjunto de valores similares a Figura 4, onde a coluna Last_Updated deverá apresentar a data e hora da última atualização:

Figura 4 – Data e hora da última atualização da estatística.

Ufa, estamos quase lá, agora chegou a hora da verdade, hora de comprovar se realmente o SQL Server esta fazendo as coisas certas, vamos fazer uso da DMF sys.dm_incremental_stats_properties para validar se a estatística da partição 3 foi atualizada, o resultado pode ser analisado através da Figura 5. Para isso vamos utilizar o Bloco de Código 12 a seguir:

— Bloco de Código 12 —

— Consultando as informações sobre as estatísticas incrementais —
Select object_id, stats_id,
partition_number,
last_updated,
rows, rows_sampled,
steps
From sys.dm_db_incremental_stats_properties(OBJECT_ID(‘TableIncrementalStatistics’),1)
Go

Figura 5 – Informações sobre as atualizações de estatísticas, onde a partição 3 foi atualizada de maneira independente das demais.

Sensacional, conseguimos, muito legal este recurso, como sempre o Microsoft SQL Server nos surpreende com a sua capacidade e potencialidade de recursos.

Referências

Post Anteriores

https://pedrogalvaojunior.wordpress.com/2017/04/13/dica-do-mes-microsoft-sql-server-identificando-as-transacoes-que-estao-utilizando-o-transact-log/

https://pedrogalvaojunior.wordpress.com/2017/03/01/dica-do-mes-microsoft-sql-server-2016-sp1-novo-argumento-use-hint-disponivel-para-query-hints/

https://pedrogalvaojunior.wordpress.com/2017/01/16/dica-do-mes-conhecendo-a-nova-dmf-sys-dm_exec_input_buffer-no-microsoft-sql-server-2016/

https://pedrogalvaojunior.wordpress.com/2016/11/28/dica-do-mes-sql-server-2016-sp1-comando-create-or-alter/

https://pedrogalvaojunior.wordpress.com/2016/10/24/dica-do-mes-sql-server-2016-obtendo-informacoes-sobre-o-cache-de-execucao-de-funcoes/

Conclusão

Administrar, gerenciar, cuidar e prover um ambiente sempre no melhor estado possível não é uma das atividades mais tranquilas e simples desempenhadas por profissionais ou administradores de banco de dados, mas também não pode ser considerada um “bicho de sete cabeças” ou uma “caixa preta” ainda mais quando este servidor de banco de dados utiliza o Microsoft SQL Server.

Neste post você pode conhecer um pouco mais de como o Microsoft SQL Server trabalha de maneira árdua na busca da melhor maneira para encontrar e retornar os dados solicitados em nossas transações. Ao longo de novas versões o produto esta cada vez mais maduro, confiável e inteligente, sempre nos surpreendendo com sua capacidade.

Algo que não poderia ser diferente no uso das Estatísticas Incrementais, recurso que nos permite adotar uma nova maneira de atualização dos dados internos relacionados ao armazenamento das nossas informações, mas principalmente prover um auxílio para próprio Database Engine mas atividades para identificar o melhor caminho para se processar uma query.

Agradecimentos

Mais uma vez obrigado por sua visita, agradeço sua atenção, fique a vontade para enviar suas críticas, sugestões, observações e comentários.

Um forte abraço, nos encontramos logo logo…

Valeu….

#08 – Para que serve


Boa noite comunidade, boa noite amantes do SQL Server e Banco de Dados…..

Hoje dia 03 de Setembro começo de noite de mais um sabádão, estamos vivendo os primeiros dias de mais um mês e se aproximando do final de 2016. Antes de começar a falar sobre o post de hoje, gostaria de compartilhar mais algumas conquistas obtidas neste últimos dias, bem como uma outra que esta por vir.

Há primeira conquista se refere aos meus alunos do Curso de Sistemas de Informação para Internet da Fatec São Roque, tive o imenso prazer em poder lecionar para esta fantástica turma nos últimos 4 semestre, desejo a vocês tudo de bom, felicidades e muitas conquistas.

A próxima ainda mais importante é o aniversário do meu filho mais velho Eduardo Galvão que no próximo dia 06 de Setembro estará completando 15 anos de vida, com certeza um dos momentos mais felizes e esplêndidos da minha vida. Desejo a você meu pequeno grande menino um futuro fantástico, muito saúde, felicidades e alegrias.

Vamos em frente, voltando ao post de hoje da sessão Para que serve, conforme prometido vou dar continuidade ao post anterior onde começamos a conhecer um pouco sobre o conceito de Índice Hipotéticos. Caso você não tenha acessado o post anterior não perca tempo clique no link acima e conheça um pouco sobre este conceito tão surpreende quando a sua forma de uso.


Começa agora o #08 – Para que serve – Índices Hipotéticos – Parte II.

No #08 – Para que serve, daremos início ao processo de criação do nosso ambiente de banco de dados com objetivo de construir um estrutura específica para conhecermos e simularmos o uso dos índices hipotéticos. É isso siga-me os bons, mãos no teclado, acompanhe a sequência de passos apresentandos abaixo:

— Passo 1 – Criando o Banco de Dados HypotheticalDB —

CREATE DATABASE [HypotheticalDB]
ON  PRIMARY
(NAME = ‘HypotheticalDB-Data’,
 FILENAME = ‘C:\SQLServer2016\Data\HypotheticalDB_Data.mdf’ ,
 SIZE = 4MB ,
 MAXSIZE = 4096MB,
 FILEGROWTH = 2MB )
LOG ON
(NAME = ‘HypotheticalDB-Log’,
 FILENAME = ‘C:\SQLServer2016\Log\HypotheticalDB_Log.ldf’ ,
 SIZE = 8MB ,
 MAXSIZE = 2GB ,
 FILEGROWTH = 4MB)
GO

— Passo 2 – Acessando o Banco de Dados —
Use HypotheticalDB
Go
— Passo 3 – Criando as Tabelas —
Drop Table If Exists dbo.Clientes
CREATE TABLE Clientes
(Codigo  INT Identity(1,1) NOT NULL Primary Key Clustered,
 CodigoCategoria TinyInt NOT NULL,
 Nome  VARCHAR(60) NOT NULL,
 Endereco VARCHAR(80) NOT NULL,
 Estado  CHAR(2) NOT NULL,
 DataUltimaCompra  DATETIME)
Go
Drop Table If Exists dbo.ClientesCategorias
CREATE TABLE ClientesCategorias
(Codigo TinyInt NOT NULL,
 Descricao VARCHAR(20) NOT NULL)
Go

Nota: Observe que no passo 3 estamos utilizando uma nova instrução introduzida no Microsoft SQL Server 2016, estou me referindo ao Drop If Exists uma das mais esperadas melhorias a serem adicionados ao Microsoft SQL Server que por muitos anos estava sendo aguardada.

— Passo 4 – Inserindo dados na Tabela ClientesCategorias —
INSERT Into ClientesCategorias (Codigo, Descricao)
 Values (1, ‘Premier’),
             (2, ‘Advanced’),
             (3, ‘Special’)
Go
— Passo 5 – Inserindo dados na Tabela Clientes —
Insert Into Clientes (CodigoCategoria, Nome, Endereco, Estado, DataUltimaCompra)
Values (3, ‘José Bonito’,’Rua A’,’SP’,GETDATE()-30),
            (1, ‘Dassaev Silva’,’Rua B’,’SP’,GETDATE()-120),
            (3, ‘Viewer Partes’,’Rua 123′,’RJ’,GETDATE()-720),
            (1, ‘Dino Silva Sauros’,’Avenida Parque dos Dinassauros’,’AM’,GETDATE()-240),
            (2, ‘Fernandino Campos Boyd’,’Estrada Velha’,’MG’,GETDATE()-5),
            (1, ‘Katrina Tornado’,’Rua Storm’,’RG’,GETDATE()-300),
            (2, ‘Washington Wizard’,’Place 1′,’PR’,GETDATE()-1024),
            (3, ‘Chicago Bulls’,’Place 2′,’PR’,GETDATE()-89),
            (2, ‘Denver Nuggets’,’Place 3′,’PR’,GETDATE()-289),
            (2, ‘Los Angeles Lakers’,’Place 4′,’PR’,GETDATE()-390)
Go
— Passo 6 – Consultando os dados —
Select Codigo, Descricao From ClientesCategorias
Go
Select Codigo, CodigoCategoria, Nome, Endereco, Estado, DataUltimaCompra From Clientes
Go
Até aqui nada muito diferente do que normalmente utilizamos em nosso dia-á-dia, talvez o uso da Drop If Exists possa ser um diferencial. Dando continuidade os dois próximos passos serão de extrema importância para nosso ambiente, estaremos justamente realizando a criação de três índices:
  • IND_ClientesCategorias_NaoClusterizado_CodigoSemEstatisticas;
  • IND_ClientesCategorias_NaoClusterizado_CodigoComEstatisticas; e
  • IND_ClientesCategorias_Clusterizado_CodigoComEstatisticas.

Observe que serão criados dois índices não-clusterizados e um índice clusterizado, todos vinculados a tabela ClientesCategorias para coluna Codigo, onde você vai poder notar que dois índices devem ser criados sem estatísticas o que indica para o SQL Server que este será um índice hipotético existindo somente de maneira lógica e não terá nenhum tipo de vínculo ou estrutura física criada. Então siga em frente, mãos no teclado, a seguir os passos 7 e 8:

— Passo 7 – Criando índices hipotéticos não-clusterizado na tabela ClientesCategorias —
CREATE INDEX IND_ClientesCategorias_NaoClusterizado_CodigoSemEstatisticas
 ON ClientesCategorias (Codigo) With Statistics_Only = 0
CREATE INDEX IND_ClientesCategorias_NaoClusterizado_CodigoComEstatisticas
 ON ClientesCategorias (Codigo) With Statistics_Only = -1
Go
— Passo 8 – Criando índices hipotéticos clusterizado na tabela ClientesCategorias —
CREATE CLUSTERED INDEX IND_ClientesCategorias_Clusterizado_CodigoComEstatisticas
 ON ClientesCategorias (Codigo) With Statistics_Only = -1
Go
Antes de continuarmos vou apresentar a Figura 1 que ilustra a criação destes índices dentro da estrutura da tabela ClientesCategorias, você vai poder notar na figura que somente existe estatísticas para estes objetos as guias Keys e Indexes estão vazias:
HypotheticalIndex

Figura 1 – Estrutura da Tabela ClientesCategorias.

Vamos que vamos estamos quase lá, falta pouco, agora vamos executar o passo 9 em duas etapas a primeira será a execução do system stored procedure sp_helpindex responsável em apresentar a estrutura de índices existente em uma determinada tabela, neste caso estou me referindo a tabela ClientesCategorias, sendo assim, vamos realizar esta execução:

 

— Passo 9 – Obtendo informações sobre os índices —
Exec sp_helpindex ClientesCategorias
Go

Após a execução o Management Studio vai retornar nossos três índices criados anteriormente, podemos observar a existência de uma coluna chamada index_description, verifique que todos os índices apresentam a seguinte informação: nonclustered, hypothetical

Você pode estar se perguntando, mas nos não criamos um índice clusterizado? A resposta seria sim, criamos ele continua sendo clusterizado, mas como este não apresenta um estrutura física o mesmo é reconhecido e tratado pelo SQL Server como índice não-clusterizado neste momento, a Figura 2 apresentada este resultado:

HypotheticalIndex2

Figura 2 – Relação de índices hipotéticos pertencentes a table ClientesCategorias.

O próximo passo e realizar a segunda parte do passo 9,  onde faremos a execução do comando DBCC Show_Statistics responsável em apresentar informações sobre as estruturas físicas e lógicas vinculadas a estatísticas de um índice, no nosso caso vamos utilizar os índices:

  • IND_ClientesCategorias_NaoClusterizado_CodigoSemEstatisticas; e
  • IND_ClientesCategorias_NaoClusterizado_CodigoComEstatisticas.

Vamos então executar o bloco de código abaixo:

DBCC SHOW_STATISTICS (ClientesCategorias, IND_ClientesCategorias_NaoClusterizado_CodigoSemEstatisticas)

DBCC SHOW_STATISTICS (ClientesCategorias, IND_ClientesCategorias_NaoClusterizado_CodigoComEstatisticas)
Go

Observando  a Figura 3 a seguir fica mais fácil  entender que o índice: IND_ClientesCategorias_NaoClusterizado_CodigoSemEstatisticas não apresenta nenhuma informação relacionada a estatísticas, ao contrário do índice:

IND_ClientesCategorias_NaoClusterizado_CodigoComEstatisticas, onde o SQL Server após o procedimento de crição do mesmo já estabeleceu alguns dados estatísticos que posteriormente será utilizados no processamento das querys de acordo com sua necessidade. Segui a seguir a Figura 3:

HypotheticalIndex3

Figura 3 – Comparativo entre as estruturas dos índices IND_ClientesCategorias_NaoClusterizado_CodigoSemEstatisticas  e IND_ClientesCategorias_NaoClusterizado_CodigoComEstatisticas.

Falta pouco, pouco mesmo, prometo que estamos no final, vamos executar o passo de número 10, onde estaremos obtendo as informações sobre nossos índices através da catalog view sys.sysindexes, onde nosso índice IND_ClientesCategorias_Clusterizado_CodigoComEstatisticas agora será apresentado como um índice clusterizado, isso nos faz entender que em alguns momentos o SQL Server acaba mudando um pouco o seu comportamento de acordo com a forma de obtenção de informações sobre as estruturas de nossos índices, sinceramente não saberia dizer se isso pode ser considerado uma falha ou até mesmo um possível bug.

Pisando fundo em nosso “acelerador” execute o passo 10 apresenta logo a seguir:

— Passo 10 – Obtendo informações sobre a relação de índices —

SELECT object_id,
             OBJECT_NAME(object_id) AS ‘Tabelas’ ,
             name As ‘Nome do Índice’,
             type_desc,
             is_hypothetical As ‘Índice Hipotético = 1 Não-Hipotético=0’
FROM sys.indexes
WHERE object_id in (object_id(‘ClientesCategorias’), object_id(‘Clientes’))
Go

E agora o tão esperado momento, vamos realmente fazer uso de nossos índices hipotéticos através da execução dos passos 11 e 12 teremos a capacidade técnica de entender o comportamento do SQL Server, principalmente através da comparação dos planos de execução gerados para cada query processada, sendo assim, vamos começar executando o passo 11 a seguir:

— Passo 11 – Executando o Select de maneira clássica sem a diretiva SET AUTOPILOT —
SET SHOWPLAN_XML ON
Go
Select C.Codigo,
          Cc.Codigo As ‘Categoria do Cliente’,
    C.Nome,
    C.Endereco,
    C.Estado,
    C.DataUltimaCompra
From Clientes C Inner Join ClientesCategorias CC
                           On C.CodigoCategoria = CC.Codigo
Where C.Estado = ‘SP’
GO
SET SHOWPLAN_XML OFF
Go
Observe que solicitamos ao Management Studio para realizar o plano de execução da nossa query através da diretiva SET SHOWPLAN_XML, onde o mesmo deverá ser gerado no formato XML, recomendo que você salve este plano de execução para que possamos fazer uso do mesmo no último. Agora execute o passo 12, salve o plano de execução gerado em xml e apresentado de forma gráfica.
— Passo 12 – Executando o Select de maneira personalizada ativando a diretiva SET AUTOPILOT  —
SET AUTOPILOT ON — Ativando a diretiva —
Go
Select C.Codigo,
          Cc.Codigo As ‘Categoria do Cliente’,
    C.Nome,
    C.Endereco,
    C.Estado,
    C.DataUltimaCompra
From Clientes C Inner Join ClientesCategorias CC
                           On C.CodigoCategoria = CC.Codigo
Where C.Estado = ‘SP’
Go
SET AUTOPILOT OFF — Desativando a diretiva —
GO
Muito bem, conseguimos executar nossos dois selects, espero que você tenha salvado os respectivos planos de execução, agora após a execução do passo 12 você deverá esta visualizando o plano de execução deste select, clique com o botão da direita na parte branca e escolha a opção Comparative ShowPlan, selecione o arquivo que representa o plano de execução criado após a execução do passo 11 em seguida o mesmo deverá ser aberto, conforme a Figura 4 a seguir apresenta:
HypotheticalIndex4
Figura 4 – Comparação entre os planos de execução gerados durante a execução dos passos 11 e 12.
Podemos observar que os dois planos de execução são praticamentes idênticos de maneira geral, mas se realmente analisarmos cada um dos operadores, será possível notar um uma pequena diferença no operador Select, onde a instrução CompileMemory nos mostra uma diferença de 8(oito) compilações a menos realizada no passo 11 em comparação com o passo 12, conforme ilustra a Figura 5 abaixo:
HypotheticalIndex5
Figura 5 – Comparativo de resultados apresentados na instrução CompileMemory.
Poxa vida, analisando friamente esta é uma diferença tão pequena que talvez não seja necessário se preocupar ou até mesmo querer entender o que pode ter acontecido. Mas DBA que é DBA de verdade não gosta de se deparar com estas situações em seu ambiente, menos ficar sem uma possível resposta, por mais que muitas vezes ela até mesmo não exista.
Então se você quiser realmente saber o que pode ter influenciado o SQL Server mais especificamente o Database Engine e seus componentes dentre eles o Query Optimizer e o Execution Plan a apresentar este resultado não deixe de acessar o próximo post dedicado aos índices hipotéticos, então nos vemos no #09 Para que serve.
Até lá………..

É isso ai galera, chegamos ao final de mais post da sessão Para que serve!

Espero que você tenha gostado, que as informações compartilhadas aqui possam lhe ajudar a se tornar cada vez um profissional de banco de dados reconhecido e valorizado, um dos papéis na área de tecnologia mais importantes para qualquer empresa.

Reconher o verdadeiro papel de um DBA dentro de sua estrutura, é reconhecer o verdadeiro valor de seus dados e como eles podem se tornar uma infomação valiosa para sua tomada de decisão.

Caso deseje acessar os posts anteriores desta sessão, utilize os links listados abaixo:

Atualização KB2913270 melhora a Windows Store no Windows 8.1


Além das atualizações de segurança, a Microsoft também disponibilizou nesta terça-feira a atualização KB2913270. De acordo com a empresa, esta atualização traz melhorias no desempenho e confiabilidade para a Windows Store no Windows 8.1 e Windows RT 8.1.

Atualização KB2913270 melhora a Windows Store no Windows 8.1 Com esta atualização, a inicialização da Windows Store ficou um pouco mais rápida. Além disso, a atualização KB2913270 também corrigiu alguns problemas com seu bloco dinâmico.

Lista com algumas das melhorias na Windows Store no Windows 8.1 e Windows RT 8.1:

  • Inicialização mais rápida da Windows Store no tablet Surface RT.
  • Corrige um problema que faz com que os novos apps exibidos no bloco dinâmico da loja não correspondam aos exibidos na seção de destaques da Windows Store no Windows 8.1 e Windows RT 8.1.
  • Corrige um problema que faz com que a Windows Store trave quando o usuário altera o tamanho da fonte dos textos.
  • Corrige um problema que faz com que a Windows Store trave quando o usuário altera a cor de fundo.
  • Corrige um problema que faz com que a mensagem de erro “Acesso Negado” seja exibida quando o usuário tenta acessar a loja.

A lista completa pode ser vista no artigo KB2913270 na Base de Conhecimento da Microsoft.

Fontes e Direitos Autorais: Baboo.com – Por  – 14 Jan/14.

Técnicas para verificação e análise de consultas consideradas lentas no Microsoft SQL Server


Olá galera, comunidade, amigos e seguidores.

Meu deus que dificuldade para encontrar um tema ou conteúdo diferente do que venho postando e trabalhando recentemente que fosse útil e ao mesmo tempo didático para vocês.

Sinceramente não sei se escolhi algo interessante, mas penso que poderá ser importante, quando vocês se depararem com o mesmo cenário que eu me deparei há alguns dias, mais precisamente entre os meses de Abril e Maio.

Estou me referindo a uma das maiores discussões que qualquer profissional de banco de dados sempre é questionado ou se depara, a chamada Lentidão para Consulta ou Manipulação de Dados.

Introdução

As chamadas lentidões no processamento de consultas ou manipulações de dados, comumente ocorrem no dia a dia das empresas. Identificar o que pode estar acontecendo é uma tarefa das mais árduas, chatas, demoradas e estressantes para qualquer Profissional de Suporte, Infraestrutura e principalmente Banco de Dados.

Este é o tipo da situação que o usuário se considera ao mesmo tempo o mais prejudicado e conhecer do assunto, pois ele sempre tem aquela frase: “O Sistema esta lento, o Sistema esta travando, alguém precisa fazer algo.”

É justamente este algo que aparentemente é simples, que se torna o maior dos monstros, pois as variáveis que podem existir são inúmeras, o que possibilitam ocorrer das maneiras mais incerteza e diversas possíveis.

Sempre digo para os meus alunos: “Consultas com execução lenta podem ser causadas por problemas de desempenho relacionados à sua rede ou ao computador onde o SQL Server está sendo executado. Como também, podem ser causadas por problemas com seu projeto de banco de dados físico ou lógico”.

Quando uma consulta ou atualização leva muito mais tempo do que o esperado, faça as seguintes perguntas a si mesmo, que remetem aos motivos para a execução lenta das consultas relacionadas na seção anterior:

Então, como podemos tentar realmente identificar se nosso Ambiente, Sistema, Servidor ou Banco de Dados esta lento? Para responder esta pergunta, eu pesquisei durante muito tempo e nunca encontrei nada tão específico, padronizado ou até mesmo correto, pois cada cenário é um cenário, cada projeto é um projeto, cada situação é uma situação totalmente diferente da outra.

Com base, em grandes especialistas e estudiosos, cheguei à seguinte conclusão, procurar identificar a causa origem da lentidão, pode ser dividida em quatro camadas, onde a camada que representa o Sistema Gerenciador de Banco de Dados ou Sistema Banco de Dados pode ser considerada a última camada em uma Arquitetura Computacional.

Neste caso, uma Arquitetura Computacional básica pode ser estrutura da seguinte forma:

  1. Camada de Rede;
  2. Camada de Hardware;
  3. Camada do Sistema Operacional; e
  4. Camada de Software / Aplicativos e Sistema Gerenciador de Banco de Dados.


 

Pensando fora da caixa

Muito bem, dentro deste cenário complexo, repleto de considerações, ponderações, estudos, variações e com certeza muitas dúvidas, eu defini ao longo dos anos como uma pequena metodologia de trabalho, que consiste inicialmente utilizar um simples questionário, composto por algumas perguntas que podem ajudar a encontrar o ponto chave da geração dos problemas ou causas da possível lentidão.

Este questionário esta organizado em duas partes, com objetivo responder questões ou identificar dúvidas, para inúmeros motivos comuns em qualquer ambiente, dentre eles destaco:

  • Consumo e configuração de Hardware:
  • Estrutura e Topologia de Rede;
  • Estrutura física do banco de dados;
  • Armazenamento centralizado ou particionamento de dados ou banco de dados;
  • Recursos como Índices, Estatísticas, Triggers e Visões Indexadas.
  • Conjuntos de Disco(s) Rígidos;
  • Memória;
  • Processador (ES); e
  • Placa(s) de Rede.

 


 

Questionário – Parte 1 – Infraestrutura.

  1. Qual é o consumo de processador e memória demandados por seu servidor no momento ou período de lentidão?

 

  1. A lentidão esta ocorrendo em consultas ou funcionalidades específicas da sua aplicação ou ambientes?
  2. Existem algum tipo de conector ou middleware utilizado para realizar a conexão entre a aplicação e o Banco de Dados?
  3. Qual são a versão e edição do seu Sistema Operacional?
  4. Qual são a versão e edição do seu Microsoft SQL Server?
  5. Todas as atualizações de Sistema Operacional e SQL Server forma aplicadas?
  6. Qual é a configuração ou arranjo de disco que você esta utilizando?
  7. A lentidão que esta sendo apresentada é generalizada ou ocorre somente nos recursos que fazem uso do Banco de Dados?
  8. Você realizou ou esta realizando algum tipo de monitoramento através da Ferramenta Monitor de Sistema do Windows?
  9. Alguma alteração nas configurações do seu Servidor, Rede, Banco de Dados ou aplicação foi realizada?
  10. Suas aplicações encerram suas conexões após o processamento?


 

Questionário – Parte 2 – Microsoft SQL Server e Banco de Dados

  1. Você realizou ou esta realizando algum tipo de monitoramento através das Ferramenta Microsoft SQL Server Profiler?
    1. Caso o problema de lentidão esteja relacionado a consultas, qual consulta ou conjunto de consultas que podem estar envolvidas ou relacionadas com esta situação?
    2. Esta lentidão ou suposta lentidão esta ocorrendo a partir de qual data ou situação?
    3. Ao encontrar um possível consulta com execução lenta, como podemos fazer sua análise?
    4. Existe algum procedimento de atualização de Estatísticas de Dados e Tabelas de Sistema?
    • Recomenda-se utilizar estas ou alguma outra ferramenta para procurar identificar e obter informações sobre estas possíveis consultas lentas. A partir do Microsoft SQL Server 2005 foram introduzidos alguns relatórios padrões que podem ajudar nesta análise.
    • A partir do Microsoft SQL Server 2008, utilize as exibições de gerenciamento dinâmico sys. dm_exec_query_stats e sys.dm_exec_requests para encontrar consultas similares que podem estar consumindo muitos recursos.
    • Depois de identificar a consulta lenta, você pode analisar o desempenho da consulta mais profundamente criando o chamado Plano de Execução, que pode ser um texto, XML ou representação gráfica do plano de execução de consulta que o otimizador de consulta gera.
  • O otimizador de consultas existe no SQL Server utiliza estatísticas para criar planos de consulta que melhoram o desempenho. Na grande a maioria das consultas, o otimizador já gera as estatísticas necessárias para um plano de consulta de alta qualidade, existem casos, que você poderá ou deverá criar estatísticas adicionais visando obter uma melhora no processamento destas consultas.
  1. As opções AUTO_CREATE_STATISTICS e AUTO_UPDATE_STATISTICS estão habilitadas?
  • Auto_create_statistics: Ao fazer uso desta opção de estatísticas em todo o banco de dados. Podemos nos deparar com situações em que os planos de consulta poderão ter uma qualidade inferior e o seu desempenho pode vir a ser prejudicado, por outro lado em alguns casos, você pode melhorar os planos de consulta criando estatísticas adicionais com a instrução CREATE STATISTICS. Essas estatísticas adicionais podem capturar correlações estatísticas que o otimizador de consulta não conseguiu identificar ao criar estatísticas para seus índices ou colunas.
  • Auto_update_statistics: Em alguns casos, ao deixar esta opção desativada, podemos melhorar o plano de consulta e, portanto, o desempenho das consultas atualizando estatísticas mais freqüentemente do que quando a opção AUTO_UPDATE_STATISTICS está ativada. Neste ponto, eu costumo por padrão para uso dos comando Update_statistics ou Sp_updatestats para realizar o processo de atualização das Estatísticas de Tabelas de Sistema existente no banco de dados.
  1. Você já verificou se sua consulta ou conjunto de consultas utiliza algum tipo de recurso ou funcionalidade como, por exemplo: variáveis locais, tabelas temporárias, cursores, linked-server, etc.
  2. Existe alguma análise de fragmentação de dados? Todos os índices existentes em seu banco de dados estão sendo utilizados? Qual é o valor definido para o fill factor de seus índices?
  3. Processos como reorganização ou reconstrução de índices foram realizados?

 

  1. Existe algum tipo de particionamento de dados, tanto no nível de banco de dados, como também, em relação a discos rígidos, arquivos ou grupos de arquivos?

 

  1. O banco de dados TEMPDB está armazenado na mesma unidade de disco dos demais bancos de dados?

 

  1. Existe algum monitoramento ou análise do Buffer Cache que as transações requisitam para o SQL Server?

 

Pois bem, estas e muitas outras questões podem ser utilizadas, tenho em mente que as informações reunidas por questionário poderá ajudar a determinar como uma consulta é executada, identificando todos os elementos físicos e lógicos que podem estar envolvidos, desde otimizador de consulta existe no SQL Server, como em paralelo os elementos de Hardware e Software que podem estar sendo processados.

 

Conclusão

 

Usando essas informações, você poderá determinar se podem ser feitas melhorias de desempenho, após algum tipo de alteração em sua Infraestrutura, Aplicação ou Banco de Dados, o que poderá obrigar o processo de mudanças em suas consultas, índices nas tabelas ou talvez modificando o projeto de banco de dados.

 

Mais uma vez obrigado por sua visita, espero que você tenha gostado deste post, com certeza totalmente diferente do que venho compartilhamento nos últimos meses.

 

Encontramos-nos em breve.

 

Até mais.

Acessório permite controlar Windows 8 com os olhos


A fabricante Tobii anunciou um kit de controle visual desenvolvido para PCs e que pode ser acoplado a qualquer computador com Windows 8.

Chamado de REX, o acessório deve ser acoplado abaixo do monitor do computador e conectado à porta USB do PC.

 

Depois de conectado, o acessório roda com um software especial chamado Tobii Gaze, que rastreia os exatos pontos que o usuário está observando na tela, o permitindo controlar ações como rolagem da tela ou mesmo interações em jogos e aplicativos.

Segundo a empresa, o produto também pode ser usado em conjunto com teclados e mouses para melhorar o desempenho desses periféricos.

A Tobii afirmou ter produzido apenas 5 mil unidades do REX para os consumidores, mas não revelou o valor final do acessório. No entanto, desenvolvedores interessados já podem adquirir o REX por U$S 995.

A pré-venda será aberta somente dentro de alguns meses, mas já é possível preencher um cadastro para receber informações antecipadamente.

O Tobii REX será apresentado em detalhes durante a feira CES, que ocorre na próxima semana nos Estados Unidos, e deve ser lançado até o final deste ano.

Fontes e Direitos Autorais: GADGETS INFO – Mônica Campi – quarta-feira, 2 de janeiro de 2013 – 16:06.

Melhorando a performance de sua query com Estatísticas filtradas no SQL Server 2008 e R2.


Em diversas situações nos deparamos com um problema já conhecido, a chamada lentidão em nosso Servidor ou Instância SQL Server. E aquela velha pergunta, muito conhecida de todos nós.

O que será que esta acontecendo? Não realizei nenhuma mudança nas configurações deste máquina? Somente este banco de dados esta apresentando problemas? Será que algum índice esta fragmentado?

Antes de queremos responder estas perguntas, vamos falar um pouco sobre Estatísticas de Otimização de Consultas. Qual sua importância e relação quando nos deparamos com perda de perfomance, lentidão, entre outros problemas.

O que são estatísticas de otimização de consulta?

Estatísticas para otimização de consulta são objetos que contêm informações estatísticas sobre a distribuição de valores em uma ou mais colunas de uma tabela ou exibição indexada. O otimizador de consultas usa essas estatísticas para estimar a cardinalidade, ou número de linhas, no resultado de consulta. Essas estimativas de cardinalidade permitem que o otimizador crie um plano de consulta de alta qualidade.

Por exemplo, o otimizador poderia usar as estimativas de cardinalidade para escolher o operador index seek em vez do operador index scan, o qual utiliza muitos recursos, e, assim, melhorar o desempenho das consultas.

Cada objeto de estatísticas é criado em uma lista de uma ou mais colunas de tabela e inclui um histograma que exibe a distribuição de valores na primeira coluna. Os objetos de estatísticas em várias colunas também armazenam informações estatísticas sobre a correlação de valores entre as colunas. Essas estatísticas de correlação, ou densidades, são derivadas do número de linhas distintas de valores de coluna. Você pode utilizar o comando DBCC SHOW_STATISTICS para obter mais informações sobre estatísticas de tables e índices.

Pois bem, estas e muitas outras perguntas, nos remetem a possíveis análises do que realmente pode estar acontecendo, mas as possibilidades são muitas. Por este motivo, foi introduzido a partir SQL Server 2008 a possibilidade de se criar Estatísticas com Filtro de Dados, o que possibilita melhorar de forma sensível a performance e desempenho de nosso servidor para determinadas querys.

Porque utilizar Estatísticas Filtradas?

As estatísticas filtradas podem melhorar o desempenho de consultas selecionadas em subconjuntos bem definidos de dados.

Estatísticas filtradas usam um predicado de filtro para selecionar o subconjunto de dados incluído nas estatísticas. As estatísticas filtradas bem projetadas podem aprimorar o plano de execução de consultas em comparação com as estatísticas de tabela completa.

Qual o principal objetivo das Estatísticas Filtradas?

Com esta nova funcionalidade, temos a possibilidade de otimizar o plano de execução pré-determinadao para nossas consultas. O que nos oferece um ganho de performance, proporcionando ao SQL Server fazer uso destas estatísticas sobre os dados determinados na claúsula Where como filtrados.

Por outro lado, podemos imaginar que este tipo de funcionalidade poderá gerar algum tipo de impacto sobre nosso ambiente, principalmente quando utilizada em consultas mais complexas,  que na verdade só poderá ocorrer caso os campos chaves determinados para realizar a filtragem dos dados forem omitizados na declaração de query.

Obs: A criar uma estatística filtrada, você deverá especificar como coluna chave, somente as colunas que não possuam nenhum tipo de índice. Além das Estatísticas Filtradas, o SQL Server 2008 apresenta também mais uma nova funcionalidade chamada “Índices Filtrados”, que pode ser implementado em conjunto com as Estatísticas Filtradas.

Cenário: Antes de começarmos a aplicar as Estatísticas Filtradas e seus benefícios, vamos criar um novo ambiente para teste. Neste ambiente criaremos duas novas tabelas denominadas: Cidades e Vendas, conforme apresenta a Código 1.

Código 1 – Criando as tabelas Cidades e Vendas:

— Criando a Tabela Cidades —

Create Table Cidades

 (Codigo Int,

   Nome VARCHAR(100),

   Estado Char(2))

Go

— Criando a Tabela Vendas —

Create Table Vendas

  (Codigo Int,

    NumPedido Int,

    Quantidade Int)

Go

Observe que ambas as tabelas possui uma estrutura simular e estão declaradas sem chaves primárias.

Agora vamos adicionar em cada tabelas os recursos de Estatísticas, que serão utilizados pelo SQL Server durante os processos de consulta e manipulação dos registros. Posteriormente serão adicionados Índices Clusterizados para cada tabela, com objetivo de melhorar os processos de busca de dados, além de adotar uma forma de ordenação física dos dados, conforme apresenta o Código 2.

Código 2 – Criando Estatísticas e Índices para as Tabelas Cidades e Vendas:

— Criando os Índices Clusterizados para Tabela Cidades–

Create Clustered Index Ind_Cidades_Codigo ON Cidades(Codigo)

Go

— Crinado um novo índice para Tabela Cidades —

Create Index Ind_Cidade_Nome ON Cidades(Nome)

Go

— Criando novas Estatísticas para a Tabelas Cidades —

Create Statistics Sts_Cidade_Codigo_Nome ON Cidades(Codigo, Nome)

Go

— Criando os Índices Clusterizados para Tabela Vendas —

Create Clustered Index Ind_Vendas_Codigo_NumPedido ON Vendas(Codigo,NumPedido)

Go

Observe que foi adicionado somente 1 índice Clusterizado a Tabela Vendas, ao contrário da Tabela Cidades que adicionamos, 1 índice Clusterizado e outro índice comum, nenhum recurso ou mecanismo de Estátistica foi adicionado e esta tabela.

Como nosso ambiente criado e pronto para receber nossos dados, vamos então realizar os processo de carga de dados, para cada tabela, conforme apresenta o Código 3.

Código 3 – Carga de dados para as Tabelas Cidades e Vendas.

— Inserindo dados no Tabela Cidades —

Insert Cidades Values(1, ‘São Roque’, ‘SP’)

Insert Cidades Values(2, ‘São Roque da Fartura’, ‘MG’)

Go

— Bloco para inserção de registros na Tabela Vendas —

Set NoCount On

Insert Vendas Values(1, 1, 100)

Declare @Contador INT

Set @Contador = 2

While @Contador <= 1000

 Begin

  INSERT Vendas VALUES (2, @Contador, @Contador*2)

  SET @Contador +=1

End

Go

Neste momento nosso ambiente encontra-se abastecido de informações e preparado para começarmos a estudar um pouco mais sobre como as Estatísticas podem nos ajudar no retorno mais ágil de nossos dados. Para demonstrar vamos utilizar o Código 4.

Código 4 – Consultando dados armazenadas nas Tabelas Cidades e Vendas.

— Consultados os Dados Armazenados nas Tabelas Cidades e Vendas —

SELECT V.NumPedido FROM Vendas V Inner Join Cidades C

                                               On V.Codigo = C.Codigo

WHERE C.Nome=’São Roque’
OPTION (Recompile)

Vamos analisar o Plano de Execução que foi incluído em nossa query e ver como esta a distribuíção de processamento realizado em cada operador, conforme a apresenta a Figura 1.

Figura 1 – Plano de Execução processado pelo SQL Server na execução do Código 4.

Podemos notar que nosso Plano de Execução distribuiu a carga de processamento em cada operador inclusive o Nestel Loops, operador responsável em realizar a junção dos dados enviados por cada tabela. Este operador consumiu 21% de todo processamento realizado pelo SQL Server.

Após executarmos o Código 4, poderemos observar que mesmo existindo somente 1 registro cadastrado que possui venda relacionada a cidade de São Roque, o Plano de Execução estimou o retorno de 500 linhas, conforme apresenta a Figura 2, na propriedade Estimated Number of Rows.

Figura 2 – Propriedades do operador Nested Loops, após a execução do Código 4.

Este comportamento nos indica que o Plano de Execução atualmente processado pelo SQL Server esta levando em consideração uma porção da massa de dados existente em nossa tabela Vendas, ao invês de tentar identificar qual realmente é a linha que possui o dados correto a ser apresentado.

Muito bem, é justamente para esta situação que podemos utilizar as Estatísticas filtradas, o que nos possibilitará realizar a
execução da mesma query e trará ao SQL Server a possibilidade de aplicar um filtro sobre esta porção de dados, sem necessitarmos de qualquer tipo de alteração em nossa consulta, índice ou tabela.

Para criar e aplicar a estatística filtrada, utilizaremos o Código 5, apresentado a seguir:

— Criando novas estatísticas para as Tabela Cidades, utilizando as Estatísticas Filtradas —

CREATE STATISTICS StsFiltrada_Cidades_SaoRoque ON Cidades(Codigo)
WHERE Nome = ‘São Roque’
GO

CREATE STATISTICS StsFiltrada_Cidades_Mairinque ON Cidades(Codigo)
WHERE Nome = ‘Mairinque’
GO

Para ilustrar e entender como nosso ambiente esta definido, a Figura 3 apresentar a Tabela Cidades, seus índices e estatísticas, vale destacar que as duas novas estatísticas filtradas adicionadas e esta tabela aparecem na mesma guia “Statitics” em conjunto com
todas as outras.


Figura 3 – Tabela Cidades, Índices, Estatísticas e Estatísticas Filtradas.

Agora com as estas novas Estatísticas criadas em nossa Tabela Cidades, vamos executar novamente o Código 4, e ver qual a diferença apresentada pelo Plano de Execução ao processar mais uma vez esta mesma consulta.

Vamos começar novamente analisando o Plano de Execução apresentado pelo SQL Server, após a execução do Código 4, mas com as Estatísticas Filtradas aplicadas para a Tabela Cidades, conforme apresenta a Figura 4.

Figura 4 – Novo Plano de Execução apresentado pelo SQL Server, após executar o Código 4.

Não vamos necessitar de muitas análises para evidenciar as primeiras diferenças apresentadas neste novo Plano de Execução, o
que nos importa é novamente observar o operador Nested Loops, que agora apresenta 0% de todo processamento utilizado pelo SQL Server. Com base neste valor, podemos entender que a carga de processamento utilizada na execução desta consulta foi dividida de uma forma mais inteligente entre os outros dois operadores Index Seek e Clustered Index Seek, onde cada um destes operadores consumiu 50% de processamento.

Estes valores nos indicam que o SQL Server conseguiu flexibilizar o processamento de nossa query, identificando e responsabilizando os operadores de busca e obtenção de dados em realizar todo processo de consulta das informações, passando de forma mais organizada para o operador Nested Loops, que simplesmente realizou a junção dos dados e enviou para o operador Select.

Com a mudança apresentada neste novo Plano de Execução, foi claro entender que o operador Nested Loops estava sendo utilizado de forma incorreta e consumindo recursos sem necessidade, principalmente na quantidade de linhas estimadas para o resultado que antes eram 500 e agora o valor correto é 1, a Figura 5 apresenta os novos valores aplicados ao operador Nested Loops.

Figura 5 – Propriedades do operador Nested Loops.

Ficou fácil e simples observar através da Figura 5, que nossa query retornou a quantidade correta de linhas, analisando as propriedades Actual Number Rows e Estimated Number of Row, ambas estão apresentando o mesmos valores, algo muito diferete do que foi apresentado anteriormente na Figura 3.

Vale ressaltar que a partir do momento que a quantidade de linhas estimadas para consulta e retorno, os valores de Custo Estimado de CPU, Custo Estimado de I/O, Tamanho Estimado de Linhas e Custo de Processamento do Operador são bem menores, o que mais uma vez nos indica um ganho de performance e otimização no processamento de nossa query.

Após estes comparativos, chegamos ao final de nossa análise e podemos afirmar que conseguimos de uma forma bastante simples melhorar de forma sensível o processamento de nossa query, além disso, possibilitar ao SQL Server otimizar a geração do Plano de Execução utilizado para a mesma fazendo uso das Estatísticas Filtradas.

Espero que você tenha gostado de mais este artigo, que as informações apresentas aqui sobre Índices e Estatísticas possam ser
úteis no seu trabalho e estudados.

Agradeço a sua visita, até o próximo artigo.

Valeu.