만약 여러분이 훌륭한 저녁 식사를 준비하고 접대해본 경험이 있다면, 여러분은 주방에서 사용되는 도구의 수가 테이블로 전달되는 접시의 수보다 몇 배 더 많다는 것을 알게 된다. 각각의 용기는 짧은 시간 동안만 사용될 수 있지만, 함께 식사를 하는 것은 그들 없이는 어려울 것입니다.
SQL 쿼리 엔진 (SQE: SQL Query Engine) 은 5성급 레스토랑의 요리사와 마찬가지로 최고의 결과를 신속하게 제공합니다. 그리고 요리사와 마찬가지로, SQE는 추가적인 작업 공간이 필요합니다. 최적화하고 쿼리를 실행하기 위해 Temporary Storage를 할당하여 이를 확보합니다. IBM DB2는 계속 기능을 추가하고 있으며 SQE는 데이터베이스 워크로드의 증가하는 부분을 차지하고 있다. WRKQRY, RUNQRY, OPNQRYF 명령을 포함하여 원시 데이터베이스 액세스를 위한 기본 엔진을SQE로 만드는 것만으로도 가장 큰 변화를 하게 됩니다. 결과적으로, 워크로드가 동일하게 유지되더라도 SQE가 사용하는 Temporary Storage의 양은 릴리스에서 릴리스로 증가할 수 있습니다. SQE는 더 많은 작업을 수행하므로, 효과적으로 작동하기 위해 더 많은 임시 공간을 소모합니다.
대부분의 경우 시스템에서 Temporary Storage의 상태를 고려하거나 인식할 필요가 없습니다. 그러나 간혹 과도한 Temporary Storage 사용하는 악성 쿼리 또는 Access Plan이 발생할 수 있습니다. SQE는 쿼리가 시스템의 스토리지를 소모하는 것을 막을 수 있지만, 하나 또는 몇 개의 쿼리를 과도하게 사용하면 여전히 다른 이들의 워크로드에 부정적인 영향을 줄 수 있습니다. 스토리지 사용이 많아지면, 잘못된 데이터 모델 또는 잘못 작성된 쿼리를 가리키는 경우가 있습니다. 사용자 (또는 데이터베이스 엔지니어) 는 이와 같은 상황을 감지하고 이를 정리하고 다시 발생하지 않도록 할 수 있어야 합니다. 이를 수행하려면 Temporary Storage가 필요한 이유와 시스템의 정상적인 데이터베이스 워크로드에 대해 정상적인 것이 무엇인지 이해해야 합니다.
SQE가 사용하는 임시 스토리지를 탐색하는 5가지 항목이 있는데, 이를 통해 현재 SQE가 사용중인 스토리지 용량을 확인할 수 있습니다. 방법은 QSYS2.SYSTMPSTG view를 쿼리하기만 하면 됩니다. 이 View에서 시스템 전체 임시 스토리지는GLOBAL_BUCKET_NAME 컬럼에 있는 값의 존재로 식별됩니다. SQE에 대한 가장 중요한 버킷 이름은 *DATABASE … 로 시작합니다.
<SQE 가 사용하는 Temporary Storage 확인하는 SQL 예문>
SELECT
GLOBAL_BUCKET_NAME,
BUCKET_CURRENT_SIZE
FROM QSYS2.SYSTMPSTG
WHERE GLOBAL_BUCKET_NAME LIKE '*DATABASE%'
order by 2 desc;
이 5개의 Bucket 값은 SQL 워크로드가 많은 시스템의 경우 꽤 높게 나타날 수 있습니다. 하지만 쿼리 엔진이 신속하게 결과를 내기 위해 중요한 역할을 하고 있습니다. 이 데이터의 할당은 Temporary Storage에서 이루어지며, IPL 을 하면 삭제가 됩니다. 결과적으로 IPL 한 후 일정 기간 동안 꾸준히 증가하다가 어느 정도 시간이 흐르면 값이 크게 변하지 않고 유지가 될 것입니다. 평상시의 각 Bucket 값을 확인하고 있다가, 문제가 발생했을 때 값을 비교해보는 것이 문제를 진단할때 도움이 될 것입니다.
Db2 for i 클러스터 구성 방식 비교 (0) | 2024.01.19 |
---|---|
Db2 for i SQL 쿼리 성능 분석을 위한 툴 종류 (0) | 2024.01.16 |
Cloud Pak for Data as a Service 에서 Db2 데이터 연결하기 (0) | 2023.07.02 |
유니코드(Unicode) - Part 2 (0) | 2023.05.15 |
유니코드(Unicode) - Part 1 (1) | 2023.05.11 |
댓글 영역