Java에 대한 SQL 모니터링 구성

Java용 SQL 에이전트는 SQL 문을 모니터링하여 자세한 데이터베이스 성능 데이터를 수집하는 확장입니다. SQL 에이전트는 관리되는 응용 프로그램과 데이터베이스 간의 상호 작용을 추적하여 개별 SQL 문의 성능을 파악할 수 있게 해 줍니다.
apmdevops104kr
Java용 SQL 에이전트는 SQL 문을 모니터링하여 자세한 데이터베이스 성능 데이터를 수집하는 확장입니다. SQL 에이전트는 관리되는 응용 프로그램과 데이터베이스 간의 상호 작용을 추적하여 개별 SQL 문의 성능을 파악할 수 있게 해 줍니다.
2
2
 
Java용 SQL 에이전트 개요
개별 SQL 문 수준까지 의미 있는 성능 측정 데이터를 제공하기 위해 SQL 에이전트는 성능 데이터를 요약합니다. SQL 에이전트는 트랜잭션 관련 데이터를 제거하고 원래 SQL 문을 Introscope에서 사용되는 정규화된 문으로 변환합니다. 정규화된 문에는 신용 카드 번호와 같은 중요한 정보가 포함되지 않으므로 이 프로세스를 통해 데이터가 보호됩니다. 따옴표로 묶은 텍스트(예:
'
xyz
)만 정규화됩니다. 
예를 들어 SQL 에이전트는 다음과 같은 SQL 쿼리를 변환합니다.
SELECT * FROM BOOKS WHERE AUTHOR = 'Atwood'
변환된 정규화된 문은 다음과 같습니다.
SELECT * FROM BOOKS WHERE AUTHOR = ?
마찬가지로 SQL 에이전트는 다음과 같은 SQL 업데이트 문을 변환합니다.
INSERT INTO BOOKS (AUTHOR, TITLE) VALUES ('Atwood', 'The Robber Bride')
변환된 정규화된 문은 다음과 같습니다.
INSERT INTO BOOKS (AUTHOR, TITLE) VALUES (?, ?)
정규화된 SQL 문에 대한 메트릭은 집계되어 메트릭 브라우저 트리에 표시됩니다.
SQL 에이전트는 대부분의 CA APM 에이전트와 함께 포함되어 있습니다. SQL 에이전트 기능을 제공하는 파일은 다음과 같습니다.
  • <
    에이전트 홈
    >/core/ext/SQLAgent.jar
  • <
    에이전트 홈
    >/core/config/sqlagent.pbd
