FBMonLogger
FBMonLogger는 이제 HQbird Standard의 일부입니다!
FBMonLogger는 Firebird의 모니터링 테이블 출력을 분석하고 느린 SQL 쿼리, 잘못 설계된 트랜잭션(장기 실행 트랜잭션, 잘못된 격리 수준의 트랜잭션 등)과 같은 문제를 찾고 문제가 있는 애플리케이션을 식별하는 도구입니다.
FBMonLogger는 성능 문제가 있는 Firebird 데이터베이스에 연결하여 느림의 원인이 무엇인지 식별할 수 있습니다: 특정 사용자 연결, 느린 SQL 쿼리 또는 장기 실행 트랜잭션인가요?
FBMonLogger는 Firebird 2.1, 2.5 및 3.0을 지원합니다 - 이전 Firebird 버전이나 InterBase의 경우 FBScanner를 사용하세요.
FBMonLogger는 다음을 보여줄 수 있습니다:
- IO 작업, 비인덱스 읽기 및 인덱스 읽기 수가 가장 많은 상위 연결
- IO 작업, 비인덱스 읽기 및 인덱스 읽기 수가 가장 많은 상위 SQL 문
- 문제가 있는 트랜잭션: 장기 실행 트랜잭션, 잘못된 격리 수준의 트랜잭션, 읽기/쓰기 트랜잭션 및 관련 정보: 시작 시점, 이러한 트랜잭션을 시작한 애플리케이션, IP 주소 등
- 가비지 컬렉션 작업이 가장 많은 연결 및 문
- 읽기/쓰기 비율, INSERT/UPDATE/DELETE 비율 등.
성능 문제를 찾으려는 데이터베이스에 연결한 후 모니터링 테이블의 여러 스냅샷을 찍어야 합니다 - «Get Snapshot»을 클릭하여 스냅샷을 찍으세요.
사용자 연결에 대한 집계 성능 통계
첫 번째 화면에서는 데이터베이스 연결에 대한 집계 통계를 확인하고 가장 큰 문제가 있는 연결을 식별할 수 있습니다:
순차 읽기 / 인덱스 읽기
“순차 읽기 / 인덱스 읽기"는 애플리케이션의 순차(비인덱스) 읽기와 인덱스 읽기 간의 총 비율을 보여줍니다. 일반적으로 비인덱스 읽기 수는 낮아야 하므로 순차 읽기의 비율이 높다는 것은 많은 SQL 쿼리가 NATURAL 실행 계획을 가지고 있으며 이로 인해 응답 시간이 느려질 수 있음을 의미합니다.
«TOP attachments: sequential/indexed reads»에서 레코드를 클릭하면 «Attachments» 탭으로 이동하여 연결에 대한 자세한 정보를 확인한 다음 «Transactions» 또는 «Statements» 탭으로 이동할 수 있습니다. 여기서 선택한 연결과 연결된 트랜잭션 및 문을 볼 수 있습니다(«Link to selected attachment» 체크박스가 켜져 있는 경우, 그렇지 않으면 모든 연결의 모든 트랜잭션/문이 표시됩니다).
쓰기 세부 정보
«Write details»는 쓰기 작업에 대한 개요를 제공합니다: 모든 데이터베이스 연결 간의 INSERT/UPDATE/DELETE 비율입니다. 상위 작성자 테이블에서 쓰기 작업 수가 가장 많은 연결을 확인할 수 있습니다. 과도한 업데이트 또는 삭제(가비지 컬렉션 측면에서 가장 위험한 작업)를 수행하는 애플리케이션이나 소프트웨어 모듈을 식별하는 데 유용합니다.
가비지 컬렉션 세부 정보
가비지 컬렉션 작업의 의미는 무엇인가요?
- Purge - 엔진이 백버전을 제거하며, 데이터베이스에는 기본 버전만 남습니다.
- Expunge - 기본 버전과 모든 백버전이 모두 삭제되었습니다.
- Backout - 기본 버전만 제거합니다(롤백으로 인해).
일반적으로 purge는 UPDATE 작업, Expunge는 DELETE, Backout은 INSERT 또는 UPDATE의 롤백과 연관지을 수 있습니다. Backout이 많다는 것은 애플리케이션의 트랜잭션 관리에 문제가 있음을 의미할 수 있습니다.
메모리 사용량
«Memory usage» 그래프는 현재 모든 활성 연결이 사용하는 총 메모리와 과거에 할당된 메모리의 최대치를 보여줍니다.
메모리 사용량별 상위 연결 목록은 연결 중 가장 큰 메모리 소비자를 보여줍니다. 과도한 메모리를 사용하는 애플리케이션이나 소프트웨어 모듈을 찾는 데 유용합니다.
문에 대한 집계 성능 통계
두 번째 탭에서는 문에 대한 집계 성능 통계를 확인할 수 있습니다. 이 통계는 데이터베이스의 순간적인 상황을 더 잘 반영합니다 - 모니터링 테이블은 각 객체 수명 시작 이후의 정보를 수집하므로 여기서 볼 수 있는 문은 스냅샷이 찍힌 순간에 실행 중이던 문들입니다.
순차 읽기 / 인덱스 읽기
이 목록에서는 데이터베이스에서 많은 순차 읽기를 수행하는 상위 문을 확인할 수 있습니다. 일반적으로 이러한 문은 SQL 튜닝이 필요합니다 - 인덱스 튜닝 또는 SQL 쿼리 재설계를 통해 말입니다.
쿼리를 튜닝하려면 실행 계획을 확인하세요: 일반적으로 새 인덱스나 쿼리 재설계를 통해 계획에서 NATURAL을 제거하여 쿼리 속도를 개선할 수 있습니다. 이 목록에서 문을 클릭하면 «Statements» 탭이 열리며 선택한 문에 대한 자세한 정보를 확인하고 관련 트랜잭션이나 연결로 이동할 수 있습니다.
페이지 읽기/페이지 쓰기
이 그래프와 목록은 많은 읽기를 수행하는 상위 문에 대한 간략한 정보를 보여줍니다 - 즉, 상당한 IO를 소비하여 다른 쿼리의 성능에 영향을 줄 수 있음을 의미합니다. 최대값을 가진 SQL 문은 최적의 성능을 위해 주의 깊게 확인해야 합니다.
문에 대한 쓰기 세부 정보
이 그래프에서는 모니터링 테이블의 스냅샷이 찍힌 순간에 쓰기 SQL 문이 무엇을 하고 있었는지 확인하고 데이터베이스에서 많은 변경을 만든 UPDATE 및 DELETE를 식별할 수 있습니다.
문에 대한 가비지 컬렉션 세부 정보
이 그래프에서는 스냅샷 순간에 실행 중이던 문이 수행한 가비지 컬렉션 작업 수를 확인할 수 있습니다.
문에 대한 메모리 사용량
연결에 대한 집계 메모리 사용량 통계와 달리 문의 메모리 사용량은 현재 많은 메모리를 소비하는 정확한 문 목록을 보여줄 수 있습니다.
연결
세 번째 탭은 «Attachments»입니다. «Aggregated performance statistics»에서 레코드 중 하나를 클릭하여 이 탭으로 직접 이동할 수 있습니다.
연결은 Firebird 데이터베이스에 연결된 사용자 목록을 보여주며 많은 유용한 세부 정보를 제공합니다: 연결의 USER 및 ROLE, 시작 시간 및 연결 ID, 연결에 가비지 컬렉션이 활성화되어 있는지 여부, 연결을 설정한 원격 프로세스 이름, 그리고 연결에 대한 여러 누적 성능 카운터: 순차 읽기 수 [연결 시작 이후], 인덱스 읽기 수, 삽입, 업데이트 및 삭제 수, 레코드 백아웃, 퍼지 및 익스펀지 수.
기본적으로 연결의 일부 열은 가장 중요한 정보만 표시하도록 꺼져 있습니다.
물론 연결을 클릭할 때마다 해당 연결 내에서 실행 중인 트랜잭션으로 이동한 다음 문으로 이동할 수 있습니다. Transactions 및 Statements 탭의 왼쪽 상단 모서리에는 동작을 제어하는 체크박스가 있습니다 - 선택하면 선택한 연결 ID로 표시된 트랜잭션과 문만 표시됩니다.
트랜잭션
«Transactions» 탭은 스냅샷이 찍힌 순간의 활성 트랜잭션을 보여줍니다. «Link to selected attachment» 체크박스가 활성화되어 있으면 선택한 연결의 트랜잭션만 표시되고, 그렇지 않으면 모든 트랜잭션이 표시됩니다.
가장 중요한 특성 중 하나는 트랜잭션의 수명입니다: Firebird는 짧은 쓰기 트랜잭션으로 작동하도록 설계되었으므로 트랜잭션을 가능한 한 짧게 유지하는 것이 중요합니다. FBMonLogger는 Oldest Active 트랜잭션을 보유하여 과도한 레코드 버전이 정리되지 않도록 하는 격리 모드 및 읽기-쓰기 설정이 있는 트랜잭션을 강조 표시합니다. 이러한 트랜잭션이 한동안 전에 시작된 것을 발견하면 과도한 레코드 버전의 원인이 될 수 있음을 의미합니다.
«started at» 열을 기준으로 정렬하고 빨간색으로 표시된 오래된 트랜잭션을 찾으세요: 모든 쓰기 가능 트랜잭션과 읽기 전용 스냅샷은 Oldest Active Transaction을 고정시켜 과도한 레코드 버전이 유지되도록 합니다. 이러한 트랜잭션이 시작된 위치를 식별하고(마우스 오른쪽 버튼 클릭 후 «View parent attachment» 선택) 이 트랜잭션을 더 일찍 커밋하도록 코드를 수정하세요.
문
«문» 탭은 스냅샷 시점에 활성화된 문을 보여줍니다: 모든 문을 캡처해야 하는 경우 FBPerfMon 또는 FBScanner를 사용해야 합니다(이 모든 도구는 IBSurgeon Optimization Pack의 일부입니다).
«선택한 첨부에 연결»이 활성화된 경우 특정 첨부에 대한 문만 표시되고, 그렇지 않으면 모든 활성 문이 목록에 표시됩니다.
일부 문에는 연결된 트랜잭션 ID가 없습니다(=0): 이러한 쿼리는 준비되었지만 실행되지 않았습니다.




