데이터베이스 서버 모니터링 및 구성

완료됨

회사가 온-프레미스 데이터베이스를 Azure Database for MySQL/PostgreSQL로 마이그레이션한 후에도 성능을 모니터링할 방법이 있어야 합니다.

데이터베이스 개발자는 데이터베이스 관련 도구 및 온-프레미스 VM 모니터링을 사용하는 데 익숙합니다. 이제 데이터베이스가 Azure에서 실행되고 있으므로 포털을 활용하여 단일 도구로 다른 모든 데이터베이스를 모니터링할 수 있습니다.

이 단원에서는 담당하는 데이터베이스의 상태를 모니터링하는 데 Azure Monitor가 지원할 수 있는 방법을 살펴보겠습니다. 문제를 발견하면 문제를 해결하기 위해 데이터베이스 구성을 변경하는 방법을 확인할 수 있습니다.

Azure Monitor를 사용하여 데이터베이스 상태를 보는 방법

Azure Monitor를 사용하여 Azure Database for MySQL/PostgreSQL의 리소스 사용을 추적합니다. Azure Portal에 있는 해당 서버의 메트릭 페이지를 사용하면 성능 추세를 감지하고 변칙을 찾아내는 데 도움이 되는 차트를 만들 수 있습니다.

Azure Database for MySQL/PostgreSQL 메트릭

서버를 모니터링하는 데 사용할 수 있는 메트릭은 다음 네 가지의 광범위한 범주로 나뉩니다.

  • Storage 메트릭
  • 연결 메트릭
  • 데이터 처리 리소스 사용률 메트릭
  • 복제 메트릭

Storage 메트릭

스토리지 메트릭은 서버의 총 데이터베이스 크기(‘사용된 스토리지’) 및 서버의 현재 스토리지 공간 크기(‘스토리지 용량 한도’)를 추적합니다. 활성 시스템에서는 시간이 지남에 따라 ‘사용된 스토리지’ 메트릭이 증가하는 것을 보게 될 가능성이 높습니다. 서버에 대해 자동 증가 옵션을 선택한 경우 사용 가능한 공간 크기가 감소하면 ‘스토리지 용량 한도’ 메트릭이 증가하는 경우가 있습니다. 사용 가능한 공간 크기가 현재 사용량의 5% 미만으로 떨어질 때마다 스토리지가 더 추가됩니다. ‘스토리지 비율’ 메트릭을 사용하여 서버의 사용 가능한 공간 대비 사용된 공간의 비율을 확인합니다.

서버에서 스토리지를 늘리는 시간이 정기적으로 발생하는 경우 더 많은 공간을 수동으로 할당하는 것을 고려해 보세요. Azure Portal에 있는 해당 서버의 가격 책정 계층 페이지를 선택하여 이 작업을 수행하고 스토리지 슬라이더를 사용합니다. 스토리지에 대해 요금이 부과되므로 처음부터 사용 가능한 스토리지를 높게 설정하지 마세요.

‘사용된 백업 스토리지’ 메트릭은 백업에서 사용하는 공간의 크기를 보여 줍니다. 이 메트릭은 비용 관점에서 중요합니다. 가격 책정 계층에 지정된 대로, 백업 스토리지가 서버에 할당된 스토리지 공간 크기 미만으로 유지되는 한 백업 스토리지에 대해서는 요금이 부과되지 않습니다. 이 한도를 초과하면 백업 스토리지에 대한 요금이 발생합니다.

연결 메트릭

‘활성 연결’ 메트릭은 서버에서 현재 지원하고 있는 동시 연결 수를 보여 줍니다. 연결 풀링 유형을 구성했는지 여부에 따라 동시 사용자 수와 다를 수 있습니다. Azure Database for MySQL/PostgreSQL에서는 현재 연결 풀링 기능을 제공하지 않지만 PgBouncer*(PostgreSQL의 경우) 같은 프록시 서비스를 사용하여 이 기능을 구현할 수 있습니다. 자세한 내용은 Performance best practices for using Azure Database for PostgreSQL – Connection Pooling(Azure Database for PostgreSQL 사용에 대한 성능 모범 사례 – 연결 풀링)을 참조하세요.

‘실패한 연결’ 메트릭은 사용자가 잘못된 자격 증명을 제시하는 빈도를 보여 줍니다. 짧은 시간 동안 이러한 이벤트가 많이 발생하면 무차별 암호 대입 공격이 있는 것을 나타낼 수 있습니다.

데이터 처리 리소스 사용률 메트릭

이러한 메트릭은 서버의 워크로드 처리 방법을 모니터링하는 데 도움이 됩니다.