잘못 작성된 SQL 문으로 인한 메트릭 급증
일부 응용 프로그램은 매우 많은 수의 고유 SQL 문을 생성할 수 있습니다. EJB 3.0과 같은 기술을 사용하는 경우 긴 고유 SQL 문이 발생할 가능성이 증가합니다. 긴 SQL 문은 용어집을 유발하여 성능 저하 및 기타 시스템 문제를 발생시킬 수 있습니다.
일반적으로 SQL 에이전트 메트릭의 수는 고유 SQL 문의 수에 근접해야 합니다. 그러나 SQL 문이 작성된 방식으로 인해 문제가 발생할 수 있습니다. 예를 들어 응용 프로그램에서는 일부 SQL 문만 사용합니다. 그러나 SQL 에이전트가 많은 수의 고유 SQL 메트릭을 보고하고 그 수가 점점 늘어납니다. 이 경우 SQL 문이 잘못 작성된 것입니다.
다음은 SQL 문으로 인해 메트릭이 급증할 수 있는 일반적인 몇 가지 경우입니다.
예제: SQL 문의 주석
메트릭 급증의 일반적인 원인 중 하나는 SQL 문에서 주석이 사용된 방식에 있습니다. 예를 들어 다음 예와 유사한 SQL 문이 있다고 가정합니다.
"/* John Doe, user ID=?, txn=? */ select * from table..."
이 경우 SQL 에이전트는 다음과 같이 주석을 메트릭 이름의 일부로 포함하는 메트릭을 생성합니다.
"/* John Doe, user ID=?, txn=? */ select * from table..."
이 예에서 SQL 문에 포함된 주석은 데이터베이스 관리자에게 유용합니다. 관리자는 쿼리를 실행하는 사람이 누구인지 확인할 수 있습니다. 그러나 쿼리를 실행하는 데이터베이스에서는 주석을 무시합니다. 그러나 SQL 에이전트에서는 SQL 문을 캡처할 때 주석 문자열을 구문 분석하지 않습니다. 따라서 SQL 에이전트에서는 각각의 고유한 사용자 ID마다 고유한 메트릭을 생성하며, 이로 인해 메트릭이 급증하게 될 수 있습니다.
이 문제를 방지하려면 SQL 주석을 작은따옴표로 묶으십시오. 예:
"/*' John Doe, user ID=?, txn=? '*/ select * from table..."
그러면 SQL 에이전트에서는 다음과 같은 메트릭을 생성하며 이 경우 주석으로 인한 고유 메트릭 이름은 더 이상 생성되지 않습니다.
"/* ? */ select * from table..."
예제: 임시 테이블 또는 자동으로 생성된 테이블 이름
또한 응용 프로그램이 SQL 문에서 임시 테이블이나 자동으로 생성된 이름이 있는 테이블을 참조하는 경우에도 메트릭 급증이 발생할 수 있습니다. 메트릭 브라우저의 Backends|{backendName}|SQL|{sqlType}|sql 노드 아래에 표시되는 메트릭을 예로 들 수 있습니다. 다음 예와 유사한 메트릭이 표시됩니다.
SELECT * FROM TMP_123981398210381920912 WHERE ROW_ID = ?
이 SQL 문은 테이블 이름에 추가된 고유 식별자를 갖는 임시 테이블에 액세스합니다. 이 명령문이 실행될 때마다
TMP_
테이블 이름에 추가된 추가적인 숫자로 인해 고유한 메트릭 이름이 생성되므로 메트릭이 급증하게 됩니다.
예제: 값의 목록을 생성하거나 값을 삽입하는 문
메트릭 급증의 또 다른 일반적인 원인은 값 목록을 생성하거나 값을 대량으로 수정하는 SQL 문에 있습니다. 예를 들어 잠재적 메트릭 급증에 대한 알림을 받았다고 가정합니다. 조사 과정에서 이 SQL 문을 검토하게 됩니다.
#1 INSERT INTO COMMENTS (COMMENT_ID, CARD_ID, CMMT_TYPE_ID, CMMT_STATUS_ID,CMMT_CATEGORY_ID, LOCATION_ID, CMMT_LIST_ID, COMMENTS_DSC, USER_ID,LAST_UPDATE_TS) VALUES (?, ?, ?, ?, ?, ?, ?, "CHANGE CITY FROM CARROLTON,TO CAROLTON, _ ", ?, CURRENT)
이 코드를 조사해 보면
"CHANGE CITY FROM CARROLTON, TO CAROLTON, _ "
로 인해 도시 배열이 생성됨을 알 수 있습니다.
마찬가지로, 잠재적 메트릭 급증을 조사하다가 다음 예와 같은 SQL 문을 검토하게 될 수도 있습니다.
CHANGE COUNTRY FROM US TO CA _ CHANGE EMAIL ADDRESS FROM TO BRIGGIN @ COM _ "
이 코드를 조사해 보면
CHANGE COUNTRY
로 인해 긴 국가 목록이 생성됨을 알 수 있습니다. 또한 국가에 따옴표를 사용하면 전자 메일 주소가 SQL 문 내에 삽입됩니다. 이 삽입으로 인해 메트릭 급증의 원인이 될 수 있는 고유 메트릭이 생성됩니다.
SQL 문 정규화 옵션
SQL 에이전트는 사용자가 긴 SQL 문을 처리하는 데 사용할 수 있도록 다음과 같은 노멀라이저를 포함합니다.
기본 SQL 문 노멀라이저
표준 SQL 문 노멀라이저는 SQL 에이전트에서 기본적으로 설정되는 노멀라이저로, 작은따옴표 내의 텍스트를 정규화합니다. 예를 들어
'xyz'
와 같은 텍스트가 이에 해당합니다.  다음 SQL 쿼리 예에서 SQL 에이전트는
AUTHOR = 'Atwood'
를 변환합니다.
SELECT * FROM BOOKS WHERE AUTHOR = 'Atwood'
변환된 정규화된 문에서는
AUTHOR = ?
가 사용됩니다.
SELECT * FROM BOOKS WHERE AUTHOR = ?
사용자 지정 SQL 문 노멀라이저 생성
사용자 지정 SQL 문 정규화를 수행하기 위한 확장을 생성하여 SQL 에이전트에 추가할 수 있습니다. 그러기 위해서는 SQL 에이전트가 구현하는 정규화 체계가 포함된 JAR 파일을 생성해야 합니다.
다음 단계를 따르십시오.
  1. 확장 JAR 파일을 생성합니다.
    참고:
    SQL 노멀라이저 확장 파일의 진입점 클래스는
    com.wily.introscope.agent.trace.ISqlNormalizer
    인터페이스를 구현해야 합니다.
    JAR 확장 파일을 만들려면 SQL 노멀라이저 확장용 특정 키가 포함된 매니페스트 파일을 생성해야 합니다. 키에 대해서는 2 단계에서 자세히 설명합니다.
    그러나 확장이 작동하기 위해서는 다른 일반 키도 필요합니다. 이러한 키는 확장 파일을 구성하는 데 사용하는 유형입니다. 생성하는 확장 파일은 데이터베이스 SQL 문 텍스트 정규화와 관련됩니다. 예를 들어 Backends|{backendName}|SQL|{sqlType}|{actualSQLStatement} 노드 아래의 메트릭에서 SQL 노멀라이저는 
    {actualSQLStatement}
    를 정규화합니다.
  2. 새 확장 매니페스트에 다음 키를 추가합니다.
    • com-wily-Extension-Plugins-List:testNormalizer1
      testNormalizer1의 값은 원하는 대로 지정할 수 있습니다. 이 예에서는 testNormalizer1이 사용됩니다. 여기서 지정한 키 값을 다음 키에도 사용합니다. 
    • com-wily-Extension-Plugin-testNormalizer1-Type: sqlnormalizer
    • com-wily-Extension-Plugin-testNormalizer1-Version: 1
    • com-wily-Extension-Plugin-testNormalizer1-Name: normalizer1
      이 값에는 노멀라이저의 고유 이름(예: normalizer1)을 포함해야 합니다.
    • com-wily-Extension-Plugin-testNormalizer1-Entry-Point-Class: <ISQLNormalizerimplementation의 정규화된 클래스 이름>
  3. 새 확장 파일을
    <에이전트 홈>
    /core/ext 디렉터리에 배치합니다.
  4. IntroscopeAgent.profile의 속성을 구성합니다.
    1. IntroscopeAgent.profile
      을 엽니다.
    2. 새 확장 매니페스트 파일에서
      introscope.agent.sqlagent.normalizer.extension
      속성을
      com-wily-Extension-Plugin-{plugin}-Name
      으로 설정합니다.
      이 속성 값은 대/소문자를 구분하지 않습니다. 구성 후 모니터링되는 응용 프로그램을 다시 시작하지 않아도 됩니다.
      중요!
      introscope.agent.sqlagent.normalizer.extension
      속성은 핫 속성입니다. 확장 이름을 변경하면 확장이 다시 등록됩니다.
      다음은 구성의 예입니다.
      introscope.agent.sqlagent.normalizer.extension=normalizer1
    3. (선택 사항) 오류 제한 수를 설정하려면
      introscope.agent.sqlagent.normalizer.extension.errorCount
      속성을 추가합니다.
      사용자 지정 노멀라이저 확장에서 throw된 오류가 오류 제한 수를 초과할 경우 해당 확장이 사용되지 않도록 설정됩니다.
    4. IntroscopeAgent.profile을 저장합니다
      .
  5. 모니터링되는 응용 프로그램을 다시 시작합니다.
