TechEd 2006: Trabalhando com DMV e DMF

Post on 21-Feb-2017

83 views 3 download

Transcript of TechEd 2006: Trabalhando com DMV e DMF

SUP303 - Trabalhando com DMV e DMF

Fabricio Catae – Premier Field EngineerIoannis Xylaras – Premier Field Engineer

Microsoft Corporate

01.

02.

03.

04.

05.

•Introdução

•Arquitetura do SQL Server•Storage Engine

•Relational Engine

•Adicionais

PREMIER FIELD ENGINEER

•Suporte Global 24x7•Atendimento a contratos Premier Support•Especialista de produto

•Tipos de Serviços Resolução de problemas Análise proativa de ambientes críticos Workshops e Transferência de conhecimento

MOTIVAÇÃO

•Objetivo Utilizar DMV no dia a dia

•Vantagens Nova ferramenta disponível no SQL 2005 Revela detalhes sobre o funcionamento do servidor Executa tarefas que não são possíveis no SQL 2000

DYNAMIC MANAGEMENT OBJECTS

•Dynamic Management Objects Dynamic Management Views (DMV) Dynamic Management Functions (DMF)

•Características Somente para leitura Informação em memória Capturas instantâneas (snapshot)

CONSULTAS A DMV/DMF

•Informações internas do SQL Server

TRABALHANDO COM DMV E DMF

•Dynamic Management Objects Schema: sys Nome: dm_*

•Exemplos:SELECT * FROM sys.dm_exec_requestsSELECT * FROM sys.dm_exec_sessionsSELECT * FROM sys.dm_exec_connectionsSELECT * FROM sys.dm_exec_sql_text(@h)

GRUPOS FUNCIONAIS

•DMV/DMF estão organizados em categorias Common Language Runtime (CLR) Database Mirroring Database Execution Indexes I/O Operations Query Notifications Replication Service Broker SQL Server Operating System Transaction

DEMO

•Select * from sys.system_objectsWhere name like ‘dm_%’

•Books Online 2005 “Dynamic Management Objects” “sys.dm_exec_requests”

ARQUITETURA DO SQL SERVER•Storage Engine

Infra-estrutura do SQL Server Comunicação com o Sistema Operacional Exemplos:

Gerenciamento de Threads Gerenciamento de Memória Gerenciamento de I/O

Relational Engine Implementação da linguagem SQL Conceito de índices e estatísticas Exemplos:

Compilação Otimização Execução da query

STORAGE ENGINE

•Infra-estrutura do SQL Server Thread Memória I/O

THREADS

-Threads-Worker Threads-Tasks

Task

ThreadsWorker Threads

TASK / TAREFAS

•Running, Runnable, Suspended

TaskTaskTaskTaskTaskTask

RUNNINGRUNNABLE

SUSPENDED

100% CPU

•sys.dm_os_tasks task_state

RUNNING RUNNABLE

Worker Task

Worker Task

Worker Task

Worker Task

DEMOSNome: Título:

•Fabricio Catae•DMV’s

SUSPENDED

•Tarefas Bloqueadas Disco Rede Linked Server

•sys.dm_os_waiting_tasks session_id wait_type wait_duration_ms resource_description blocking_session_id

DISK I/O

•Tarefas Bloqueadas Data Files: PAGEIOLATCH Log Files: WRITELOG

•sys.dm_io_virtual_file_stats database_id file_id num_of_reads num_of_writes num_of_bytes_read num_of_bytes_written

NG

Auth

Sidep

AC

MM

DEMOSNome: Título:

•Fabricio Catae•DMV’s

GERENCIAMENTO DE MEMÓRIA

•Módulo Reescrito para SQL 2005 Memory Nodes Memory Clerks Cache e User Stores Page Allocators

DM_OS_MEMORY_*

•dm_os_memory_clerks•User e Cache Stores

dm_os_memory_cache_counters dm_os_memory_cache_hash_tables dm_os_memory_cache_clock dm_os_memory_cache_entries

•Object Stores dm_os_memory_pools

DEMOSNome: Título:

•Fabricio Catae•DMV’s

RELATIONAL ENGINE

•Execução de Query•Histórico de Execução•Utilização de Índices

EXECUÇÃO DE QUERY

-session_id- sql_handle- plan_handle- estatísticas - cpu - memória - i/o - duração

Session

Connection

RequestRequestRequest

REQUEST DMV

•DMV sys.dm_exec_connections sys.dm_exec_sessions sys.dm_exec_requests

•DMF sys.dm_exec_connections( sql_handle ) sys.dm_exec_connections( plan_handle )

DEMO