‘CPU 비율’ 메트릭은 CPU 사용량을 보여 줍니다. 시간이 지나도 CPU 사용량이 증가하지 않는 경우에는 CPU 사용량이 높아도 문제가 되지 않습니다. CPU 사용률이 90%를 초과하며 계속 증가하는 경우 시스템이 처리 용량에 근접하고 있음을 나타냅니다. 리소스가 더 많은 가격 책정 계층으로 스케일 업하는 것을 고려해야 합니다.

‘메모리 비율’ 메트릭은 메모리 점유율을 나타냅니다. Azure Database for MySQL/PostgreSQL은 데이터 캐시 및 각 클라이언트 요청에 의해 시작된 프로세스 실행에 메모리를 사용합니다. 사용 가능한 실제 메모리 크기에 따라, 일반적으로 메모리 사용량이 95%를 초과하기 전까지는 메모리 사용량이 높아도 문제가 되지 않습니다. 메모리 가용성이 매우 낮으면 연결 오류가 발생할 수 있으며 메모리 조각화로 인해 성능이 저하될 수 있습니다. 이 메트릭을 모니터링하여 시간이 지남에 따라 메모리 점유율이 증가하는지, 그에 따라 서버를 스케일링해야 하는지 결정해야 합니다.

‘IO 비율’ 메트릭은 서버에서 수행되는 디스크 활동량을 추적합니다. 이 값은 되도록 작아야 좋습니다. 디스크 IO는 속도가 느린 작업입니다. 이 메트릭 값과 ‘메모리 비율’ 값이 크면 서버에 리소스가 부족하여 데이터를 효과적으로 캐시할 수 없으므로 대신 데이터를 읽어서 디스크 스토리지에 써야 할 수 있습니다. 데이터가 일정 시점에는 디스크에 유지되어야 하고 트랜잭션 로그는 유지 관리되어야 하므로 어느 정도의 IO 활동은 불가피합니다. 대부분의 데이터베이스 서버에서는 이러한 쓰기가 비동기적으로 실행되는 별도의 프로세스나 스레드에 의해 수행됩니다.

‘네트워크 입력’ 및 ‘네트워크 출력’ 메트릭은 활성 연결에서 서버에 들어오고 나가는 트래픽의 양을 보여 줍니다. 이러한 수치는 클라이언트 애플리케이션과 서버 간 경로의 대역폭에 따라 한도가 결정됩니다.

복제 메트릭

Azure Database for PostgreSQL은 ‘복제본의 최대 지연 시간’ 및 ‘복제본 지연 시간’ 메트릭을 제공하므로 복제본이 최신 상태인지 판별하는 데 도움이 됩니다. 이러한 메트릭은 읽기 전용 복제본을 구성한 경우에만 의미가 있습니다.

‘복제본의 최대 지연 시간’ 메트릭은 마스터 뒤에 있는 가장 느린 복제본의 바이트 수를 보여 줍니다. 이 메트릭은 마스터에서만 모니터링할 수 있습니다.

‘복제본 지연 시간’ 메트릭은 최신 트랜잭션을 마스터에서 받아서 복제본에 적용한 이후 경과된 시간(초)을 보여 줍니다. 이 메트릭은 복제본에서 볼 때만 의미가 있습니다.

Azure Database for MySQL에는 ‘복제 지연 시간(초)’ 메트릭이 있습니다. 이 메트릭은 복제본에서만 모니터링할 수 있으며 복제본이 마스터 뒤에서 지연되는 시간(초)을 보여 줍니다.

성능을 모니터링할 차트 및 경고 생성

Azure Portal에 있는 서버의 메트릭 페이지에서 메트릭 값을 추적하는 차트를 만들 수 있습니다. 메트릭은 1분 간격으로 수집됩니다. 메트릭마다 해당 메트릭을 보고하는 방법을 결정하는 집계를 지정합니다.

  • ‘평균’은 1분마다 해당 메트릭의 평균값을 생성합니다.
  • ‘최대’는 1분 동안 도달한 최댓값을 보여 줍니다.
  • ‘최소’는 가장 작은 값을 보여 줍니다.
  • ‘합계’는 해당 메트릭의 합계입니다.
  • ‘개수’는 해당 메트릭을 생성한 이벤트가 발생한 횟수를 보여 줍니다.

모든 집계가 모든 메트릭에 반드시 의미가 있는 것은 아닙니다.

