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.
Download

RaioX do SQL Server (Final)