QPI(Query Performance Insights) 라이브러리를 사용하여 Azure SQL Managed Instance의 로그쓰기 사용량 확인
· Version : Azure SQL
Azure SQL Managed Instance는 Azure 클라우드에서 호스팅되는 완전히 관리되는 SQL Server 인스턴스이다. 관리형 인스턴스에는 최대 로그쓰기 처리량 성능에 일부 제한이 있어 워크로드 속도가 느려질 수 있다. 이번 포스트에서는 관리형 인스턴스에서 쓰기 로그 처리량 문제를 식별하는 방법에 대해서 살펴본다.
Azure SQL Managed Instance에는 최대 로그 쓰기 속도와 같은 몇 가지 기본 제공 리소스 제한이 있다. 로그 쓰기 제한을 도입한 이유는 로그 백업이 들어오는 데이터를 포착할 수 있어야 하기 때문이다.
· Overview Azure SQL Database managed instance resource limits : https://docs.microsoft.com/en-us/azure/sql-database/sql-database-managed-instance-resource-limits#service-tier-characteristics
이번 포스트에서는 QPI 라이브러리를 사용하여 관리형 인스턴의 대기 통계를 쉽게 분석하고 있다. QPI 라이브러리를 설치하려면 아래 링크로 이동하여 SQL Server 버전에 대한 SQL 스크립트를 다운로드 한다. QPI 라이브러리는 Query Store 보기에 의존하기 때문에 SQL Server 2016이상, Azure SQL 에서 사용이 가능하다.
· Download QPI(Query Performance Insights) : https://github.com/JocaPC/qpi#installation
Disclaimer: QPI library is open source library provided as-is and not maintained by Microsoft. There are not guarantees that the results are correct and that there are not bugs in calculations. This is a helper library that can help you to more easily analyze performance of your Managed Instance, but you can do the same job by looking directly at DMVs. |
이 라이브러리를 사용하면 대기 통계의 스냅샷을 쉽게 작성하고 잠시 기다렸다가 대기 통계 값을 읽을 수 있다.
exec qpi.snapshot_wait_stats;
waitfor delay '00:00:03';
select * from qpi.wait_stats order by wait_time_s desc; |
위 결과를 살펴보면, 관리 인스턴스의 태스크가 INSTANCE_LOG_RATE_GOVERNOR 대기 유형을 기다리고 있음을 알 수 있다. 위 스크립트를 주기적으로 실행하여 이러한 문제쿼리를 식별할 수 있다. 또한 qpi에서 제공하는 다양한 명령어를 사용하여 관리형 인스턴스의 IO 성능을 분석하여 병목 현상을 식별할 수 있다.
· qpi.snapshot_file_stats 프로시저는 sys.dm_io_virtual_file_stats DMV 함수에서 I/O 통계 스냅샷을 작성한다. sys.dm_io_virtual_stats에는 누적 정보가 포함되어 있으며 최근 시간 간격으로 샘플을 계산해야 하므로 스냅샷을 작성해야 한다.
· qpi.file_stats보기는 마지막 스냅샷 이후 파일 통계를 가져온다. 이 qpi는 sys.dm_io_virtual_file_stats의 데이터를 기반으로 하는 IOPS 처리량등 여러 계산이 포함된다.
아래 스크립트는 파일 유형(LOG/DATA)별로 분류된 인스턴스의 쓰기 처리량(MB/s)및 IOPS를 요약한다.
exec qpi.snapshot_file_stats;
waitfor delay '00:00:01';
select type, write_mbps = sum(write_mbps), iops = sum(iops) from qpi.file_stats group by rollup (type); |
결과를 살펴보면 현재 인스턴스에서는 47.5MB/s 의 로그파일 쓰기와 총 1226 IOPS를 사용하고 있음을 알 수 있다. Azure 설명서에서 리소스 제한에 대한 설명을 보면 ~48MB/s가 현재 사용되는 인스턴스의 리밋이며, 이러한 리밋으로 인해서 INSTNACE_LOG_RATE_GOVERNOR 대기 통계가 발생하는 것이다. 인스턴스의 최대 사용량 리밋으로 인해서 성능 저하가 발생하지 않도록QPI 스크립트를 주기적으로 실행하여, 인스턴스의 리밋과 QPI결과값을 비교하여,모니터링 할 수 있도록 한다.
[참고자료]
2019-09-10 / Sungwook Kang / http://sungwookkang.com
Azure SQL, QPI, Query Performance Insights, SQL Server 2016, Query Store
'SQL Server > SQL Server Tip' 카테고리의 다른 글
BCP 실행시 동일 세션에서 여러개의 BULK INSERT 문으로 표시되는 이유 (0) | 2019.09.13 |
---|---|
삭제된 AD 그룹 계정으로 SQL Server 로그인 사례 (로그인 그룹 삭제 후 조치해야할 사항) (1) | 2019.09.12 |
ODBC 드라이버를 사용하여 SQL Server에서 Azure CosmosDB 쿼리 실행 (0) | 2019.09.10 |
Azure SQL Managed Instance에서 로컬 스토리지 사용량 모니터링 (0) | 2019.09.07 |
SQL Server Enterprise Edition 에서 CPU를 40 Core 이상 사용하지 못하는 현상 (0) | 2019.09.04 |