SQL Server 2005 DMV sungheehadconsulting co kr SQL
- Slides: 41
SQL Server 2005 DMV 하성희 sungheeh@adconsulting. co. kr 에이디컨설팅 / 대표 컨설턴트 SQL Server MVP
카탈로그 뷰 • 카탈로그 뷰 종류 CLR Assembly Catalog Views Objects Catalog Views Databases and Files Catalog Views Partition Function Catalog Views Database Mirroring Catalog Views Scalar Types Catalog Views Data Spaces and Fulltext Catalog Views Schemas Catalog Views Endpoints Catalog Views Security Catalog Views Extended Properties Catalog Views Service Broker Catalog Views Linked Servers Catalog Views Server-wide Configuration Catalog Views Messages (For Errors) Catalog Views XML Schemas (XML Type System) Catalog Views
리소스 병목 찾기 CPU: 현재 실행 중인 SQL 문 select r. session_id , status , substring(qt. text, r. statement_start_offset/2, (case when r. statement_end_offset = -1 then len(convert(nvarchar(max), qt. text)) * 2 else r. statement_end_offset end r. statement_start_offset)/2) as query_text -- 이쿼리를실행하는시점에실행되는SQL문 , qt. dbid , qt. objectid , r. cpu_time , r. total_elapsed_time , r. reads , r. writes , r. logical_reads , r. scheduler_id from sys. dm_exec_requests r cross apply sys. dm_exec_sql_text(sql_handle) as qt where r. session_id > 50 order by r. scheduler_id, r. status, r. session_id
리소스 병목 찾기 CPU를 많이 사용하는 상위 프로시저 및 일괄처리(Batch) • SQL 2000 • SQL 2005 select top 50 – 프로필러 Statement 레벨 추적 sum(qs. total_worker_time) as total_cpu_time, (trace) 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
리소스 병목 찾기 Statement별 Top CPU 사용 • SQL 2005 -- Avg CPU Time 기준 상위 50개 SQL 문 – 프로필러 Statement 레벨 추적 SELECT TOP 50 qs. total_worker_time/qs. execution_count as (trace) [Avg CPU Time], – 실시간으로 수집해야 함 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_stats qs cross apply sys. dm_exec_sql_text(qs. sql_handle) as qt ORDER BY [Avg CPU Time] DESC • SQL 2000
리소스 병목 찾기 CPU – 병렬로 실행중인 프로세스 확인 • DW의 경우에는 병렬처리(Parallelism)가 좋지만, OLTP의 경 우에는 병렬처리가 반드시 좋은 것만은 아님 • SQL 2000 – 지원하지 않음 • SQL 2005 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_requests r join sys. dm_os_tasks t on r. session_id = t. session_id join sys. dm_exec_sessions s on r. session_id = s. session_id where s. is_user_process = 0 x 1 group by r. session_id, r. request_id, r. sql_handle, r. plan_handle, r. statement_start_offset, r. statement_end_offset having max(isnull(exec_context_id, 0)) > 0
리소스 병목 찾기 CPU: Parallelism과 CPU 사용 • SQL 2005 – CPU > Duration select qs. sql_handle, qs. statement_start_offset, qs. statement_end_offset, q. dbid, q. objectid, q. number, q. encrypted, q. text from sys. dm_exec_query_stats qs cross apply sys. dm_exec_sql_text(qs. plan_handle) as q where qs. total_worker_time > qs. total_elapsed_time
리소스 병목 찾기 CPU: 컴파일 시간 • SQL 2000 – 지원하지 않음 • SQL 2005 – before / after 스냅샷을 관리함 – 최적화 과정에 소요된 시간은 일반적으로 최적화를 위하여 사용된 CPU 시간과 유 사함 Select * from sys. dm_exec_query_optimizer_info counter -------optimizations elapsed time occurrence value --------------------------------81 1. 0 81. 064547820702944486
리소스 병목 찾기 CPU Pressure: 재컴파일 • SQL 2000 – Statement 레벨 추적으로 가능 – 추적 이벤트: SP: Recompile – 재컴파일 상위 쿼리를 찾기 위 해서는 집계 작업이 필요함 • SQL 2005 select top 25 sql_text, sql_handle, plan_generation_num , execution_count , dbid , objectid from sys. 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
리소스 병목 찾기 메모리: 오브젝트 및 인덱스를 기준으로 한 상위 메모리 사용 • 메모리 버퍼를 오브젝트 별로 분류 (테이블, 인덱스) 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_descriptors b, sys. partitions p where a. allocation_unit_id = b. allocation_unit_id and a. container_id = p. hobt_id group by b. database_id, p. object_id, p. index_id order by buffer_count desc
리소스 병목 찾기 IO를 많이 발생시키는 상위 SQL 문 • SQL 2000 – 프로필러를 사용하여 Statement 레벨의 추적으 로 확인 가능함 – 실시간으로 추적 정보를 수집해야 함 • SQL 2005 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_stats qs cross apply sys. dm_exec_sql_text(qs. sql_handle) as qt ORDER BY [Avg IO] DESC
리소스 병목 찾기 파일 별 IO 대기 select database_id , file_id , io_stall, io_pending_ms_ticks , scheduler_address from sys. dm_io_virtual_file_stats (NULL, NULL) as t 1, sys. dm_io_pending_io_requests as t 2 where t 1. file_handle = t 2. io_handle
리소스 병목 찾기 IO 할당 대기 • Tempdb (DBID=2) Select session_id, wait_duration_ms, resource_description From sys. dm_os_waiting_tasks Where wait_type like 'PAGE%LATCH_%' and resource_description like '2: %' • 사용자 DB (다음에서 dbid 부분을 db_id() 값을 입력하여 실 행하면 됨 ) resource_description like ‘dbid: %’ • Page%Latch 대기 확인 select * from Sys. dm_os_wait_stats
리소스 병목 찾기 IO Pressure: 사용되지 않는 사용자 인덱스 • 유용하지 않은 사용자 인덱스를 확인할 수 있음 • 예제 select object_name(i. object_id), i. name from sys. indexes i, sys. objects o where i. index_id NOT IN (select s. index_id from sys. dm_db_index_usage_stats s where s. object_id=i. object_id and i. index_id=s. index_id and database_id = <dbid> ) /* dbid : db_id() 또는 dbid값을 입 력 */ and o. type = 'U' and o. object_id = i. object_id order by object_name(i. object_id) asc
리소스 병목 찾기 IO Pressure: 누락된 인덱스 • 옵티마이저가 누락된 인덱스 정보를 알려 줌 – xml plan 참조 요망 • Select * from sys. dm_exec_query_plan(plan_handle) • DMV가 상세 정보를 제공함 – Sys. dm_db_missing_index_group_stats – Sys. dm_db_missing_index_groups – Sys. dm_db_missing_index_details
리소스 병목 찾기 Tempdb 사용 Select SUM (user_object_reserved_page_count)*8 as user_objects_kb, SUM (internal_object_reserved_page_count)*8 as internal_objects_kb, SUM (version_store_reserved_page_count)*8 as version_store_kb, SUM (unallocated_extent_page_count)*8 as freespace_kb From sys. dm_db_file_space_usage Where database_id = 2
리소스 병목 찾기 Tempdb 사용: task 단위 SELECT t 1. session_id, (t 1. internal_objects_alloc_page_count + task_alloc) as allocated, (t 1. internal_objects_dealloc_page_count + task_dealloc) as deallocated from sys. dm_db_session_space_usage as t 1, (select session_id, sum(internal_objects_alloc_page_count) as task_alloc, sum (internal_objects_dealloc_page_count) as task_dealloc from sys. dm_db_task_space_usage group by session_id) as t 2 where t 1. session_id = t 2. session_id and t 1. session_id >50 order by allocated DESC
리소스 병목 찾기 Tempdb 사용: statement 단위 select t 1. session_id, t 1. request_id, t 1. task_alloc, t 1. task_dealloc, t 2. sql_handle, t 2. statement_start_offset, t 2. statement_end_offset, t 2. plan_handle from (Select session_id, request_id, sum(internal_objects_alloc_page_count) as task_alloc, sum (internal_objects_dealloc_page_count) as task_dealloc from sys. dm_db_task_space_usage group by session_id, request_id) as t 1, sys. dm_exec_requests as t 2 where t 1. session_id = t 2. session_id and (t 1. request_id = t 2. request_id) order by t 1. task_alloc DESC
리소스 병목 찾기 블로킹: sp_block create proc dbo. sp_block (@spid bigint=NULL) as -- This stored procedure is provided "AS IS" with no warranties, and confers no rights. -- Use of included script samples are subject to the terms specified at http: //www. microsoft. com/info/cpyright. htm -- This proc reports blocks -1. optional parameter @spid select t 1. resource_type , 'database'=db_name(resource_database_id) , 'blk object' =isnull(object_name(t 1. resource_associated_entity_id) , t 1. request_mode , t 1. request_session_id -- spid , t 2. blocking_session_id -- spid from sys. dm_tran_locks as t 1, sys. dm_os_waiting_tasks as t 2 where t 1. lock_owner_address = t 2. resource_address and t 1. request_session_id = isnull(@spid, t 1. request_session_id)
디폴트 추적(Default Trace) • 최소의 부하, 소용량 관리 이벤트 – DDL, DBCC, sp_configure 등을 추적 • sp_configure로 비활성화 가능함 (‘default trace enabled’ 옵션) • 오브젝트 생성, 오브젝트 삭제 – 인덱스 포함 – 실무 활용 예: IO spike와 인덱스 삭제의 관련성 분석 • 시도(attempt)와 실제로 성공한 작업이 모두 포함됨 – 100 MB 순환 구조 • 최다 5개의 20 MB 크기 파일에 로깅된다 • 하나의 파일이 가득 차거나 서버가 재시작되면 새로운 파일이 생성된다 • 스크립트 예: select t. Start. Time, t. Event. Class, e. name, t. Database. Name, t. Object. ID, t. Index. ID from fn_trace_gettable ('C: Program FilesMicrosoft SQL ServerMSSQL. 1MSSQLLOGlog_10. trc', 0) t join sys. trace_events e on e. trace_event_id = t. eventclass Order by t. Start. Time
디폴트 추적 이벤트들 Select distinct(eventid) from fn_trace_geteventinfo(1) 18 Audit Server Starts And Stops 20 Audit Login Failed 22 Error. Log 46 Object: Created 47 Object: Deleted 55 Hash Warning 69 Sort Warnings 79 Missing Column Statistics 80 Missing Join Predicate 81 Server Memory Change 92 Data File Auto Grow 93 Log File Auto Grow 94 Data File Auto Shrink 95 Log File Auto Shrink 102 Audit Database Scope GDR Event 103 Audit Schema Object GDR Event 104 105 106 108 109 110 111 115 116 152 153 155 156 157 164 167 Audit Addlogin Event Audit Login GDR Event Audit Login Change Property Event Audit Add Login to Server Role Event Audit Add DB User Event Audit Add Member to DB Role Event Audit Add Role Event Audit Backup/Restore Event Audit DBCC Event Audit Change Database Owner Audit Schema Object Take Ownership Event FT: Crawl Started FT: Crawl Stopped FT: Crawl Aborted Object: Altered Database Mirroring State Change
SQLDiag • SQL Server 2000 PSSDiag • SQL Server 2005 SQLDiag • SQL Server 관련 이슈에 대한 진단 데이터를 한번에 수 집 가능한 툴
SQLDiag • 사용 예 SQLDiag /B +01: 00 /E +03: 00 SQLDiag /B +01: 00 /E 08: 30: 00 SQLDiag /B 03: 00 /X /L SQLDiag /I SD_Detailed. XML /O SQLDIAG_20051229 /B 12: 10: 00 /E 12: 11: 00 SQLDiag /B +00: 01: 00 /E +00: 02: 00 /N 2
- Sql server 2005 sp
- Sys.sp_cdc_add_job
- Sql 2005 performance tuning
- Dts xchange
- Ssis sql server 2005
- Microsoft sql server 2005 analysis services
- Sql server 2005 encryption
- Microsoft sql server 2008 management studio express
- Sql server 2005 report builder download
- How to monitor log shipping in sql server 2005
- Visual studio 2005 team
- Sql lck_m_is
- Sql server management studio recover unsaved queries
- Sql server dehardening
- Sql server 5 bi
- Ssis-314
- Sql visio
- Ms sql server architecture
- Azure sql edge raspberry pi
- Sql server 2000 sp
- Parallel data warehouse sql server 2012
- Sql server manager
- Azure sql sla
- Sql server 101
- Sql server
- Ssis log provider for sql server
- Ostress
- Read-scale availability groups
- Sql server crash dump analysis
- Sql server 2000
- Microsoft sql server introduction
- Inside the sql server query optimizer
- What is a sql server storage engine
- Sql server 2016 sp
- Sql server 2017 windows 7
- Difference between sql and oracle
- Sql server vertical partitioning
- Sql server security best practices
- Dbcc traceon 2861
- Sql server brisbane
- Cursor fast forward sql server
- Kereberos