•Cenário: 100% CPU•Select * from sys.dm_exec_connections•Select * from sys.dm_exec_sessions•Select * from sys.dm_exec_requests

•Select * from sys.dm_exec_sql_text(@h)•Use substring

•Select * from sys.dm_exec_requests•CROSS APPLY operator

•Select * from sys.dm_exec_plan_handle(@h)•Save query plan to with sqlplan file extension

HISTÓRICO DE EXECUÇÃO

•Após cada execução, essa DMV é atualizada•Colunas

sql_handle plan_generation_num plan_handle last_execution execution_count total_worker_time total_physical_read/write total_logical_read/write total_elapsed_time

SQL_HANDLE

•sys.dm_exec_sql_text( @handle )

NÚMERO DE EXECUÇÕES

•Execution_count

TEMPO DE CPU UTILIZADO (MS)

•Total_worker_time

TEMPO TOTAL GASTO (MS)

•Total_elapsed_time

DM_EXEC_QUERY_STATS

•Algumas queries não aparecem Extended Stored Procedures .NET Stored Procedures Comandos T-SQL (IF, WHILE, etc) Queries triviais

•Existem situações que removem parte das estatísticas

DBCC FREEPROCCACHE Memory Pressure

DEMO

•Cenário: I/O intensive

•Verificar que não há problemas•SELECT * FROM sys.dm_exec_requests

•Listar todas as queries de sys.dm_exec_query_stats•Identificar os consumidores de CPU•Identificar os responsáveis pelos physical read•Calcular a média de leituras físicas

•Utilizar sql_handle e plan_handle

ÍNDICES

•Falta de índices adequados para queries sys.dm_db_missing_index_details

•Utilização de Índices sys.dm_db_index_usage_stats

DEMOSNome: Título:

•Ioannis Xylaras•DMV’s

ADICIONAIS

•Server level dm_exec_*

Execution of user code and associated connections dm_os_*

low level system (server-wide) info such as memory, locking & scheduling

dm_tran_* Transactions & isolation

dm_io_* Input/Output on network and disks

dm_db_* Databases and database objects

•GRUPO DE DMV’S

ADICIONAIS

•Component level dm_repl_*

Replication dm_broker_*

SQL Service Broker dm_fts_*

Full Text Search dm_qn_*

Query Notifications

•GRUPO DE DMV’S

ADICIONAIS

•MEMÓRIA ALOCADA•Você pode usar o sys.dm_os_memory_clerks DMV como exemplo a seguir para identificar quanta memória o SQL Server aloca através do mecanismo do AWE.•Select sum(awe_allocated_kb) / 1024 as [AWE allocated, Mb] from sys.dm_os_memory_clerks

•CENÁRIO DE PERFORMANCE

ADICIONAIS

•Query plan ineficiente•A query sys.dm_exec_query_stats é um eficiente caminho para determinar qual query está usando a maior CPU cumulativa.•Select • highest_cpu_queries.plan_handle, • highest_cpu_queries.total_worker_time,• q.dbid, q.objectid, q.number, q.encrypted, q.[text]•from • (select top 50 qs.plan_handle, qs.total_worker_time• from sys.dm_exec_query_statssys.dm_exec_query_stats qs• order by qs.total_worker_time desc) as highest_cpu_queries• cross apply sys.dm_exec_sql_text(plan_handle) as q•order by highest_cpu_queries.total_worker_time desc

• CENÁRIO DE PERFORMANCE

ADICIONAIS

•Top CPUs procs & batchesSelect top 50 •sum(qs.total_worker_time) as total_cpu_time, •sum(qs.execution_count) as total_execution_count,•count(*) as '#_statements',•qt.dbid, qt.objectid, qs.sql_handle,•qt.[text] from sys.dm_exec_query_stats as qs•cross apply sys.dm_exec_sql_text (qs.sql_handle) as qt•group by qt.dbid,qt.objectid, qs.sql_handle,qt.[text]•order by sum(qs.total_worker_time) desc,qs.sql_handle

•CENÁRIO DE PERFORMANCE

ADICIONAIS

•CPU – O que está executando em paralelo?•Paralelismo é bom para DW, não para OLTP

Select r.session_id,r.request_id,max(isnull(exec_context_id, 0)) as number_of_workers,r.sql_handle,r.statement_start_offset,r.statement_end_offset,r.plan_handle

from sys.dm_exec_requestssys.dm_exec_requests rjoin sys.dm_os_tasks t on r.session_id = t.session_idjoin sys.dm_exec_sessions s on r.session_id = s.session_id

where s.is_user_process = 0x1group by r.session_id, r.request_id, r.sql_handle, r.plan_handle,

r.statement_start_offset, r.statement_end_offsethaving max(isnull(exec_context_id, 0)) > 0

