Sangwon
07/14/2026, 12:05 AMRocky
07/14/2026, 12:05 AMmax_partition_number_per_table (v3.3.2 버전부터 도입됨)
* 이 기본값은 100,000이지만, FE의 메모리 부하를 고려하여 설정해야 합니다.
* 단일 작업당 생성 제한: 한 번의 `CREATE TABLE`이나 ALTER TABLE 구문으로 동시에 생성할 수 있는 파티션 수는 기본 *4,096개*로 제한됩니다.
* 설정 항목: max_partitions_in_one_batch
* 자동 파티션 생성 제한: 데이터 로드 시 자동으로 생성되는 파티션(Expression Partitioning)도 한 번의 로드 작업당 최대 *4,096개*까지로 제한됩니다.
* 설정 항목: auto_partition_max_creation_number_per_load
2. 권장 사항 및 성능 고려사항
시스템적으로는 10만 개까지 가능하지만, 성능 최적화를 위해 다음과 같은 가이드라인을 따르는 것이 좋습니다.
* 메타데이터 관리: 너무 많은 파티션은 FE(Frontend)의 메모리 사용량을 증가시키고 쿼리 계획(Query Planning) 시간을 길어지게 할 수 있습니다. 일반적으로 테이블당 파티션 수를 수천 개(약 4,096개 이하) 수준으로 유지하는 것이 관리 면에서 유리합니다.
* 데이터 크기: 개별 파티션의 크기는 너무 작지 않게(예: 파티션당 100GB 이하 권장) 유지하고, 각 파티션 내의 태블릿(Tablet) 개수도 적절히 조절하는 것이 중요합니다.
* 파티션 입도(Granularity): 너무 세밀한 파티션(예: 초 단위, 분 단위)보다는 비즈니스 요구사항에 맞춰 시간(Hour), 일(Day), 또는 월(Month) 단위로 설정하는 것이 좋습니다.
요약하자면: 기술적으로 테이블당 *100,000개*까지 가능하지만, 원활한 운영과 성능을 위해서는 4,096개 이내로 유지하는 것이 권장됩니다. 필요하다면 FE 설정을 통해 이 제한을 조정할 수 있습니다.
References
• faq/operation_maintenance_faq.md
• knowledge/usage/best-practice.md
• best_practices/partitioning.md
• faq/Deploy_faq.md
• administration/management/FE_configuration.md
• knowledge/admin_and_operation/shared_data_compaction.mdSangwon
07/14/2026, 12:06 AMRocky
07/14/2026, 12:06 AMSHOW PARTITIONS 명령어를 사용하는 것입니다.
1. SHOW PARTITIONS 명령어 사용 (가장 일반적)
이 명령어를 실행하면 테이블의 모든 파티션 목록이 출력됩니다. 출력된 결과의 전체 행(Row) 수가 곧 파티션의 개수입니다.
sql
SHOW PARTITIONS FROM 테이블명;
* 팁: 결과가 너무 많을 경우, MySQL 클라이언트 등에서 행 수를 직접 확인하거나, 특정 조건으로 필터링(WHERE)하여 확인할 수 있습니다.
2. information_schema 조리 (SQL 쿼리)
만약 쿼리 결과를 통해 개수(Count)만 바로 얻고 싶다면 information_schema.partitions 뷰를 조회할 수 있습니다. (StarRocks 버전에 따라 지원 여부가 다를 수 있으나, 최신 버전에서는 작동합니다.)
sql
SELECT COUNT(*)
FROM information_schema.partitions
WHERE table_schema = '데이터베이스명'
AND table_name = '테이블명';
3. SHOW PROC 명령어 사용 (관리자용)
시스템 내부 경로를 통해 더 상세한 메타데이터를 확인할 수 있습니다.
sql
-- 1. 데이터베이스 ID 확인
SHOW DATABASES;
-- 2. 해당 DB의 테이블 정보 확인 (여기서 TableId 확인)
SHOW PROC '/dbs/데이터베이스ID';
-- 3. 파티션 개수 확인
SHOW PROC '/dbs/데이터베이스ID/테이블ID/partitions';
참고:
* *Dynamic Partitioning*이 설정된 테이블의 경우, 현재 생성된 파티션 외에 앞으로 생성될 파티션 규칙도 함께 확인하려면 `SHOW CREATE TABLE 테이블명;`을 통해 설정값(dynamic_partition.*)을 확인하는 것이 좋습니다.
References
• sql-reference/sql-statements/table_bucket_part_index/SHOW_PARTITIONS.md
• sql-reference/information_schema/partitions.md
• knowledge/admin_and_operation/shared_data_compaction.md
• table_design/data_distribution/Data_distribution.md
_distribution/Data_distribution)
References
• sql-reference/information_schema/partitions.md
• sql-reference/sql-statements/table_bucket_part_index/SHOW_PARTITIONS.md
• table_design/data_distribution/Data_distribution.md
• knowledge/admin_and_operation/shared_data_compaction.mdSangwon
07/14/2026, 12:06 AMRocky
07/14/2026, 12:06 AMSHOW CREATE TABLE)
테이블이 어떤 파티션 전략(Range, List, Expression 등)으로 생성되었는지, 어떤 컬럼이 파티션 키인지 가장 확실하게 확인할 수 있는 방법입니다.
sql
SHOW CREATE TABLE 테이블명;
* 확인할 내용:
* `PARTITION BY ...`: 파티션 방식과 파티션 키 컬럼 확인
_ `PROPERTIES`: 동적 파티션(dynamic_partition._) 설정값 확인
2. 동적 파티션 설정 상태 확인 (SHOW DYNAMIC PARTITION TABLES)
만약 동적 파티션(Dynamic Partitioning)을 사용 중이라면, 현재 활성화 여부와 주기, 미리 생성할 파티션 개수 등의 상세 설정을 한눈에 볼 수 있습니다.
sql
-- 현재 DB의 모든 동적 파티션 테이블 조회
SHOW DYNAMIC PARTITION TABLES;
-- 특정 DB 지정 시
SHOW DYNAMIC PARTITION TABLES FROM 데이터베이스명;
* 주요 출력 항목: `Enable`(활성 상태), `TimeUnit`(단위: DAY/WEEK/MONTH), `Start/End`(생성 범위), `Prefix`(이름 규칙) 등
3. 물리적 파티션 상세 정보 확인 (SHOW PARTITIONS)
각 파티션별로 설정된 데이터 범위(Range)나 버킷(Bucket) 개수 등을 확인하고 싶을 때 사용합니다.
sql
SHOW PARTITIONS FROM 테이블명;
* 확인할 내용:
* Range: 해당 파티션이 커버하는 데이터 범위
* Buckets: 파티션별 태블릿(데이터 분산) 개수
* ReplicationNum: 복제본 개수
요약:
* 전반적인 *설정 로직*을 보려면: SHOW CREATE TABLE
* *동적 생성 규칙*만 모아 보려면: SHOW DYNAMIC PARTITION TABLES
* *개별 파티션의 범위와 상태*를 보려면: SHOW PARTITIONS
References
• sql-reference/sql-statements/table_bucket_part_index/SHOW_DYNAMIC_PARTITION_TABLES.md
• sql-reference/sql-statements/table_bucket_part_index/SHOW_PARTITIONS.md
• table_design/data_distribution/dynamic_partitioning.md
• sql-reference/sql-statements/table_bucket_part_index/CREATE_TABLE.md
References
• sql-reference/sql-statements/table_bucket_part_index/SHOW_DYNAMIC_PARTITION_TABLES.md
• table_design/data_distribution/dynamic_partitioning.md
• sql-reference/sql-statements/table_bucket_part_index/SHOW_PARTITIONS.mdSangwon
07/14/2026, 12:09 AMRocky
07/14/2026, 12:09 AMmax_partition_number_per_table)상 *100,000개*까지 가능하지만, 이 수치에 가까워질수록 시스템 부하가 급격히 커집니다.
* 데이터 규모: 파티션 하나당 데이터 크기는 *약 100GB 이하*로 유지하는 것을 권장합니다.
2. 너무 많은 파티션이 생성될 때의 문제점
파티션 개수가 과도하게 많아지면(예: 수만 개 이상) 다음과 같은 문제가 발생할 수 있습니다.
* FE(Frontend) 부하: 모든 파티션 정보는 FE의 메모리에 메타데이터로 로드됩니다. 파티션이 너무 많으면 FE의 메모리 사용량이 급증하고, 쿼리 계획(Query Planning) 시간이 길어집니다.
* BE(Backend) 관리 부담: 각 파티션은 여러 개의 태블릿(Tablet)으로 구성되는데, 파티션이 많아질수록 전체 태블릿 수가 기하급수적으로 늘어납니다. 이는 BE의 파일 핸들러 소모 및 컴팩션(Compaction) 효율 저하로 이어집니다.
* 쓰기 증폭: 데이터 로드 시 너무 많은 파티션에 동시에 데이터가 써지면 리소스 소모가 심해집니다.
3. 파티션 설계를 위한 베스트 프랙티스
* 적절한 단위(Granularity) 선택:
* 데이터가 아주 많지 않다면 시간(Hour) 단위보다는 일(Day) 단위 파티션이 유리합니다.
* 과거 데이터는 월(Month) 단위로 합치는 등 *Mixed Granularity*(v3.4+)를 활용해 전체 개수를 줄일 수 있습니다.
* 태블릿 크기 최적화:
* 파티션 개수뿐만 아니라 *태블릿(Bucket) 개수*와의 조합이 중요합니다.
* 하나의 태블릿(압축 전 원시 데이터 기준) 크기가 100MB ~ 10GB 사이가 되도록 버킷 수를 조절하세요.
* 동적 파티션 활용:
* `dynamic_partition.start`와 end 설정을 통해 불필요하게 먼 미래나 아주 오래된 과거의 파티션이 미리 생성되어 있지 않도록 관리하세요.
결론적으로, 성능과 관리 편의성을 위해 테이블당 파티션 수를 *4,000개 내외*로 유지하고, 전체 클러스터의 BE 노드당 태블릿 수가 *20만 개*를 넘지 않도록 설계하는 것이 권장됩니다.
References
• best_practices/partitioning.md
• knowledge/usage/best-practice.md
• table_design/data_distribution/Data_distribution.md
• faq/Deploy_faq.md
• best_practices/bucketing.md
• best_practices/query_tuning/schema_tuning.md
• faq/operation_maintenance_faq.md
References
• faq/Deploy_faq.md
• faq/operation_maintenance_faq.md
• table_design/data_distribution/Data_distribution.md
• best_practices/primarykey_table.md
• best_practices/bucketing.md
• knowledge/usage/best-practice.mdSangwon
07/14/2026, 12:51 AMRocky
07/14/2026, 12:52 AMmax_partition_number_per_table: 테이블 하나당 생성 가능한 최대 파티션 수입니다. (기본값: v3.3.2 이상 기준 100,000개)
* max_dynamic_partition_num: 동적 파티션 설정 시 한 번에 생성 가능한 파티션 수 제한입니다. (기본값: 500개)
──────────
요약 및 가이드라인
구분 | 권장 사항 및 제한
클러스터 전체 | 고정된 제한은 없으나, FE 메모리와 BE 태블릿 수에 비례함
BE 노드당 태블릿 | 약 20만 ~ 50만 개 이하 권장
테이블당 파티션 | 기본 10만 개 (설정 가능하지만 수천 개 내외 권장)
파티션당 데이터 크기 | 약 100GB 이하 (또는 태블릿당 1GB~10GB)
결론적으로, "파티션 개수" 그 자체보다는 그로 인해 파생되는 *"총 태블릿(Tablet) 개수"*가 클러스터의 실제 한계를 결정합니다. 파티션을 너무 잘게 나누기보다는 데이터의 보관 주기(TTL)와 쿼리 성능을 고려하여 적절한 개수를 유지하는 것이 중요합니다.
References
• faq/Deploy_faq.md
• administration/management/FE_configuration.md
• faq/operation_maintenance_faq.md
• table_design/data_distribution/Data_distribution.md
References
• faq/Deploy_faq.md
• administration/management/FE_configuration.md
• faq/operation_maintenance_faq.md
• administration/management/BE_configuration.mdSangwon
07/14/2026, 12:52 AMRocky
07/14/2026, 12:52 AMSHOW TABLET 명령어를 사용합니다.
1. 테이블의 모든 테블릿 확인
테이블에 속한 모든 테블릿의 ID, 위치(Backend ID), 상태, 데이터 크기 등을 볼 수 있습니다.
sql
SHOW TABLET FROM 테이블명;
* 주요 출력 항목:
* `TabletId`: 테블릿의 고유 ID
* `BackendId`: 해당 테블릿(또는 복제본)이 저장된 BE 노드 ID
* `State`: 테블릿 상태 (NORMAL이면 정상)
* `DataSize`: 테블릿의 데이터 크기
* `RowCount`: 테블릿 내의 행 수
2. 특정 파티션의 테블릿만 확인
파티션이 많은 테이블에서 특정 파티션의 테블릿만 추려보고 싶을 때 사용합니다.
sql
SHOW TABLET FROM 테이블명 PARTITION(파티션명);
3. 특정 테블릿의 상세 정보 및 위치 확인
`SHOW TABLET FROM`으로 찾은 특정 `TabletId`를 가지고 더 상세한 정보(어느 DB, 어느 테이블 소속인지 등)를 확인하고 싶을 때 사용합니다.
sql
SHOW TABLET 테블릿ID;
-- 예시
SHOW TABLET 12345;
4. 기타 유용한 팁
* 개수 제한 및 정렬: 테블릿이 너무 많을 경우 `LIMIT`이나 `ORDER BY`를 함께 사용할 수 있습니다.
sql
-- 데이터 크기가 큰 순서대로 10개만 보기
SHOW TABLET FROM 테이블명 ORDER BY DataSize DESC LIMIT 10;
* 가독성 높이기: MySQL 클라이언트에서 보고 있다면 명령어 끝에 `\G`를 붙여 세로 형태로 출력하면 보기 편합니다.
sql
SHOW TABLET FROM 테이블명 LIMIT 1 \G
요약:
테이블 전체 테블릿 현황은 *`SHOW TABLET FROM 테이블명`*으로, 특정 테블릿의 상세 정보는 *`SHOW TABLET 테블릿ID`*로 확인하시면 됩니다.
References
• sql-reference/sql-statements/table_bucket_part_index/SHOW_TABLET.md
• knowledge/admin_and_operation/shared_data_compaction.md
• administration/management/BE_configuration.md
• sql-reference/sql-statements/table_bucket_part_index/SHOW_PARTITIONS.md
References
• sql-reference/sql-statements/table_bucket_part_index/SHOW_TABLET.md
• knowledge/admin_and_operation/shared_data_compaction.mdSangwon
07/14/2026, 12:53 AMSangwon
07/14/2026, 12:54 AMRocky
07/14/2026, 12:54 AMinformation_schema 시스템 뷰를 사용하는 것입니다.
1. 논리적 테블릿 개수 (Partition별 Buckets의 합)
테이블의 모든 파티션에 설정된 버킷(Buckets) 수를 합산한 수치입니다. (v3.1.9 / v3.2.4 이상 권장)
sql
SELECT TABLE_NAME, SUM(BUCKETS) AS total_logical_tablets
FROM information_schema.partitions_meta
WHERE TABLE_NAME = '테이블명' AND DB_NAME = '데이터베이스명'
GROUP BY TABLE_NAME;
2. 물리적 테블릿 개수 (복제본 포함 전체)
클러스터 전체 BE 노드에 실제로 생성되어 있는 테블릿(Replica)의 총합을 구하는 방법입니다.
sql
-- 먼저 테이블 ID를 확인합니다.
SELECT TABLE_ID FROM information_schema.tables WHERE TABLE_NAME = '테이블명';
-- 확인된 TABLE_ID를 사용하여 개수를 셉니다.
SELECT COUNT(*) AS total_physical_tablets
FROM information_schema.be_tablets
WHERE TABLE_ID = [위에서확인한_TABLE_ID];
_참고: `REPLICATION_NUM`이 3이라면, 물리적 개수는 논리적 개수의 약 3배가 됩니다._
3. 간단히 확인하기 (SHOW 명령어)
SQL 쿼리를 작성하기 번거롭다면 다음 명령어로 파티션별 버킷 수를 바로 확인할 수 있습니다.
sql
SHOW PARTITIONS FROM 테이블명;
* 출력 결과의 Buckets 컬럼 수치들을 더하면 전체 테블릿 개수가 됩니다.
요약
* 쿼리로 한 번에 확인: `information_schema.partitions_meta`에서 SUM(BUCKETS) 수행
* 복제본까지 포함한 전체 관리 현황: `information_schema.be_tablets`에서 COUNT(*) 수행
References
• knowledge/admin_and_operation/shared_data_compaction.md
• sql-reference/information_schema/be_tablets.md
• sql-reference/sql-statements/table_bucket_part_index/SHOW_TABLET.md
• administration/management/monitoring/metrics.md
• sql-reference/sql-statements/table_bucket_part_index/SHOW_PARTITIONS.md
References
• sql-reference/information_schema/be_tablets.md
• administration/management/monitoring/metrics.md
• knowledge/admin_and_operation/shared_data_compaction.mdSangwon
07/14/2026, 1:49 AMRocky
07/14/2026, 1:49 AMins_dt 컬럼에 현재 시스템 시간을 기본값으로 설정하려면 DATETIME 타입과 CURRENT_TIMESTAMP (또는 now()) 함수를 사용합니다.
1. 기본 사용법 (DATETIME 타입)
가장 일반적으로 사용하는 방식입니다. 데이터를 명시적으로 넣지 않으면 데이터가 입력되는 시점의 시간이 기록됩니다.
sql
CREATE TABLE example_table (
id BIGINT NOT NULL,
data VARCHAR(100),
-- 데이터 입력 시 현재 시간을 기본값으로 설정
ins_dt DATETIME DEFAULT CURRENT_TIMESTAMP
)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id);
2. 정밀도가 필요한 경우
밀리초(ms) 단위까지 저장하고 싶다면 `DATETIME(6)`와 같이 정밀도를 지정할 수 있습니다.
sql
CREATE TABLE example_table (
id BIGINT NOT NULL,
-- 마이크로초 단위(6자리)까지 포함하는 현재 시간
ins_dt DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6)
)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id);
주의사항 및 참고
1. 날짜만 필요한 경우: 시간 없이 날짜만 저장하고 싶다면 DATE 타입을 사용하고 `DEFAULT (curdate())`를 사용합니다. (StarRocks 2.5 버전 이상부터 표현식 기본값 지원)
sql
ins_dt DATE DEFAULT (curdate())
2. 업데이트 시 시간 자동 갱신: StarRocks는 현재 `ON UPDATE CURRENT_TIMESTAMP`와 같은 자동 업데이트 기능은 지원하지 않습니다. 이 값은 *최초 INSERT 시점*의 기록용으로 주로 사용됩니다.
3. 수동 입력: `DEFAULT`가 설정되어 있어도 `INSERT INTO ... VALUES (..., '2023-10-01 100000')`와 같이 명시적으로 값을 넣으면 해당 값이 우선적으로 입력됩니다.
가장 보편적인 *`DATETIME DEFAULT CURRENT_TIMESTAMP`*를 사용하시면 무난하게 시스템 시간을 기록하실 수 있습니다.
References
• sql-reference/sql-statements/table_bucket_part_index/CREATE_TABLE.md
• table_design/data_types/Datetime.md
• sql-reference/sql-functions/date-time-functions/now.md
• sql-reference/sql-functions/date-time-functions/current_timestamp.md