새소식

반응형
Database/MSSQL Server

SQL Server Perfmon Counter

  • -
반응형

성능 Perfmon카운터 정리 문서 추가적으로 업데이트 합니다.

 

문서 보는 방법 

1.     - 으로 시작하는 부분은 항목에 대한 설명입니다.

2.     > 으로 시작 하는 부분은 임계치와 해결 방법을 나타냅니다.

3.     * 으로 시작 하는 부분은 항목에 대한 용어 및 부연 설명입니다.

4.     문서의 내용은 어디까지나 서버의 스팩,용도에 따라 다릅니다. 이점을 유의 하시기 바랍니다.

 

 

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) 
-    
버퍼 관리자의 지연 기록기가 기록한 버퍼 수입니다. 권장 : < 20 SQL Server:Buffer Manager\Checkporint Pages/sec 모든 커밋되지 않은 페이지를 플러시 해야 할 기타 작업이나 검사점에 의해 플러시된 페이지 수입니다

-     버퍼 캐시에서 자주 사용하지 않는 페이지를 제거하여, 사용 가능한 버퍼를 제공하는 시스템 프로세스입니다. 이는 더티 페이지들을 캐시에서 자주 사용하지 않는 페이지를 제거하여, 사용 가능한 버퍼를 제공하는 시스템 프로세스 입니다. 이는 더티 페이지들을 버퍼공간에서 디스크로 초당 얼마나 많이 옮겼는지 나타냅니다.

     > 이 값은 0에 가까워야 합니다. 만약 이 값이 0이라면, SQL Server 는 아주 큰 버퍼 공간을 가지고 있고, 일정한 체크포인트가 발생하여 더티페이지가 반환되기를 기다리는 대신에, 더티페이지 반환을 하지 않아도 됨을 나타냅니다.

 

SQLServer:Buffer Manager\Page life expectancy (A) 
-    
페이지가 참조 없이 버퍼 풀에 머무르는 시간()입니다. 권장 : > 300 SQL Server:Buffer Manager\Page Lookups/sec 버퍼 풀에서 페이지를 찾기 위한 요청 수입니다.

-     데이터 페이지가 얼마나 오랫동안 버퍼공간에 머무르는지 평균을 나타냅니다.

 

 

(B) 그룹 항목 (System Memory )
Memory\Available Mbytes
(B)                                                   : 5MB 이상
Process\Page faults/Sec: SQL Server Instance
(B)                      : 20 을 초과하면 안됨
Memory\Pages/sec
(B)                                                            : SQL 전용 서버의 경우 0~20까지 허용
Process\Working set SQL server instance
(B)                             : Min / Max Server Memory 보다 작으면 안됨
Memory\Pages Input/sec
(B)                                                    : (Pages Input/sec 값과 Page Reads/sec 값을 비교) 권장 : < 10
SQL Server:Buffer Manager\Free Pages
(B)                               : 5MB 이상
SQLServer:Memory Manager\Target Server Memory (KB)
(B)     

SQLServer:Memory Manager\Total Server Memory (KB)(B)        : 실제 메모리보다 높게 나타나면 메모리를 추가해야함

 

 

Memory\Available Mbytes(B) 
-    
현재 프로세스에 사용 할 수 있는 메모리의 Byte 수를 나타냅니다. 이 값이 작으면 컴퓨터 전체에 메모리가 부족하거나 응용 프로그램이 메모리를 해제하지 않는다는 의미입니다.

-     실제 사용 할 수 있는 메모리양 입니다. , 남아있는 메모리 양 입니다.

     > 이 카운터는 항상 5MB보다 커야 합니다.  이 값이 작으면 컴퓨터 전체 메모리가 작거나 , 응용프로그램이 메모리를 해제하지 않는다는 의미입니다.

 

Process\Page faults/Sec: SQL Server Instance(B) 

-     가상메모리 사용비율 (Hard Faults)

     > 이 값은 0 이어야 함, 20을 초과할 경우 물리적 메모리가 부족한 것을 뜻 합니다.

 

Memory\Pages/sec(B)  
-    
하드 페이지 폴트를 해결하기 위해 디스크 에서 읽거나 디스크로 쓴 페이지의 비율입니다. (Pages Input/Sec + Pages Output/Sec) 권장 : Pages Input/Sec + Pages Output/Sec