사용자 지정 SQL 문 노멀라이저의 예외
새 확장이 쿼리에 대한 예외를 throw하는 경우 기본 SQL 문 노멀라이저는 해당 쿼리에 대해 기본 정규화 체계를 사용합니다. 이 경우 기본 SQL 문 노멀라이저는 확장에서 예외가 throw되었다는 오류 메시지를 로깅합니다. 기본 SQL 문 노멀라이저는 스택 추적 정보를 포함하는 디버그 메시지를 로깅합니다. 확장에서 이러한 예외가 5개 throw된 후에는 노멀라이저가 새 확장을 비활성화합니다. 또한 노멀라이저는 노멀라이저가 변경될 때까지는 새 확장을 이후 쿼리에 더 이상 사용하지 않습니다.
사용자 지정 SQL 문 노멀라이저의 null 또는 빈 문자열
새 확장은 쿼리에 대해 null 문자열이나 빈 문자열을 반환할 수 있습니다. 이 경우 기본 SQL 문 노멀라이저는 해당 쿼리에 대해 기본 정규화 체계를 사용합니다. 또한 기본 SQL 문 노멀라이저는 새 확장이 null 값을 반환했다는 정보 메시지를 로깅합니다. 새 확장에서 이러한 null 또는 빈 문자열이 5개 반환된 후에는 노멀라이저가 계속해서 확장을 사용하려고 시도하기는 하지만 메시지 로깅은 중지합니다.
정규식 SQL 문 노멀라이저
SQL 에이전트 확장에는 RegExNormalizerExtension.jar 파일이 포함되어 있으며 이 파일은
<에이전트 홈>
/core/ext 디렉터리에 있습니다. RegExNormalizerExtension.jar 파일은 구성 가능한 정규식(RegEx)을 기반으로 한 SQL 문을 정규화하기 위한 SQL 에이전트 확장입니다.
SQL 에이전트 노멀라이저 확장을 구성할 수 있습니다.
다음 단계를 따르십시오.
  1. IntroscopeAgent.profile을 엽니다.
  2. (선택 사항)
    introscope.agent.sqlagent.normalizer.extension.runPredefinedScheme
    속성은 정규식 SQL 문 노멀라이저를 실행하기 전에 기본 노멀라이저를 실행할 수 있도록 합니다.
    이 속성은 IntroscopeAgent.profile 파일에 포함되어 있지 않으므로 기본 설정을
    false
    로 변경하려면 이 속성을 수동으로 추가해야 합니다.
  3. 다음 속성을 찾아 설정합니다.
      • introscope.agent.sqlagent.normalizer.extension
        미리 구성된 정규화 체계를 재정의하는 데 사용되는 SQL 노멀라이저 확장의 이름을 지정합니다. 정규식 확장을 활성화할 때 이 속성을
        RegExSqlNormalizer
        로 설정하십시오.
        기본값:
        RegExSqlNormalizer
        참고:
        관리되는 응용 프로그램을 다시 시작할 필요가 없습니다.
      • introscope.agent.sqlagent.normalizer.RegEx.keys
        이 속성은 RegEx 그룹 키를 지정하며, 지정된 키는 나열된 순서대로 평가됩니다.
        기본값:
        없음
        예:
        introscope.agent.sqlagent.normalizer.RegEx.keys=key1
        참고:
         
        • 관리되는 응용 프로그램을 다시 시작할 필요가 없습니다.
        • 이 속성은 정규식 확장이 사용되도록 설정하는 데 필요합니다.
      • introscope.agent.sqlagent.normalizer.RegEx.key1.pattern
        이 속성은 SQL 문과 매칭하는 데 사용되는 RegEx 패턴을 지정합니다.
        java.util.RegEx
        package 클래스에서 허용되는 유효한 모든 정규식을 여기에 사용할 수 있습니다.
        기본값:
        없음
        예:
        introscope.agent.sqlagent.normalizer.RegEx.key1.pattern=A
        참고:
         
        • 관리되는 응용 프로그램을 다시 시작할 필요가 없습니다.
        • 이 속성은 정규식 확장이 사용되도록 설정하는 데 필요합니다.
           
      • introscope.agent.sqlagent.normalizer.RegEx.key1.replaceFormat
        이 속성은 대체 문자열 형식을 지정합니다.  
        java.util.RegEx
        package 클래스에서 허용되는 유효한 모든 정규식을 여기에 사용할 수 있습니다.
        기본값:
        없음
        예:
        introscope.agent.sqlagent.normalizer.RegEx.key1.replaceFormat=B
        참고:
        • 관리되는 응용 프로그램을 다시 시작할 필요가 없습니다.
        • 이 속성은 정규식 확장이 사용되도록 설정하는 데 필요합니다.
      • introscope.agent.sqlagent.normalizer.RegEx.matchFallThrough
         - true 또는 false
        참고:
        관리되는 응용 프로그램을 다시 시작할 필요가 없습니다.
        정규식 패턴이 입력 SQL과 일치하지 않으면
         RegExNormalizer
        는 null 문자열을 반환합니다. 그러면 문 노멀라이저는 기본 정규화 체계를 사용합니다. 
        introscope.agent.sqlagent.normalizer.RegEx.matchFallThrough
        true
        로 설정되어 있으면 SQL 문자열이 모든 RegEx 키 그룹과 비교하여 평가됩니다. 구현은 체인으로 연결됩니다. SQL 문자열이 여러 키 그룹과 일치하는 경우 group1의 정규화된 SQL 출력이 group2에 대한 입력으로 제공되는 방식으로 처리됩니다.
        introscope.agent.sqlagent.normalizer.RegEx.matchFallThrough
        false
        로 설정되어 있으면 키 그룹이 SQL 문자열과 일치하는 즉시 해당 그룹의 정규화된 SQL 출력이 반환됩니다. 
        예:
        SQL 문자열
        Select * from A where B
        가 있습니다. 다음 속성을 설정합니다.
        introscope.agent.sqlagent.normalizer.RegEx.keys=key1,key2
        introscope.agent.sqlagent.normalizer.RegEx.key1.pattern=A
        introscope.agent.sqlagent.normalizer.RegEx.key1.replaceFormat=X
        introscope.agent.sqlagent.normalizer.RegEx.key2.pattern=B
        introscope.agent.sqlagent.normalizer.RegEx.key2.replaceFormat=Y
        introscope.agent.sqlagent.normalizer.RegEx.matchFallThrough
        가 
        false
        이면 SQL은 key1 RegEx에 대해 정규화됩니다. 해당 RegEx의 출력은
        Select * from X where B
        이며 이 SQL이 반환됩니다.
        introscope.agent.sqlagent.normalizer.RegEx.matchFallThrough 
        true
        이면 SQL은 먼저 key1 RegEx에 대해 정규화됩니다. 해당 RegEx의 출력은
        Select * from X where B
        입니다. 그런 다음 이 출력이
        key2 RegEx
        에 제공됩니다.
        key2 RegEx
        의 출력은
        Select * from X where Y
        이며 이 SQL이 반환됩니다.
        introscope.agent.sqlagent.normalizer.RegEx.key1.replaceAll
        false
        이면 정규화된 SQL 문
        Select * from X where A like Z
        가 반환됩니다.
        introscope.agent.sqlagent.normalizer.RegEx.key1.replaceAll
        true
        이면 정규화된 SQL 문
        Select * from X where
         X 
        like Z
        가 반환됩니다.
         
  4. IntroscopeAgent.profile을 저장합니다.