•CENÁRIO DE PERFORMANCE

ADICIONAIS

•Pressão CPU : Recompilação•Select top 25• sql_text.text,• sql_handle,• plan_generation_num,• execution_count,• dbid,• objectid •from sys.dm_exec_query_statssys.dm_exec_query_stats a• Cross apply sys.dm_exec_sql_text(sql_handle) as sql_text•where plan_generation_num >1•order by plan_generation_num desc

•CENÁRIO DE PERFORMANCE

ADICIONAIS•Memória: Top memory por objeto & índice•CENÁRIO DE PERFORMANCE

Select b.database_id,p.object_id

,object_name(p.object_id) as objname

,p.index_id

,buffer_count=count(*)from sys.allocation_units a,

sys.dm_os_buffer_descriptorssys.dm_os_buffer_descriptors b,sys.partitions p

where a.allocation_unit_id = b.allocation_unit_idand a.container_id = p.hobt_idgroup by b.database_id,p.object_id, p.index_idorder by buffer_count desc

ADICIONAIS•Top IOs por statement•SELECT TOP 50• (qs.total_logical_reads + qs.total_logical_writes) /qs.execution_count • as [Avg IO],• substring (qt.text,qs.statement_start_offset/2, (case when qs.statement_end_offset = -1 • then len(convert(nvarchar(max), qt.text)) * 2 • else qs.statement_end_offset end - qs.statement_start_offset)/2) • as query_text,• qt.dbid,• qt.objectid •FROM sys.dm_exec_query_statssys.dm_exec_query_stats qs•cross apply sys.dm_exec_sql_text (qs.sql_handle) as qt•ORDER BY • [Avg IO] DESC

•CENÁRIO DE PERFORMANCE

ADICIONAIS

•Visualizando a utilização dos índices das tabelas

•Select so.name AS 'Table Name', si.name AS 'index Name', si.type_desc AS 'Index Type', si.index_id AS 'Index ID',us.user_seeks, us.user_scans, us.system_seeks, us.system_scansFROM sys.dm_db_index_usage_statssys.dm_db_index_usage_stats usINNER JOIN sys.objects soON us.object_id = so.object_id INNER JOIN sys.indexes siON so.object_id = si.object_idWHERE so.type = 'U'

•CENÁRIO DE PERFORMANCE

ADICIONAIS

•Visualizando Índices não atualmente utilizadosSelect so.name AS 'Table Name', si.name AS 'index Name', si.type_desc AS 'Index Type', si.index_id AS 'Index ID',•us.user_seeks, us.user_scans, us.system_seeks, us.system_scans, us.user_lookups, us.system_lookups,us.user_updates,•us.system_updates•--other columns are available•FROM sys.dm_db_index_usage_statssys.dm_db_index_usage_stats us•INNER JOIN sys.objects so ON us.object_id = so.object_id •INNER JOIN sys.indexes si ON so.object_id = si.object_id•WHERE so.type = 'U' AND us.user_seeks = 0•AND us.user_scans = 0 AND us.system_seeks = 0•AND us.system_scans = 0

•CENÁRIO DE PERFORMANCE

PRÓXIMAS PALESTRAS

PRÓXIMAS PALESTRASPalestra 1:

Palestra 2:

Palestra 3:

•SUP304 Otimizando os Subsistemas de Discos para o Microsoft Exchange Server 30/11/2006 15:30 - 16:45

•SUP305 Processo de Migração para ISA Server 200630/11/2006 17:00 - 18:15

•Ask the Experts

LINKS ÚTEIS

SQL Server 2005 System Views Onlinehttp://download.microsoft.com/download/0/d/f/0dfe488e-a335-4480-8a8a-b405e32f4368/SQL2005_Sys_Views.pdf

Troubleshooting Performance Problems in SQL 2005http://www.microsoft.com/technet/prodtechnol/sql/2005/tsprfprb.mspx

SQL Server 2005 Books Online http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx

Dynamic Management Views and Functionshttp://msdn2.microsoft.com/en-us/library/ms188754.aspx

LINKS ÚTEIS

Technet Brasilhttp://www.microsoft.com/brasil/technet http://www.microsoft.com/brasil/technet/comunidade/default.mspxhttp://forums.microsoft.com/technet-br

Certificações Microsofthttp://www.microsoft.com/brasil/certifique http://www.microsoft.com/learning

Slava Oks Bloghttp://blogs.msdn.com/slavao

Microsoft Most Valuable Professionalhttp://mvp.support.microsoft.com/

PERGUNTAS E RESPOSTAS•Fabricio Catae Ioannis Xylaras•

•Microsoft Corporate