MSSQL_성능 카운터(미완성)
- -
안녕하세요.
성능카운터 공부하면서 정리한 내용을 공유합니다. 아마 보시다보면 여기저기서 봤던 내용이 있을 수 있습니다. 나름데로, 정리한 내용이라 혹시 잘못 된 부분은 말씀해주세요.
또한 포스트를 보면서 꼭 알야할 상황은 시스템의 설정과 스팩에 따라서 수치는 다를수 있습니다. 예를 들어서 ad-hoc이 엄청나게 많은 서버에서 compile은 당연히 많을 수 밖에 없습니다. 그 기준은 시스템의 환경에 따라서 다르게 보시면 좋을 듯 합니다.
아직 미완성 부분이라서 전부 내용이 있지는 않습니다. 문서 보는 방법을 우선 보시고 포스트를 보시면 편할 것 입니다.
문서 보는 방법
1. - 으로 시작하는 부분은 항목에 대한 설명입니다.
2. > 으로 시작 하는 부분은 임계치와 해결 방법을 나타냅니다.
3. * 으로 시작 하는 부분은 항목에 대한 용어 및 부연 설명입니다.
SQLServer:Access Methods\Forwarded Records/sec
- http://yoonsy.tistory.com/8 (제거 방법)
- 현재 운영중인 환경에서 얼마나 많은 Forward Pointer를 사용하여 데이터를 엑세스 하는지 확인하는 성능 카운터 입니다.
* Forward Pointer란 Heap 테이블의 가변형 데이터(Varchar,Nvarchar)타입보다 큰 데이터로 변경하게 되면 클러스터 인덱스가 같은 페이지 분할이 아닌, 다른 곳으로 저장 후에 포인터를 가지고 있는
Forward Pointer가 생성 됩니다. 이로 인해서 적은 데이터를 읽을 경우에도 포인터로 추가 컬럼에 대한 데이터도 엑세스 하는 경우에는 성능에 문제가 있습니다.
> Forward Pointer 해결 방법
- 클러스터 인덱스 생성
- 다른 테이블로 일괄 입력 후에 이름 변경
- 수정된 행들에 값에 대하여, 기존의 행 크기 이하로 크기를 줄인다.
- DBCC SHRINKDATABASE를 실행
SQLServer:Access Methods\Full Scans/sec
- 초당 제한되지 않은 전체 검색 수입니다. 기본 테이블이나 전체 인덱스 검색이 될 수 있습니다.
- Full Scan하는 쿼리 찾기 (Index Scan도 잡힘)
with XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/showplan' as sql) SELECT * FROM ( SELECT db_name( qt.dbid ) AS 'DB Name' ,qt .dbid ,OBJECT_NAME (qp. objectid,qp .dbid) as sp_name ,qt .text AS 'sp_text' , substring(qt .text, (qs .statement_start_offset/ 2)+1 , ((case qs .statement_end_offset when - 1 then datalength(qt .text) else qs. statement_end_offset end - qs.statement_start_offset )/2) + 1 ) as statement_text , qs .creation_time , qs .execution_count AS 'Execution Count' , ISNULL(qs .execution_count/ DATEDIFF(Second , qs. creation_time, GetDate()), 0 ) AS 'Calls/Second' , DATEDIFF(Minute , qs. creation_time, GetDate()) AS 'Age in Cache' , ISNULL(qs .total_elapsed_time/ qs.execution_count , 0) AS 'AvgElapsedTime(㎲)' , qs .total_elapsed_time/ 1000.0/1000.0 AS 'TotalElapsedTime(sec)' , max_elapsed_time /1000.0 AS 'maxelapsedTime(ms)' , qs .total_worker_time/ qs.execution_count AS 'AvgWorkerTime(㎲)' , qs .total_worker_time AS 'TotalWorkerTime(㎲)' , max_worker_time as 'max_worker_time(㎲)' , ISNULL(qs .total_logical_reads/ qs.execution_count , 0) AS 'AvgLogicalreads' , total_logical_reads , qs .max_logical_reads , ISNULL(qs .total_physical_reads/ qs.execution_count , 0) AS 'AvgphysicalReads' , total_physical_reads , qs .max_physical_reads , ISNULL(qs .total_logical_writes/ qs.execution_count , 0) AS 'AvglogicalWrites' , qs .total_logical_writes , qs .max_logical_writes ,text ,cast (query_plan as xml) as query_plan FROM sys.dm_exec_query_stats as qs CROSS APPLY sys .dm_exec_sql_text( plan_handle) as qt CROSS APPLY sys.dm_exec_text_query_plan (qs. plan_handle,qs .statement_start_offset, qs.statement_end_offset ) qp )Y CROSS APPLY ( SELECT c .value( '(./@PhysicalOp)[1]','varchar(100)' ) as PhysicalOp FROM Y. query_plan.nodes ('//sql:RelOp') B(C ) )X where PhysicalOp IN ('Table Scan' ,'Index Scan')and Y.dbid not in ( 1,2 ,3, 4,32767 ) |
SQLServer:Access
Methods\Index Searches/sec
- 초당 인덱스 검색 수입니다. 초당 인덱스 검색은 범위 검색 시작, 범위 검색 위치 조정, 검색 지점 다시 검사, 단일 인덱스 레코드 인출, 새로운 행을 삽입할 장소를 찾기 위한 인덱스 검색 등에 사용됩니다.
SQLServer:Access Methods\Page Splits/sec
- 인덱스 페이지 오버플로의 결과로 발생한
초당 페이지 분할 수입니다.
- SQL Server가 과도한 페이지 분할을 일이키고 있는지 찾기 위해서 사용하는 항목입니다.
- 과도한 Page Spilts/sec는 운영하는 시스템의 I/O하부 시스템에 따라 다르므로 이에 대해 간단히 답할 수 없습니다. 그러나 만약 평소에 디스크 I/O의 성능 문제가 발생하였고, 이 카운터 값이 100을 초과 한다면
채우기 비율을 높여서 성능이 좋아 질수 있습니다.
> 만일 과도한 페이지 분할이 발생하고 있다면, 인덱스의 채우기 비율을 높게 설정하시는걸 고려해야합니다. 채우기 비율을 높게 설정하면 데이터가 가득차거나, 페이지 분할이 발생하기 전에 데이터 페이지에 보다 많은
여유 공간이 있으므로, 페이지 분할을 감소 시킬수 있습니다.
SQLServer:Access
Methods\Workfiles Created/sec
- 초당 만들어지는 작업 파일 수입니다. 예를 들어 작업 파일은 해시 조인 및 해시 집계에 대한 임시 결과를 저장하는 데 사용될 수 있습니다.
SQLServer:Access
Methods\Worktables Created/sec
- 초당 만들어지는 작업 테이블 수입니다. 예를 들어 작업 테이블은 쿼리 스풀, LOB 변수, XML 변수 및 커서에 대한 임시 결과를 저장하는 데 사용될 수 있습니다.
SQLServer:Access
Methods\Table Lock Escalations/sec
- 테이블의 잠금이 TABLE 또는 HoBT 세분성으로 에스컬레이션된 횟수입니다.
SQLServer:Access Methods\Worktables From Cache Ratio
- 작업 테이블의 첫 두 페이지가 할당되지
않았지만 작업 테이블 캐시에서 즉시 사용 가능한 곳에 생성된 작업 테이블의 비율입니다. 작업 테이블이
삭제되면 두 페이지는 할당된 상태를 유지할 수 있으며 작업
테이블 캐시로 반환됩니다. 이 경우 성능이 향상됩니다.
SQLServer:Buffer Manager\Buffer cache hit ratio
- 디스크에서 읽지 않고 버퍼 풀에서 찾은
페이지 비율입니다.
> 권장 : > 90%
(A) 그룹 항목 (Buffer Pool 및 Memory) SQLServer:Buffer Manager\Checkpoint pages/sec (A) : Chekpoint가 너무 높음 SQLServer:Buffer Manager\Lazy writes/sec (A) : 0 보다 매우 크거나 높음 SQLServer:Buffer Manager\Page life expectancy (A) : 300초 보다 낮음 -> 이 항목에 대한 값이 모두 충족된다면 메모리가 낮다는 것을 의심해 봐야 합니다.
SQLServer:Buffer Manager\Checkpoint pages/sec (A) - 체크 포인트 발생 횟수입니다. - 체크 포인트가 발생 할때 더티페이지는 디스크에 씌여집니다. SQLServer:Buffer Manager\Lazy writes/sec (A) - 버퍼 캐시에서 자주 사용하지 않는 페이지를 제거하여, 사용 가능한 버퍼를 제공하는 시스템 프로세스입니다. 이는 더티 페이지들을 캐시에서 자주 사용하지 않는 페이지를 제거하여, 사용 가능한 버퍼를 제공하는 시스템 프로세스 입니다. 이는 더티 페이지들을 버퍼공간에서 디스크로 초당 얼마나 많이 옮겼는지 나타냅니다. > 이 값은 0에 가까워야 합니다. 만약 이 값이 0이라면, SQL Server 는 아주 큰 버퍼 공간을 가지고 있고, 일정한 체크포인트가 발생하여 더티페이지가 반환되기를 기다리는 대신에, 더티페이지 반환을 하지 않아도 됨을 나타냅니다.
SQLServer:Buffer Manager\Page life expectancy (A) - 데이터 페이지가 얼마나 오랫동안 버퍼공간에 머무르는지 평균을 나타냅니다. |
(B) 그룹
항목 (System Memory ) SQLServer:Memory Manager\Total Server Memory (KB)(B) : 실제 메모리보다 높게 나타나면 메모리를 추가해야함
Memory\Available Mbytes(B) - 실제 사용 할 수 있는 메모리양 입니다. 즉, 남아있는 메모리 양 입니다. > 이 카운터는 항상 5MB보다 커야 합니다. 이 값이 작으면 컴퓨터 전체 메모리가 작거나 , 응용프로그램이 메모리를 해제하지 않는다는 의미입니다.
Process\Page faults/Sec: SQL Server Instance(B) - 가상메모리 사용비율 (Hard Faults) > 이 값은 0 이어야 함, 20을 초과할 경우 물리적 메모리가 부족한 것을 뜻 합니다.
Memory\Pages/sec(B) - 하드 페이지 폴트 때문에 디스크에서 가져오거나 작업 집합 내의 디스크 여유 공간에 쓴 페이지 수를 나타냅니다. 이 비율이 높으면 페이징이 과도하다는 의미입니다. 페이징의 원인이 디스크 작업인지 확인할려면 Memory:page Faults/sec 카운터를 모니터링 해야합니다. > 값이 0이어야 합니다. SQL 전용 서버의 경우 평균 0~20 , 20을 초과 할 경우 물리적인 메모리가 부족 한 것 입니다.
Process\Working set SQL server instance(B) > 5MB 보다 높아야 합니다. 이 보다 낮으면 메모리가 부족 한 것을 뜻 합니다. > 이 수치가 Min Server Memory , Max Server Memory서버 옵션에 설정된 메모리의 양보다 작으면 SQL Server가 메모리를 너무 많이 사용하도록 구성 된 것 입니다.
Memory\Pages Input/sec(B) 하드 페이지 폴트를 해결하기 위해 디스크에서 페이지를 읽은 비율입니다. 읽기 연산 중에 메모리로 읽은 평균 페이지 수를 계산 (Pages Input/sec 값과 Page Reads/sec 값을 비교) 권장 : < 10
SQL Server:Buffer Manager\Free Pages(B) - 할당하지 않은 SQL Server 메모리 버퍼수 입니다. > 5MB 이하면 물리적 메모리가 부족함을 뜻 합니다.
SQLServer:Memory Manager\Target Server Memory (KB)(B)
- 컴퓨터의 실제 메모리 양과 비교하여, 계속 높게 나타난다면 메모리를 추가해야 합니다. 이는 SQL Server에 메모리 요구에 비해 서버의 메모리가 너무 낮음을 의미 합니다. |
SQLServer:Buffer Manager\Page lookups/sec
- 버퍼 풀에서 페이지를 찾기 위한 초당 요청 수를 나타냅니다.
SQLServer:Buffer Manager\Page reads/sec
- 실행한 물리적 데이터베이스 페이지 초당 읽기 수를 나타냅니다. 이 통계는 모든 데이터베이스에 걸친 총 실제 읽기 수를 나타냅니다. 실제 I/O는 비용이 많이 들기 때문에 용량이 큰 데이터 캐시나 인텔리전트 인덱스,
더 효율적인 쿼리를 사용하거나 데이터베이스 디자인을 바꾸면 비용을 최소화 할 수 있습니다.
SQLServer:Buffer Manager\Page writes/sec
- 실행한 물리적 데이터베이스 페이지 초당 쓰기 수를 나타냅니다.
SQLServer:Buffer Manager\Readahead pages/sec
SQLServer:Databases(_Total)\Data File(s) Size (KB)
SQLServer:Databases(_Total)\Log Bytes Flushed/sec
SQLServer:Databases(_Total)\Log File(s) Size (KB)
SQLServer:Databases(_Total)\Log Flush Wait Time
SQLServer:Databases(_Total)\Log Flush Waits/sec
SQLServer:Databases(_Total)\Percent Log Used
SQLServer:General Statistics\Logins/sec
SQLServer:General Statistics\Logouts/sec
- Logouts/sec 초당 시작된 총 로그인/로그아웃 수입니다.
> 권장 : < 2 SQL Server:General Statistics\User Connections(시스템에 연결된 사용자 수)
SQLServer:Latches\Average Latch Wait Time (ms)
- 래치 요청들을 위해 대기해야 하는 시간입니다. 이는 오직 대기해야 하는 래치 요청들에 대한 측정값입니다. 대부분의 경우에 대기가 없습니다. 따라서, 이 값은 모든 래치에 대한 것이 아니라,
대기 해야 하는 래치에 대해서만 적용된 값임을 유념하십시오.
SQLServer:Latches\Latch Waits/sec
- 이 값은 즉시 승인 받지 못한 래치 요청수입니다. 다시 말해서, 1초 동안에 대기 해야 했던 총 래치의 수입니다. 따라서, 이는 Average Latch Wait Time으로 부터 측정된 래치들 입니다
SQLServer:Latches\Number of SuperLatches
SQLServer:Locks(_Total)\Average Wait Time (ms)
- 사용자들이 트랜잭션의 완료를 위한 대기시간 때문에 불만을 나타낸다면, 여러분은 개체 잠금이 이 문제가 되고 있는지 찾고 싶을 것 입니다. 문제점을 찾기 위해서, SQL Server Locks Object: Average Wait Time (ms)
카운터를 사용하십시오. 이 카운터는 database, extent, key, page, RID, table의 다양한 잠금에 대한 평균 대기 시간 정보를 측정합니다.
SQLServer:Locks(_Total)\Lock Waits/sec
- 즉시 충족시킬 수 없고 잠금을 허가하기 위해서 호출자가 기다려야 하는 잠금 요청 수
SQLServer:Locks(_Total)\Number of Deadlocks/sec
- Deadlocks 발생 횟수
SQLServer:Locks(_Total)\Lock Timeouts/sec
- 리소스에 잠금을 얻기 위해 대기하면서 타임 아웃된 잠금 요청 횟수를 나타냄
SQLServer:Memory Manager\Granted Workspace Memory (KB)
- 실행 중인 프로세스에 부여된 총 메모리 양입니다. 이 메모리는 해시, 정렬 및 인덱스 생성 작업에 사용됩니다.
SQLServer:Memory Manager\Maximum Workspace Memory (KB)
- 프로세스에 부여될 수 있는 최대 메모리 양입니다. 이 메모리는 주로 해시, 정렬 및 인덱스 생성 작업에 사용됩니다.
SQLServer:Memory Manager\Memory Grants Outstanding
SQLServer:Memory Manager\Memory Grants Pending
- 작업영역 메모리 허가를 위해 대기하고 있는 현재의 프로세스 수
SQLServer:SQL Statistics\Auto-Param Attempts/sec
- 자동 매개 변수화 시도 수 입니다.
SQLServer:SQL Statistics\Batch Requests/sec
- 이 카운터는 초당SQL서버가 받는 배치 요청 수를 측정하고, 일반적으로 서버의 CPU들이 얼마나 바쁜지 나타냅니다.
SQLServer:SQL Statistics\SQL Compilations/sec
- 이 카운터는 초당 얼마나 많은 컴파일이 SQL서버에 의해서 실행되었는지를 측정합니다. 말하자면, 이 카운터의 수치가 초당 100을 넘어서면, 불필요한 컴파일 오버헤드를 경험하고 계신 것 입니다.
이러한 높은 수치는 여러분의 서버가 매우 바쁨을 나타내거나, 불필요한 컴파일들이 실행되고 있다고 볼 수 있겠습니다.
> 이 수치가 높으면 adhoc 쿼리가 너무 많을 수 있으니, 의심해 봐야 합니다.
> 병렬실행 계획이 직렬로 실행되거나, 통계가 다시 계산되거나 할 경우 해당 수치가 튈 수 있습니다.
SQLServer:SQL Statistics\SQL Re-Compilations/sec
SQLServer:SQL Statistics\SQL Attention rate
SQLServer:Access Methods\Forwarded Records/sec</CounterDisplayName>
SQLServer:Access Methods\Full Scans/sec</CounterDisplayName>
SQLServer:Access Methods\Index Searches/sec</CounterDisplayName>
SQLServer:Access Methods\Page Splits/sec</CounterDisplayName>
SQLServer:Access Methods\Workfiles Created/sec</CounterDisplayName>
SQLServer:Access Methods\Worktables Created/sec</CounterDisplayName>
SQLServer:Access Methods\Table Lock Escalations/sec</CounterDisplayName>
SQLServer:Access Methods\Worktables From Cache Ratio</CounterDisplayName>
SQLServer:Buffer Manager\Buffer cache hit ratio</CounterDisplayName>
SQLServer:Buffer Manager\Checkpoint pages/sec</CounterDisplayName>
SQLServer:Buffer Manager\Lazy writes/sec</CounterDisplayName>
SQLServer:Buffer Manager\Page life expectancy</CounterDisplayName>
SQLServer:Buffer Manager\Page lookups/sec</CounterDisplayName>
SQLServer:Buffer Manager\Page reads/sec</CounterDisplayName>
SQLServer:Buffer Manager\Page writes/sec</CounterDisplayName>
SQLServer:Buffer Manager\Readahead pages/sec</CounterDisplayName>
SQLServer:Databases(_Total)\Data File(s) Size (KB)</CounterDisplayName>
SQLServer:Databases(_Total)\Log Bytes Flushed/sec</CounterDisplayName>
SQLServer:Databases(_Total)\Log File(s) Size (KB)</CounterDisplayName>
SQLServer:Databases(_Total)\Log Flush Wait Time</CounterDisplayName>
SQLServer:Databases(_Total)\Log Flush Waits/sec</CounterDisplayName>
SQLServer:Databases(_Total)\Percent Log Used</CounterDisplayName>
SQLServer:General Statistics\Logins/sec</CounterDisplayName>
SQLServer:General Statistics\Logouts/sec</CounterDisplayName>
SQLServer:Latches\Average Latch Wait Time (ms)</CounterDisplayName>
SQLServer:Latches\Latch Waits/sec</CounterDisplayName>
SQLServer:Latches\Number of SuperLatches</CounterDisplayName>
SQLServer:Locks(_Total)\Average Wait Time (ms)</CounterDisplayName>
SQLServer:Locks(_Total)\Lock Waits/sec</CounterDisplayName>
SQLServer:Locks(_Total)\Number of Deadlocks/sec</CounterDisplayName>
SQLServer:Locks(_Total)\Lock Timeouts/sec</CounterDisplayName>
SQLServer:Memory Manager\Granted Workspace Memory (KB)</CounterDisplayName>
SQLServer:Memory Manager\Maximum Workspace Memory (KB)</CounterDisplayName>
SQLServer:Memory Manager\Memory Grants Outstanding</CounterDisplayName>
SQLServer:Memory Manager\Memory Grants Pending</CounterDisplayName>
SQLServer:Memory Manager\Target Server Memory (KB)</CounterDisplayName>
SQLServer:Memory Manager\Total Server Memory (KB)</CounterDisplayName>
SQLServer:Plan Cache(_Total)\Cache Hit Ratio</CounterDisplayName>
SQLServer:SQL Statistics\Auto-Param Attempts/sec</CounterDisplayName>
SQLServer:SQL Statistics\Batch Requests/sec</CounterDisplayName>
SQLServer:SQL Statistics\SQL Compilations/sec</CounterDisplayName>
SQLServer:SQL Statistics\SQL Re-Compilations/sec</CounterDisplayName>
SQLServer:SQL Statistics\SQL Attention rate</CounterDisplayName>
(C) 그룹 항목 (System I/O ) PhysicalDisk Object: Avg. Disk Queue Length(C) PhysicalDisk(1 C:)\% Disk Time(C) PhysicalDisk(1 C:)\Disk Reads/sec (C) PhysicalDisk(1 C:)\Disk Writes/sec(C) PhysicalDisk(1 C:)\Disk Writes/sec(C) PhysicalDisk(1 C:)\Disk Reads/sec(C)
PhysicalDisk Object: Avg. Disk Queue Length - 물리적 디스크의 수집 기간 동안 큐에 대기한 평균 물리적 읽기와 쓰기 수입니다. I/O 하위 시스템의 부하가 크다면 더 많은 읽기/쓰기 작업이 대기 상태가 될 것 입니다. SQL Server 에서 가장 많이 사용되는 기간 동안 카운터가 지속적으로 2를 초과한다면 I/O병목을 의심해야 합니다. > 10ms 이하 : 매우 좋음 > 10~20ms : 양호 > 20~50ms : 느림,주의 > 50ms 이상 : 심각한 I/O병목
PhysicalDisk(1 C:)\% Disk Time - "%Disk Time" 카운터 값은 "Avg Disk Queue Length" 카운터 값에 100을 곱한 값으로 그저 배율만 다른 같은 값입니다. 예를 들어 Avg Disk Queue Length가 1이라면 %Disk Time 은 100과 같을 것입니다. 그렇다면 Avg Disk Queue Length가 0.37 이라면 %Disk Time 37이 되겠네요. 이것은 왜 %Disk Time이 100%보다 큰 경우가 있는지 설명하며 이 때 Disk Queue Length 값이 1보다 큰 것임을 알 수 있습니다. 같은 방식으로 % Disk Read Time % Disk Write Time이 적용되며 역시 Avg Disk Read Queue Length와 Avg Disk Write Queue Length로부터 값을 가져옵니다. > 50% 이상 일 경우 I/O 병목이라고 말할 수 있습니다.
PhysicalDisk(1 C:)\Disk Reads/sec PhysicalDisk(1 C:)\Disk Writes/sec - 1초 동안 디스크의 완료된 I/O 요청의 개수를 측정한 값입니다. 1초 이상은 평균값을 보여줍니다. Disk Reds/sec 과 Disk Writes/sec는 역시 같은 방식으로 계산되면 읽기와 쓰기를 각각 분리하여 측정하는 것이 차이점입니다.
PhysicalDisk(1 C:)\Disk Writes/sec PhysicalDisk(1 C:)\Disk Reads/sec - 1초 동안 디스크의 완료된 I/O 요청의 개수를 측정한 값입니다. 1초 이상은 평균값을 보여줍니다. Disk Reds/sec 과 Disk Writes/sec는 역시 같은 방식으로 계산되면 읽기와 쓰기를 각각 분리하여 측정하는 것이 차이점입니다. > 디스크 용량의 85%를 초과하지 않아야 합니다.
RAID 구성에 따른 Writes / Reads 계산
·
|
Network Interface(*)\Bytes Total/sec
- 프레이밍 문자를 포함하여 각 네트워크 어댑터를 통해 보내고 받는 바이트의 비율을 측정합니다. 인터페이스의 70% 이상이 사용되면 네트워크가 포화 상태입니다.
100Mbps NIC의 경우 사용되는 인터페이스는 8.7MB/초입니다 (100Mbps = 100000kbps = 12.5MB/초* 70%). 이와 같이 포화 상태이면 더 빠른 네트워크 카드를 추가하거나 네트워크를 분할해야 할 수 있습니다.
Paging File(_Total)\% Usage
Paging File(_Total)\% Usage Peak
- 페이지 파일 인스턴스의 피크 사용을 백분율로 표시한 것입니다.
PhysicalDisk(1 C:)\Avg. Disk Bytes/Read
- 아래 Avg. Disk Bytes/Write 참조
PhysicalDisk(1 C:)\Avg. Disk Bytes/Write
- 측정 기간동안 각 디스크의 I/O 요청의 평균 사이즈를 측정합니다.
예를 들어 8k 사이즈의 99개 요청과 2048k 사이즈의 1개의 요청이 왔을 때 카운터 값은 28.4k가 될 것입니다.
식은 다음과 같습니다. (8k*99) + (1*2048k) / 100 = 28.4k
Avg. Disk Bytes/Read와 Avg. Disk Bytes/Write 카운터는 읽기와 쓰기 각각 보여줍니다.
PhysicalDisk(1 C:)\Disk Bytes/sec
- 1초 동안 디스크의 읽고 쓴 Byte 수를 측정한 값입니다. 1초 이상은 평균값을 보여줍니다.
Disk Read Bytes/sec과 the Disk Write Bytes/sec 카운터는 읽기와 쓰기를 각각 보여줍니다.
PhysicalDisk(1 C:)\Disk Writes/sec
- Disk Reads/sec 참조
PhysicalDisk(1 C:)\Disk Reads/sec
- 1초 동안 디스크의 완료된 I/O 요청의 개수를 측정한 값입니다. 1초 이상은 평균값을 보여줍니다.
Disk Reds/sec 과 Disk Writes/sec는 역시 같은 방식으로 계산되면 읽기와 쓰기를 각각 분리하여 측정하는 것이 차이점입니다.
Process(sqlservr)\% Processor Time
Processor(_Total)\% Processor Time
System\Processor Queue Length
- 프로세서 큐의 스레드 수를 나타냅니다. 이 값이 일정 기간 동안 CPU 수 x 2보다 크면 서버에 프로세서 성능이 부족한 것입니다.
System\Context Switches/sec
<CounterDisplayName>\Memory\Available Mbytes
- 프로세스 실행을 위해 사용할 수 있는 실제 메모리의 양(메가바이트)을 측정합니다. 이 값이 총 물리적 RAM의 5%보다 작으면 메모리가 부족함을 나타내며 이로 인해 페이징 작업이 늘어날 수 있습니다. 이 문제를 해결하려면 메모리를 추가해야 합니다.
<CounterDisplayName>\Memory\Pages Input/sec
- 하드 페이지 폴트를 해결하기 위해 디스크에서 페이지를 읽은 비율입니다. 하드 페이지 폴트는 프로세스가 해당 작업 집합에 없거나 실제 메모리의 어딘가에 있는 가상 메모리의 페이지를 참조할 때 발생하며, 디스크에서 검색해야 합니다. 페이지 폴트가 발생하면 시스템이 연속된 여러 페이지를 메모리로 읽어 읽기 연산의 성능을 최대화합니다.
<CounterDisplayName>\Memory\Pages/sec
- 하드 페이지 폴트를 해결하기 위해 디스크에서 페이지를 읽은 비율입니다. 하드 페이지 폴트는 프로세스가 해당 작업 집합에 없거나 실제 메모리의 어딘가에 있는 가상 메모리의 페이지를 참조할 때 발생하며, 디스크에서 검색해야 합니다. 페이지 폴트가 발생하면 시스템이 연속된 여러 페이지를 메모리로 읽어 읽기 연산의 성능을 최대화합니다.
<CounterDisplayName>\Network Interface(*)\Bytes Total/sec
<CounterDisplayName>\Paging File(_Total)\% Usage
<CounterDisplayName>\Paging File(_Total)\% Usage Peak
- 이 값이 페이징 파일의 최대 크기에 가까이 가면 페이징 파일을 늘리거나 RAM을 추가해야 한다. 높은 수치는 페이징 파일이 모든 데이터를 포함할 만큼 충분히 크지 못하다는 의미이다.
페이지 파일 인스턴스의 피크 사용을 백분율로 표시한 것입니다. Process\\Page File Bytes Peak 참조
<CounterDisplayName>\PhysicalDisk(1 C:)\Avg. Disk Bytes/Read
<CounterDisplayName>\PhysicalDisk(1 C:)\Avg. Disk Bytes/Write
<CounterDisplayName>\PhysicalDisk(1 C:)\% Disk Time
<CounterDisplayName>\PhysicalDisk(1 C:)\Disk Bytes/sec
<CounterDisplayName>\PhysicalDisk(1 C:)\Disk Writes/sec
<CounterDisplayName>\PhysicalDisk(1 C:)\Disk Reads/sec
- 디스크에서 데이터를 읽는 데 걸리는 평균 시간(초)을 측정합니다. 값이 25ms(밀리초)보다 크면 디스크에서 읽을 때 디스크 시스템에 지연 현상이 발생하고 있음을 의미합니다. SQL Server® 및 Exchange Server를 호스팅하는 중요 업무 서버의 경우 허용 가능한 임계값은 10ms 미만입니다. 여기에서 가장 현명한 해결책은 현재 디스크 시스템을 더 빠른 디스크 시스템으로 교체하는 것입니다.
<CounterDisplayName>\Process(sqlservr)\% Processor Time
<CounterDisplayName>\Processor(_Total)\% Processor Time
- 프로세서가 비유휴 스레드 실행에 소비하는 경과 시간의 백분율을 측정합니다. 이 백분율이 85%보다 크면 프로세서에 병목 현상이 발생하고 서버에 더 빠른 프로세서가 필요할 수 있습니다.
<CounterDisplayName>\System\Processor Queue Length
- 프로세서 큐의 스레드 수를 나타냅니다. 이 값이 일정 기간 동안 CPU 수 x 2보다 크면 서버에 프로세서 성능이 부족한 것입니다.
<CounterDisplayName>\System\Context Switches/sec
'Database > MSSQL Server' 카테고리의 다른 글
IN-Memory OLPT (MSSQL 2014) (0) | 2015.10.28 |
---|---|
SELECT 에 의한 DeadLock 발생 (1) | 2015.10.28 |
Perfmon을 MSSQL DB에 저장 (0) | 2015.10.19 |
MSSQL_AUTO_UPDATE_STATISTICS_ASYNC(비동기업데이트) (0) | 2015.07.01 |
MsSQL Server_Shrink(쉬링크) / ①SHRINKDATABASE (0) | 2015.07.01 |
소중한 공감 감사합니다