Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Banco de Dados DBP 401 Fabricio Catae Premier Field Engineer (Microsoft) Luiz Felipe Pimenta Premier Field Engineer (Microsoft) Premier Field Engineering Serviços Proativos Situações Críticas Health Checks & RAPs Serviços Reativos Workshop Plus Caso Imagine o cenário: Dois bancos de dados, mas a mesma query… SELECT 100) FROM JOIN ON GO TB1.Codigo, (CAST(TB1.Custo AS INT) + TB_OPERACAO AS TB1 TB_TIPO AS TB2 TB2.Codigo=TB1.Codigo Armazenamento e Índices O propósito do banco de dados é: Armazenar informação. OLTP (Sistemas) e OLAP (DW/DM) Armazenamento e Índices Como? Armazenamento e Índices Estruturas para acolher os dados: IAM, GAM, SGAM e PFS. Armazenamento e Índices Tipos: Clustered e Non-Clustered Tempo de Acesso O tempo de acesso em disco é da ordem de milissegundos (10-3) O acesso à memória RAM demora nanossegundos (10-9) Páginas Índice Buffer Manager Índice A Tabela B Buffer Manager Memória Disco Buffer Manager Índice A Tabela B Buffer Manager Memória Disco Buffer Descriptors Estruturas alocadas logo no startup do serviço para gerenciar a memória Visível através da DMV sys.dm_os_buffer_descriptors SELECT database_id, COUNT(*) from sys.dm_os_buffer_descriptors GROUP BY database_id ORDER BY COUNT(*) DESC Monitorando Buffer Cache Distribuição de Memória Database Free Stolen Indicador Page Life Expectancy DBCC MemoryStatus SQLOS Infraestrutura Thread Memoria Sincronização Storage SQL OS Engine Memory Management Thread Scheduling Nomenclatura sys.dm_os_* Memory Clerks “Stolen Memory” é contabilizada através de Memory Clerk (SQLOS) Permite identificar a memória utilizada para Conexão, Cache, CLR, etc Memory Clerks Tipos Genéricos (MEMCLERKS) Caches User Store Cache Store Object Pools select select select select * * * * from from from from sys.dm_os_memory_clerks sys.dm_os_memory_cache_counters sys.dm_os_memory_cache_hash_tables sys.dm_os_memory_pools Memory Broker Caches Compilation Workspace Compilação Workspace de Execução Memory Clerks Buffer Manager (Eager Write) Índice A Tabela B Buffer Manager Memória Disco Buffer Manager (Lazy Write) Índice A Tabela B Buffer Manager Memória Disco Transaction Log As transações são sempre gravadas em um arquivo de LOG Buffer Manager (Lazy Write) Background Task Buffer Manager Memória Disco Processos de Escrita de Dados Lazy Writer Checkpoint select session_id, command from sys.dm_exec_requests Storage Engine Query Storage Engine Buffer Manager Thread Scheduling Access Manager Page Manager Transaction Manager SQL OS Lock Manager Memory Management Vida da Query O cliente envia a query... Vida da Query Assim que recebe os pacotes: Texto, Query e Plano de Execução… Texto Query SQL Plano Storage Engine Vida da Query Assim que recebe os pacotes: Texto, Query e Plano de Execução… Texto Query SQL Plano Storage Engine Vida da Query Assim que recebe os pacotes: Texto, Query e Plano de Execução… Texto Query SQL Plano Storage Engine Vida da Query Assim que recebe os pacotes: Texto, Query e Plano de Execução… Texto Query SQL Plano Storage Engine Plano Vida da Query Assim que recebe os pacotes: Texto, Query e Plano de Execução… Texto Query SQL Plano Em nosso exemplo: Storage Engine SQLOS Scheduler SQLOS Thread Scheduling Memory Management Scheduler Scheduler Scheduler Scheduler Modelo de Trabalho Scheduler Worker Worker Worker Worker Task Task Task Task Task Task Task Task Windows Debugger Threads: Stack Worker Threads Workers são threads gerenciadas pelo Scheduler do SQL Server O número total de worker threads é configurado através do comando sp_configure (padrão: automático) select select select select * * * * from from from from sys.dm_os_threads sys.dm_os_workers sys.dm_os_schedulers sys.dm_os_tasks Execução de Query Query Task Worker Scheduler Scheduler SQLOS Scheduler SQLOS Scheduler Query Task Task Task Task Worker Worker Worker Worker Scheduler Scheduler Scheduler Scheduler SQLOS SELECT o_orderpriority, COUNT(*) AS Order_Count FROM orders WHERE o_orderdate >= '2011/01/01' AND o_orderdate < DATEADD (mm, 6, '2011/01/01') AND EXISTS ( SELECT * FROM lineitem WHERE l_orderkey = o_orderkey AND l_commitdate < l_receiptdate ) GROUP BY o_orderpriority ORDER BY o_orderpriority Execução em Paralelo Planos com Paralelismo Através do paralelismo, o tempo total de processamento pode diminuir. Por outro lado, o custo aumenta devido à necessidade de sincronizar as informações entre as threads. Estatísticas Por que é importante? Que diferença faz? Historigrama e densidade… Voltando ao Caso... Procurar ter os índices: Atualizados Adequados Estatísticas Conteúdo Relacionado DBP301 | Soluções de Alta disponibilidade e Disaster Recovery para o SQL Server Hands-on Labs: http://thomaslarock.com/2009/01/sqlserver-2008-hol/ Exame: 70-433 http://blogs.technet.com/b/comunidadesql/ Palestras Relacionadas DBP301 | Soluções de Alta disponibilidade e Disaster Recovery para o SQL Server Get the free mobile app for your phone http:/ / gettag.mobi http://technet.microsoft.com/pt-br Get the free mobile app for your phone http:/ / gettag.mobi http://msdn.microsoft.com/pt-br Não esqueça de preencher sua avaliação online www.teched.com.br/avaliacao Get the free mobile app for your phone http:/ / gettag.mobi © 2011 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.