이 페이지는 기계 번역되었습니다. 영어 원본을 읽어보세요. English

IBAnalyst는 이제 HQbird Standard의 일부입니다!

IBAnalyst는 데이터베이스 관리자가 Firebird 또는 InterBase 데이터베이스의 상세 통계를 분석하고 데이터베이스 성능, 유지 관리 및 애플리케이션과 데이터베이스 간의 상호 작용에서 발생할 수 있는 문제를 식별할 수 있게 해주는 도구입니다.

문서

IBAnalyst는 Firebird(또는 InterBase) 데이터베이스 통계를 사용자 친화적인 방식으로 그래픽으로 표시하며 다음과 같은 문제를 강조합니다:

  • 테이블 및 BLOB 단편화,
  • 레코드 버전 관리,
  • 가비지 컬렉션,
  • 인덱스 효율성 등

또한 IBAnalyst는 데이터베이스 성능 개선 및 데이터베이스 유지 관리에 대한 지능적인 제안을 자동으로 제공할 수 있습니다.

IBAnalyst는 Services API를 통해 운영 중인 프로덕션 데이터베이스에서 통계를 가져오거나(권장), gstat -a -r … 명령의 텍스트 출력을 분석할 수 있습니다. 최대 부하 기간의 통계는 프로덕션 데이터베이스의 실제 성능 문제에 대한 많은 정보를 제공할 수 있습니다.

IBAnalyst가 Firebird 또는 InterBase 데이터베이스의 문제를 찾는 데 어떻게 도움이 되는지

IBAnalyst의 주요 기능을 살펴보겠습니다. IBAnalyst에서 데이터베이스 통계를 처음 볼 때, 특히 요약, 테이블 및 인덱스 보기에서 빨간색과 노란색 셀로 많은 경고가 표시되면 상황이 명확하지 않을 수 있습니다. 몇 가지 실제 통계 예를 살펴보겠습니다.

요약 보기

IBAnalyst 요약

요약 페이지에는 많은 정보가 표시되지만 가장 중요한 것은 트랜잭션 상태입니다( IBAnalyst 도움말에서 가능한 트랜잭션 상태에 대한 설명을 읽어보세요. F1을 누르거나 도움말 메뉴에서 확인할 수 있습니다).

이 스크린샷에서 일부 트랜잭션이 오랫동안 활성 상태이며 “일일 평균의 60%“임을 볼 수 있습니다. IBAnalyst는 이러한 트랜잭션 상태를 빨간색으로 표시합니다. 이 트랜잭션이 누적된 버전이 서버에서 가비지로 간주되어 가비지 컬렉션되는 것을 방지할 수 있기 때문입니다. 이것은 속도 저하의 가능한 원인입니다. 특정 레코드에 존재하는 버전이 많을수록 읽는 데 더 많은 시간이 걸립니다.

이 장기 실행 트랜잭션을 찾으려면 FBScanner의 MON$Logger 모듈을 사용하거나 MON$ 테이블을 직접 쿼리할 수 있습니다. 그런 다음 장기 실행 트랜잭션의 영향을 받은 테이블(레코드 버전이 많은 테이블)을 확인하려면 IBAnalyst의 “테이블” 보기로 이동해야 합니다.

테이블 보기

IBAnalyst 테이블

“테이블” 보기에서는 테이블과 해당 테이블의 중요한 매개변수(레코드 수, 레코드 버전 수, 레코드 길이, 최대 버전 수 등)를 볼 수 있습니다.

이 보기를 정렬하여 가장 큰 테이블을 찾을 수 있습니다. 특히 레코드 버전이 많은 테이블에 관심이 있습니다. 레코드 버전이 많으면 영향을 받는 테이블의 가비지 컬렉션이 더 오래 걸립니다. 일반적으로 많은 레코드 버전을 제거하려면 업데이트 및 삭제 알고리즘을 변경해야 합니다.

행 버전은 특정 테이블의 총 버전 수를 표시하고 행 최대 버전은 일부 레코드가 도달한 최대 버전을 표시합니다. 예를 들어 NAB 테이블을 보면 1,190만 개의 레코드가 있고 총 버전은 20,932개이지만 한 레코드에는 176개의 버전이 있습니다. 이러한 패킷을 디스크에서 읽고 구문 분석하는 데 더 많은 시간이 걸리므로 이 레코드를 읽는 것이 다른 레코드를 읽는 것보다 느립니다.

이 그림은 또한 데이터가 삭제된 많은 테이블을 보여줍니다. 그러나 장기 실행 트랜잭션으로 인해 서버가 이러한 버전을 삭제할 수 없으며 여전히 디스크에 있고, 여전히 인덱싱되어 있으며, 데이터를 읽을 때 서버가 여전히 읽고 있습니다.

인덱스 보기

IBAnalyst 인덱스

일부 프로덕션 데이터베이스에는 단일 키 값만 인덱싱된 인덱스가 있을 수 있습니다. 이는 데이터베이스가 “향후 확장을 위해” 개발되었거나 누군가 개발 또는 테스트 중에 인덱스를 실험했기 때문에 발생할 수 있습니다. IBAnalyst에서 이러한 인덱스를 “무용지물"로 볼 수 있습니다:

SKIN04, SKIN05, SKOUT03 등은 모든 행(수백만 행)에 대해 하나의 값만 있는 열에 구축된 인덱스입니다. 이러한 인덱스는 정말로 쓸모가 없습니다. 왜냐하면

  • “where field = …“을 지정하면 옵티마이저가 이 인덱스를 사용할 수 있습니다. 필드에 하나의 값만 포함되어 있으므로 인덱스를 사용하면 인덱스 페이지를 디스크에서 메모리로 불필요하게 읽게 되고, 서버가 해당 쿼리에 대해 표시할 행을 준비할 때 메모리(및 시간)를 소비하게 됩니다.
  • 인덱스 생성은 복원 프로세스의 일부입니다. 추가 인덱스는 추가 시간을 발생시킵니다.

물론 이것이 IBAnalyst에서 데이터베이스에 대해 찾을 수 있는 전부는 아닙니다. 다음도 찾을 수 있습니다:

  • 일일 평균 트랜잭션 수
  • 롤백이나 연결 끊김이 있었는지, 그리고 언제 발생했는지
  • 각 테이블과 인덱스의 크기(메가바이트 단위)
  • BLOB과 레코드가 교차되어 있어 레코드만 읽는 것이 더 느린 테이블
  • 빈 테이블 - 잊혀졌거나 통계 수집 시점에 비어 있던 테이블
  • 중복 키가 많은 인덱스(열 값 분포를 고려할 수 있음)
  • 깊이가 4 이상인 인덱스 - 속도를 높이기 위해 페이지 크기를 늘려야 할 수도 있습니다

자동 권장 사항

색상이 지정된 셀 경고를 읽는 것이 혼란스럽다면 “보고서\권장 사항 보기"를 열면 됩니다. 데이터베이스 성능에 필요한 모든 것이 여기에 모여 있습니다. 궁금한 점이 있으면 언제든지 문의하세요( [email protected]).