Baixe o app para aproveitar ainda mais
Prévia do material em texto
Editor: Demétrio Silva Introdução: Diego Nogare, Edvaldo Castro Prefácio: Roberto Fonseca Capa: Felipe Borges Autores: Diego Nogare Edvaldo Castro Leonardo Pedroso Sulamita Dantas Demétrio Silva Thiago Alencar Nilton Pinheiro Luciano Moreira Vitor Fava Murilo Miranda Marcelo Fernandes Cibelle Cadastro Introdução Estar envolvido em uma comunidade é sempre mais importante e proveitoso de que viver de um modo isolado, seja nos âmbitos pessoais, profissionais e quaisquer outros. A comunidade técnica de profissionais que trabalham com produtos e ferramentas ligados à Plataforma de Dados da Microsoft é bem atuante e unida, isso faz com que muito conteúdo seja gerado, seja com vídeos, eventos, palestras, entrevistas e postagens em blogs. O segundo volume da série "SQL Server Além do Conceito" traz agora um conjunto multidisciplinar de capítulos originais, escritos exclusivamente para esta obra. Mais uma vez um grupo de profissionais de diversas áreas do SQL Server se juntaram e escreveram capítulos em suas áreas de domínio. Baixe agora sua cópia e mergulhe no mundo a partir da visão destes autores que dedicaram seu tempo para escrever sobre Administração, Desenvovimento e Business Intelligence. Um ponto importante a ser mencionado, este trabalho por ser voluntário e não ter um cunho com fins financeiros, teve uma tratativa diferente mas não menos cuidadosa com relação à um livro ordinário. Cada autor é o responsável direto pelo que escreveu e publicou na coletânea, mas todos estão juntos para proporcionar e compartilhar o conhecimento que adquiriram ao longo de vários anos de experiência. Aproveite bem, e quaisquer necessidades de contato, não hesite em nos enviar uma mensagem sqlalemdoconceito@outlook.com. Boa Leitura, Diego Nogare http://www.diegonogare.net/ Edvaldo Castro http://edvaldocastro.com/ Demétrio Silva https://demetriosilva.wordpress.com/ mailto:sqlalemdoconceito@outlook.com http://www.diegonogare.net/ http://edvaldocastro.com/ https://demetriosilva.wordpress.com/ Prefácio Desde as suas primeiras versões, o SQL Server continuamente tem se estabelecido como uma plataforma confiável e robusta com performance, escalabilidade e confiabilidade que atende as todas as necessidades de negócio desde pequenas empresas até grandes corporações. AS novidades do SQL Server consolidam esta posição no mercado como um banco de dados de alta performance, confiável e robusto. Um dos maiores desafios em escrever o livro SQL Server – Além do Conceito – Vol 2 é como trazer os assuntos de maior interesse do público, de uma maneira compreensiva e com foco em compartilhar o conhecimento. Por este motivo, alguns dos maiores profissionais de SQL Server no Brasil se reuniram novamente para escrever este novo volume tratando dos assuntos mais interessantes sobre SQL Server! A principal decisão foi escrever este livro com foco nas funcionalidades essenciais sob os aspectos administrativos e de gerenciamento no dia-a-dia de todo o DBA. Neste livro, você terá oportunidade de conhecer mais sobre Segurança, com um capítulo especialmente dedicado ao Gerenciamento de Logon. Como monitorar eficientemente seu ambiente e como configurar o seu ambiente são dois capítulos que valem a pena ler com atenção! Não poderíamos deixar de lembrar os capítulos especialmente dedicados às ferramentas de Business Intelligence e Azure, como os capítulos dedicados ao Power BI, HDInsight e In-Memory OLTP! Aproveite esta leitura! Aproveite ao máximo o conhecimento transmitido pelos autores. Tenho a certeza de que contribuirá consideravelmente em seu conhecimento! Fizemos os melhores esforços para garantir que não haja nenhum erro neste livro, mas se você encontrar algum, por favor, nos informe pelo email sqlalemdoconceito@outlook.com. Roberto Fonseca https://rffonseca.wordpress.com/ mailto:sqlalemdoconceito@outlook.com https://rffonseca.wordpress.com/ MVTech O Minha Vida (http://www.minhavida.com.br) é uma empresa com um grande propósito: melhorar a qualidade de vida da população. Queremos ser capazes de despertar nas pessoas o cuidado com a sua própria saúde. E quando falamos em saúde, nos referimos não só à prevenção ou ao tratamento de doenças, mas também a pequenas mudanças de hábitos capazes de transformar positivamente o dia a dia das pessoas. Queremos fazer diferença na vida das pessoas! Pensando nisso, nosso time de tecnologia criou o MVTech, uma iniciativa para disseminar conhecimento através de iniciativas de seus colaboradores, buscando o aprimoramento do mercado nacional. Com diversas ações como: artigos técnicos em blogs; matérias para portais; respostas em foruns de discussão, palestras em eventos, eventos presenciais e online, etc… afinal, somos apaixonados pelo que fazemos! por que não compartilhar nossa paixão? A criação do MVTech dá um passo adiante nesta linha de compartilhamento de conhecimento, passando a existir um canal oficial onde poderão ser encontrados grandes conteúdos. Seja bem vindo ao MVTech Alexandre Tarifa Diretor de Tecnologia – Minha Vida http://www.minhavida.com.br/ Índice Integrando SSIS com HDInsight e Azure Blob Storage ......................................................................... 11 Introdução ....................................................................................................................................... 11 Instalando e entendendo os componentes no SSIS ......................................................................... 12 Instalação ..................................................................................................................................... 12 Componentes............................................................................................................................... 12 Instalando o MakeCert .................................................................................................................... 15 Criando um certificado digital .......................................................................................................... 17 Criando o pacote e se comunicando com o Azure ........................................................................... 19 Azure Blob Upload Task ............................................................................................................... 19 Azure Blob Download Task .......................................................................................................... 22 Azure HDInsight Create Cluster Task ............................................................................................ 24 Azure HDInsight Delete Cluster Task ............................................................................................ 29 Azure HDInsight Hive Task ........................................................................................................... 30 Criando a sequência de execução ................................................................................................ 33 Recursos .......................................................................................................................................... 36 Criação de Logon no SQL Server .......................................................................................................... 37 Modos de Autenticação no SQL Server: ........................................................................................... 37 Windows Authentication Mode ................................................................................................... 37 Mixed Mode ................................................................................................................................. 38 Papel do Servidor ............................................................................................................................. 39 Funções de Banco de Dados ............................................................................................................40 Permissões ....................................................................................................................................... 42 GRANT.......................................................................................................................................... 42 DENY ............................................................................................................................................ 42 REVOKE ........................................................................................................................................ 42 Logins ............................................................................................................................................... 43 Criando um login com um domínio no Windows via Transact – SQL ........................................... 44 Criando um login com um domínio no Windows via ferramenta SSMS: ...................................... 46 Criando um login do próprio SQL Server via Transact – SQL ........................................................ 49 Para excluir o login pelo SSMS ..................................................................................................... 51 Manipulação dos Usuários via Transact SQL .................................................................................... 52 Algumas opções para a criação do usuário .................................................................................. 52 Conclusão ........................................................................................................................................ 60 Column Store Index ............................................................................................................................. 61 Necessidade de Negócios ................................................................................................................ 61 Aonde utilizar? ................................................................................................................................. 62 Aonde não utilizar/evitar!! .............................................................................................................. 63 Armazenamento Atual ..................................................................................................................... 64 CSI VS B-Tree .................................................................................................................................... 66 Archival Compression ...................................................................................................................... 67 Column Store - Clustered e Non Clustered .................................................................................. 67 Row Groups e Segmentos ............................................................................................................ 68 Conclusão ........................................................................................................................................ 73 Referências ...................................................................................................................................... 74 Lock Escalation no SQL Server ............................................................................................................. 75 Introdução ....................................................................................................................................... 75 Script 01 – 10M atualizações sem o comportamento de lock escalation ..................................... 75 Script 02 – 20M atualizações sem o comportamento de lock escalation ..................................... 77 Script 03 – 20M atualizações com o comportamento de lock escalation habilitado ................... 78 Lock Escalation – limites e funcionamento ...................................................................................... 79 Script 04 – xEvents para monitorar lock escalation ..................................................................... 80 Script 05 – Análise do threshold para lock escalation .................................................................. 81 Cenários que envolvem o lock escalation ........................................................................................ 82 Cenário 01 .................................................................................................................................... 82 Cenário 02 .................................................................................................................................... 82 Cenário 03 .................................................................................................................................... 83 Cenário 04 .................................................................................................................................... 83 Conclusão ........................................................................................................................................ 85 Como monitorar seu ambiente SQL Server de forma eficiente e proativa .......................................... 86 O que é o Data Collector? ................................................................................................................ 86 Arquitetura do Data Collector .......................................................................................................... 87 Management Data Warehouse (MDW) ........................................................................................... 88 Configurando o Data Collector......................................................................................................... 91 Visualizando as métricas coletadas .................................................................................................. 94 Server Activity History.................................................................................................................. 94 Disk Usage Summary.................................................................................................................... 96 Query Statistics History ................................................................................................................ 97 Recomendações para configuração do DC ....................................................................................... 99 Conclusão ...................................................................................................................................... 100 Pensando fora da caixa – SQL Server FCI usando o File Share (SMB3.0) como opção de Storage ..... 101 Tipos de Storage para SQL Server .................................................................................................. 101 Storage HDD vs SSD ....................................................................................................................... 102 Comparativo de Desempenho de I/O ............................................................................................ 103 Escolhendo a Storage baseado no Workload ................................................................................. 105 SMB 3SMB 3File Shares ................................................................................................................. 106 SQL Server FCI usando o File Share (SMB3.0) como opção de Storage .......................................... 107 SMB Transparent Failover .............................................................................................................. 109 SMB Direct (SMB sobre RDMA) ..................................................................................................... 110 SMB Scale-out ................................................................................................................................ 111 SMB Multichannel .........................................................................................................................112 SQL Server FCI usando o File Share (SMB3.0) como opção de Storage .......................................... 116 Configurando o Scale-Out File Server (SOFs) ............................................................................. 117 Instalando o SQL Server em cluster sobre SMB ......................................................................... 129 Verificando o SMB ..................................................................................................................... 146 AlwayOn Availability Groups - Conceitos e Cenários ........................................................................ 151 Introdução ..................................................................................................................................... 151 SQL Server Failover Cluster Instances (FCI) ................................................................................ 152 Database Mirroring .................................................................................................................... 153 Log Shipping ............................................................................................................................... 154 Replicação¹ ................................................................................................................................. 155 AlwaysOn ................................................................................................................................... 155 Cenários ..................................................................................................................................... 158 O SQL Server AlwaysOn AG é sempre a melhor escolha? .......................................................... 158 Benefícios de utilização do AG ................................................................................................... 159 Pontos “negativos” do AG .......................................................................................................... 159 Conclusão ...................................................................................................................................... 160 Referências deste capítulo: ............................................................................................................ 161 Boas práticas em configuração de servidores de banco de dados ..................................................... 162 Introdução ..................................................................................................................................... 162 Ajuste do Allocation Unit Size nos discos do Windows .................................................................. 162 Desabilitar o usuário SA ................................................................................................................. 164 Configuração do banco de dados TEMPDB .................................................................................... 165 Paralelismo .................................................................................................................................... 167 Configuração de memória ............................................................................................................. 168 Compressão de backup .................................................................................................................. 168 Configurar o Blocked Process Threshold ........................................................................................ 170 Ajustar os arquivos dos bancos Master, Model e Msdb Master .................................................... 172 Aumentar a quantidade de arquivos do ERRORLOG ...................................................................... 173 Configurar a opção Instant File Initialization.................................................................................. 173 Configurar a conexão DAC ............................................................................................................. 175 Desabilitar o XP_CMDSHELL .......................................................................................................... 176 Conclusão ...................................................................................................................................... 178 Criando dashboards com o Power BI ................................................................................................. 179 Introdução ..................................................................................................................................... 179 Configuração do Ambiente ............................................................................................................ 180 Criação do database................................................................................................................... 180 Criação da conta no Power BI .................................................................................................... 184 Configuração do Gateway .......................................................................................................... 190 Power BI Desktop ....................................................................................................................... 200 OneDrive .................................................................................................................................... 210 Criação dos relatórios e dashboards .............................................................................................. 214 Importação dos dados ............................................................................................................... 214 Atualização dos dados ............................................................................................................... 216 Criação dos relatórios ................................................................................................................ 224 Usando o Q&A ............................................................................................................................... 231 Insights........................................................................................................................................... 234 Conclusão ...................................................................................................................................... 237 Aumentando a Disponibilidade do SQL Server Failover Cluster com o Dynamic Quorum ................. 238 Entendendo a Necessidade do Quórum ........................................................................................ 238 Os modelos de Quórum ................................................................................................................. 240 Quórum e Witness Dinâmico ......................................................................................................... 243 Quorum Dinâmico ...................................................................................................................... 244 Witness Dinâmico ...................................................................................................................... 246 Mão na Massa: Configurando o Quórum do Cluster ...................................................................... 250 Conclusão ...................................................................................................................................... 254 In-Memory OLTP 2016: O relançamento de uma potência ............................................................... 255 In-Memory OLTP: o conceito e as motivações ............................................................................... 256 O que tanto mudou do SQL Server 2014 para o 2016? .................................................................. 259 Tamanho total suportado para tabelas in-memory ...................................................................259 Mais escalabilidade na gestão de storage .................................................................................. 259 O Garbage collector e sua relação com os checkpoint files ....................................................... 260 Mais opções a nível de segurança .............................................................................................. 260 Paralelismo ................................................................................................................................ 260 AlwaysOn Availability Groups .................................................................................................... 261 Manutenção de código e T-SQL Suportado ................................................................................ 261 Ferramentas ............................................................................................................................... 262 Conclusão ...................................................................................................................................... 263 Deadlock no SQL Server ..................................................................................................................... 264 Introdução ..................................................................................................................................... 264 Definição Lock ................................................................................................................................ 265 Lock Modes .................................................................................................................................... 265 Shared Lock (S) ........................................................................................................................... 266 Exclusive Lock (X) ....................................................................................................................... 266 Update Lock ............................................................................................................................... 266 Intent Lock ................................................................................................................................. 267 Schema Lock .............................................................................................................................. 267 Deadlock ........................................................................................................................................ 268 Monitorando Deadlock .............................................................................................................. 270 Conclusão ...................................................................................................................................... 286 Referências .................................................................................................................................... 287 Integrando SSIS com HDInsight e Azure Blob Storage Veja neste capítulo como util izar o SQL Server Integration Services para se comunicar com o HDInsight e o Azure Blob Storage, possibilitando criar Cluster de Hadoop, subir, processar e baixar arquivos do Azure Blob Storage. Por Diego Nogare http://www.diegonogare.net/ Revisão técnica por Ivan Lima Filho http://ivanglima.com/sql-server-nuvem/ Introdução O conector do Azure dentro do SSIS permite se comunicar com alguns recursos da plataforma de Cloud Computing da Microsoft para que arquivos sejam movimentados entre o computador de execução do pacote e um servidor no Azure, mais especificamente para dentro de um Blob Storage, ou então para criar e apagar clusters do HDInsight. Isso permite automatizar a ação de processamento em clusters de Hadoop através da plataforma da Microsoft, garantindo o máximo de economia pela possibilidade de desligar o cluster após seu uso, pagando apenas pelo uso real e não por um ambiente ocioso. Neste capítulo você aprenderá como instalar este componente no seu SSIS 2014, que já é nativo no SQL 2016. Depois de instalado, acompanhará a criação de um cenário fictício no qual será enviado para o Azure Blob Storage um arquivo de texto com alguns dados, em paralelo será disparado o comando para criar o cluster do HDInsight. Em seguida, uma consulta é disparada contra o arquivo enviado e um retorno é baixado para o local que está executando o pacote. Para finalizar, o cluster do HDInsight será destruído. O que você precisará para concluir este capítulo: SQL Server Data Tools 2013; Subscription ativa no Azure; SSIS feature pack para Azure. http://www.diegonogare.net/ http://ivanglima.com/sql-server-nuvem/ Instalando e entendendo os componentes no SSIS Instalação Faça o download do Microsoft SQL Server 2014 Integration Services Feature Pack for Azure para ter acesso às tarefas que permitem a movimentação de dados e gerenciamento de atividades com o Azure. O link para download está na seção de Recursos, no final do capítulo. Após o término do download, faça a instalação padrão clicando em avançar até terminar. Ao final, abra o SQL Server Data Tools e confirme que os componentes estão disponíveis no SSIS Toolbox do Data Flow. Se os componentes abaixo estiverem disponíveis, a instalação aconteceu com sucesso. Componentes Estes são os componentes do Data Flow que foram adicionados à Toolbox do SSIS e suas principais configurações: Azure Blob Download Task: Permite que o SSIS faça download de arquivos que estão no Azure Blob Storage. É necessário informar: AzureStorageConnection: Especifica ou cria uma conexão para um contêiner com o Azure Storage Account; BlobContainer: O nome do contêiner que possui os arquivos a serem baixados; LocalDirectory: Endereço local onde o arquivo será baixado; FileName: Especifica o nome do arquivo completo, ou em partes, utilizando o caractere ‘*’ como wildcard (como é feito no Prompt de Comando) Azure Blob Upload Task: Permite que o SSIS faça upload de arquivos para uma conta no Azure Blob Storage. A configuração é semelhante à do componente Azure Blob Download Task. Azure HDInsight Create Cluster Task: Possibilita que sejam criados clusters do HDInsight em uma subscription do Azure. É necessário configurar: AzureSubscriptionConnection: Especifica ou cria uma conexão para uma subscription do Azure que receberá o cluster do HDInsight; AzureStorageConnection: Especifica ou cria uma conexão para um contêiner com o Azure Storage Account; Location: É o local (região do Azure) que deseja armazenar o cluster. Deve ser o mesmo lugar escolhido no Storage; ClusterName: Informa o nome do cluster do HDInsight que vai criar; ClusterSize: A quantidade de nós do cluster; BlobContainer: O nome do contêiner que possui os arquivos a serem trabalhados; UserName: Espeficica o usuário que será o administrador do cluster; Password: A senha para este usuário; Azure HDInsight Delete Cluster Task: Esta tarefa permite apaga um cluster de uma subscription. É necessário informar: AzureSubscriptionConnection: Especifica ou cria uma conexão para uma subscription do Azure que receberá o cluster do HDInsight; ClusterName: Informa o nome do cluster do HDInsight que vai apagar; Azure HDInsight Hive Task: Este componente permite rodar scripts Hive no cluster HDInsight. Existem duas formas de informar o script, uma é especificando diretamente na tarefa e outra com o script armazenado em um arquivo no Blob Storage. Neste exemplo será escrito o script na tarefa. AzureSubscriptionConnection: Especifica ou cria uma conexão para uma subscription do Azure que já possui um cluster do HDInsight; ClusterName: Informa o nome do cluster do HDInsight que vai receber e processar o código Hive; In-Line Script: Colocar o Código Hive que será processado. Azure HDInsight Pig Task: Componente que permiteexecutar scripts Pig no cluster HDInsight. A configuração é semelhanto à do Hive Task. Agora que já se sabe o que cada componente novo faz, e o que é necessário configurar para cada um, é preciso começar o desenvolvimento do cenário comentado na introdução. Ao final do capítulo você terá criado um pacote utilizando quase todos (com exceção da tarefa de execução dos scripts Pig) os componentes do Data Flow do Azure Package instalados no SQL Server Data Tools e seu pacote terá uma aparência semelhante ao da imagem a seguir: Instalando o MakeCert Para o cenário de testes estou utilizando meu computador pessoal. Nele está instalado o Windows 10 como sistema operacional e por isso preciso instalar componentes externos ao padrão do Windows no meu ambiente. Certifique-se que seu ambiente possui o MakeCert. Se encontrar, pode pular esta seção. Porém, pode ser que seu ambiente não tenha o MakeCert, como no meu caso. Para resolver isso é necessário baixar o Windows SDK, que você pode fazer o download a partir do link existente na seção de Recursos. Na hora da instalação não é necessário instalar todas as opções que o instalador oferece. Garanta ao menos a marcação da opção de Windows App Certification Kit, como na figura a seguir: Ao término da instalação, vá até a pasta informada e instale os softwares que foram apresentados como executáveis. Após as instalações, vá até a pasta do Windows SDK e garanta que o MakeCert existe. Criando um certificado digital Para se fazer a comunicação segura entre o SQL Server Integration Services e o HDInsight no Azure, é necessário ter um certificado digital que garantirá a comunicação segura dos dados trafegados. Para isso, é necessário ter um certificado que pode ser criado com o MakeCert e então enviado para o Azure. Nesta seção do capítulo será utilizada a ferramenta MakeCert para criar o certificado digital que será utilizado posteriormente para se comunicar de forma segura com o Azure. Caso precise, leia a seção Instalando o MakeCert e em seguida volte para este ponto. Para criar o certificado abra o prompt de comando. Garanta que está abrindo com permissão de Administrador. Para isso, clique com o botão direito e aponte o mouse para Executar como Administrador. Navegue até a pasta na qual você instalou o MakeCert, que por padrão do SDK do Windows é C:\PROGRAM FILES (X86)\WINDOWS KITS\10\BIN\X64 Insira a linha de comando que cria o certificado. No caso deste capítulo criei um certificado com o meu nome através do comando: MAKECERT -SKY EXCHANGE -R -N "CN=NOGARECERTIFICATE" -PE -A SHA1 -LEN 2048 -SS MY "NOGARECERTIFICATE.CER" Se executar o processo com sucesso, vá até a pasta no qual instalou o SDK e o MakeCert e você terá o arquivo criado. Veja como ficou o arquivo criado neste diretório: Criando o pacote e se comunicando com o Azure Depois de tantos passos de preparação do ambiente para se comunicar com o Azure, nesta seção será criado o pacote que utilizará o conhecimento adquirido nas seções anteriores para concluir o capítulo. Os itens apresentados na solução proposta na introdução será criado em detalhes, com o objetivo de guiar no entendimento das tarefas específicas e ter uma visão macro de como esta solução resolve o problema geral. Para concluir esta seção, é necessário criar um pacote do SQL Server Integration Services e acompanhar os passos a seguir. Azure Blob Upload Task Depois de criado o pacote, arraste o componente do Azure Blob Upload Task. Clique com o botão direito no componente, e aponte para Edit. A primeira configuração a se fazer, é do AzureStorageConnection. Clique na seta para baixo, e em seguida, aponte o mouse para <New Connection...> Você precisa de um Storage no Azure para prosseguir. Vá até sua subscription e encontre os dados necessários para configurar a conexão do componente no SSIS. Caso não saiba onde estão estes dados, vá até seu Storage e clique em Manage Access Keys. Uma tela semelhante à esta imagem abaixo se abre com as informações que precisa. Copie a chave que aparece no Primary Access Key, e preencha no campo de Account Key do SSIS que será configurado. Faça a mesma coisa para o Storage Account Name. Depois de informar os dados solicitados, teste a conexão clicando no botão Test Connection. Se receber a mensagem de sucesso, você configurou com sucesso sua conexão. O próximo item a ser configurado é o BlobContainer e o BlobDirectory. Informe os respectivos nomes, de acordo com seu ambiente. O diretório é opcional, pode deixa-lo em branco, caso queira. Para finalizar esta configuração, informe o local de origem e o nome do arquivo que será enviado pelo SSIS para o Azure Blob Storage. Ao final da configuração, confirme clicando em OK. E repare que aquele alerta vermelho ao lado do componente já não existe mais. Isso significa que as configurações mínimas foram feitas. Para testar, execute o pacote que possui só este componente e aguarde o envio do arquivo. Ao final, quando um check verde ficar ao lado do seu componente, abra o Storage e confirme que o arquivo foi enviado ao servidor. Se você encontrar o arquivo dentro do Blob Storage, seu componente e a configuração inicial foram criados com sucesso. Azure Blob Download Task Depois de enviar o arquivo para o servidor, vamos configurar a tarefa irmã do envio, que é o download do arquivo a partir do servidor. Esta tarefa faz o processo inverso ao que foi executado na explicação do Azure Blob Upload Task, e sua configuração é muito semelhante. Acompanhe os passos a seguir. Arraste o componente do Azure Blob Download Task para uma área vazia dentro do pacote criado. Seguindo o mesmo processo do componente anterior, é necessário editar a tarefa para que ela faça o trabalho proposto. Abra as configurações para editar. Faça isso clicando com o botão direito na tarefa e apontando para Edit. Configure com as mesmas informações utilizadas anteriormente. O único detalhe nesta configuração é o caminho do destino. Coloquei em um sub-diretório dentro do caminho original, para garantir que é um arquivo diferente do que já possuía no meu ambiente de desenvolvimento. Preencha todos os dados de configuração, e confirme no Ok. Mais uma vez, repare que o alerta vermelho não está mais apresentado na sua tarefa. Para executar somente este componente, clique com o botão direito na tarefa de download, e aponte para Execute Task. Após a execução, um check verde será mostrado ao lado da tarefa e, se funcionou corretamente, na pasta que você informou de destino haverá uma cópia do arquivo que foi feito o download. Com isso, concluímos a movimentação de dados nos dois sentidos, entre o servidor que executa o pacote do SSIS e o ambiente do Azure. Azure HDInsight Create Cluster Task A criação dos clusters de HDInsight dentro do Azure permite que um cluster de nós de Hadoop seja disponibilizado através da sua subscription, para processar os scripts em Hive que serão enviados para o ambiente. Para começar esta ação, arraste o controle Azure HDInsight Create Cluster Task para uma área vazia do pacote. Seguindo os mesmos passos das tarefas anteriores, é necessário editar esta tarefa para que ela execute seu propósito. Clique com o botão direito e vá até Edit. A primeira configuração a ser feita é do AzureSubscriptionConnection Como ainda não foi criada a conexão para a subscription, é necessário criar uma do zero. Clique na combo box, e aponte para <New Connection...>. Uma nova tela se abrirá e então os dados devem ser preenchidos. Mais uma vez você precisará de informações específicas da sua subscription do Azure. A primeira delas é a Azure Subscription ID. Você consegue recuperar essa informação nas configurações da sua subscription. Procure as configurações da sua conta em uma tela parecida com estaabaixo: Perceba que durante a configuração do componente, ele pede um certificado digital. Este certificado é o que foi criado na seção Criando um Certificado Digital alguns parágrafos acima. É necessário que você envie este certificado para o Azure. Para isso, ainda na seção de configuração dentro do portal, abra a aba chamada Management Certificates. Ao clicar em Upload a Management Certificate, você deve informar o caminho daquele certificado criado anteriormente. E em seguida clicar no check para concluir o upload. Após alguns instantes, o certificado foi enviado e pode ser utilizado. É necessário copiar o valor informado no Thumbprint, e informar na tela de configuração do componente do SSIS. Pode manter o valor que já está preenchido em Management Certificate Store Location e Management Certificate Store Name, preenchendo somente os dados de Azure Subscription ID e Management Certificate Thumbprint. Após esta configuração, clique em Test Connection e garanta que recebeu a confirmação. Feche a janela de teste de conexão e confirme a conexão com a subscription do Azure clicando em OK. Você será devolvido para a tela inicial da configuração do Azure HDInsight Create Cluster Task. Na sequência, é necessário informar o Storage que vai receber os arquivos de processamento do cluster e se comunicar com o HDInsight. Já foi criado anteriormente a conexão do AzureStoreConnection, e pode (deve!) ser reaproveitada. A seguir é preciso informar a região (lugar onde deseja ter o serviço do Azure) que terá o cluster, nome, tamanho, Blob contêiner, usuário e senha. Obrigatoriamente o cluster deve ser na mesma região do Storage, e no caso deste capítulo, é East US. Veja na imagem abaixo a configuração realizada para esta tarefa. Confirme a configuração clicando em ok, e veja que não tem mais o alerta vermelho ao lado da tarefa. Para testar, clique com o botão direito na tarefa e aponte para Execute Task. Depois de alguns instantes, é possível acompanhar o cluster sendo criado dentro do serviço do HDInsight no Azure. Após a conclusão da tarefa no portal do Azure, e não havendo nenhuma falha, seu componente no SSIS será marcado com o check verde. Azure HDInsight Delete Cluster Task Seguindo a mesma idéia de criar o cluster no HDInsight, a tarefa de excluir o cluster permite que seja selecionado o momento de destruir o cluster e parar a cobrança do serviço. Para isso, arraste o componente Azure HDInsight Delete Cluster Task para uma área vazia do pacote criado. Mais uma vez, é necessário configurar a tarefa. Para isso, clique com o botão direito e aponte para Edit. As configurações desta tarefa são mais simples do que da tarefa de criação do cluster. Afinal, já existe uma AzureSubscriptionConnection configurada e funcionado. Reutilize esta conexão no item que AzureSubscriptionConnection, e informe também o nome do cluster que foi criado no campo ClusterName. No caso deste capítulo, HDInsightNoSSIS. Veja como ficou a configuração desta tarefa. Confirme a configuração clicando em OK, e repare que o alerta vermelho não existe mais. Para executar somente esta tarefa, clique com o botão direito e aponte para Execute Task. Ao término, seu cluster será apagado e você receberá a confirmação com o check verde. Azure HDInsight Hive Task Esta tarefa dispara comandos em HiveQL para o cluster existente. Para garantir que ela vá executar com sucesso, garanta que seu cluster está criado e ainda não tenha sido destruído. Caso você já tenha executado a tarefa de apagar o cluster, execute mais uma vez a tarefa que cria o cluster, como já foi feito mais acima. Arraste o controle Azure HDInsight Hive Task para uma área vazia do pacote, em seguida clique com o botão direito na tarefa e aponte para Edit. A configuração é relativamente simples, uma vez que já foi feita nas tarefas anteriores e você já deve estar familiarizado com elas. A configuração inicial e de informar o AzureSubscriptionConnection e o HDInsightClusterName. O item novo neste componente é o Script que fica dentro do In-Line Script. Clique nas […] para abrir uma caixa de texto no qual será inserido o script em Hive. No caso deste exemplo, que num primeiro momento vai só criar a base de dados, mas que até o final do capítulo vai ler o arquivo do blobStorage e jogar dentro de uma tabela de municípios, foi utilizado este código: CREATE DATABASE HDInsightNoSSIS; O nome HDInsightNoSSIS foi escolhido para dizer o que esta estrutura faz, mas não é necessário manter o nome HDInsightNoSSIS na criação do banco só porque criou o cluster com este nome. Fique à vontade para informar o que melhor atende sua necessidade. Confirme o script clicando em OK, e finalize a configuração da tarefa clicando em OK novamente. Veja que o alerta vermelho desapareceu. Este código acima é responsável por criar o repositório, porém, para deixar o projeto como no exemplo que está na seção de introdução, é necessário quadruplicar esta tarefa, para que outros comandos Hive sejam disparados ao cluster. Copie e cole o controle mais três vezes, para totalizar quatro tarefas de execução de Hive no pacote. Vá até a primeira tarefa copiada, e altere o script para este abaixo: CREATE TABLE HDInsightNoSSIS.Municipios (Ano INT , ufid INT , uf STRING , municipioid INT , municipio STRING , regiaometropolitana STRING , mesorregiaoid INT , mesorregiao STRING , microrregiaoid INT , microrregiao STRING , valoragropecuaria INT , valorindustria INT , valorservicos INT , valoradministracao INT , valorimpostos INT , pibcorrente INT , populacao INT , pibpercapita INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'; Na segunda tarefa, garanta que tenha este script: LOAD DATA INPATH '/dadosBrutos.csv' INTO TABLE HDInsightNoSSIS.Municipios Já na terceira tarefa, mude o script para o seguinte: SELECT municipio, populacao FROM HDInsightNoSSIS.Municipios WHERE microrregiao = 'Mogi das Cruzes' and populacao IS NOT NULL Este código retornará os municípios e a população das cidades da região de Mogi das Cruzes, onde eu nasci. Por padrão, dentro do código em Hive, ele cria um arquivo de saída que pode ser lido dentro do Storage que o cluster processou. Procure o arquivo stdout. Criando a sequência de execução Para fazer o trabalho completo proposto na seção de introdução deste capítulo, uma ordem lógica deve ser seguida. Acompanhe abaixo a ordem de execução das tarefas para garantir o funcionamento adequado. Para facilitar o desenvolvimento, renomeie as tarefas para um nome amigável. Isso ajuda na identificação das tarefas na hora de criar o fluxo de atividades, e depois para ler os logs nas bases de sistemas do SQL Server. Em paralelo deve-se executar a tarefa de subir o arquivo para o Blob Storage e de criar o cluster de HDInsight. Após a conclusão de ambas tarefas, é preciso criar o banco de dados através de uma execução de código Hive. Conecte os componentes de modo a criar esta sequência. Este processo garante que o banco só será criado após o arquivo ser enviado para o Blob Storage e o cluster ser criado. Em seguida, conecte a tarefa de criação do banco com as outras tarefas de Hive, na sequência: Criar a tabela, carregar os dados, selecionar os dados. Após a criação do banco, é possível criar a tabela, popular e consultar. Por fim, conectamos a tarefa de selecionar os dados, que faz o select e salva o arquivo stdout, às tarefas Baixar o arquivo e Apagar o cluster. Ambas as tarefas podem ser chamadas simultaneamente. O download do arquivo stdout e a destruição do cluster acontecem em locais distintos do Azure. Um não interfere no outro e por isso podem ser disparados simultaneamente. Lembrando que, se você seguiu exatamente os passos anteriores como descritos, é necessário alterar o arquivo que será baixado para ostdout, que é gerado a partir do processamento do select no cluster. Ao executar o pacote completo o arquivo baixado ficou na pasta especificada. Ao ler o conteúdo do arquivo é possível encontrar os dados que foram retornados pelo cluster do HDInsight. Recursos Microsoft SQL Server 2014 Integration Services Feature Pack for Azure: https://www.microsoft.com/en-us/download/details.aspx?id=47366 SQL Server Data Tools – Business Intelligence for Visual Studio 2013: https://www.microsoft.com/en- us/download/details.aspx?id=42313 Windows Software Development Kit (SDK) for Windows 10: https://dev.windows.com/en- us/downloads/windows-10-sdk https://www.microsoft.com/en-us/download/details.aspx?id=47366 https://www.microsoft.com/en-us/download/details.aspx?id=42313 https://www.microsoft.com/en-us/download/details.aspx?id=42313 https://dev.windows.com/en-us/downloads/windows-10-sdk https://dev.windows.com/en-us/downloads/windows-10-sdk Criação de Logon no SQL Server Esse capítulo mostra passo passo, a criação de um login e usuário, como também seus acessos a(s) instância(s) no Banco de Dados. Por Sulamita Dantas https://sulamitadantas.com.br/ Revisão técnica por Vitor Fava https://vfava.wordpress.com/ O SQL Server possui algumas opções de autenticação na hora que o usuário vai acessar o sistema, sendo eles abaixo: Modos de Autenticação no SQL Server: Windows Authentication Mode Figura 1. Usando esse modo, a autenticação é feita com o usuário e senha já cadastrado no Windows, ou seja, geralmente é o mesmo login/senha, usado para acessar a estação de trabalho. Além dos usuários do Windows poderem se conectar no SQL Server, grupos de usuários desse sistema operacional também podem se conectar, através de um mapeamento no SQL Server. https://sulamitadantas.com.br/ https://vfava.wordpress.com/ Ao fazer a instalação do SQL Server no Windows, é feito um mapeamento de todos os Administradores locais, permitindo o acesso dos mesmos, para se conectarem ao SQL Server. A qualquer momento, pode ser cancelado o acesso do usuário do Windows ao software, para isso, é necessário primeiro excluir a conta do usuário no Windows, e depois cancelar o mapeamento dentro do SQL Server. Esse modo é o recomendado pela Microsoft, quando todos os usuários que, se conectam ao SQL Server usa o Windows, e assim toda a segurança, auditoria e gerenciamento de usuários fica por conta do Windows e suas ferramentas. Obs.: (A conta no Windows é gerenciada pelo Active Directory ou nos ícones ''Usuário'' e ''Senha''). Mixed Mode Nesse modo, o usuário se conecta ao sistema através de logins exclusivos do SQL Server. Figura 2. Papel do Servidor É muito importante estar atento quando se trabalha com logins e usuários, pois deve-se dar atenção com relação a segurança, e principalmente com relação aos dados e a instância. Através das funções do servidor, são concedidas as permissões, e os acessos as funcionalidades no nível da instância, ligados pelo login. Segue abaixo a lista das funções de servidor bulkadmin Realizam inserções em massa no banco de dados e executam a função BULK INESRT. dbcreator Os usuários dessa função podem criar, modificar, eliminar e restaurar banco de dados, podendo também, executar os seguintes comandos: ALTER DATABASE, CREATE DATABASE, DROP DATABASE, EXTEND DATABASE, RESTORE DATABASE E RESTORE LOG. diskadmin Gerencia os arquivos do disco, e podem usar os comandos: sp_addumpdevice e sp_dropdevice. Processadmin Controlam os processos do SQL Server, podendo também elimina - lós. securityadmin Gerencia os logins, dá permissão de banco de dados e pode ler o log de erros. Adiciona membros do securityadmin, dando os direitos de conceder e revogar permissões em nível de servidor e de banco de dados. Podem executar os comandos: sp_addlinkedsrvlogin, CREATE LOGIN, ALTER LOGIN, DROP LOGIN, sp_droplinkedsrvlogin, GRANT CONNECT, DENY CONNECT, sp_helplogins e sp_moteoption. serveradmin Define opções de configuração em nível de servidor e encerra o mesmo. Executam os comandos: DBCC FREEPROCCACHE, RECONFIGURE, SHUTDOWN, SP_CONFIGURE, SP_FULL_TEXT_SERVICE E SP_TABLEOPTION. setupadmin Gerencia os servidores vinculados, e controla os procedimentos de inicialização. sysadmin Tem o controle total sobre o SQL Server, ou seja, pode executar qualquer tarefa. Funções de Banco de Dados Essas funções são usadas quando se quer atribuir permissões no nível de banco de dados. Através dessas permissões, são definidos os acessos a logins e Usuários, a objetos e funcionalidades do servidor de BD (banco de dados), chamados de “Roles”. Segue abaixo algumas dessas funções de Banco de Dados: Public É a padrão de todos os usuários de BD, fornece o mínimo de permissão. db_accessadmin Pode adicionar ou remover logins no banco de dados. db_backupoperator Permite fazer backups. db_datareader Apenas faz uma leitura dos dados, e um SELECT nas tabelas do banco de dados. db_datawriter Permite adicionar, modificar e apagar os dados na tabela, através dos comandos: INSERT, UPDATE e DELETE. db_ddladmin Permite executar as funções relacionadas as DLL (Linguagem de Definição de Dados), com exceção dos comandos: GRANT, REVOKE ou DENY. Db_denydatareader Não deixa fazer a leitura dos dados, restringindo o acesso aos mesmos. Db_denydatawriter Impede a modificação do banco de dados pelo login. Não utiliza os seguintes comandos: INSERT, UPDATE e DELETE. Db_owner Possui todo o poder do banco de dados, sendo eles: atribuir permissões, modificar configurações do banco, realizar manutenções, e realizar qualquer função de administração, podendo até eliminar o banco de dados. Db_securityadmin Gerencia as funções, permissões e posse de objetos. Dbm_monitor Monitora o estado atual do espelhamento do banco de dados. Permissões O SQL Server possui três comandos relacionados com as permissões: GRANT Permite executar qualquer tarefa DENY Nega as permissões ao tentar executar qualquer tarefa REVOKE Remove a permissão GRANT, mas não impede que o usuário execute uma função ou tarefa. A configuração das permissões no SQL Server envolve três passos: Principal É o login, usuário, ou o papel que receberá a permissão Securable Aqui o objeto principal terá acesso, de acordo com as permissões dadas. Permission Permite quais opções, o principal terá sobre o Securable Logins Abra o SSMS (SQL Server Management Studio) Faça o Login no modo Windows Authentication, conforme Figura 3. Figura 3. Após logado no SSMS, clicar em new query ou use o comando Ctrl + N, conforme Figura 4. Figura 4. Digite o comando ''SELECT * FROM sys.syslogins'', e depois aperte F5, ou execute. Ao executar essa query, ela retorna todos os logins existentes no SQL Server, conforme Figura 5. Figura 5. Criando um login com um domínio no Windows via Transact – SQL Digite o comando abaixo: CREATE LOGIN [Nome da sua conta no windows\Escolha um nome para login] FROM WINDOWS Exemplo: CREATE LOGIN [Sulamita\Sula] FROM WINDOWS Figura 6. Ao ser executado o comando acima (Figura 6), acesse a aba logins (localizada dentro de Security), e verifique o novo login criado, conforme Figura 7. Figura 7. Para deletar o login criado, basta executar o comando: DROP LOGIN [Nome da sua conta no Windows\O login criado], conforme Figura 8. Exemplo: DROP LOGIN [Sulamita\Sula] Figura 8. Após executado o comando acima (Figura 8), pode ser verificado, conforme Figura 9, que o login criado foi excluído com sucesso. Figura 9. Esse login foi criado usando o Transact –SQL Server, agora o mesmo será criado abaixo, usando a ferramenta do SSMS. Criando um login com um domínio no Windows via ferramenta SSMS: Clique com o mouse direito em cima da aba Security>Logins>New Login, conforme Figura10. Figura 10. Como o login está sendo criado com o domínio do Windows, a opção Windows Authentication, deverá ser marcada, e logo em seguida, clique em search, conforme Figuras: 11 e 12. Figura 11. Figura 12. Ao selecionar a opção ''Avançado'', clique em ''Localizar agora'' e procure pelo login que foi criado no Windows, conforme Figuras 13, 14 e 15. Figura 13. Figura 14. Figura 15. Clique em ok. O login criado, pode ser verificado, abrindo as abas SECURITY>Logins, conforme Figura 16. Figura 16. Pronto, criado o login pelo modo Authentication Windows, tanto via Transact-SQL, quanto via Ferramenta SSMS. Criando um login do próprio SQL Server via Transact – SQL Logue pelo Modo Windows Authentication Server, abra uma janela pelo comando Ctrl + N, ou clique em New Query. Após a janela aberta, digite o comando abaixo: CREATE LOGIN [Nome desejado] WITH PASSWORD = 'A senha desejada' Exemplo: CREATE LOGIN [Friends] WITH PASSWORD = 'ab123C#' Figura 17. Comando criado com sucesso. Depois de criado o login (Figura 17), faça uma nova conexão, e logue com o login criado, conforme Figura 18. Figura 18. Conexão feita com sucesso, conforme Figura 19. Figura 19. Para excluir o login pelo Transact – SQL, logue no modo Authentication Windows e digite o comando: DROP LOGIN [Login criado] Exemplo: DROP LOGIN [Friends] Figura 20. Para excluir o login pelo SSMS Abra as abas Security>Logins, escolha o login que deseja ser excluído, clique com o botão direito do mouse, selecione a opção DELETE, conforme Figura 21. Figura 21. Manipulação dos Usuários via Transact SQL De uma forma simples, será feita a criação dos Usuários, com e sem comandos, para isso, é necessário fazer a conexão com algum banco de dados através do comando abaixo: Use (Banco de dados criado) Exemplo: Use SQL Figura 22. O comando sp_helpuser, ao ser executado mostra quais usuários estão ligados a determinado banco, conforme Figura 23. Figura 23. Algumas opções para a criação do usuário Criando um Usuário pertencente a um domínio do Windows, conforme Figura 24. CREATE USER [Nome desejado] FOR LOGIN [Nome da conta do Windows\Login desejado] Exemplo: CREATE USER [Sula] FOR LOGIN [Sulamita\Sula] Figura 24. Para remover o usuário criado acima, utilize o comando: DROP USER Nome escolhido Exemplo: DROP USER Sula Figura 25. Criando um Usuário pertencente a um domínio do SQL Server, conforme Figura 26. CREATE USER [Nome escolhido] FOR LOGIN [Nome do login criado] Exemplo: CREATE USER [Sulamita] FOR LOGIN [Teste] Figura 26. Criando um Usuário sem mapear um Login CREATE USER Nome que deseja criar WITHOUT LOGIN Exemplo: CREATE USER Teste WITHOUT LOGIN Figura 27. Para excluir o Usuário criado acima, utilize o comando: DROP USER Nome criado Exemplo: DROP USER Teste Figura 28. Manipulação dos Usuários via SSMS Abra o SSMS, acesse a aba do Banco de Dados que deseja criar o usuário e, em seguida, abra a aba Security, clicando com o botão direito do mouse em cima de User>New user, conforme Figura 29. Figura 29. Após clicar em New User, aparecerá uma janela, no campo User Name, coloque o nome do usuário a ser criado, conforme Figura 30. Figura 30. Próximo passo será clicar no browser para verificar quais logins existem, e selecionar qual login do domínio esse usuário irá pertencer, conforme Figura 31. Figura 31. Figura 32 Após selecionado o login desejado, conforme Figura acima (Figura 32), clique em ok. Repare que na Figura 33, aparece o login selecionado, dê ok. Figura 33. Após criado o usuário, e o ter vinculado ao login, abra a aba Database -> Banco de Dados -> Security, e confirme a criação do usuário, conforme Figura 34. Figura 34. Após criado o usuário, clique com o botão do mouse direito em properties -> Membership, para atribuir as permissões a nível de banco de dados (Roles), conforme Figura 35. Figura 35. Depois de dado as permissões para o usuário, clique nas abas: Security ->logins, selecione o login desejado, clique com o mouse direito em cima dele, e selecione properties, conforme Figuras 36 e 37. Figura 36. Figura 37. Selecione Server Roles(Figura 37), e escolha qual privilégio(s), o login poderá ter. Conclusão Esse artigo teve o objetivo de mostrar passo a passo a criação de um login e usuário, e seus acessos a instância, e permissões ao banco de dados! Column Store Index Veja neste capitulo o que é o columnstore índice e como implementá-lo. Você também irá aprender em que cenários são ideias o uso dessa poderosa funcionalidade no sql server. Por Thiago [tc] Alencar https://tcalencar.wordpress.com/ Revisão técnica por Luciano Moreira http://luticm.blogspot.com.br Necessidade de Negócios Nos dias atuais muito se fala sobre grande quantidade de dados sendo exposta para tomada de decisão, cálculos massivos, transformações de grandes volumes de dados e etc. Para atender essa necessidade a indústria de TI tem respondido com velocidade e disponibilizado diversos recursos para atender o business dos mais diversificados segmentos. Hoje a maioria dos negócios desejam aproveitar o máximo de infraestrutura contratada, sejam elas em seu próprio datacenter ou na nuvem, que é uma tendência cada vez mais comum nos dias atuais. Fazer com que o software que foi adquirido ou desenvolvido faça bom proveito dos recursos que, muitas vezes são limitados e é um desafio diário para que o negócio seja mais eficiente e a TI não seja apenas "custo". Levando em consideração que, ainda há as limitações em termos de recursos finitos que existem CPU, memória, disco e rede. Avanços como ColumnStore ajudam através do aumento da taxa de transferência de dados, capacidade de armazenamento utilizando o mesmo conjunto de recursos finitos. Além disso, o ColumnStore foi projetado para funcionar em qualquer implementação de hardware existente, garantindo que você não precisa necessariamente colocar todos os dados da tabela em memória (se você tiver recurso sobrando, isso seria ótimo). Como sabemos, uma das funções de um banco de dados é fazer cache de dados que significa: ler dados do disco e colocá-los na memória para que o acesso seja realizado de forma mais performática. Quando uma consulta é executada, o SQL Server deve optar pelos métodos de acesso que sejam mais eficientes para uma consulta e trazer os dados para memória. O ColumnStore index ajuda o SQL Server a endereçar essa utilização de memória de maneira eficiente com o hardware existente que você já possui, isso significa que: você pode ter ganhos de desempenho dependendo do seu workload (OLTP ou OLAP) sem necessidade de fazer novos investimentos de hardware. Aposto que seu gerente vai gostar de ouvir isso. ColumnStore índices funcionam muito bem para workloads que realizam mais leituras em grandes conjuntos de dados como por exemplo: sumarização de dados. Workloads que nasceram com características OLTP e por algum motivo ou solicitação do usuário é necessário a aplicação também possuir características analíticas. Geralmente consultas que realizam grandes varreduras de dados, no caso, SCANs. https://tcalencar.wordpress.com/ http://luticm.blogspot.com.br/ Aonde utilizar? ColumnStore índices no SQL Server podem ser utilizados para acelerar significativamente o tempo de processamento de consultas que armazenam seus dados, no caso, dados que são armazenados em B-Tree (árvore balanceada) ou HEAP, utilizados para gerar informação para sistemas de tomada de decisão. As técnicas normalmente utilizadas em sistemas de armazenagem de dados e de apoio à decisão para melhorar o desempenho são tabelas pré-calculadas, sumarizadas, views indexadas, cubos OLAP e assim por diante. Embora estes podem acelerarbastante o processamento de consultas, essas técnicas podem ser inflexíveis, difícil de manter, e devem ser projetadas especificamente para cada problema, o que pode trazer um caro trade-off na administração da solução. A vantagem do ColumnStore Index permite você obter desempenho das consultas de sumarização sem necessitar, por exemplo, do pré-cálculo dos dados da tabela, como citado anteriormente. Aonde não utilizar/evitar!! Se você costuma atualizar os dados em uma tabela, se é necessário atualizar uma grande massa de registros ou se as caraterísticas de suas consultas sempre retornam uma pequena quantidade de registros, o ColumnStore índice não se encaixa nas suas necessidades. Pois, se a maioria de suas consultas são pequenas, talvez buscar em um índice B-Tree pode ser mais rápido do que ColumnStore Index. Fique atento, pois, uma funcionalidade não pode resolver todos os problemas de um cenário. O que geralmente vejo em campo é uma avaliação malfeita de um determinado recurso. Por exemplo, o cliente tem um problema específico que deseja resolver, mas, elege uma funcionalidade para atendê-lo sem conhecer as limitações da mesma. Após a implementação percebe que o seu problema não foi totalmente sanado e faz uma avaliação equivocada do recurso. A minha dica aqui é: avalie todos os cenários que você precisa atender e teste. Armazenamento Atual No SQL Server, os índices são organizados como B-Tree. O nó superior da B-Tree é chamado de nó raiz (root). Os níveis inferiores dos nós no índice são chamados de folha (leaf level). Quaisquer níveis de índice entre o nó raiz e folha são conhecidos como níveis intermediários (intermediate level). Em um índice clusterizado, os nós folha contêm as páginas de dados da tabela propriamente dita. Os nós do nível intermediário e raiz contêm páginas de índice com “ponteiros” para os dados, isso significa que, páginas do nível intermediário e raiz não possuem dados e sim apontamentos para os mesmos. Cada linha de índice contém um valor de chave e um ponteiro para uma página de nível intermediário na árvore ou ponteiro para uma linha de dados no nível folha do índice. As páginas de cada nível do índice são vinculadas, conhecidas como "doubly-linked list" (lista duplamente encadeada). Dependendo dos tipos de dados da tabela, cada estrutura de índice clusterizado terá uma ou mais unidades de alocação para armazenar e gerenciar os dados de um particionamento específico. No mínimo, cada índice clusterizado terá uma unidade de alocação IN_ROW_DATA por particionamento. O índice clusterizado também terá uma unidade de alocação LOB_DATA por particionamento se contiver colunas LOB, e terá uma unidade de alocação ROW_OVERFLOW_DATA por particionamento no caso de haver colunas de comprimento variável excedendo o limite de tamanho de linha de 8.060 bytes. As páginas da cadeia de dados e as linhas são classificadas pelo valor da chave de índice clusterizado. Todas as inserções são feitas no ponto em que o valor de chave da linha inserida se ajusta à sequência de classificação entre as linhas existentes. Para um índice clusterizado, a página raiz na view de sistema sys.system_internals_allocation_units aponta para a parte superior do índice clusterizado de um particionamento específico. Esta ilustração mostra a estrutura de um índice clusterizado em um único particionamento. Figura 1 - Estrutura de um índice B-Tree https://technet.microsoft.com/pt-br/library/ms177443(v=sql.105).aspx https://technet.microsoft.com/pt-br/library/ms177443(v=sql.105).aspx CSI VS B-Tree Quando os dados são armazenados de maneira colunar utilizando o columnstore índice, os dados muitas vezes podem ser comprimidos de forma mais eficaz do que quando armazenados no formato de linha. Tipicamente existe mais redundância dentro de uma coluna do que dentro de uma linha, o que geralmente significa que os dados podem ser comprimidos em uma taxa muito maior. Quanto mais compacto é o dado, menos IO é necessário para trazer os dados para a memória, isso significa maior quantidade de informação por segmento. Reduzir IO pode acelerar significativamente o tempo de resposta das consultas. Fazer com que maior parte dos seus dados permaneçam na memória também irá acelerar o tempo de resposta para consultas subsequentes que acessam os mesmos conjuntos de dados. Imagine o seguinte cenário: Se uma consulta apenas referência algumas das colunas da tabela, é necessário apenas para um subconjunto das colunas a serem buscados do disco ou na memória. Por exemplo, se uma consulta referente às 10 colunas de uma tabela com 100 colunas (ou seja, 10% das colunas), IO é reduzido em 90% (além de quaisquer benefícios de compressão). Por outro lado, o armazenamento de colunas em estruturas independentes significa que os dados devem ser combinados para retornar os dados como uma linha. Quando uma consulta "toca" apenas um (ou alguns) registro (s), tendo todos os dados para uma linha armazenada em conjunto pode ser uma vantagem, caso a linha possa ser rapidamente localizada com um índice B-tree. Armazenamento em linha pode oferecer melhor desempenho para consultas muito seletivos, tais como consultas que procuram uma única linha ou um pequeno intervalo de linhas (Estamos falando de Seeks, ok?). Archival Compression Columnstore índice e tabelas são sempre armazenados utilizando os algoritmos de compressão do Columnstore. Você pode reduzir ainda mais o tamanho dos dados Columnstore, configurando uma compressão adicional chamado de “archival compression”. Para realizar essa compressão o SQL Server utiliza o algoritmo de compressão XPRESS Microsoft (https://msdn.microsoft.com/en- us/library/hh554002.aspx) sobre os dados. Use a compactação do “archival compression” somente quando você pode se dar ao luxo de usar recursos de tempo e CPU extra para comprimir e recuperar os dados ou para dados históricos com baixa utilização. Um cenário poderia ser onde existe uma tabela particionada em que as partições históricas não são acessadas com frequência ou não são mais acessadas por características do negócio e ocupam um espaço considerável de armazenamento. Nesse caso, avaliar a utilização do “archival Compression” pode fazer sentido. Nós iremos abordar mais nesse capitulo, mas, por enquanto essa introdução deve bastar junto com o link de referência. http://msdn.microsoft.com/en-us/library/cc280449(v=sql.120).aspx Column Store - Clustered e Non Clustered No SQL Server 2012 não era possível criar um ColumnStore índice clusterizado, apenas um índice não clusterizado. A partir do SQL Server 2014 é possível criar ColumnStore índice clusterizado e não clusterizado algo que não era possível até então. A sintaxe para criar ambos, são muito semelhantes, no entanto, eles possuem algumas pequenas particularidades e características. No caso do ColumnStore índice não clusterizado ele tem a limitação de quantidade de colunas, que atualmente não é possível ter mais que 1024 colunas para esse tipo de índice. Como um índice não clusterizado o ColumnStore índice não possui todas as colunas da tabela, pois, ele armazena apenas uma cópia dos dados para as colunas que fazem parte do índice. Embora seja uma boa prática criar um ColumnStore índice com todas as colunas, isso fará com que as consultas nessa tabela sejam “cobertas”. Uma grande novidade no SQL Server 2016 é que esse tipo de índice poderá ser atualizável, isso significa que, não é mais necessário destruir/desabilitar o índice para realizar atualizações/inserções de novos registros. No BOL (books online) tem uma lista de todas as limitações dessa funcionalidade. O ColumnStore clusterizado teve sua primeira aparição no SQL Server 2014, que se trata de um índice baseado em coluna que pode sofrer atualizações, no entanto, o ColumnStore índice clusterizado é “toda” a tabela. Isso significa que em uma mesmatabela não é possível ter um ColumnStore índice clusterizado e outro ColumnStore índice não clusterizado, limitação que foi removida na atual versão do SQL Server, no caso, o SQL Server 2016. Devido ao fator de ser clusterizado, todas as colunas fazem parte do índice, então esse tipo de índice é um índice totalmente coberto. A sintaxe para a utilização da instrução T-SQL CREATE COLUMNSTORE INDEX está especificada na documentação oficial do produto (https://msdn.microsoft.com/pt-br/library/gg492153.aspx). https://msdn.microsoft.com/en-us/library/hh554002.aspx https://msdn.microsoft.com/en-us/library/hh554002.aspx http://msdn.microsoft.com/en-us/library/cc280449(v=sql.120).aspx https://msdn.microsoft.com/pt-br/library/gg492153.aspx Row Groups e Segmentos Sei que até o momento nós falamos de bastante teoria e apenas conceitos, mas, lembre-se. Conceitos e teorias são extremamente importante e apenas "saber na prática", pode não lhe ajudar quando você encarar um problema no dia-a-dia. Para ter uma alta performance e uma alta taxa de compressão, o ColumnStore índice "corta/divide" a tabela dentro grupo de linhas, conhecidas como ROWGROUPS. Após isso, o SQL Server realiza a compressão em formato de colunas (segmento). O número de linhas armazenado no ROWGROUP deve ser grande o suficiente para ter ganho na taxa de compressão e pequeno o suficiente para se beneficiar da utilização de memória para criação dos segmentos. Por enquanto não se preocupe, nós iremos clarificar esses pontos mais à frente. Vamos tentar explicar isso de maneira muito simples. Imagine que você possui uma tabela com alguns milhões de linhas. O SQL Server "coloca" uma linha imaginária para "cortar" em aproximadamente 1 milhão de linhas. Que ficará com algo parecido mais ou menos conforme a figura abaixo: Figura 2 - Criação de ROWGROUPs no Columnstore índice Depois que essa tabela é "cortada" o SQL Server separa em colunas, que conhecemos como segmentos: Figura 3 - Criação de segmentos. Depois que as colunas estão segmentadas, o SQL Server aplica a compressão em cada segmento. Figura 4 - Processo de criação do columnstore índice por fases. As imagens retiradas da documentação oficial da Microsoft (https://msdn.microsoft.com/en- us/library/dn589806(v=sql.120).aspx). O ColumnStore índice armazena os dados em um formato de alta compressão conforme falado anteriormente. Com cada coluna mantida em um grupo de segmentos que ajuda a reduzir IO para a maioria das consultas que possuem a característica OLAP, pois, nesse tipo de cenário as tabelas Fatos possuem em média trinta colunas e a consulta tipicamente não precisa retornar todas elas. Quando temos um índice em uma b-tree e uma linha é retornada, todas colunas daquela linha são colocadas em memória. Geralmente também utilizamos o ColumnStore índice em tabelas de fatos que possuem muitas colunas, no entanto, sempre devemos testar antes de implementar algo. Basicamente o ColumnStore índice é composto por ROWGROUP e segmentos. Para clarificar esse tópico coloquei alguns pontos sobre eles: https://msdn.microsoft.com/en-us/library/dn589806(v=sql.120).aspx https://msdn.microsoft.com/en-us/library/dn589806(v=sql.120).aspx Um ROWGROUP geralmente possui o máximo de linhas permitidas em um ROWGROUP, que é de 1,048,576. Segmentos são dados de uma coluna dentro de um determinado ROWGROUP. Cada ROWGROUP contém uma coluna de um segmento para toda coluna da tabela por partição (se a tabela for particionada) Cada segmento é uma unidade de transferência de IO que significa que o SQL Server irá colocar um segmento por vez na memória e não apenas alguns dados desses segmentos. Ao contrário do In-Memory OLTP (a.k.a Hekaton) o ColumnStore índice utiliza os mecanismos de armazenamento do SQL Server para que cada segmento seja armazenado em disco. A seguir, nós iremos apresentar a implementação do ColumnStore índice e o ganho de desempenho de uma consulta feita sobre uma tabela que não possui o ColumnStore índice e outra tabela que possui o ColumnStore índice não clusterizado. Abaixo estamos criando uma tabela chamada CSTable (ColumnStore) CREATE TABLE CSTable ( [SalesOrderID] [int] NOT NULL, [SalesOrderDetailID] [int] IDENTITY(1,1) NOT NULL, [CarrierTrackingNumber] [nvarchar](25) NULL, [OrderQty] [smallint] NOT NULL, [ProductID] [int] NOT NULL, [SpecialOfferID] [int] NOT NULL, [UnitPrice] [money] NOT NULL, [UnitPriceDiscount] [money] NOT NULL, [LineTotal] [money], [rowguid] [uniqueidentifier] ROWGUIDCOL NOT NULL, [ModifiedDate] [datetime] NOT NULL, ) ON [PRIMARY] Vamos realizar a inserção dos dados na tabela CSTable. INSERT INTO CSTable(SalesOrderID, CarrierTrackingNumber, OrderQty, ProductID, SpecialOfferID, UnitPrice, UnitPriceDiscount, LineTotal, rowguid, ModifiedDate) SELECT SalesOrderID, CarrierTrackingNumber, OrderQty, ProductID, SpecialOfferID, UnitPrice, UnitPriceDiscount, LineTotal, rowguid, ModifiedDate FROM [AdventureWorks2012].Sales.[SalesOrderDetail] Os dados que foram utilizados para carregar essa tabela, são os dados da tabela Sales.SalesOrderDetail do banco de dados AdventureWorks2012. O banco de dados AdventureWorks2012 pode ser adquirido no CodePlex (http://msftdbprodsamples.codeplex.com/releases/view/55330) Agora vamos criar um índice clusterizado para a nossa tabela, conforme script a seguir: if not exists(select 1 from sys.indexes where object_id = object_id('CSTable') and index_id = 1) Begin CREATE CLUSTERED INDEX idxClusteredIndex ON dbo.CSTable ( [SalesOrderID] ASC, [SalesOrderDetailID] ASC ) END GO Vamos criar um ColumnStore índice não clusterizado com todas as colunas da tabela. if not exists(select 1 from sys.indexes where object_id = object_id('CSTable') and type_desc = 'NONCLUSTERED COLUMNSTORE') BEGIN -- Create Non clustered columnstore index take about 20 seconds Create NonClustered ColumnStore Index idxNonClusteredCSI on dbo.CSTable ( [SalesOrderID], [SalesOrderDetailID], [CarrierTrackingNumber], [OrderQty], [ProductID], [SpecialOfferID], [UnitPrice], [UnitPriceDiscount], [LineTotal], [ModifiedDate] ) END GO Agora que o nosso ColumnStore índice não clusterizado foi criado, nós iremos executar duas consultas de sumarização de dados para poder verificar qual o ganho de desempenho de ambas. Conforme script a seguir: DBCC DROPCLEANBUFFERS go SET STATISTICS TIME, IO ON -- + Ctrl + M GO select ProductID AS IdProduto, Sum(OrderQty) as SomaQuantidade, SUM(LineTotal) AS SomaLinhaTotal, Avg(UnitPrice) As MediaPrecoUnico, Avg([UnitPriceDiscount]) as MediaDesconto from [dbo].CSTable where [UnitPriceDiscount] <> 0.00 Group by ProductID OPTION (IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX); -- Apenas para testes GO SET STATISTICS TIME, IO OFF GO DBCC DROPCLEANBUFFERS go SET STATISTICS TIME, IO ON -- + Ctrl + M GO select ProductID AS IdProduto, Sum(OrderQty) as SomaQuantidade, SUM(LineTotal) AS SomaLinhaTotal, Avg(UnitPrice) As MediaPrecoUnico, Avg([UnitPriceDiscount]) as MediaDesconto from [dbo].CSTable where [UnitPriceDiscount] <> 0.00 Group by ProductID GO GO SET STATISTICS TIME, IO OFF Nós utilizamos um HINT IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX para o SQL Server NÃO utilizar o ColumnStore índice não clusterizado, no entanto, isso deve ser evitado. Também utilizamos o comando DBCC DROPCLEANBUFFERS para o SQL Server não ler os dados da memória e sim realizar o que chamamos de cold cache. Obs: NÃO FAÇA ISSO EM PRODUÇÃO. Para a consulta que não utilizou o ColumnStore índice nós tivemos um plano que executou um Clustered Index Scan e realizou as agregações com um HASH MATCH. Conforme podemos ver a seguir: Figura 5 –
Compartilhar