Baixe o app para aproveitar ainda mais
Prévia do material em texto
Administração de Banco de Dados II Aula 1: Introdução ao SQL Server Apresentação Esta primeira aula da disciplina Administração de Bancos de Dados II é uma introdução ao Microsoft SQL Server, um dos sistemas gerenciadores de bancos de dados (SGBDs) líderes do mercado. Estudaremos as principais funcionalidades desenvolvidas pela Microsoft ao longo do tempo, as quais transformaram o SQL Server de um SGBD Relacional em uma plataforma completa de serviços de dados. Aprenderemos a administrar o Microsoft SQL Server, ou seja, entenderemos os conceitos e técnicas para utilizarmos suas ferramentas de administração e garantirmos sua disponibilidade, segurança e desempenho. Objetivos Identi�car as principais características do Microsoft SQL Server; Apontar as principais versões do produto disponibilizadas ao longo de sua evolução, suas inovações e as restrições para a migração entre elas; Descrever os modelos de licenciamento do SQL Server e para quais cenários cada um deles é mais indicado. Conhecendo o SQL Server O SQL Server é um Sistema Gerenciador de Bancos de Dados (SGBD) desenvolvido pela Microsoft. É, atualmente, um dos líderes desse segmento de mercado, sendo utilizado em todos os tipos de empresas, desde as de menor porte até as de muito grande porte. Saiba mais Vale a pena conferir os rankings publicados regularmente em sites de pesquisa, como o DB-Engines ranking. javascript:void(0); Iniciaremos este estudo pela instalação e pela con�guração básica do produto, pois há decisões bastante importantes já nessa etapa. Vamos passar pela criação dos bancos de dados propriamente ditos, incluindo as tabelas, as restrições (constraints), as visões e os procedimentos armazenados (stored procedures), aprender a fazer backup e restore e con�gurar a segurança do banco de dados. Em seguida, exploraremos o dia a dia de um administrador de banco de dados: A monitoração. É onde podemos ver o que está acontecendo no momento, os processos que estão em execução, as sessões dos usuários, quais processos estão executando normalmente e quais estão aguardando um recurso bloqueado, quais são os bloqueios, os tempos de espera etc. Todas essas informações são insumos para o trabalho do administrador. De acordo com os sintomas e os comportamentos observados, utiliza-se a técnica e a ferramenta mais adequadas para resolver os impasses provocados pelo curso normal de execuções de consultas e atualizações simultâneas em um banco de dados. Algumas dessas técnicas formam um conjunto de práticas que são um deleite para todo administrador de banco de dados: O tuning, ou sintonia �na. Entenderemos como o otimizador do SGBD executa uma consulta e aprenderemos a ler um plano de execução. Dependendo das conclusões, aplicaremos técnicas para melhorar o desempenho da consulta e, de uma forma mais ampla, da carga de trabalho. Por falar em usuários: Eles devem ser ouvidos! Eles podem perceber um problema antes mesmo de nós. Uma lentidão em um sistema, um erro em uma stored procedure ou até mesmo a indisponibilidade de todo o SGBD podem ser observados primeiro pelos usuários. Eles podem ter dicas importantes que levarão à causa raiz e à solução mais rapidamente. Com tempo e dedicação, é possível aprender a fazer as perguntas certas! Principais características Clique no botão acima. Principais características O Microsoft SQL Server é um SGBD Relacional, isto é, implementa o Modelo Relacional para a representação de conjuntos de dados como relações. Essa implementação ocorre na forma de funcionalidades para a criação de tabelas e os relacionamentos entre elas, sendo também responsável pela execução de consultas sobre esses objetos. As principais características são: Pode ser instalado em máquinas físicas (baremetal), máquinas virtuais e containers, sobre sistemas operacionais Windows e Linux; Implementa um gerenciamento completo de processos e memória, de forma a maximizar a utilização de recursos do servidor; Implementa um gerenciamento das transações e do processamento das consultas, de maneira que o SGBD possa ter um controle total sobre as operações executadas no banco de dados; Permite capturar a carga de trabalho submetida ao banco de dados para monitorar os processos e usuários deste, observar as consultas e atualizações solicitadas e veri�car os tempos de execução dessas operações; Possui um otimizador que tem a �nalidade de gerar os planos de execução das consultas, garantindo que estas sejam executadas de acordo com os recursos disponíveis, tanto do servidor em que está hospedado, quanto do próprio database; Permite conectar diversas instalações do SQL Server e, por meio dessas conexões, transferir dados de uma instalação para outra, e ainda processar consultas em diversas instalações simultaneamente; Utiliza a linguagem SQL padrão ANSI para que desenvolvedores e administradores possam criar os próprios procedimentos e funções, mas também estende essa linguagem com especi�cações próprias, criando um dialeto SQL denominado Transact-SQL; Fornece uma interface padrão para desenvolvedores e administradores, o SQL Server Management Studio. Por meio dela se pode executar a maioria das tarefas; Oferece suporte a dados semiestruturados e não estruturados, como XML e JSON; Possui diversas ferramentas, como um agendador de tarefas, uma ferramenta para implementação de work�ows ETL (Extract, Transform and Load) e outra para desenvolvimento de soluções de Data Warehouse; Possibilita a integração do SQL com outras linguagens, como C#, R e Python, fornecendo uma base sólida para a execução de implementações de Machine Learning e Big Data. Diante de todas essas características é preciso observar algo fundamental: O Microsoft SQL Server não é somente um SGBD Relacional. Ele estende a plataforma rumo a outros tipos de bancos de dados para dar suporte, por exemplo, a Data Science e a Machine Learning, e ainda oferece uma série de outras ferramentas que complementam o trabalho necessário no universo de administração e disponibilização de dados. Propriedades ACID No contexto de um Banco de Dados Relacional, o SQL Server garante as propriedades ACID, a saber: Atomicidade, Consistência, Isolamento e Durabilidade. Partiremos dessas propriedades para avançarmos na compreensão das características principais do SQL Server. Clique nos botões para ver as informações. É a propriedade que garante que toda operação no banco de dados é atômica, ou seja, ou ela é executada completamente ou não é executada. A implementação que garante a atomicidade parte da transação. Quando um desenvolvedor inicia uma transação com um BEGIN TRANSACTION e termina com COMMIT TRANSACTION ou ROLLBACK, o que ele está fazendo é de�nir as operações que devem ser tratadas de forma atômica. Assim, ou todas elas serão executadas completamente no banco de dados, ou nenhuma delas o será. Atomicidade O SQL Server também garante a consistência, isto é, nenhuma transação pode violar as regras de integridade de�nidas no esquema para a criação de objetos, como os relacionamentos entre tabelas e índices. Se um código tentar infringir qualquer uma das restrições de�nidas nas colunas das tabelas e nas relações entre elas, o SQL Server não vai permitir e vai emitir uma mensagem de erro. O desenvolvedor deverá garantir, então, que o erro seja tratado adequadamente e que a transação seja desfeita por meio de um ROLLBACK. Consistência De volta ao contexto do gerenciamento de transações, temos o conceito de isolamento. Ele garante a não interferência entre as transações que estão em execução no mesmo momento. Imagine a quantidade de transações simultâneas em um sistema bancário, por exemplo. O SQL Server garante que elas sejam executadas isoladamente umas das outras e permite ao administrador controlar o nível de isolamento (isolation level) entre elas. Detalharemos esses níveis na aula de Gerenciamento de Processos no SQL Server. Isolamento Garante que a efetivação de uma transação, por meio de um COMMIT, seja de fato gravada em disco.Para isso, o SQL Server registra todas as transações em um arquivo de log, de forma que, se houver uma falha no servidor que o impeça de persistir os dados da transação, elas sejam recuperadas e persistidas após a recuperação do servidor. Durabilidade Uma recomendação prática, no escopo das principais características do SQL Server, sobre o dialeto SQL disponível no SGBD, chamado Transact-SQL, ou T-SQL, baseado no SQL Server padrão ANSI, inclui uma série de funções e construções que não fazem parte da linguagem SQL padrão. É importante ter isso em mente porque se pretendemos que os procedimentos SQL sejam compatíveis com outros SGBDs, então é recomendado que não se utilizem sintaxes proprietárias implementadas no T- SQL. Histórico da evolução Conta a história do Microsoft SQL Server que ele foi orginalmente criado a partir de uma parceria entre a Microsoft e a Sybase. A parceria tinha como objetivo portar o Sybase SQL Server para o sistema operacional OS/2, desenvolvido em conjunto com a IBM. A primeira versão foi lançada em 1989. A Microsoft então ingressou no mercado de Sistemas Gerenciadores de Bancos de Dados e começou a investir fortemente na evolução de uma versão proprietária. A primeira versão de fato escrita pela Microsoft foi a versão 7.0, em 1998, e logo na sequência a versão 2000. Iniciaremos por essa versão. É muito importante que se observe a evolução das versões e das suas características porque a maioria dos conceitos, técnicas e ferramentas estão presentes atualmente. Note também que as listas de características e inovações apresentadas não são exaustivas. SQL Server 2000 Esta versão, lançada no ano 2000, já contava com um mecanismo robusto para gerenciamento de bancos de dados. As versões anteriores já tinham evoluído bastante a parte central do SGBD, chamado Database Engine, e tanto desenvolvedores quanto administradores contavam com uma plataforma bastante con�ável para manutenção e administração de bancos de dados relacionais. Em termos de popularidade, o SQL Server 2000 foi a primeira grande versão do produto. Consagrou-se por implementar conceitos e ferramentas que fazem parte do produto até hoje. Uma inovação especialmente importante para administradores foi a possibilidade de se executar mais de uma instância na mesma máquina. As instâncias SQL Server que instaladas em uma máquina podem ser de versões diferentes, pois cada uma é totalmente independente da outra, tendo o seu conjunto de recursos próprios, bancos de dados, usuários, regras de segurança etc. https://estacio.webaula.com.br/cursos/go0410/aula1.html Consolida-se então uma característica especialmente importante do SQL Server: Um servidor pode conter diversas instâncias SQL Server e cada instância pode conter diversos bancos de dados. Por sua vez, cada banco de dados contém esquemas, tabelas, visões, usuários, procedimentos e funções. Atenção O conceito de instâncias e bancos de dados é apresentado aqui especi�camente para o SQL Server, e pode ser diferente para outros SGBDs. Os administradores festejaram também grandes melhorias quanto à replicação de dados. Entre elas, O SQL Server 2000 passou a contar com o Log Shipping, uma técnica de cópia dos backups dos arquivos de log das transações para replicar dados de um banco de dados para outro. Assim você poderia manter um banco de réplica somente para leitura a ser utilizado em caso de falha no banco principal. Veremos os detalhes do Log Shipping na aula de Alta Disponibilidade e Recuperação de Desastres. Para os desenvolvedores, o dialeto Transact-SQL passou a contar com novas funcionalidades. Entre as mais importantes, podemos citar: Variáveis do tipo tabela Além das tabelas temporárias, o SQL Server passou a contar com variáveis do tipo tabela. Continue lendo... Trigger do tipo instead- of Além da trigger do tipo after, o SQL Server recebeu a implementação do tipo instead-of, extremamente útil em alguns casos. Continue lendo... Visões indexadas As visões indexadas no SQL Server são visões materializadas, isto é, visões persistidas no banco de dados. Continue lendo... Além das inovações técnicas, a Microsoft começava também a oferecer um novo conjunto de ferramentas adicionais ao produto. Dentre elas, duas se destacaram especialmente e continuam a integrar o produto em suas versões mais recentes: SQL Server Analysis Services (SSAS) É a plataforma de serviços OLAP do SQL Server. Passou a oferecer as ferramentas de desenvolvimento e consumo de dados para Data Warehouse, consistindo na principal abordagem da Microsoft para o mercado de Business Intelligence. SQL Server Integration Services (SSIS) É a ferramenta de ETL (Extract, Transform and Load) do SQL Server. Nela são criados os �uxos de trabalho que transferem dados de um banco de dados para outro. No mundo atual, esses �uxos desempenham papel fundamental para as aplicações, transportando grandes volumes de informação entre os diversos sistemas, internos ou externos a uma organização. SQL Server 2005 Uma importante estreia na versão 2005 foi o SQL Server Management Studio (SSMS), substituto do Enterprise Manager e do Query Analyzer, as IDEs do SQL Server até a versão 2000. O SSMS continua sendo a principal IDE até hoje. Para os desenvolvedores, uma extensa lista de melhorias incluiu novos tipos de dados, integração com CLR, suporte a XML e nova implementação para CTEs: https://estacio.webaula.com.br/cursos/go0410/aula1.html https://estacio.webaula.com.br/cursos/go0410/aula1.html https://estacio.webaula.com.br/cursos/go0410/aula1.html Clique nos botões para ver as informações. Novos tipos de dados foram implementados na versão 2005 para aumentar os limites impostos pela versão 2000. As colunas varchar, por exemplo, tinham o limite de 8000 bytes. Os novos tipos max aumentaram bastante esse limite. O tipo varchar(max) passou a aceitar até 2 bytes. Isto, combinado com a remoção do limite para o tamanho da linha, melhorou sensivelmente os recursos para armazenamento de dados. varchar(max) e varbinary(max) 31 A versão 2000 trouxe signi�cativas melhorias na exposição ao CLR (Common Language Runtime) para integração de código SQL com código escrito em outras linguagens .NET, como Visual Basic .NET e C#. Isso trouxe a possibilidade de se utilizar linguagens compiladas para implementação de algoritmos nestas linguagens e sua integração com procedimentos armazenados e funções. Um caso de uso bastante comum nesses cenários é a implementação de funções de criptogra�a em C# para uso em senhas de usuários de aplicação e armazenamento no banco de dados. CLR (common language runtime) A linguagem XQuery para consulta em strings XML passou a permitir uma série de operações como recuperar um conjunto de nós, recuperar o valor de um elemento especí�co ou ainda alterar o valor de um elemento. Suporte a XML Um recurso extremamente poderoso para desenvolvedores. Por meio de expressões CTE é possível criar uma query temporária e sobre ela executar queries recursivas. É uma construção elegante que substitui construções mais complexas, com desempenho ainda melhor. CTE (common table expressions) SQL Server 2008 e 2008 R2 A versão 2008 também trouxe uma série de inovações. Em 2010 a Microsoft lançou a versão 2008 R2 trazendo melhorias nas inovações apresentadas pela versão 2008. Esta foi uma versão consagrada do SQL Server, ainda em uso em sistemas produtivos atualmente. Essas versões trouxeram novidades especialmente úteis tanto para administradores quanto para desenvolvedores, como uma nova ferramenta de administração de recursos, novos tipos de dados para localização geográ�ca, compressão de bancos de dados transparente para aplicações e novo algoritmo de criptogra�a aplicado a dados gravados. Resource governor Com a possibilidade de execução de várias instâncias em um mesmo servidor, tornou-se necessário estabelecer alguns tipos de limites para processos em execução, de forma que um processo com uso intensivo de entrada/saída não impactasse outros processos. Veremos maisdetalhes sobre essa funcionalidade na aula de Instalação e Con�guração. CDC (change data capture) Funcionalidade para auditoria de operações em bancos de dados extremamente útil. Com ela é possível, por exemplo, habilitar a captura de operações em uma tabela e registrar (em um esquema especí�co para isso) as alterações realizadas nas linhas dessa tabela. Veremos mais detalhes sobre essa funcionalidade na aula de Segurança e Auditoria. Novos tipos de dados A versão 2008 trouxe novos tipos de dados especi�camente para uso em coordenadas espaciais, tanto para coordenadas geométricas (plano cartesiano) quanto para coordenadas geográ�cas (latitude e longitude), além de funcionalidades para a utilização desses tipos na geração de objetos espaciais, como retas, polígonos e mapas. Coluna FILESTREAM Até as versões anteriores, imagens e documentos eram armazenados como bitstreams em colunas do tipo BLOB (Binary Large Objects). Com o FILESTREAM, esses arquivos passaram a ser armazenados no �lesystem, sendo referenciados pelas colunas e parte integrante do banco de dados. Compressão de dados Inicialmente apresentado como um recurso para a diminuição do espaço de armazenamento utilizado para os dados, mostrou-se também uma técnica para a melhoria do desempenho de consultas a esses dados, na medida em que menos blocos são necessários para satisfazer uma solicitação de consulta. Naturalmente, existe um custo associado à compressão e à descompressão que precisa ser levado em conta, sendo totalmente transparente para a aplicação. Criptogra�a TDE Recurso para criptogra�a dos dados quando armazenados no banco de dados. É transparente para a aplicação e é aplicado aos dados quando eles são gravados em disco, sendo descriptografados quando lidos. Trouxe mais segurança aos bancos de dados SQL Server, inclusive mantendo a criptogra�a no backup do banco. Para restaurar um backup de um banco criptografado, é preciso restaurar também a chave utilizada para criptografar. PowerPivot A versão R2 trouxe o PowerPivot, uma extensão do SSAS para fornecer acesso direto a informações analíticas (geradas no Analysis Services) a partir do Excel, por exemplo. Tornou-se uma importante ferramenta de Business Intelligence para usuários realizarem pivot e unpivot de tabelas diretamente em ferramentas de visualização de dados. SQL Server 2012 Foi na versão 2012 que nasceu o Always On, uma funcionalidade do SQL Server extremamente importante e conhecida. Sucessora da versão 2008 R2, a versão 2012 teve a responsabilidade de manter o produto em constante evolução. Foi exatamente essa a inovação principal que garantiu a continuidade. Always On Sendo até hoje a principal ferramenta para con�guração de clusters failover, é responsável pela implementação de Alta Disponibilidade do SQL Server, podendo ser utilizada em cenários de Recuperação de Desastres. Vamos abordar o Always On na aula de Alta Disponibilidade. A versão também trouxe uma série de novidades para desenvolvedores. Novas funções para manipulação de objetos e uso em procedimentos foram disponibilizadas, incluindo IIF, CONCAT, FORMAT, OFFSET para paginação de resultados, entre outras. Além dessas novas funções, tivemos: Clique nos botões para ver as informações. As colunas IDENTITY são utilizadas para a criação de chaves primárias surrogadas, sendo baseadas em uma sequência numérica. A versão 2012 trouxe o objeto do tipo Sequence, que cria uma sequência como esta, de forma que se pode criar uma chave primária baseada nessa sequência. Sequências Este novo tipo de índice possibilita enormes ganhos de desempenho para a carga de trabalho submetida ao banco de dados, principalmente se estivermos trabalhando com Data Warehouse. Nesses cenários, é comum ter que recuperar os valores distintos de uma determinada coluna. Índices column-store permitem que essa recuperação seja muito rápida, pois não é necessário ler as linhas da maneira tradicional (SELECT DISTINCT). Índices column-store Até as versões anteriores, erros em blocos TRY-CATCH eram tratados com a cláusula RAISERROR. A versão 2012 inaugurou o uso de cláusulas THROW para disparo de exceções, em substituição às cláusulas RAISERROR. Tratamento de erros Baseada nos índices full-text, a busca semântica permite aos desenvolvedores realizarem buscas de palavras em documentos que retornem as palavras com base no seu signi�cado, de forma similar à busca realizada por outros mecanismos como Google. Busca semântica Fundamental na atualidade, pela primeira vez a Microsoft incluiu serviços de qualidade de dados no SQL Server. Com eles, os desenvolvedores puderam criar regras de veri�cação de qualidade e submetê-las ao Database Engine para que fossem checadas durantes as atualizações nos dados, incluindo padronização e enriquecimento. Data Quality SQL Server 2014 A versão 2014 é marcante porque anunciou a chegada do Azure, a plataforma de nuvem da Microsoft, e toda uma nova geração de ferramentas para migração de bancos de dados para a nuvem. Além disso, endereçou uma série de melhorias no Always On e apresentou um novo mecanismo para bancos de dados In-Memory. 01 Always On As evoluções apresentadas nessa versão tornaram o Always On ainda mais robusto para uma série de cenários não previstos anteriormente. A capacidade de organização de grupos de disponibilidade trouxe mais �exibilidade e autonomia aos administradores para implementação de suas soluções de Alta Disponibilidade e Recuperação de Desastres. 02 In-memory Evolução do suporte a transações in-memory, permitindo que tabelas inteiras passassem a ser alocadas na memória e aumentando enormemente o desempenho das consultas submetidas ao banco de dados. 03 Melhorias no otimizador Os algoritmos que estimam a cardinalidade de tabelas auxiliares foram reconstruídos nessa versão. Um dos passos mais importantes na geração do plano de execução de uma consulta, esta é uma melhoria signi�cativa do otimizador do SQL Server que passou a contar com estimativas bem mais próximas da realidade, o que faz com que o plano gerado esteja mais próximo do melhor desempenho possível. 04 Clones de bancos de dados Funcionalidade para a geração de um novo banco de dados a partir de outro banco já existente, copiando os esquemas e os metadados deste, mas não copiando seus dados. Outras versões do SQL Server Clique no botão acima. Outras versões do SQL Server SQL Server 2016 Na versão 2016 foi apresentada uma grande inovação que será muito utilizada no seu dia a dia como administrador do SQL Server, a Query Store. Outra grande novidade da versão, o Polybase, traz um conector para Hadoop, uma plataforma para construção de Data Lakes. Outras novidades incluem o mascaramento dinâmico de dados, melhorias na criptogra�a e maior integração com a plataforma Azure. SQL Server no Linux Uma novidade que agitou o mercado de banco de dados, pelo fato de a Microsoft ter portado o SQL Server para o Linux, o grande rival do Windows. Essa foi a primeira versão com suporte ao Linux, ainda com algumas limitações, como processamento de queries distribuídas e replicação de bancos de dados. Query Store Essa ferramenta trouxe grandes avanços tanto para a monitoração do SQL Server quanto para a análise dos planos de execução e do desempenho das cargas de trabalho. É exatamente a Query Store que vai possibilitar um dos grandes avanços em toda a história do SQL Server, o tuning automático, que começaria a ser oferecido na versão 2017 no Azure. Polybase Com o Polybase é possível conectar o SQL Server diretamente ao Hadoop, permitindo que a ingestão das bases de dados para o sistema de arquivos dessa plataforma (HDFS) seja realizada de forma nativa, assim como a consulta aos dados ali armazenados. Linguagem R O R Services da versão 2016 trouxe suporte à integração do código SQL com a linguagem R, bastante difundida pelo foco em operações da estatística, o que vai ao encontro das necessidades atuais de Data Science. Mascaramento dinâmico de dados Permite quesejam criadas regras de mascaramento para dados em repouso ou em trânsito, aumentando a segurança dos bancos de dados. Esta é uma funcionalidade especialmente importante no contexto da LGPD (Lei Geral de Proteção a Dados). Criptogra�a A versão 2016 trouxe a con�guração Always Encrypted para um banco de dados, de forma que todas as operações neste sejam criptografadas. Always On Uma série de melhorias no Always On foram implementadas nessa versão, aumentando o limite de réplicas síncronas em grupos de disponibilidade, o que torna as soluções para Disaster Recovery ainda mais completas. SQL Server 2017 Esta versão consolidou o suporte ao Linux e estreou o conceito de tuning automático, pelo qual emite recomendações para ajustes de desempenho. Também apresentou o Machine Learning Services, um conjunto de serviços de apoio a algoritmos de aprendizado de máquina. Tuning automático Baseado na Query Store, o SQL Server emite recomendações de tuning, como criação de índices e visões indexadas. No mesmo contexto, implementou diversas melhorias no processamento das consultas, também com base na captura dos planos de execução da Query Store. Machine Learning Services Possibilita a integração da linguagem SQL com a linguagem Python, amplamente utilizada atualmente. Aumentou o leque de opções para cientistas de dados, que já contavam com o suporte à linguagem R. Fornece ainda um conjunto de serviços de apoio a algoritmos especializados nas bibliotecas de Aprendizado de Máquina e Inteligência Arti�cial. SQL Graph Database A versão 2017 trouxe ainda uma excelente notícia, a capacidade de criar grafos com base nos relacionamentos entre as tabelas. É um recurso de extrema utilidade, principalmente quando se tem muitos relacionamentos entre as tabelas e eles podem se tornar uma informação de fato. SSAS e SSIS A Microsoft mostra nessa versão que mantém um forte investimento em suas plataformas de Data Warehouse (Analytics Services) e ETL (Integration Services), ao disponibilizar uma série de melhorias para elas. Suporte a modelos tabulares e instâncias Linux são exemplos. SQL Server 2019 Versão mais recente do produto, a 2019 anunciou o Big Data Cluster para SQL Server, uma plataforma completa para Data Science. Anunciou também recursos para virtualização de dados e melhorias relevantes no processamento de consultas. Big Data Cluster Trata-se da abordagem da Microsoft para tornar possível a implementação de Data Lakes a partir do consumo de dados depositados no próprio SQL Server. As abordagens tradicionais para uma implementação desse tipo, utilizando Hadoop ou Spark, dependem de ingestões de dados para transferir dados dos bancos de dados para o lake, o que demanda esforço computacional e tempo. Com essa nova abordagem, orquestrada por Kubernetes, o Data Lake do Big Data Cluster em conjunto com o suporte a dados não estruturados tem o potencial de trazer para o SQL Server todo um conjunto de necessidades atuais dos chamados Cientistas de Dados. Virtualização de dados Esta nova funcionalidade permite o mapeamento de bancos de dados em outros SGBDs, como Oracle, para os bancos de dados do SQL Server. Essa é uma alternativa a ser considerada em cenários de dados espalhados em diversas fontes, para os quais é preciso criar tarefas de ETL para movimentá-los, ou então jobs de replicação que sempre são muito custosos para a administração do banco de dados. Processamento de consultas A Microsoft chama este novo conjunto de melhorias de Processamento Inteligente de Consultas, na medida em que essa nova versão utiliza o suporte oferecido pela Query Store e, em alguns casos, pelo Machine Learning Services para recomendar e atualizar os planos de execução das consultas visando ao melhor desempenho. É de fato um grande avanço. Saiba mais Chegamos ao �m da parte da aula sobre a evolução do SQL Server ao longo de mais de 20 anos. Para conhecer os detalhes dessa história, consulte as páginas da Microsoft sobre cada versão. Há um vasto material sobre todas essas versões, disponível em: https://docs.microsoft.com/pt-br/previous-versions/sql/. A versão Linux do SQL Server A primeira versão do SQL Server a ter suporte para instalação sobre sistemas operacionais Linux foi a 2016, sendo consolidado na versão 2017 e compatível com Red Hat, Suse e Ubuntu. Segundo a Microsoft, o mecanismo do banco de dados é o mesmo para Windows e Linux, entretanto, a versão Linux possui uma série de limitações, a maioria imposta pelas próprias diferenças entre os sistemas operacionais. Um exemplo é o tipo de coluna FILESTREAM (SQL Server 2008). Como a funcionalidade depende diretamente de um mapeamento para o sistema de arquivos do Windows (NTFS), a Microsoft deverá portar esse mapeamento para os sistemas de arquivos do Linux, por exemplo, o EXT2 ou EXT3. A versão Linux do SQL Server, apesar das limitações, tem um bom comportamento em ambientes heterogêneos, na medida em que os administradores podem implantar bancos de dados oriundos de versões Windows com nenhuma ou pouca alteração, utilizando as mesmas ferramentas com as quais estão acostumados, como o SQL Server Management Studio. Saiba mais Para conhecer os detalhes da versão do SQL Server no Linux, acesse SQL Server no Linux. Dosponível em: https://docs.microsoft.com/pt-br/sql/linux/sql-server-linux-overview?view=sql-server-ver15 Para ver as limitações da versão 2019 no Linux, acesse Edições e recursos compatíveis do SQL Server 2019 no Linux: https://docs.microsoft.com/pt-br/sql/linux/sql-server-linux-editions-and-components-2019?view=sql-server- ver15#Unsupported javascript:void(0); javascript:void(0); javascript:void(0); Utilização de diferentes versões em um mesmo ambiente É possível utilizar diferentes versões em um mesmo servidor, isto é, ter diferentes instalações SQL Server, de diferentes versões, em uma mesma máquina, virtual ou não. Conforme veremos em aulas posteriores, uma versão mais recente pode não suportar todas as características de uma versão mais antiga. Por exemplo, a versão 2012 não suporta algumas construções T- SQL existentes na versão 2008 R2. Isto é especialmente importante quando se atualiza a versão das instalações SQL Server. Comentário Além disso, backups de uma versão posterior não são reconhecidos em versões anteriores. Portanto, ao trabalhar com ambientes mistos, é preciso ter atenção a essas restrições de compatibilidade entre as versões. Nível de compatibilidade Cada versão do SQL Server tem um nível de compatibilidade padrão e suporta alguns níveis de compatibilidade anteriores. Veja a tabela a seguir: Versão Versão do Engine Nível de compatibilidade padrão Níveis de compatibilidade suportados 2019 15 150 150,140,130,120,110,100 2017 14 140 140,130,120,110,100 2016 13 130 130,120,110,100 2014 12 120 120,110,100 2012 11 110 110,100,90 2008 R2 10.5 100 100,90,80 2008 10 100 100,90,80 2005 9 90 90,80 2000 8 80 80 O que essa tabela informa? Se há um banco de dados implantado no SQL Server 2005 e se deseja migrá-lo para uma instância 2012, pode-se restaurá-lo na nova instância sem alterações na sintaxe dos procedimentos porque o SQL Server 2012 suporta o nível de compatibilidade 90, que é o padrão do SQL Server 2005. Por outro lado, para migrá-lo para uma instância 2017, deve-se, por exemplo, migrá-lo para uma instância 2012 e fazer as correções necessárias para levantar o nível de compatibilidade para 110. Em seguida, é possível levá-lo para a instância 2017, porque esta suporta o nível 110, padrão do 2012. Licenciamento Clique no botão acima. Licenciamento A Microsoft comercializa atualmente o SQL Server em dois modelos principais de licenciamento: A edição Standard e a edição Enterprise. As principais diferenças entre essas duas versões dizem respeito aos limites de uso dos recursos computacionais. A edição Enterprise permite que se utilizem todos os núcleos disponíveis no servidor. Já a versão Standard permite que se use somente 24 núcleos ou todos os núcleos de 4 soquetes, o que for menor. Não é difícilatualmente encontrar servidores com capacidade de 96 núcleos. Veja, por exemplo, a especi�cação de um servidor Huawei RH5885H V3 . Ele possui 4 soquetes com capacidade para até 96 núcleos. Se estiverem preenchidos completamente, só será utilizado ¼ da capacidade com a versão Standard! Nesse caso, para usar a capacidade total da máquina, deve-se necessariamente licenciar a versão Enterprise. A versão Standard é mais indicada para sistemas de menor porte, pois naturalmente possui um custo de licenciamento menor. A edição Enterprise é mais indicada para sistemas com requisitos de disponibilidade e processamento maiores, por exemplo, um sistema de reservas de bilhetes aéreos ou um sistema de atendimento a clientes de um grande banco, mas também é a mais indicada quando se tem um grande número de bancos de dados de sistemas diferentes, não necessariamente de missão crítica. Há ainda as edições Web, Express, Express with Advanced Services, Express LocalDB e Developer. A versão Express, assim como a Developer, não tem custo de licenciamento. Você pode realizar o download e executar a instalação em sua própria máquina. Os limites impostos nessas versões quanto ao uso de recursos são bastante maiores. O tamanho de um banco de dados, por exemplo, não pode ultrapassar 10 GB. A versão Express with Advanced Services possui o Integration Services que, como visto anteriormente, é um componente adicional do SQL Server utilizado para implementações de ETL. A versão Express LocalDB é utilizada de forma embarcada em aplicações para dispositivos móveis. Já a versão Web, em termos de limitações, situa-se entre a versão Express e a Standard. Ela pode utilizar até 16 cores, por exemplo, enquanto a versão Express possui o limite de 4 cores. Para ver em detalhes todos os recursos e as limitações de cada edição, procure por sql server 2019 editions comparison no site da Microsoft. Licenciamento para máquinas virtuais As licenças para máquinas virtuais são comercializadas em pacotes (packs) de 2 cores cada um. Então, ao adquirir 12 licenças para máquinas virtuais, você pode instalar o SQL Server em todas as máquinas virtuais que compartilhem um hardware com 24 núcleos de processamento. Isso pode ser muito vantajoso em alguns cenários, tanto do ponto de vista de utilização de várias instalações SQL Server distintas, quanto do ponto de vista �nanceiro. Vamos ver mais sobre isso em Instalação do SQL Server. Licenciamento para containers O uso de containers Docker e sua orquestração com Kubernetes tem crescido bastante nos últimos anos e se tornou a base para a infraestrutura de nuvens privadas e públicas, principalmente por causa da elasticidade. A capacidade de realizar o scale-out e o scale-in faz dessas plataformas uma escolha bastante apropriada para cenários em que a capacidade de processamento deve aumentar ou diminuir de acordo com a demanda. Vamos ver mais sobre containers na aula de Alta Disponibilidade. O licenciamento do SQL Server para essas plataformas prevê que sejam licenciados os núcleos virtuais de cada container SQL Server. Há também a opção de licenciar todos os núcleos de uma máquina física. Nesse caso, você poderá executar tantos containers SQL Server quantos forem o número de núcleos da máquina física. javascript:void(0); Leitura Para conhecer em detalhes todas as características do licenciamento Microsoft para as diferentes plataformas, faça o download do Microsoft SQL Server 2019 licensing guide, no site da Microsoft. Nesse guia você vai encontrar seções bem de�nidas para cada plataforma. Política de ciclo de vida A política de ciclo de vida da Microsoft para o SQL Server compreende os períodos que delimitam o início e o término do ciclo de vida dele. Este é sempre de�nido com base na edição e na versão do SQL Server. Então, por exemplo, você vai encontrar as datas de início e término do ciclo de vida para SQL Server 2012 Enterprise Edition. Normalmente o ciclo de vida de uma versão SQL Server dura 10 anos, entre o lançamento e o �m do suporte para o último Service Pack, mas isso pode variar. É fundamental que o administrador esteja atento a esses prazos e também à política como um todo, para que possa planejar as atualizações de versão. Saiba mais Veja na Política de ciclo de vida da Microsoft as tabelas de ciclo de vida dos produtos da empresa. Pesquisando por sql server 2012, você pode concluir que o suporte à edição SQL Server Enterprise Edition se encerra em 12 de julho de 2022. javascript:void(0); javascript:void(0); Conclusão Vimos como o SQL Server nasceu e evoluiu ao longo do tempo, tornando-se um dos líderes no segmento de SGBDs. Você, como administrador de bancos de dados, deve lembrar-se de que o produto avançou a partir de um SGBD unicamente relacional para uma plataforma que atende a outras necessidades, como Data Warehouse, ETL, Ciência de Dados e Inteligência Arti�cial. Todas ou parte dessas soluções estarão no seu dia a dia. Vimos também como o produto é comercializado, quais as limitações impostas nas edições e quais as restrições para a atualização de versões. Você, como administrador do SQL Server, deve estar sempre atualizado sobre essas informações. É parte do seu trabalho olhar para a frente e planejar a atualização da infraestrutura de dados. Atividades 1. Qual das propriedades listadas a seguir não é implementada pelo Microsoft SQL Server? a) Controle de transações b) Gerenciamento de concorrência c) Segurança no acesso aos dados d) Elasticidade e) Replicação de dados 2. Relacione as colunas a seguir: SQL Server 2000 1 SQL Server 2005 2 SQL Server 2008 3 SQL Server 2012 4 SQL Server 2014 5 SQL Server 2017 6 SQL Server 2019 7 a) XQuery b) Big Data Cluster c) Visões materializadas d) In-Memory OLTP e) Recomendações de tuning f) Filestream g) Always On 3. Leia a seguinte a�rmativa: “O SQL Server é um SGBD que oferece um mecanismo robusto de banco de dados que implementa um dialeto SQL estendido a partir do padrão ANSI que pode ser integrado com as linguagens R e Python, entre outras, em um ambiente de Big Data com acesso a algoritmos de Aprendizado de Máquina e Inteligência Arti�cial”. Marque, a seguir, a resposta correta: a) A afirmativa está correta. b) A afirmativa está incorreta. 4. Quais das ações a seguir devem ser tomadas para que se migre um banco de dados hospedado em uma instância 2012, com nível de compatibilidade 90, para uma instância instalada com a versão 2019? 1. Migrar o banco sem alterações. 2. Elevar o modo de compatibilidade do banco de dados para 110, fazendo as alterações necessárias, e migrar o banco para o SQL 2017, sem alterações. 3. Migrar o banco de dados para o SQL 2014, sem alterações; em seguida, migrar o banco de dados para o SQL 2017, fazendo as alterações necessárias. 4. Migrar o banco de dados para o SQL 2014, fazendo as alterações necessárias; em seguida, migrar o banco de dados para o SQL 2017, fazendo as alterações necessárias. 5. Migrar o banco de dados para o SQL 2014, fazendo as alterações necessárias; em seguida, migrar o banco de dados para o SQL 2017, sem alterações. Assinale a opção correta: a) 1,2 e 3 b) 1,2 e 4 c) 2, 3 e 5 d) 2, 4 e 5 e) 3, 4 e 5 5. Qual edição do SQL Server maximiza o uso do hardware disponível? a) SQL Server Web Edition b) SQL Server Developer Edition c) SQL Server Standard Edition d) SQL Server Enterprise Edition e) SQL Server Full Edition Notas Instância Cada uma das diferentes instalações SQL Server executadas na mesma máquina. Como o próprio nome diz, essas tabelas são alocadas diretamente em memória, sendo esta a principal diferença para as tabelas temporárias que garantiu melhorias de desempenho para as consultas que utilizam tal recurso. Um gatilho desse tipo substitui completamente a execução do comando original e pode ser utilizado em todos os cenários para os quais é necessário algum tipo de crítica e/ou atualização de dados em mais de uma tabela. Em vez da visão tradicional, na qual somente a de�nição é armazenada, na visãomaterializada os dados são persistidos, da mesma forma que em uma tabela. Em muitos cenários, conforme veremos na aula de Tuning, a visão materializada pode aumentar o desempenho de consultas ao banco de dados. Referências DB-ENGINES. DB-Engines ranking. 2020. Disponível em: https://db-engines.com/en/ranking. Acesso em: 21 maio 2020. HUAWEI. RH5885H V3. 2020. Disponível em: https://support-it.huawei.com/server-3d/res/server/rh5885hv3/index.html? lang=en. Acesso em: 21 maio 2020. MICROSOFT. Documentação de versões anteriores do SQL Server. 2020a. Disponível em: https://docs.microsoft.com/pt- br/previous-versions/sql/. Acesso em: 21 maio 2020. MICROSOFT. Edições e recursos compatíveis do SQL Server 2019 no Linux. 2020b. Disponível em: https://docs.microsoft.com/pt-br/sql/linux/sql-server-linux-editions-and-components-2019?view=sql-server- ver15#Unsupported. Acesso em: 21 maio 2020. MICROSOFT. Editions and supported features of SQL Server 2019 (15.x). 2020c. Disponível em: https://docs.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-version-15?view=sql-server-ver15. Acesso em: 21 maio 2020. MICROSOFT. Política de ciclo de vida da Microsoft. 2020d. Disponível em: https://docs.microsoft.com/pt-br/lifecycle/. Acesso em: 21 maio 2020. MICROSOFT. SQL Server no Linux. 2020e. Disponível em: https://docs.microsoft.com/pt-br/sql/linux/sql-server-linux-overview? view=sql-server-ver15. Acesso em: 21 maio 2020. MICROSOFT. WITH common_table_expression (Transact-SQL). 2020f. Disponível em: https://docs.microsoft.com/pt-br/sql/t- sql/queries/with-common-table-expression-transact-sql?view=sql-server-ver15. Acesso em: 21 maio 2020. MICROSOFT. Microsoft SQL Server 2019 licensing guide. 2019. Disponível em: https://download.microsoft.com/download/6/6/0/66078040-86d8-4f6e-b0c5- e9919bbcb537/SQL%20Server%202019%20Licensing%20guide.pdf. Acesso em: 21 maio 2020. Próxima aula Diagramas de arquitetura do SQL Server; Integração dos principais componentes da arquitetura do SQL Server; javascript:void(0); javascript:void(0); javascript:void(0); javascript:void(0); javascript:void(0); javascript:void(0); javascript:void(0); javascript:void(0); javascript:void(0); Garantia das propriedades ACID no SQL Server. Explore mais Leia o texto:WITH common_table_expression (Transact-SQL) As CTE (Common Table Expressions) nasceram no SQL Server 2005 e são muito utilizadas até hoje, constituindo-se uma excelente ferramenta para administradores e desenvolvedores. Estude a descrição completa, procure um exemplo de CTE no documento e pense como resolveria o mesmo problema sem utilizar CTE. javascript:void(0); / Administração de Banco de Dados II Aula 2: Arquitetura do SQL Server Apresentação Esta segunda aula da disciplina Administração de Bancos de Dados II é uma apresentação da arquitetura do Microsoft SQL Server. Conheceremos os componentes principais desse sistema gerenciador de bancos de dados, permitindo a compreensão da integração entre eles. Durante a aula, apresentaremos um diagrama de arquitetura que mostra como os componentes trabalham juntos para a atender às solicitações enviadas pelos clientes. Trata-se de conceitos fundamentais para o administrador do SQL Server Objetivos Identi�car os principais componentes do Microsoft SQL Server; Descrever as características dos principais componentes da arquitetura do SQL Server; Discutir como os componentes se integram para executar as tarefas do SGBD e atender às solicitações de clientes. Conhecendo a arquitetura de um SGBD A arquitetura de uma solução é o ponto de partida para que se entenda o que e como ela atinge os objetivos. No caso de um Sistema Gerenciador de Bancos de Dados (SGBD), como o SQL Server, compreender a arquitetura é identi�car os principais componentes e como eles se integram para, por exemplo, resolver as consultas submetidas ao banco de dados. / Como há diversos aspectos a serem considerados na arquitetura de um SGBD, é comum enxergar a solução como um conjunto de subsistemas que atendem a objetivos especí�cos. Um subsistema bastante importante, por exemplo, é o gerenciador de processamento de consultas. Ele é o responsável por analisar uma consulta, gerar um plano de execução para ela e executá-la. O otimizador do banco de dados é um dos componentes desse subsistema, de fato um dos mais importantes de todo o SGBD. Daqui em diante pensaremos a arquitetura do SQL Server como um conjunto de subsistemas, integrados entre si, com cada um deles contendo diversos componentes, também integrados entre si. Todos eles trabalham juntos e cooperam de forma coordenada para entregar os resultados esperados pelos administradores, desenvolvedores e usuários. Arquitetura geral Um bom ponto de partida é a próxima imagem. Ela ilustra a chegada de uma requisição de um cliente e como esta atravessa os principais componentes até a entrega do resultado. Com base neste diagrama, podemos destacar os seguintes subsistemas: 1 Protocol Layer; 2 Relational Engine; 3 Storage Engine; 4 Buffer Pool. / Fonte: (MICROSOFT, 2017, on-line) Vamos examinar os subsistemas dessa arquitetura para entender a responsabilidade deles e conhecer os principais componentes de cada um. Para ver outros diagramas de arquitetura do SQL Server, pesquise por “sql server database engine architecture diagram”. Você poderá encontrar também diagramas dos subsistemas listados. Protocol Layer A camada de Protocolos é a porta de entrada do SQL Server. É por meio dela que os clientes se conectam ao SGBD e enviam as solicitações. A conexão do cliente com o SQL Server é estabelecida sobre um protocolo de comunicação, sendo que atualmente são suportados três protocolos, a saber: TCP/IP, Named Pipes e Shared Memory. O suporte a esses protocolos é oferecido pelo SNI (Service Network Interface). TCP/IP Protocolo mais frequentemente utilizado por aplicações que acessam o banco de dados. Uma conexão típica de um cliente com o servidor SQL Server utiliza o endereço IP (Internet Protocol) do servidor e a porta TCP (Transmission Control Protocol) pela qual o serviço correspondente está escutando. A porta default para uma instalação SQL Server é a 1433, mas é possível alterá-la durante a instalação ou posteriormente pelo Con�guration Manager. Named Pipes Protocolo que utiliza o subsistema de intercomunicação entre processos do Windows. Para que um cliente se conecte a um servidor utilizando esse protocolo, é preciso que os dois estejam na mesma subrede. Utiliza a porta TCP 445 por default. Shared Memory Memória compartilhada no próprio servidor, logo, tanto o cliente quanto o servidor devem estar instalados na mesma máquina para que esse protocolo seja utilizado. Um caso típico de uso de Shared Memory é o próprio SQL Server Management Studio (SSMS), quando se acessa bancos de dados locais para realizar tarefas administrativas. / Note, no diagrama apresentado, o uso do protocolo TDS (Tabular Data Stream) para transferência de dados entre o cliente e o servidor SQL Server. O TDS é utilizado desde a parceria da Microsoft com a Sybase e é o protocolo responsável por carregar tanto as solicitações enviadas a partir dos clientes quanto enviar a eles as respostas do SQL Server. Quando um usuário se conecta a uma instância e envia um comando SELECT, esse comando é encapsulado em uma mensagem TDS e a mensagem é carregada por meio de um dos protocolos suportados, TCP/IP por exemplo, até o endpoint TDS que se situa nessa camada, Protocol Layer. O SELECT é resolvido pelo engine do SQL Server e devolvido para a mesma camada que, por sua vez, encapsula a resposta em uma nova mensagem TDS e a envia pelo mesmo endpoint, TCP/IP nesse caso, para o cliente. Todas as mensagens entre cliente e servidor seguirão esse �uxo. Aqui residem as primeiras mensagens de erro que você, como administrador, vai tratar. São as mensagens de erro de conexão ao SQL Server. Sempre que uma mensagem TDS não conseguir encontrar seu endpoint correspondente, uma mensagemde erro será devolvida ao cliente, nesse caso, não pelo SNI, mas pelo próprio protocolo de comunicação que, não conseguindo fechar a conexão, devolve uma mensagem de erro para o cliente que a solicitou. Trataremos desses erros na aula de Instalação e Con�guração do SQL Server. Saiba mais Para ver detalhes da camada de protocolos do SQL Server, visite SQL Server Protocols , da Microsoft, disponível em: https://docs.microsoft.com/en-us/openspecs/sql_server_protocols/ms-sqlprotlp/f16558b2-4561-45be-89c9-6f9114514c97. Relational Engine Uma vez que a conexão foi estabelecida na camada de serviço de rede, por meio de um dos protocolos disponíveis, o cliente já pode enviar solicitações. Estas virão na forma de uma mensagem TDS que, ao ser extraída do pacote, tem o conteúdo veri�cado. Tratando-se de uma solicitação expressa na linguagem SQL, ela é transferida ao Relational Engine, que possui as seguintes funções: javascript:void(0); / 1 Veri�car a sintaxe do comando contido na solicitação; 2 Gerar um plano de execução para o comando; 3 Executar o comando. As três funções são de responsabilidade de três componentes distintos: Command Parser, Optimizer e Query Executor. Componentes Clique no botão acima. / Command Parser É o componente responsável pela veri�cação da sintaxe T-SQL do comando a ser executado. Caso haja um erro nessa sintaxe, uma resposta contendo uma mensagem de erro é enviada ao cliente. Caso contrário, será de�nido um plano de execução para o comando. Mas, como o parser veri�ca se a sintaxe de uma consulta está correta? Sabemos que uma linguagem é composta de instruções, parâmetros, palavras reservadas e regras a serem seguidas por essas construções. O que o parser faz é identi�car os objetos da linguagem, con�rmando que eles são conhecidos, e colocá-los em uma ordem, na forma de uma árvore, veri�cando que o tipo de árvore é conhecido. Se um objeto não é conhecido, temos um erro de sintaxe. Se a árvore construída está faltando um pedaço, temos outro tipo de erro de sintaxe. Veja alguns exemplos de solicitações que retornam erro na fase de parsing: SELECT * Tabela A instrução SELECT está correta, * é conhecido e TABELA eventualmente existe. Na montagem da árvore, veri�ca-se que um elemento esperado não foi de�nido, nesse caso, a palavra reservada FROM. SELECT * FROM Tabela WHERE Coluna1=@variavel Nesse caso todos os objetos são esperados, de forma que a árvore está correta. Entretanto, um dos elementos, @variavel, não está declarado, infringindo uma regra da linguagem. É possível forçar a utilização do Command Parser sem executar a instrução SQL propriamente dita. Para isso, ative a opção PARSEONLY e execute os comandos desejados. SET PARSEONLY ON DECLARE @variavel INT SET @variavel=1 SELECT * FROM Tabela WHERE Coluna1=@variavel GO SET PARSEONLY OFF Nesse exemplo, o comando SELECT não será executado porque ativamos a opção PARSEONLY, que faz somente o Command Parser ser executado. Como não há erros de sintaxe, a mensagem de retorno con�rma que o comando executa com sucesso. Um subproduto desse componente é, como vimos, uma árvore. Ela é chamada Parse Tree e pode ser vista no exemplo a seguir. Considere a seguinte consulta e a árvore gerada pelo Command Parser: SELECT FirstName, LastName FROM Students WHERE City=’Playa Del Rey’ AND Age>=30 / Note como os elementos da solicitação são organizados e como as cláusulas são compostas. O operador AND recebe duas condições. Na árvore essas condições estão representadas como nós �lhos do nó AND. Da mesma forma, as colunas que fazem parte da lista do SELECT estão abaixo do nó SELECT LIST. Essa árvore será utilizada na passagem do controle para o otimizador que vai gerar um plano de execução para a consulta. Antes, porém, cabe uma informação importante. Como veremos na próxima seção, o otimizador é responsável por gerar os planos de execução para as consultas que são submetidas ao banco de dados. Todos esses planos de execução gerados são armazenados em uma área para reutilização, caso a mesma consulta seja reexecutada. A área se chama Plan Cache e nós a estudaremos detalhadamente na seção de Gerenciamento de Memória. Por ora, é importante sabermos que, nessa passagem de controle, o engine checa se já existe um plano gerado para a consulta. Se houver, ele é recuperado e passado para o outro componente do Relational Engine, o Query Executor. Optimizer O otimizador é o componente que recebe uma árvore de consulta e gera um plano de execução, que corresponde a um passo a passo para a execução da consulta. Mas por que é necessário um otimizador para gerar um passo a passo? Porque existem muitas maneiras de executar uma consulta. Por exemplo, para executar a consulta anterior, podemos percorrer a tabela Students inteira e selecionar todas as linhas que satisfaçam às duas condições impostas. Ou, se existir um índice para a coluna City, você pode percorrer esse índice selecionando todas as linhas que satisfaçam à condição City=”Playa Del Rey” e, em seguida, acessar diretamente as linhas correspondentes em Students, selecionando somente aquelas que satisfaçam à Age>=30. Ou, ainda, se existir um índice para a coluna Age, podemos percorrê-lo selecionando todas as linhas que satisfaçam à condição Age>=30 e, em seguida, acessar diretamente as linhas correspondentes em Students, selecionando somente aquelas que satisfaçam à City=”Playa Del Rey”. E se os dois índices existirem? E se existir um índice composto? Qual dessas opções é a melhor? Existem potencialmente centenas ou milhares de maneiras de executar uma consulta mais complexa. Por isso, o otimizador é absolutamente necessário e, mais do que isso, é um dos componentes mais sensíveis de um Sistema Gerenciador de Bancos de Dados. O otimizador é composto por algoritmos so�sticados que tem a responsabilidade de gerar o melhor plano de execução para uma consulta, dadas as restrições associadas ao tempo de geração e aos recursos disponíveis para o Relational Engine e para o Storage Engine. Fonte: (SRIVASTAVA, 2015, on-line). / Que restrições são essas? O otimizador não tem todo o tempo do mundo para escolher o melhor plano de execução. Tampouco possui recursos de CPU e memória in�nitos. Também não tem ao seu dispor todos os índices de todas as tabelas referenciadas pela consulta. É importante entender que as restrições levam o otimizador a escolher um plano de execução que pode não ser exatamente o melhor para a consulta. Aí está a complexidade dos algoritmos que o compõem. Caso não houvesse restrição alguma, o otimizador poderia avaliar todos os planos de execução possíveis e chegaria certamente ao melhor, mas o tempo necessário para a operação, na maioria dos casos, tornaria a execução da consulta inviável. Para realizar uma escolha, primeiramente ele seleciona as opções que serão avaliadas. Depois ele calcula o custo associado à opção avaliada. A escolha do otimizador é baseada no custo do plano de execução, ou seja, depois que ele calcula os custos associados aos planos avaliados, seleciona o que tem o menor custo. Discutiremos esses custos em detalhes na aula de Tuning. Por ora, é importante saber que esse componente vai gerar um plano de execução, que consideraremos o melhor (para as restrições existentes no momento da geração), e vai entregar esse plano ao Query Executor. Query Executor Este é o componente responsável pela execução da consulta, com base no plano de execução entregue pelo otimizador. Ele executa o passo a passo do plano, na ordem de�nida pelo plano, e interage com o Storage Engine sempre que houver necessidade de acesso aos dados do banco de dados, para leitura ou para escrita. Veja uma imagem do pipeline completo de execução de uma consulta. Fonte: (MICROSOFT, 2019e, on-line). Saiba mais Para ver detalhes sobre o Relational Engine do SQL Server, visite o Guia da arquitetura de processamento de consultas, da Microsoft, disponível em: https://docs.microsoft.com/pt-br/sql/relational-databases/query-processing-architecture-guide?view=sql-server-ver15. javascript:void(0); / / Storage Engine Quando o plano de execução precisa recuperar ou atualizar dados, entra em cena o subsistema Storage Engine. Nele há dois caminhos bem de�nidos: O da leitura e o da escrita. Em ambos os casos, o Query Executor faz uma solicitação ao Access Methods para tratar a recuperação ou a atualização de dados. Access Methods Este componente do Storage Engine é responsável por manter um repositório de métodos de acesso, incluindo o código necessário para recuperar dados assim como as estruturas de dados propriamente ditas. Dessa forma, quando o Query Executor solicita ao Access Methods a leitura de uma tabela, esse componente recupera o método de acesso correspondente e a estrutura de dados necessária para armazenar os dados que serão recuperados pelo seu código. Da mesma forma, se o Query Executor solicita ao Access Methods uma atualização de linhas de uma determinada tabela, esse componente seleciona o código a ser executado para a atualização e as estruturas de dados a serem utilizadas por esse código de atualização, de forma a recebê-los do próprio Query Executor. E quem executa o código? É aqui que leitura e escrita seguem caminhos diferentes. Veja na imagem da arquitetura geral do SQL Server os dois componentes ao lado do Access Methods. Se a operação for uma leitura, vamos seguir o caminho do BUFFER MANAGER. Se a operação for uma escrita, vamos seguir primeiro o caminho do BUFFER MANAGER, depois do TRANSACTION MANAGER e, por último, do BUFFER MANAGER novamente. Buffer Manager O Access Methods solicita ao Buffer Manager que recupere os dados para que ele possa encaminhá-los de volta ao Query Executor. Para isso, o Buffer Manager veri�ca se os dados estão no Buffer Pool, em uma área especial chamada Data Cache (representada pelo quadrado D na imagem). Caso estejam, recupera-os a partir dessa área e os encaminha de volta ao Access Methods. Caso contrário, o Buffer Manager executa uma solicitação de I/O (Input/Output) para recuperar os blocos de disco nos quais estão armazenados os dados. Quando recuperados, são armazenados no Data Cache do Buffer Pool e encaminhados de volta ao Access Methods. Nos casos de solicitação de escrita, antes que o controle seja transferido ao Transaction Manager, o Buffer Manager também é acionado para garantir que os dados atuais estejam no Data Cache. Páginas Aqui cabe uma informação importante. Fisicamente, os dados são armazenados em páginas dentro dos arquivos de dados (*.mdf e *.ndf) correspondentes aos bancos de dados. Quando há uma solicitação de leitura ou escrita de dados, são as páginas que são lidas ou atualizadas. No Buffer Pool, também, temos páginas de dados armazenadas no Data Cache. O tamanho de uma página é igual a 8.192 bytes, sendo que todas elas possuem um cabeçalho de 96 bytes. Este cabeçalho inclui o número da página e o tipo da página. Existem vários tipos de página além das páginas de dados, por exemplo, páginas de índices e páginas que contêm informações sobre as próprias páginas. Veja a seguir um esquema de organização de uma página de dados: https://estacio.webaula.com.br/cursos/go0410/aula2.html / Fonte: (MICROSOFT, 2019b, on-line). Na imagem apresentada, podemos observar o cabeçalho da página, as linhas de dados e o espaço livre na página. Naturalmente, novas linhas de dados vão sendo inseridas e as já existentes vão sendo atualizadas. O Storage Engine monitora o uso das páginas e dispara um Page Split para dividir o conteúdo de uma página em duas, de forma a garantir que as páginas não cheguem a 100% de ocupação. Há também a limitação dos arquivos de dados e dos próprios discos nos quais estão armazenados os arquivos, mas isso é um assunto que veremos na aula de Administração de Bancos de Dados. Transaction Manager É o componente do Storage Engine responsável pelo gerenciamento das transações, incluindo o tratamento das solicitações de escrita no banco de dados. Você se lembra das propriedades ACID? É aqui que elas são garantidas pelo SQL Server. Note, na imagem referente à arquitetura do SQL Server, que o TRANSACTION MANAGER interage com dois subcomponentes: TRANSACTION LOG e DATA FILES. Quando uma solicitação de escrita é encaminhada pelo ACCESS METHODS, o TRANSACTION MANAGER grava as atualizações primeiro no TRANSACTION LOG. Por quê? Para garantir a Durabilidade. A solicitação que vem do Access Methods requisita que as atualizações sejam gravadas no arquivo de log de transações. No caso de uma falha do servidor, todas as transações podem ser recuperadas a partir desse arquivo. Quando a con�rmação é recebida, o controle volta para o Buffer Manager para que ele execute a alteração nas páginas de dados que estão no Data Cache. Em seguida, o Access Methods informa ao Query Executor que a atualização foi executada e retorna a ele o resultado. Todos os registros gravados no Transaction Log recebem um identi�cador sequencial chamado Log Sequence Number (LSN). Note que, até agora, os Data Files ainda não foram atualizados. Essa é a estratégia do SQL Server para a execução de atualizações com bom desempenho, sem prejuízo para a garantia das propriedades ACID. As páginas de dados que são atualizadas no Buffer Pool e �cam diferentes das páginas correspondentes em disco são chamadas Dirty Pages. De tempos em tempos, um processo chamado Lazy Writer veri�ca o Buffer Pool, especi�camente o quanto de espaço livre existe no Data Cache. É importante para o engine que haja sempre algum percentual do espaço do Data Cache livre para acomodar novas solicitações. Então, caso o percentual esteja muito baixo, o Lazy Writer dispara o processo de escrita das Dirty Pages em disco e remove as páginas atualizadas do Buffer Pool. Assim obtém mais espaço livre no Data Cache. / Existe também um outro processo, denominado Checkpoint, que é ativado entre intervalos de tempo não regulares para garantir que todas as transações con�rmadas, isto é, aquelas nas quais o COMMIT foi executado, tenham suas alterações persistidas em disco. Nesse processo, as Dirty Pages não são removidas do Buffer Pool; ao contrário, são marcadas como Clean Pages. E qual o tempo entre um checkpoint e outro? Toda vez que um Checkpoint é executado, uma entrada no Log File é inserida informando que naquele ponto foi realizado um checkpoint. Conforme foi dito, os intervalos de tempo não são regulares. Isso ocorre porque o processo Checkpoint monitora o Log File e executa o checkpoint somente quando o número de registros (após o último checkpoint) é igual ao número estimado de operações que podem ser processadas no intervalo de tempo de�nido pela con�guração Recovery Interval do banco de dados. Portanto, esse tempo pode variar entre um checkpoint e outro, pois depende diretamente da atividade no database. Os checkpoints são também disparados por outros eventos que ocorrem no SGBD. Por exemplo, quando fazemos uma cópia (backup) do banco de dados, um checkpoint é criado para descarregar as Dirty Pages da memória para o disco e gerar um identi�cador no Transaction Log. Locks Um aspecto extremamente importante no gerenciamento das transações é o controle dos Locks (Bloqueios). Locks são disparados pelo engine do SQL Server para garantir o isolamento das transações, isto é, a capacidade de executar transações simultâneas sobre o mesmo banco de dados sem que qualquer uma inter�ra na execução de qualquer outra. Comentário Quando falamos em interferência de uma transação em outra, devemos pensar no conjunto de dados que as transações processam, mais especi�camente no estado desses dados. Cada transação reconhece os estados inicial e �nal dos dados de todas as outras transações, mas elas não têm acesso aos estados intermediários gerados por essas transações concorrentes. É por isso que chamamos essa característica intrínseca do gerenciamento das transações de Isolamento. Quando uma transação é executada, o Storage Engine determina quais bloqueios são necessários, incluindo a granularidade de cada um que podeser no nível da tabela, da página de dados ou da linha da tabela. Quando a transação é �nalizada, os bloqueios são liberados. Existem diversos tipos de bloqueios que dependem do tipo de operação que a transação executa. Caso ela execute um UPDATE em uma tabela, o bloqueio é do tipo exclusivo e as outras transações devem aguardar a liberação dele para que possam fazer as próprias atualizações. É dessa forma que o isolamento entre as transações é garantido. Vamos ver mais detalhes sobre locks na aula Monitoração e Gerenciamento de Processos no SQL Server. Por ora, devemos saber que esse controle é executado pelo TRANSACTION MANAGER e garante o isolamento entre as transações. / Saiba mais Para ver detalhes do Storage Engine do SQL Server acesse o Guia de arquitetura e gerenciamento do log de transações do SQL Server. Sobre Checkpoints, acesse os Pontos de veri�cação de banco de dados (SQL Server). Sobre Bloqueios, acesse o Guia de controle de versão de linha e bloqueio de transações, todos da Microsoft: Buffer Pool O Buffer Pool é composto pelos endereços de memória disponíveis para o SQL Server. Na seção anterior nós vimos como essas áreas são utilizadas e como é importante maximizar o número de solicitações satisfeitas por dados no Data Cache (para minimizar o número de solicitações de I/O) e manter um percentual desses endereços vazios, de forma que novas solicitações possam ser atendidas pelo Buffer Manager. O Buffer Pool é totalmente necessário? Se esse componente não existisse, todas as solicitações de acesso a dados deveriam ser satisfeitas por requisições de I/O. Em sistemas com grandes cargas de trabalho, nós poderíamos en�leirar muitas requisições levando o tempo de resposta às solicitações a tornar o uso do sistema inviável. Naturalmente o SQL Server não pode alocar toda a memória disponível para os processos. Assim, o desa�o imposto ao gerenciamento de memória do SGBD é garantir que o Buffer Pool tenha endereços de memória su�cientes para acomodar a carga de trabalho submetida a ele, enquanto mantém o SO (Sistema Operacional) capaz de acomodar os próprios processos. Esse é um equilíbrio muito importante também no nível do SO porque quando há pouca memória para seus processos, aumenta a quantidade de paginação entre memória e disco (swap) e isso pode degradar o desempenho do sistema como um todo, impactando o próprio SQL Server. Dizemos que o gerenciamento de memória é dinâmico porque o SQL Server monitora tanto o seu Buffer Pool quanto a memória disponível na máquina, alocando e liberando endereços de memória conforme a necessidade. No Buffer Pool há duas áreas principais, o Data Cache e o Plan Cache. Como visto anteriormente, no Data Cache residem as páginas de todos os dados de consulta e atualizações. No Plan Cache estão todos os planos de execução das consultas e atualizações. Tanto as páginas de dados quanto os planos de execução são encaminhados ao Buffer Pool pelo Storage Engine. Uma nota importante sobre essas operações no Buffer Pool: É aqui que começam a acontecer as esperas. Existem muitos tipos de esperas, os chamados wait types, que ocorrem quando uma operação precisa esperar pela execução de uma tarefa. Um exemplo bastante comum de espera é o PAGEIOLATCH que se refere a uma operação de transferência de dados do disco para o Data Cache. Enquanto as páginas de dados não são lidas, a tarefa de leitura dos dados �ca no estado de espera. Vamos ver mais detalhes sobre wait types e como eles impactam as operações no SQL Server na aula de Monitoração e Gerenciamento de Processos. javascript:void(0); javascript:void(0); javascript:void(0); / A versão 2014 trouxe uma novidade na arquitetura do SQL Server. O Buffer Pool passou a contar com um segundo nível para cache de dados implementado em discos SSD (Solid State Drive), chamado de L2 Buffer Pool Backing Store. Os SSDs são conhecidos principalmente pela capacidade de realizar um número bem maior de IOPS (Input/Output Operations Per Second) que os HDDs (Hard Disk Drives). Especialmente para operações aleatórias pequenas, este número é tão maior quanto menor for o tamanho do bloco a ser lido e/ou escrito. Como vimos anteriormente, o tamanho de uma página de dados no SQL Server é 8 KBytes. Se você observar o grá�co de comparação de IOPS no link acima, pode concluir que o número de operações de leitura e escrita por segundo no SSD pode ser aproximadamente 100 vezes maior do que no HDD. Assim, faz sentido alocar espaço em um disco SDD para servir como L2 (level 2) no cache de dados, deixando o Buffer Pool em memória como L1. Em uma arquitetura de gerenciamento de memória com dois níveis de cache de dados, o L2 em SSD funciona como uma extensão do L1 em memória, sendo que L1 armazena as Clean Pages e as Dirty Pages, e L2 armazena somente Clean Pages. Por que essa diferenciação? Para que os processos Lazy Writer e Checkpoint continuem trabalhando com páginas de dados somente em memória e não sofram nenhum tipo de impacto com a implementação da nova arquitetura. Saiba mais Para ver detalhes sobre o gerenciamento de memória do SQL Server, acesse o Guia de arquitetura de gerenciamento de memória , da Microsoft, disponível em: https://docs.microsoft.com/pt-br/sql/relational-databases/memory-management- architecture-guide?view=sql-server-ver15. Extensão do Buffer Pool Clique no botão acima. Saiba mais Veja uma comparação de velocidade, acessando SSD vs. HDD Speed. javascript:void(0); javascript:void(0); / Conclusão Apresentamos os principais componentes do SQL Server e aprendemos como eles trabalham juntos para entregar o trabalho que esperamos que um Sistema Gerenciador de Bancos de Dados realize. Vimos como as solicitações chegam ao SQL Server por meio de pacotes TDS encapsulados em um dos protocolos disponíveis na Protocol Layer. As mensagens com os comandos SQL são então encaminhadas ao Relational Engine para que seja realizado o parsing. Se tudo estiver correto com o comando ele é transferido para o Optimizer, que vai gerar o plano de execução da consulta e encaminhá-lo para o Query Executor. Discutimos a importância do otimizador e a interface do Relational Engine com o Database Engine, componente que vai providenciar o acesso aos dados, inicialmente através do Access Methods. Solicitações de leitura e escrita são encaminhadas por ele ao Buffer Manager, que cuida especialmente das tarefas de gerenciamento do Buffer Pool, local na memória do servidor em que são armazenadas as páginas de dados lidas do disco. Caso a operação seja de atualização, esta é realizada primeiramente no arquivo de log de transações e somente depois, por meio dos processos Lazy Writer e Checkpoint, é que elas efetivamente gravadas nos arquivos de dados. Com os resultados obtidos nessa camada, estes são encaminhados de volta ao Query Executor que os encaminha então para a Protocol Layer. Os dados são encapsulados em pacotes TDS e pelo canal de comunicação estabelecido com o cliente, o resultado é entregue. Um administrador do SQL Server é apresentado frequentemente a novas questões sobre funcionalidades, operação e desempenho de bancos de dados. Por isso é fundamental conhecer a arquitetura do sistema. Conhecer o papel de cada componente e como se dá a integração entre eles o fará compreender melhor o problema e chegar mais rapidamente às conclusões. Atividades 1. Qual dos seguintes componentes não faz parte da arquitetura do SQL Server? a) Storage Engine b) Buffer Pool c)Protocol Layer d) Relational Engine e) Kernel Subsystem / 2. Qual alternativa melhor descreve o objetivo principal do Relational Engine? a) Receber as solicitações dos clientes, processá-las e enviar o resultado, na forma de mensagens TDS encapsuladas por pacotes TCP/IP. b) Receber os comandos SQL e executar as operações de entrada e saída para gerar o resultado dos comandos. c) Receber as solicitações da camada de serviço de rede e executar as operações necessárias para gerar o resultado esperado. d) Receber os comandos SQL da camadade serviço de rede e construir um plano de execução para o comando, enviando-o para o componente que vai de fato executar este último. e) Receber as solicitações dos clientes e gerar um plano de execução para a solicitação, gerando os resultados e enviando-os de volta aos clientes. 3. Qual alternativa melhor expressa o objetivo principal do Storage Engine? a) Receber as solicitações dos clientes vindas da camada de serviço de rede, executar críticas iniciais, processá-las e enviar o resultado de volta para essa camada, para que retorne o resultado gerado para os clientes. b) Receber as solicitações de leitura e escrita vindas do Relational Engine e executar as operações necessárias para gerar o resultado esperado. c) Receber os planos de execução oriundos do Relational Engine e processá-los de acordo com o método gerado pelo ACCESS METHODS e utilizando o BUFFER MANAGER e o TRANSACTION MANAGER. d) Receber as solicitações de leitura e escrita vindas do Relational Engine e construir um plano de execução para o comando, enviando-o para o componente que vai de fato executar o comando. e) Receber os planos de execução e os métodos de execução oriundos do Relational Engine e processá-los utilizando o BUFFER MANAGER e o TRANSACTION MANAGER. 4. Relacione as colunas a seguir de acordo com a integração entre os subsistemas que compõem a arquitetura do SQL Server. Protocol Layer 1 Relational Engine 2 Storage Engine 3 Buffer Pool 4 a) Integra-se com o Relational Engine e com o Buffer Pool. Do primeiro recebe os planos de execução e gera um método associado, executando-o para gerar seu resultado. Para o segundo, envia as solicitações de leitura de páginas de dados e, após o devido tratamento realizado pelo Transaction Manager, envia as solicitações de atualização de páginas de dados. b) Integra-se com o Storage Engine, recebendo dele solicitação de leitura e escrita de páginas de dados em memória. c) Integra-se com o Relational Engine, enviando para ele os comandos SQL contidos em pacotes TDS recebidos dos clientes. d) Integra-se com o Protocol Layer e com o Storage Engine. Do primeiro, recebe os comandos SQL para a geração de um plano de execução. Para o segundo, envia esse plano e recebe o resultado da sua execução. / 5. Ordene os passos a seguir, executados em uma operação de leitura de dados. A O Buffer Manager envia os dados solicitados para o Access Methods. B O Command Parser veri�ca se já existe um plano de execução para o comando SQL. C O Access Methods seleciona um método de execução para a leitura e encaminha para o Buffer Manager. D A camada de serviço de rede recebe um pacote TDS contendo uma solicitação de um cliente. E O otimizador gera um plano de execução para a Query Tree e o envia para o Query Executor. F A camada de serviço de rede envia o comando SQL contido no pacote TDS do cliente para o Relational Engine. G O Command Parser gera uma Query Tree e a envia para o otimizador. H O Access Methods envia o resultado da consulta para o Query Executor para encaminhá-la ao cliente por meio da camada de serviço de rede. I O Query Executor con�rma que são necessários dados para atender à solicitação e encaminha o plano de execução para o Access Methods, no Storage Engine. J A camada de serviço de rede recebe um pedido de conexão de um cliente e a estabelece utilizando um dos protocolos disponíveis. K O Buffer Manager veri�ca se os dados requisitados já estão no Data Cache do Buffer Pool. Caso não estejam, o Buffer Manager comanda uma solicitação de leitura de páginas de dados do disco e as adiciona no Buffer Pool. L O Command Parser, módulo do Relational Engine, realiza um parser do comando. Letra A Letra B Letra C Letra D Letra E Letra F Letra G Letra H Letra I Letra J Letra K Letra L / 6. Ordene os passos a seguir, executados em uma operação de escrita de dados, que ocorrem dentro do Storage Engine e do Buffer Pool. A O Access Methods encaminha uma solicitação de escrita para o Transaction Manager. B O Access Methods encaminha uma solicitação de leitura ao Buffer Manager, para que este carregue os dados que serão atualizados no Buffer Pool. C O Access Methods encaminha uma solicitação de escrita para o Buffer Manager, para que este atualize os dados no Buffer Pool. D O Access Methods devolve o resultado para o Query Executor. E O Access Methods recebe uma solicitação de escrita oriunda do Query Executor. F O Transaction Manager adiciona registros no log de transações. Letra A Letra B Letra C Letra D e) ALTERNATIVA f) ALTERNATIVA Notas Páginas É a menor unidade utilizada no armazenamento de dados. Título modal 1 Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Referências ASSAF, W.; WEST, R.; AELTERMAN, S.; CURNUTT, M. SQL Server 2017 Administration Inside Out. Pearson Education, 2018. DELANEY, K.; FREEDMAN, C. Microsoft SQL Server 2012 Internals. Microsoft Press, 2013. MICROSOFT. Guia da arquitetura de processamento de consultas. 2020a. Disponível em: https://docs.microsoft.com/pt- br/sql/relational-databases/query-processing-architecture-guide?view=sql-server-ver15. Acesso em: 21 maio 2020. MICROSOFT. Guia de controle de versão de linha e bloqueio de transações. 2020b. Disponível em: https://docs.microsoft.com/pt-br/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide?view=sql- server-ver15. Acesso em: 21 maio 2020. MICROSOFT. SQL Server protocols. 2020c. Disponível em: https://docs.microsoft.com/en- us/openspecs/sql_server_protocols/ms-sqlprotlp/f16558b2-4561-45be-89c9-6f9114514c97. Acesso em: 21 maio 2020. javascript:void(0); javascript:void(0); javascript:void(0); / / p p / q _ _p / q p p/ MICROSOFT. Guia de arquitetura de gerenciamento de memória. 2019a. Disponível em: https://docs.microsoft.com/pt- br/sql/relational-databases/memory-management-architecture-guide?view=sql-server-ver15. Acesso em: 21 maio 2020. MICROSOFT. Guia de arquitetura de página e extensões. 2019b. Disponível em: https://docs.microsoft.com/pt- br/sql/relational-databases/pages-and-extents-architecture-guide?view=sql-server-ver15. Acesso em: 21 maio 2020. MICROSOFT. Guia de arquitetura e gerenciamento do log de transações do SQL Server. 2019c. Disponível em: https://docs.microsoft.com/pt-br/sql/relational-databases/sql-server-transaction-log-architecture-and-management-guide? view=sql-server-ver15. Acesso em: 21 maio 2020. MICROSOFT. Pontos de veri�cação de banco de dados (SQL Server). 2019d. Disponível em: https://docs.microsoft.com/pt- br/sql/relational-databases/logs/database-checkpoints-sql-server?view=sql-server-ver15. Acesso em: 21 maio 2020. MICROSOFT. Um guia para processamento de consulta de tabelas com otimização de memória. 2019e. Disponível em: https://docs.microsoft.com/pt-br/sql/relational-databases/in-memory-oltp/a-guide-to-query-processing-for-memory-optimized- tables?view=sql-server-ver15. Acesso em: 21 maio 2020. MICROSOFT. Buffer Pool Extension. 2017. Disponível em: https://docs.microsoft.com/pt-br/sql/database-engine/con�gure- windows/buffer-pool-extension?view=sql-server-ver15. Acesso em: 21 maio 2020. RAMAKHRISHNAN, R.; GEHRKE, J. Database Management Systems. 3. ed. New York: Mcgraw-Hill, 2002. RUBENS, P. SSD vs. HDD Speed. 2019. Disponível em: https://www.enterprisestorageforum.com/storage-hardware/ssd-vs-hdd- speed.html. Acesso em: 21 maio 2020. SRIVASTAVA, N. Microsoft SQL Server internal architecture for Database Engine. 2015. Disponível em: https://uniqueblogforsqlcom.wordpress.com/2015/06/09/microsoft-sql-server-internal-architecture-for-database-engine/. Acesso em: 21 maio 2020. Próxima aula Instalação do SQL Server no Windows, no Linux e no Docker; javascript:void(0); javascript:void(0); javascript:void(0);
Compartilhar