정규식 SQL 문 노멀라이저 예제
다음 3개의 예는 정규식 SQL 문 노멀라이저를 구현하는 방법을 이해하는 데 유용할 수 있습니다.
예제 1
다음은 정규식 SQL 문 정규화 이전의 SQL 쿼리입니다.
INSERT INTO COMMENTS (COMMENT_ID, CARD_ID, CMMT_TYPE_ID,CMMT_STATUS_ID, CMMT_CATEGORY_ID, LOCATION_ID, CMMT_LIST_ID,COMMENTS_DSC, USER_ID, LAST_UPDATE_TS) VALUES(?, ?, ?, ?, ?, ?,?, ‘’CHANGE CITY FROM CARROLTON, TO CAROLTON, _ ", ?, CURRENT)
다음은 원하는 정규화된 SQL 문입니다.
INSERT INTO COMMENTS (COMMENT_ID, ...) VALUES (?, ?, ?, ?, ?, ?,?, CHANGE CITY FROM ( )
다음은 정규화된 SQL 문이 반환되도록 하는 IntroscopeAgent.profile 구성입니다.
introscope.agent.sqlagent.normalizer.extension=RegExSqlNormalizer
introscope.agent.sqlagent.normalizer.RegEx.matchFallThrough=true
introscope.agent.sqlagent.normalizer.RegEx.keys=key1,key2
introscope.agent.sqlagent.normalizer.RegEx.key1.pattern=(INSERT INTO
COMMENTS \\(COMMENT_ID,)(.*)(VALUES.*)''(CHANGE CITY FROM \\().*(\\))
introscope.agent.sqlagent.normalizer.RegEx.key1.replaceAll=false
introscope.agent.sqlagent.normalizer.RegEx.key1.replaceFormat=$1 ...) $3$4 $5
introscope.agent.sqlagent.normalizer.RegEx.key1.caseSensitive=false
introscope.agent.sqlagent.normalizer.RegEx.key2.pattern='[a-zA-Z1-9]+'
introscope.agent.sqlagent.normalizer.RegEx.key2.replaceAll=true
introscope.agent.sqlagent.normalizer.RegEx.key2.replaceFormat=?
introscope.agent.sqlagent.normalizer.RegEx.key2.caseSensitive=false
예제 2
다음은 정규식 SQL 문 정규화 이전의 SQL 쿼리입니다.
SELECT * FROM TMP_123981398210381920912 WHERE ROW_ID =
다음은 원하는 정규화된 SQL 문입니다.
SELECT * FROM TMP_ WHERE ROW_ID =
다음은 정규화된 SQL 문이 반환되도록 하는 IntroscopeAgent.profile 구성입니다.
introscope.agent.sqlagent.normalizer.extension=RegExSqlNormalizer
introscope.agent.sqlagent.normalizer.RegEx.matchFallThrough=true
introscope.agent.sqlagent.normalizer.RegEx.keys=key1
introscope.agent.sqlagent.normalizer.RegEx.key1.pattern=(TMP_)[1-9]*
introscope.agent.sqlagent.normalizer.RegEx.key1.replaceAll=false
introscope.agent.sqlagent.normalizer.RegEx.key1.replaceFormat=$1
introscope.agent.sqlagent.normalizer.RegEx.key1.caseSensitive=false
예제 3
Select .... ResID1, CustID1 where ResID1=.. OR ResID2=.. n times OR CustID1=.. OR n times
와 같은 SQL 문을 정규화하려면 다음 예에 표시된 것과 같이 속성을 설정하십시오.
introscope.agent.sqlagent.normalizer.RegEx.matchFallThrough=true
introscope.agent.sqlagent.normalizer.RegEx.keys=default,def
introscope.agent.sqlagent.normalizer.RegEx.default.pattern=(ResID)[1-9]
introscope.agent.sqlagent.normalizer.RegEx.default.replaceAll=true
introscope.agent.sqlagent.normalizer.RegEx.default.replaceFormat=$1
introscope.agent.sqlagent.normalizer.RegEx.default.caseSensitive=true
introscope.agent.sqlagent.normalizer.RegEx.def.pattern=(CustID)[1-9]
introscope.agent.sqlagent.normalizer.RegEx.def.replaceAll=true
introscope.agent.sqlagent.normalizer.RegEx.def.replaceFormat=$1
introscope.agent.sqlagent.normalizer.RegEx.def.caseSensitive=true
명령줄 SQL 문 노멀라이저
-DSQLAgentNormalizeDoubleQuoteString=true
 명령줄 명령을 사용하여 다음과 같은 특정 조건이 충족될 때 SQL 문을 정규화할 수 있습니다.
  • 정규식 SQL 노멀라이저가 사용되지 않는 경우
  • where
     절에 큰따옴표(" ")로 묶인 값을 사용하는 SQL 문이 포함된 경우
중요!
이 명령 대신 정규식 SQL 문 노멀라이저를 사용하여 큰따옴표로 묶은 SQL 문을 정규화할 수 있습니다.
고유 SQL 문 메트릭의 수 제한
introscope.agent.sqlagent.statement.clamp
를 사용하여 SQL 에이전트가 생성하는 정규화된 고유 SQL 문 메트릭의 수를 제한할 수 있습니다. 고유 SQL 문의 수가 설정된 값에 도달하면 새로 정규화된 고유 SQL 문에 대한 메트릭은 SQL | Default 노드 아래에 표시됩니다. 해당 트랜잭션 추적에서 구성 요소 이름은
Default
로 표시됩니다.
introscope.agent.sqlagent.statement.clamp
값은 기존 SQL 문에 대한 메트릭에는 영향을 주지 않습니다. SQL 에이전트는 SQL 문 노드 아래에서 기존 문에 대한 메트릭을 계속 보고합니다.
introscope.agent.sqlagent.statement.clamp
 속성은 고유 메트릭
경로
의 수를 제한하지 않습니다. SQL 에이전트가 두 개의 SQL 문을 서로 다른 메트릭 경로 아래에 동일한 문자열로 정규화하는 경우 SQL 문은 고유한 것으로 간주되지 않습니다. 따라서 속성 제한보다 많은 수의 SQL 문 메트릭이 표시될 수도 있습니다.
정규화된 고유 SQL 문 메트릭을 100개 이상 보려는 경우
introscope.agent.sqlagent.statement.clamp
를 구성할 수 있습니다.
다음 단계를 따르십시오.
  1. IntroscopeAgent.profile을 엽니다.
  2. i
    ntroscope.agent.sqlagent.statement.clamp
    속성을 찾아서 설정합니다.
    정규화된 고유 SQL 문 메트릭에 대한 기본 제한은 100개입니다.
  3. IntroscopeAgent.profile을 저장합니다.
    관리되는 응용 프로그램을 다시 시작할 필요가 없습니다.
SQL 문 수 지속 가능성 메트릭 보기
SQL 문 수 지속 가능성 메트릭은 현재 SQL 에이전트가 메트릭을 생성한 고유 SQL 문의 수를 보고합니다.
다음 단계를 따르십시오
.
  1. WebView 또는 Workstation을 엽니다.
  2. 메트릭 브라우저로 이동합니다.
  3. Agent Stats | Sustainability | SQL | SQL Statement Count 노드 아래의 메트릭을 확인합니다.
SQL 문 메트릭 해제
SQL 문 메트릭 보고를 해제할 수 있습니다. 응용 프로그램에서 생성되는 고유 SQL 문의 수가 너무 많아 메트릭 급증이 발생하는 경우에 이를 해제할 수 있습니다. SQL 문 메트릭 보고를 해제해도 백엔드 또는 최상위 JDBC 메트릭은 손실되지 않습니다.
다음 단계를 따르십시오.
  1. sqlagent.pbd 파일을 열고 SQL 문을 찾습니다. 예:
    TraceOneMethodWithParametersIfFlagged: SQLAgentStatements executeQuery(Ljava/lang/String;)Ljava/sql/ResultSet; DbCommandTracer "Backends|{database}|SQL|{commandtype}|Query|{sql}"
  2. 해제할 추적 지시문에서
    {sql}
    을 제거합니다. 예:
    TraceOneMethodWithParametersIfFlagged: SQLAgentStatements executeQuery(Ljava/ lang/String;)Ljava/sql/ResultSet; DbCommandTracer "Backends|{database}|SQL|{commandtype}|Query"
  3. sqlagent.pbd 파일을 저장합니다.
SQL 에이전트 메트릭
SQL 에이전트 메트릭은 메트릭 브라우저에서 Backends|<backendName>|SQL 노드 아래에 표시됩니다.
SQL 에이전트의 "Average Response Time"(평균 응답 시간) 메트릭은 데이터 판독기를 반환하는 쿼리(즉,
ExecuteReader()
메서드를 사용하여 실행된 쿼리)만 표시합니다. 이 메트릭은 데이터 판독기의
Close()
메서드에서 소비된 평균 시간을 나타냅니다.
계측된 XADataSources가 데이터베이스 커밋 또는 롤백 메트릭을 보고하지 않을 수도 있습니다. 다른 계측된 데이터 원본은 데이터가 포함된 데이터베이스 커밋 메트릭만 보고할 수도 있습니다.
SQL 데이터 관련 메트릭 유형은 다음을 포함합니다.
  • Active Connection Object Count(활성 연결 개체 수)
    이 메트릭은 메모리에 있는 활성 연결 개체의 수를 보여 줍니다. 이러한 개체는 닫히지 않았거나 아직 가비지가 수집되지 않은 열린(활성) 연결입니다.
    드라이버에 대해
    connect()
    메서드가 호출되면 연결이 열립니다.
    close()
    메서드를 통해 연결 호출이 종료되면 연결이 닫힙니다. SQL 에이전트는 하나의 집합으로 연결에 대한 약한 참조를 유지합니다. 연결 개체가 닫히거나 가비지가 수집되면 이 변경이 개체 수에 반영됩니다.
  • Average Result Processing Time (ms)(평균 결과 처리 시간(ms))
    이 메트릭은 평균 쿼리 처리 시간을 보여 줍니다. 
    executeQuery()
    호출이 종료된 때부터
    ResultSet close()
    메서드가 호출될 때까지 결과 집합을 처리하는 데 소요된 평균 시간을 나타냅니다.