teched 2011: raio-x do sql server: arquitetura interna do gerenciador de banco de dados
TRANSCRIPT
Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Banco de Dados
DBP 401
Fabricio CataePremier Field Engineer (Microsoft)
Luiz Felipe PimentaPremier Field Engineer (Microsoft)
Premier Field Engineering
PFE
Serviços Proativos
ServiçosReativos
WorkshopPlus
Health Checks &
RAPs
Situações Críticas
CasoImagine o cenário:Dois bancos de dados, mas a mesma query…SELECT TB1.Codigo, (CAST(TB1.Custo AS INT) + 100) FROM TB_OPERACAO AS TB1 JOIN TB_TIPO AS TB2 ON TB2.Codigo=TB1.Codigo GO
Armazenamento e Índices
O propósito do banco de dados é:Armazenar informação.
OLTP (Sistemas) e OLAP (DW/DM)
Armazenamento e ÍndicesComo?
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 ATabela B
Buffer Manager
Memória Disco
Buffer Manager
Índice ATabela 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 DMVsys.dm_os_buffer_descriptors
SELECT database_id, COUNT(*) from sys.dm_os_buffer_descriptorsGROUP BY database_idORDER BY COUNT(*) DESC
Monitorando Buffer CacheDistribuição de Memória
DatabaseFreeStolen
IndicadorPage Life Expectancy
DBCC MemoryStatus
SQLOS
StorageEngineSQL OSMemory Management
Thread Scheduling
InfraestruturaThreadMemoriaSincronização
Nomenclaturasys.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 ClerksTipos
Genéricos (MEMCLERKS)Caches
User StoreCache Store
Object Pools
select * from sys.dm_os_memory_clerksselect * from sys.dm_os_memory_cache_countersselect * from sys.dm_os_memory_cache_hash_tablesselect * from sys.dm_os_memory_pools
Memory Broker
Caches
Compilation
Workspace
Compilação
Workspace de Execução
Memory Clerks
Buffer Manager (Eager Write)
Índice ATabela B
Buffer Manager
Memória Disco
Buffer Manager (Lazy Write)
Índice ATabela 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 WriterCheckpoint
select session_id, command from sys.dm_exec_requests
Storage Engine
Query
Access Manager
Buffer Manager
Page Manager
Transaction Manager
Lock Manager
StorageEngine
SQL OS Memory ManagementThread Scheduling
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…
Em nosso exemplo:
Texto Query SQL Plano Storage
Engine
SQLOS SchedulerSQLOS
Memory Management
Thread SchedulingScheduler
Scheduler
Scheduler
Scheduler
Modelo de Trabalho
Scheduler Worker
Worker
Worker
Worker
TaskTaskTaskTaskTaskTaskTask
Task
Task
Windows Debugger
Threads: Stack
Worker Threads
Workers são threads gerenciadas pelo Scheduler do SQL ServerO número total de worker threads é configurado através do comando sp_configure (padrão: automático)
select * from sys.dm_os_threadsselect * from sys.dm_os_workersselect * from sys.dm_os_schedulersselect * from sys.dm_os_tasks
Execução de Query
SQLOS
Scheduler
Query
Task
Worker
Scheduler Scheduler
SQLOS Scheduler
SQLOS
Scheduler Scheduler Scheduler Scheduler
Query
Task
Worker
Task
Worker
Task
Worker
Task
Worker
Query: Index ScanSELECT o_orderpriority, COUNT(*) AS Order_CountFROM ordersWHERE 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ísticasPor que é importante?
Que diferença faz?Historigrama e densidade…
Voltando ao Caso...
Procurar ter os índices:AtualizadosAdequados
Estatísticas
Conteúdo RelacionadoDBP301 | Soluções de Alta disponibilidade e Disaster Recovery para o SQL Server
Hands-on Labs: http://thomaslarock.com/2009/01/sql-server-2008-hol/
Exame: 70-433
http://blogs.technet.com/b/comunidadesql/
Palestras RelacionadasDBP301 | Soluções de Alta disponibilidade e Disaster Recovery para o SQL Server
Recursos
Recursos para IT Pros
Recursos para Desenvolvedores
http://technet.microsoft.com/pt-br
http://msdn.microsoft.com/pt-br
Getthefreemobileappforyourphonehttp://gettag.mobi
Getthefreemobileappforyourphonehttp://gettag.mobi
Não esqueça de preencher sua
avaliação onlinewww.teched.com.br/
avaliacao
Getthefreemobileappforyourphonehttp://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.