728x90

저장 프로시저들을 호출횟수나 CPU 소모시간 등의 통계요약 쿼리

 

SELECT DB_NAME(st.dbid) DBName

,OBJECT_NAME(st.objectid) StoredProcedure
,max(cp.usecounts) Execution_count
,sum(qs.total_worker_time) total_cpu_time
,sum(qs.total_worker_time) / (max(cp.usecounts) * 1.0) avg_cpu_time
FROM sys.dm_exec_cached_plans cp join sys.dm_exec_query_stats qs on cp.plan_handle = qs.plan_handle
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st
where DB_NAME(st.dbid) is not null and cp.objtype = 'proc'
group by DB_NAME(st.dbid), OBJECT_NAME(objectid)
order by sum(qs.total_worker_time) desc

 

실행결과

DBName StoredProcedure Execution_count total_cpu_time avg_cpu_time
master    NULL                14                      280082            20005.85714285714285

master    NULL                14                      280082            20005.85714285714285
msdb     SP_SELECT1      12                     17372              1447.66666666666666
msdb     SP_SELECT2      48                     17072              355.66666666666666

.

.

.

.

.

 

728x90
728x90

 

/********************************************************************************
해당 데이터베이스의 모든 테이블의 인덱스 정보 보기
********************************************************************************/

DBCC SHOWCONTIG WITH TABLERESULTS, ALL_INDEXES

-- ObjectName : 테이블이름
-- ObjectId : 테이블번호
-- IndexName : 인덱스이름
-- IndexId : 인덱스번호0:Heap, 1:Clustered 2:Nonclustered
-- Level : 인덱스수준0:인덱스의리프또는데이터, Heap 경우0
-- Pages : 페이지수
-- MinimumRecordSize : 최소레코드크기
-- MaximumRecordSize : 최대레코드크기
-- ForwardedRecords : 전달된레코드크기(8060byte가넘으면전달된레코드증가)
-- Extents : 익스텐트수
-- ExtentSwitches : 익스텐스간의이동횟수
-- AverageFreeBytes : 검색된페이지에서사용가능한평균바이트수(값이클수록페이지사용률낮음)
-- AveragePageDensity : 평균페이지밀도(백분율값이클수록좋음)
-- ScanDensity : 값이작을수록조각화가많이일어난것임(데이터가인접해있는비율)
-- BestCount : 모든데이터가인접해서연결되어있는경우인스텍트변경횟수
-- ActualCount : 실제익스텐트변경횟수
-- LogicalFragmentation : 논리적조각화(백분율이클수록안좋음)
-- ExtentFragmentation

 

or

 

SELECT Object_name(a.object_id) AS table_name -- 테이블이름
,
a.NAME AS index_name -- 인덱스이름
,
a.index_id -- 인덱스형태1:클러스터인덱스2: 이상이면넌클러스터인덱스
,
a.type -- 0:힙1:클러스터형2:비클러스터형3:XML 4:공간
,
a.type_desc -- HEAP, CLUSTERED, NONCLUSTERED, XML, SPATIAL
,
b.rowcnt -- 데이터수준행수
,
b.rows -- 데이터수준행수
,
b.rowmodctr -- 테이블에대해통계를마지막으로업데이트한이후에삽입, 삭제또는업데이트된행수
FROM sys.indexes AS a
INNER JOIN sys.sysindexes AS b
ON a.NAME = b.NAME
INNER JOIN sys.sysobjects AS c
ON a.object_id = c.idwhere c.xtype = 'U' -- 사용자가작성한테이블
ORDER BY table_name

SELECT Object_name(parent_obj) ,
*
FROM sys.sysobjects
WHERE xtype = 'PK'SELECT *
FROM sys.sysobjects
WHERE xtype = 'U'

 

 

 

728x90
728x90

-- 가장 조각이 많이 난 인덱스 TOP 10
 
 SELECT TOP 10

            DB_NAME() AS 'DatabaseName'
 
          , OBJECT_NAME(S.OBJECT_ID) AS 'TableName'
 
          , I.NAME AS 'IndexName'
 
          , ROUND(AVG_FRAGMENTATION_IN_PERCENT, 2) AS 'Fragmentation %'
 
 FROM SYS.DM_DB_INDEX_PHYSICAL_STATS(DB_ID(),NULL,NULL,NULL,NULL) AS S
 
 INNER JOIN SYS.INDEXES AS I
 
 ON S.OBJECT_ID = I.OBJECT_ID AND S.INDEX_ID = I.INDEX_ID
 
 WHERE S.DATABASE_ID = DB_ID() -- 현재 데이터베이스
 
 AND I.NAME IS NOT NULL -- HEAP은 무시
 
 AND OBJECTPROPERTY(S.OBJECT_ID, 'IsMsShipped') = 0 -- 시스템 개체 무시
 
 ORDER BY [Fragmentation %] DESC

 

728x90

+ Recent posts