-     하드 페이지 폴트 때문에 디스크에서 가져오거나 작업 집합 내의 디스크 여유 공간에 쓴 페이지 수를 나타냅니다. 이 비율이 높으면 페이징이 과도하다는 의미입니다.  

       페이징의 원인이 디스크 작업인지 확인할려면 Memory:page Faults/sec 카운터를 모니터링 해야합니다.

     > 값이 0이어야 합니다. SQL 전용 서버의 경우 평균 0~20 , 20을 초과 할 경우 물리적인 메모리가 부족 한 것 입니다.

 

Process\Working set SQL server instance(B)  
-     SQL
서버가 사용하는 인스턴스별 메모리 양 

     > 5MB 보다 높아야 합니다. 이 보다 낮으면 메모리가 부족 한 것을 뜻 합니다.

     > 이 수치가 Min Server Memory , Max Server Memory서버 옵션에 설정된 메모리의 양보다 작으면 SQL Server가 메모리를 너무 많이 사용하도록 구성 된 것 입니다.

 

Memory\Pages Input/sec(B)  
-    
하드 페이지 폴트를 해결하기 위해 디스크에서 페이지를 읽은 비율입니다. 읽기 연산 중에 메모리로 읽은 평균 페이지 수를 계산 (Pages Input/sec 값과 Page Reads/sec 값을 비교) Memory\Pages Input/Sec 

      하드 페이지 폴트를 해결하기 위해 디스크에서 페이지를 읽은 비율입니다. 읽기 연산 중에 메모리로 읽은 평균 페이지 수를 계산 (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:Memory Manager\Total Server Memory (KB)
(B)  
-     SQL Server
가 사용하고 있는 전체 메모리 양

-     컴퓨터의 실제 메모리 양과 비교하여, 계속 높게 나타난다면 메모리를 추가해야 합니다. 이는 SQL Server에 메모리 요구에 비해 서버의 메모리가 너무 낮음을 의미 합니다.

 

SQLServer:Buffer Manager\Page lookups/sec

- 버퍼 풀에서 페이지를 찾기 위한 초당 요청 수를 나타냅니다.

 

SQLServer:Buffer Manager\Page reads/sec

-     실행한 물리적 데이터베이스 페이지 초당 읽기 수를 나타냅니다. 이 통계는 모든 데이터베이스에 걸친 총 실제 읽기 수를 나타냅니다. 실제 I/O는 비용이 많이 들기 때문에 용량이 큰 데이터 캐시나 인텔리전트 인덱스

      더 효율적인 쿼리를 사용하거나 데이터베이스 디자인을 바꾸면 비용을 최소화 할 수 있습니다.

 

SQLServer:Buffer Manager\Page writes/sec

- 실행한 물리적 데이터베이스 페이지 초당 쓰기 수를 나타냅니다.

 

SQLServer:General Statistics\Logouts/sec

-     Logouts/sec 초당 시작된 총 로그인/로그아웃 수입니다

     > 권장 : < 2 SQL Server:General Statistics\User Connections(시스템에 연결된 사용자 수)

 

Server:General Statistics\User Connections

-     DB Connection 수 입니다

-     이 항목은 DB Connection >= SQL Server Max worker Thread 일때, Connection 1개씩 Worker Thread 가 할당되는 것이 가장 좋습니다.

     > 만약 임계치 이상 일 경우 'max worker Threads'를 늘려야 합니다

     > 임계치 늘리는 방법 (MSDN : https://msdn.microsoft.com/ko-kr/library/ms190219(v=sql.110).aspx) 권장 옵션을 확인하여 신중하게 변경을 해야 합니다.

EXEC sp_configure 'show advanced options' , 1 ;

RECONFIGURE ;

GO

 

EXEC sp_configure 'max worker threads';

GO

 

EXEC sp_configure 'max worker threads', 1024 ;

RECONFIGURE ;

GO

 

 

EXEC sp_configure 'show advanced options', 0 ;

RECONFIGURE ;GO

 

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들이 얼마나 바쁜지 나타냅니다

-     초당 받는 Transact-SQL 명령 일괄 처리 수입니다.이 통계는 모든 제약 조건(I/O, 사용자 수, 캐시 크기, 요청의 복잡도 등)의 영향을 받습니다.높은 일괄 처리 수치는 높은 처리 효율을 의미합니다.

 

SQLServer:SQL Statistics\SQL Compilations/sec

-     이 카운터는 초당 얼마나 많은 컴파일이 SQL서버에 의해서 실행되었는지를 측정합니다. 말하자면, 이 카운터의 수치가 초당 100을 넘어서면, 불필요한 컴파일 오버헤드를 경험하고 계신 것 입니다

      이러한 높은 수치는 여러분의 서버가 매우 바쁨을 나타내거나, 불필요한 컴파일들이 실행되고 있다고 볼 수 있겠습니다

     > 이 수치가 높으면 adhoc 쿼리가 너무 많을 수 있으니, 의심해 봐야 합니다.

     > 병렬실행 계획이 직렬로 실행되거나, 통계가 다시 계산되거나 할 경우 해당 수치가 튈 수 있습니다.

 

SQLServer:SQL Statistics\SQL Re-Compilations/sec

 초당 문 다시 컴파일 수입니다.문 다시 컴파일이 트리거된 횟수를 나타냅니다.일반적으로 다시 컴파일하는 횟수는 적을수록 좋습니다.

     > 이 카운터는 SQLServer:SQL Statistics\SQL Compilations/sec 수치가의 10%가 가장 이상적입니다.

 

(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 계산

  • RAID0   : 디스크당 I/O = (읽기+쓰기) / 디스크 수
  • RAID1   : 디스크당 I/O = [읽기+(2*쓰기)] / 2
  • RAID5   : 디스크당 I/O = [읽기 + (4*쓰기)] / 디스크 수
  • RAID10 : 디스크당 I/O = [읽기 + (2*쓰기)] / 디스크 수

·          

  • 예시 : RAID 1로 구성된 DISK에서 Disk Reads/sec 80 , Disk Writes/sec 70 , Avg. Disk Queue Length 5 경우 / 디스크당 I/O 110 = [80+(2*70)] / 2   2.5이므로, 약간의 I/O병목 

-- IO 밀리는 쿼리 찾기

select

database_id ,

file_id ,

io_stall ,

io_pending_ms_ticks ,

scheduler_address

from sys . dm_io_virtual_file_stats(NULL, NULL)t1 ,

sys .dm_io_pending_io_requests as t2

where t1. file_handle = t2 . io_handle

 

(D) 그룹 항목 (Buffer Pool)

SQLServer:Buffer Manager\Buffer cache hit ratio(D)

SQLServer:Buffer Manager\Checkpoint pages/sec(D)   : 90% 이상

SQLServer:Buffer Manager\Lazy writes/sec(D)

SQLServer:Buffer Manager\Page life expectancy(D)     : 300 이상

SQLServer:Buffer Manager\Page lookups/sec(D)

SQLServer:Buffer Manager\Page reads/sec(D)

SQLServer:Buffer Manager\Page writes/sec(D)

SQLServer:Buffer Manager\Readahead pages/sec(D)

 

SQLServer:Buffer Manager\Buffer cache hit ratio

-  디스크에서 읽지 않고 버퍼 캐시에서 찾은 페이지 비율을 나타냅니다이 비율은 마지막 몇 천 페이지 액세스에 대한 총 캐시 조회 수로 나눈 총 캐시 적중 수입니다시간이 많이 지나면 이 비율은 일정해집니다캐시에서 읽는 것이 디스크에서 읽는 것보다 비용이 적게 들기 때문에 이 비율을 높이는 것이 좋습니다일반적으로 SQL Server에 사용할 수 있는 메모리 양을 늘리거나 버퍼 풀 확장 기능을 사용하여 buffer cache hit ratio를 높일 수 있습니다.

- Cache hit ratio? : http://blog.naver.com/waws01/60191256351

     > 이 값은 90% 이상이여야 합니다.

 

SQLServer:Buffer Manager\Checkpoint pages/sec

- 모든 더티 페이지를 플러시해야 할 기타 작업이나 검사점에 의해 디스크에 플러시된 초당 페이지 수를 나타냅니다.

- 이 항목이 높을 경우 Disk I/O 부분도 함께 문제가 되지 않는지 검사해야 합니다.

 

SQLServer:Buffer Manager\Lazy writes/sec

 버퍼 관리자의 지연 기록기가 기록한 초당 버퍼 수를 나타냅니다지연 기록기는 에이징된 더티 버퍼(다른 페이지에 버퍼를 다시 사용하려면 해당 변경 내용을 디스크에 다시 써야 하는 버퍼)의 일괄 처리를 플러시하는 시스템 프로세스이며 이러한 버퍼를 사용자 프로세스에 사용할 수 있게 합니다지연 기록기를 사용하면 사용 가능한 버퍼를 만들기 위해 자주 검사점을 수행할 필요가 없습니다.

 

SQLServer:Buffer Manager\Page life expectancy

 페이지가 참조 없이 버퍼 풀에 남아 있는 시간()을 나타냅니다.

    > 이 값이 300보다 아래라면 메모리를 추가해야 함을 나타냅니다.

 

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

 사용을 미리 예측하여 읽은 초당 페이지 수를 나타냅니다.

 

 

Paging File(_Total)\% Usage

 

Paging File(_Total)\% Usage Peak

-     페이지 파일 인스턴스의 피크 사용을 백분율로 표시한 것입니다.

 

System\Context Switches/sec

<CounterDisplayName>\Memory\Available Mbytes

-     프로세스 실행을 위해 사용할 수 있는 실제 메모리의 양(메가바이트)을 측정합니다. 이 값이 총 물리적 RAM 5%보다 작으면 메모리가 부족함을 나타내며 이로 인해 페이징 작업이 늘어날 수 있습니다. 이 문제를 해결하려면 메모리를 추가해야 합니다.

 

<CounterDisplayName>\Memory\Pages Input/sec

-     하드 페이지 폴트를 해결하기 위해 디스크에서 페이지를 읽은 비율입니다. 하드 페이지 폴트는 프로세스가 해당 작업 집합에 없거나 실제 메모리의 어딘가에 있는 가상 메모리의 페이지를 참조할 때 발생하며, 디스크에서 검색해야 합니다. 페이지 폴트가 발생하면 시스템이 연속된 여러 페이지를 메모리로 읽어 읽기 연산의 성능을 최대화합니다.

 

<CounterDisplayName>\Memory\Pages/sec

-     하드 페이지 폴트를 해결하기 위해 디스크에서 페이지를 읽은 비율입니다. 하드 페이지 폴트는 프로세스가 해당 작업 집합에 없거나 실제 메모리의 어딘가에 있는 가상 메모리의 페이지를 참조할 때 발생하며, 디스크에서 검색해야 합니다. 페이지 폴트가 발생하면 시스템이 연속된 여러 페이지를 메모리로 읽어 읽기 연산의 성능을 최대화합니다.

 

<CounterDisplayName>\Paging File(_Total)\% Usage Peak

-     이 값이 페이징 파일의 최대 크기에 가까이 가면 페이징 파일을 늘리거나 RAM을 추가해야 한다. 높은 수치는 페이징 파일이 모든 데이터를 포함할 만큼 충분히 크지 못하다는 의미이다.

페이지 파일 인스턴스의 피크 사용을 백분율로 표시한 것입니다. Process\\Page File Bytes Peak 참조

 

<CounterDisplayName>\Processor(_Total)\% Processor Time

-     프로세서가 비유휴 스레드 실행에 소비하는 경과 시간의 백분율을 측정합니다. 이 백분율이 85%보다 크면 프로세서에 병목 현상이 발생하고 서버에 더 빠른 프로세서가 필요할 수 있습니다.

 

<CounterDisplayName>\System\Processor Queue Length

-     프로세서 큐의 스레드 수를 나타냅니다. 이 값이 일정 기간 동안 CPU x 2보다 크면 서버에 프로세서 성능이 부족한 것입니다.

 

(E) 그룹 항목 (Network)

Network Interface(*)\Bytes Total/sec(E)        : 인터페이스의 70% 미만

Network Interface\Output Queue Length(E)    : 2 미만

 

Network Interface(*)\Bytes Total/sec

-    프레이밍 문자를 포함하여 각 네트워크 어댑터를 통해 보내고 받는 바이트의 비율을 측정합니다.

      100Mbps NIC의 경우 사용되는 인터페이스는 8.7MB/초입니다     (100Mbps = 100000kbps = 12.5MB/* 70%). 이와 같이 포화 상태이면 더 빠른 네트워크 카드를 추가하거나 네트워크를 분할해야 할 수 있습니다.

     > 인터페이스의 70% 이상이 사용되면 네트워크가 포화 상태입니다

 

Network Interface\Output Queue Length 

-    출력 패킷 큐의 길이(패킷)를 측정합니다이 문제는 더 빠른 네트워크 카드를 추가하거나 네트워크를 분할하여 해결할 수 있습니다.

     > 이 값이 2보다 크면 네트워크가 포화 상태입니다.

 

 

<CounterDisplayName>\System\Context Switches/sec

SQLServer:SQL Statistics\SQL Attention rate

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: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>

<CounterDisplayName>\Network Interface(*)\Bytes Total/sec

<CounterDisplayName>\Paging File(_Total)\% Usage

Process(sqlservr)\% Processor Time

Processor(_Total)\% Processor Time

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

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.