아래 차트 예에서는 CPU 비율, 메모리 비율, IO 비율, 활성 연결 메트릭의 분 단위 평균 값을 캡처했습니다. 101개의 활성 연결이 모두 동시에 실행되고 있는 것을 볼 수 있습니다. CPU 및 메모리 사용률은 둘 다 안정적이며 IO 비율은 0입니다. 이 예에서 클라이언트 애플리케이션은 읽기 집약적인 워크로드를 수행하고 있으며 필요한 데이터는 메모리에 캐시되어 있습니다.

Image of the chart showing the values captured for the CPU percent, Memory percent, IO percent, and Active connections metrics

캡처 중인 메트릭과 차트에 결과가 표시되는 사이에 최대 5분의 지연 시간이 있습니다.

리소스가 중요한 지점에 도달하고 있음을 메트릭이 나타내는 경우 관리자에게 알리도록 경고를 설정할 수 있습니다. 아래 예에서는 메모리 사용률이 90%를 초과하면 관리자에게 메일을 보냅니다.

Image of the alerts page, showing a new alert that sends an email if memory utilization exceeds 90%

서버 매개 변수 구성

네이티브 MySQL 및 PostgreSQL 서버는 둘 다 매개 변수 파일에 저장된 구성 설정을 사용하는 것으로 구성할 수 있습니다. PostgreSQL의 경우 이 정보는 postgresql.conf 파일에 보관됩니다. MySQL의 경우 구성 데이터는 다양한 my.cnf 파일에 저장됩니다. Azure Database for MySQL/PostgreSQL에서는 이러한 파일에 직접 액세스할 수 없습니다. 대신 Azure Portal 또는 Azure CLI를 사용하여 서버 매개 변수를 보고 수정합니다.

Azure Portal을 사용하여 매개 변수 보기 및 설정

서버 구성 매개 변수는 Azure Portal에 있는 해당 서버의 서버 매개 변수 페이지에서 사용할 수 있습니다. 서버에 적합하게 매개 변수 값을 수정할 수 있습니다. 아래 이미지는 Azure Database for PostgreSQL의 서버 매개 변수 페이지를 보여 줍니다. Azure Database for MySQL의 해당 페이지도 유사합니다.

Image of the Server parameters page for Azure Database for PostgreSQL

서버 구성의 많은 부분이 Azure에 의해 제어되므로 일부 서버 구성 매개 변수는 사용할 수 없습니다. 예를 들어 메모리 할당과 연결된 매개 변수는 없습니다. 또한 Azure Database for MySQL에서는 ISAM 스토리지를 지원하지 않으므로 myisam 매개 변수가 없습니다.

‘동적’으로 표시된 매개 변수에 대한 변경 내용은 즉시 적용됩니다. ‘정적’으로 표시된 매개 변수는 서버를 다시 시작해야 합니다. 이 작업은 서버의 개요 페이지에서 수행합니다.

Image of the Overview page for Azure Database for PostgreSQL. The Restart button is highlighted

Azure CLI를 사용하여 매개 변수 보기 및 설정

az mysql/postgres server configuration 명령을 사용하여 프로그래밍 방식으로 매개 변수를 보고 수정할 수 있습니다. 모든 구성 매개 변수의 설정을 보려면 az mysql/postgres server configuration list를 사용하고 곧바로 단일 매개 변수를 보려면 az mysql/postgres server configuration show [parameter-name] 명령을 사용합니다. 아래 코드 조각은 Azure Database for PostgreSQL에 대한 예를 보여 줍니다.

az postgres server configuration show \
    --resource-group northwindrg \
    --server-name northwind101 \
    --name vacuum_defer_cleanup_age

결과는 다음과 유사합니다.

{
  "allowedValues": "0-1000000",
  "dataType": "Integer",
  "defaultValue": "0",
  "description": "Number of transactions by which VACUUM and HOT cleanup should be deferred, if any.",
  "id": "**********************",
  "name": "vacuum_defer_cleanup_age",
  "resourceGroup": "northwindrg",
  "source": "system-default",
  "type": "Microsoft.DBforPostgreSQL/servers/configurations",
  "value": "0"
}

출력에서 중요한 항목은 필드로, 해당 매개 변수에 대한 현재 설정을 보여 줍니다.

구성 매개 변수의 값을 변경하려면 다음과 같이 az mysql/postgres server configuration set 명령을 사용합니다.

az postgres server configuration set \
    --resource-group northwindrg \
    --server-name northwind101 \
    --name vacuum_defer_cleanup_age \
    --value 5

정적 매개 변수를 변경한 후 서버를 다시 시작해야 하는 경우 az mysql/postgres server restart 명령을 실행합니다.

az postgres server restart \
    --resource-group northwindrg \
    --name northwind101