Azure Cosmos DB for PostgreSQL에서 다중 테넌트 모니터링을 사용하여 테넌트 통계를 검토하는 방법
적용 대상: Azure Cosmos DB for PostgreSQL(PostgreSQL에 대한 Citus 데이터베이스 확장 기반)
Important
Citus 11.3 및 최신 버전에 적용 가능
이 문서에서는 citus_stat_tenants
보기를 사용하여 테넌트의 리소스 사용량에 대한 인사이트를 얻는 방법을 보여줍니다. 보기는 테넌트에 대해 나열된 메트릭을 추적합니다.
- 읽기 쿼리 수(SELECT 쿼리)
- 총 쿼리 수(SELECT, INSERT, DELETE 및 UPDATE 쿼리)
- 총 CPU 사용량(초)
citus_stat_tenants
보기를 사용하여 정보에 입각한 결정을 내리는 방법과 애플리케이션에 가장 적합하도록 기능을 구성하는 방법을 알아봅니다.
참고 항목
- 보기에 대한 권한(
execute
,select
)은pg_monitor
역할에 부여됩니다.
citus_stat_tenants를 사용하여 상위 테넌트 모니터링
이 기능을 사용하도록 설정하면 INSERT
, UPDATE
, DELETE
및 SELECT
와 같은 SQL 명령에 대해 계정이 활성화됩니다. 이 계정은 single tenant
를 위해 특별히 설계되었습니다. 쿼리 플래너가 쿼리를 단일 분할된 데이터베이스 또는 단일 테넌트로 제한할 수 있는 경우 쿼리는 단일 테넌트 쿼리가 될 수 있습니다.
추적되는 테넌트 수는 citus.stat_tenants_limit
매개 변수를 사용하여 제어할 수 있습니다. 또한 citus.stat_tenants_period
를 사용하면 모니터링의 시간 버킷을 정의할 수 있습니다. 하나의 기간이 끝나면 해당 통계가 마지막 기간에 저장되어 진행 중인 측정 기간과 마지막으로 완료된 측정 기간을 제공합니다.
참고 항목
citus.stat_tenants_period의 기본값은
60 seconds
입니다.citus.stat_tenants_limit의 기본값은
100
입니다.
회사에서 광고 캠페인을 운영하는 데 도움이 되는 샘플 다중 테넌트 애플리케이션을 검토하면서 자세히 알아보세요.
CREATE TABLE companies (company_id BIGSERIAL PRIMARY KEY, name TEXT);
SELECT create_distributed_table ('companies', 'company_id');
CREATE TABLE campaigns (id BIGSERIAL, company_id BIGINT, name TEXT, PRIMARY KEY (id, company_id));
SELECT create_distributed_table ('campaigns', 'company_id');
companies
& campaigns
테이블은 모두 공통 테넌트 키 company_id
에 분할됩니다. 이제 다음 명령을 사용하여 회사 및 광고 캠페인 데이터를 추가할 수 있습니다.
INSERT INTO companies (company_id, name) VALUES (1, 'GigaMarket');
INSERT INTO campaigns (id, company_id, name) VALUES (1, 1, 'Crazy Wednesday'), (2, 1, 'Frozen Food Frenzy');
INSERT INTO campaigns (id, company_id, name) VALUES (3, 1, 'Spring Cleaning'), (4, 1, 'Bread&Butter');
INSERT INTO campaigns (id, company_id, name) VALUES (5, 1, 'Personal Care Refresh'), (6, 1, 'Lazy Lunch');
INSERT INTO companies (company_id, name) VALUES (2, 'White Bouquet Flowers');
INSERT INTO campaigns (id, company_id, name) VALUES (7, 2, 'Bonjour Begonia'), (8, 2, 'April Selection'), (9, 2, 'May Selection');
INSERT INTO companies (company_id, name) VALUES (3, 'Smart Pants Co.');
INSERT INTO campaigns (id, company_id, name) VALUES (10, 3, 'Short Shorts'), (11, 3, 'Tailors Cut');
INSERT INTO campaigns (id, company_id, name) VALUES (12, 3, 'Smarter Casual');
몇 가지 SELECT
및 UPDATE
쿼리를 더 실행하고 개별 명령을 실행할 때 citus_stat_tenants
보기에 대한 변경 내용을 살펴보겠습니다.
SELECT COUNT(*) FROM campaigns WHERE company_id = 1;
count
-------
6
(1 row)
SELECT name FROM campaigns WHERE company_id = 2 AND name LIKE '%Selection';
name
-----------------
April Selection
May Selection
(2 rows)
UPDATE campaigns SET name = 'Tailor''s Cut' WHERE company_id = 3 AND name = 'Tailors Cut';
SELECT tenant_attribute,
read_count_in_this_period,
query_count_in_this_period,
cpu_usage_in_this_period
FROM citus_stat_tenants;
이제 citus_stat_tenants
보기에 캡처된 결과 집합을 검토해 보겠습니다. tenant_attribute 1
의 경우 이 지속적인 기간 동안 5개의 쿼리가 실행되어 CPU 사용량이 0.000299로 비교적 낮았습니다. 또한 읽기 수가 1개 기록되었습니다. 결과 집합에 표시되는 3개의 테넌트에 대해 지난 60초 동안 쿼리를 관찰했습니다. 상위 N개 테넌트의 순서는 query_count_in_this_period
필드에 따라 달라집니다.
tenant_attribute | read_count_in_this_period | query_count_in_this_period | cpu_usage_in_this_period
------------------+---------------------------+----------------------------+--------------------------
1 | 1 | 5 | 0.000299
3 | 0 | 3 | 0.000314
2 | 2 | 4 | 0.000295
(3 rows)
Important
테넌트 수준 통계를 추적하면 오버헤드 및
by default is disabled
가 추가됩니다.citus.stat_tenants_track = 'all'을 설정하여 추적을 사용하도록 설정합니다.
다음 단계
다중 테넌트 모니터링 및 활성 테넌트 리밸런싱과 관련된 개념에 대해 알아봅니다.