본문 바로가기
IT

TPC-C 벤치마크 tpc.org 공식 5.11 문서 분석 - 테이블 스키마와 구현 규칙

by eddy's warehouse 2024. 3. 21.

TPC-C 벤치마크는 tpc.org에서 표준으로 제정한 OLTP 트랜잭션 시스템에 대한 벤치마크 테스트입니다. 많은 DBMS 업체에서 이 TPC-C 벤치마크를 이용해서 OLTP 시스템에 대한 성능 평가를 진행합니다. tpc.org에 해당 문서를 살펴보면 약 130 페이지에 달하는 내용이 있는데 오늘은 이 내용에 대해서 정리해 보겠습니다.

TPC-C 벤치마크 tpc.org 공식 5.11 문서 분석 - 테이블 스키마와 구현 규칙 썸네일

1. 논리적인 데이터베이스 설계

TPC Benchmark™ C는 복잡한 OLTP 애플리케이션 환경을 대표하는 방식으로 시스템 기능을 실행하도록 설계된 일련의 기본 작업으로 구성되어 있습니다.
시스템 기능을 실행하도록 설계된 일련의 기본 작업으로 구성되어 있습니다. 이러한 기본 작업은 사용자가 벤치마크의 구성 요소를 직관적으로 이해할 수 있도록 도매 공급업체의 활동을 묘사하는 실제와 같은 컨텍스트가 부여되었습니다.

워크로드는 주문 처리 활동에 중점을 두고 있으며 논리적 데이터베이스 설계를 제공합니다,

TPC-C는 특정 비즈니스 부문의 활동이 아니라 제품이나 서비스를 관리, 판매 또는 유통해야 하는 모든 산업(예: 렌터카, 식품 유통, 부품 공급 등)을 대표합니다.

 

벤치마크에 묘사된 회사는 가상 회사로 지리적으로 분산된 여러 판매 지역과 관련 창고를 보유한 도매 공급업체입니다. 회사의 비즈니스가 확장됨에 따라 새로운 창고와 관련 판매 지역이 만들어집니다. 각 지역 창고는 10개 지역을 담당합니다. 각 지역은 3,000명의 고객에게 서비스를 제공합니다. 모든 창고는 회사가 판매하는 100,000개의 품목에 대한 재고를 유지합니다. 다음 다이어그램은 TPC-C의 비즈니스 환경의 창고, 지역구 및 고객 계층 구조를 보여줍니다.

tpcc의 논리적 로직 이해를 위한 그림

고객은 회사에 전화하여 새 주문을 하거나 기존 주문의 상태를 요청합니다. 주문은 평균 10개의 주문 라인(order lines)(즉, 품목: line items)으로 구성됩니다. 전체 주문 라인의 1%는 지역 창고에 재고가 없어 다른 창고에서 공급해야 하는 품목에 대한 주문입니다.
또한 회사의 시스템은 고객의 결제를 입력하고, 배송 주문을 처리하고, 재고 수준을 조사하여 잠재적인 공급 부족을 파악하는 데 사용됩니다.

 

2. 데이터베이스 구성 요소 (ER-Diagram과 속성)

TPC-C 데이터베이스의 구성 요소는 9개의 개별적인 테이블로 구성되도록 정의되어 있습니다.
이러한 테이블 간의 관계는 아래에 표시된 엔티티 관계 다이어그램에 정의되어 있으며 다음과 같은 규칙이 적용됩니다.

tpcc ER 다이어그램

- 표시된 모든 숫자는 데이터베이스 모집단 요구 사항을 나타냅니다(4.3절 참조).
- 엔티티 블록의 숫자는 테이블의 카디널리티(행 수)를 나타냅니다. 이 숫자는창고 수인 W를 곱하여 데이터베이스 사이즈가(scaleing factor) 결정될 수 있습니다. (4절 참조).
- 관계 화살표 옆의 숫자는 관계의 카디널리티(부모 레코드 당 평균 자식 레코드 수)를 나타냅니다.
- 더하기(+) 기호는 관계 또는 테이블의 카디널리티 뒤에 사용되어 행이 추가되거나 삭제될 때 이 숫자가 측정 간격 동안 초기 데이터베이스와 달라질 수 있음을 나타냅니다. (5.5절 참조).

 

3. 테이블 스키마 및 레이아웃

테이블 레이아웃

테이블 레이아웃을 소개하기전에 테이블 레이아웃 표기에 나타난 항목에 대한 설명을 아래에 먼저 설명드립니다.

 

- N unique IDs: 속성(컬럼,필드)이 최소 N개의 유니크 ID 집합 내에서 하나의 ID를 보유할 수 있어야 함을 의미합니다. 쉽게 이야기하면, N개의 레코드에서 유일값을 갖는 ID가 되어야 한다는 의미입니다.
- variable text, size N: 속성이 가변 길이의 문자 문자열을 포함할 수 있어야 함을 의미합니다.
만약 속성(컬럼)이 고정 길이 문자열로 저장되어 있다면 저장된 문자열이 N 문자보다 짧으면 보다 짧으면 공백으로 채워야 합니다. (*하지만, 일반적으로 varchar를 사용하는 경우에는 공백을 채울 필요는 없습니다. )

 

- fixed text, size N: 속성이 고정 길이 N의 모든 문자 문자열을 포함할 수 있어야 함을 의미합니다.

- date and time: 날짜 및 시간은 시간 구성 요소를 포함하는 날짜 값의 데이터 유형을 나타냅니다. 날짜 구성 요소는 1900년 1월 1일에서 2100년 12월 31일 사이의 날짜를 포함할 수 있어야 합니다. 시간 구성 요소는 다음과 같아야 합니다. 00:00:00~23:59:59의 시간 값 범위를 최소 1초 단위로 나타낼 수 있어야 합니다. 날짜 및 시간은 해당 용도에 맞게 DBMS에서 정의한 데이터 유형을 사용하여 구현해야 합니다.

- numeric(m [,n]): 총 소수점 자릿수가 m 이상인 부호 없는 숫자 값으로, 이 중 소수점 오른쪽(뒤)에 n 자리가 있는 값을 의미합니다. 이 속성은 numeric(m,n)으로 표현할 수 있는 모든 가능한 값을 포함할 수 있어야 합니다. numeric(m)에서와 같이 n을 생략하면 numeric(m,0)과 동일한 값을 나타냅니다. 화폐 값을 포함하는 숫자 필드(W_YTD, D_YTD, C_CREDIT_LIM, C_BALANCE, C_YTD_PAYMENT, H_AMOUNT, OL_AMOUNT, I_PRICE)는 DBMS에서 정확한 numeric 데이터 타입으로 정의하거나 정확한 숫자 표현의 ANSI SQL 표준 정의를 충족하는 데이터 타입을 사용해야 합니다.

- signed numeric(m [,n]): 양수 및 음수 값을 모두 나타낼 수 있다는 점을 제외하면 숫자(m [,n])와 동일합니다.

- null: 주어진 속성(컬럼)에 대해 유효한 값의 범위를 벗어난 것을 의미하며 항상 동일한 값을 의미합니다.

 

아래에 테이블 레이아웃과 주석이 있으니 참고하면 됩니다.

[		WAREHOUSE	Table	Layout		]												 
																		
Field Name		Field	Definition				Comments											
W_ID		    2*W	unique	IDs			        W	Warehouses	are	populated								
W_NAME		    variable	text,	size	10													
W_STREET_1		variable	text,	size	20													
W_STREET_2		variable	text,	size	20													
W_CITY		    variable	text,	size	20													
W_STATE		    fixed	text,	size	2													
W_ZIP		    fixed	text,	size	9													
W_TAX		    signed	numeric(4,4)			Sales	tax										
W_YTD		    signed	numeric(12,2)			Year	to	date	balance								
Primary		Primary Key:	W_ID															
																		
[		DISTRICT	Table	Layout	]													
																		
Field		Field	Definition				Comments											
D_ID		20	unique	IDs			        10 are	populated	per	warehouse							
D_W_ID		2*W	unique	IDs														
D_NAME		variable	text,	size	10													
D_STREET_1	variable	text,	size	20													
D_STREET_2	variable	text,	size	20													
D_CITY		variable	text,	size	20													
D_STATE		fixed	text,	size	2													
D_ZIP		fixed	text,	size	9													
D_TAX		signed	numeric(4,4)			Sales	tax										
D_YTD		signed	numeric(12,2)			Year	to	date	balance								
D_NEXT_O_ID	10,000,000	unique	IDs			Next	available	Order	number								
Primary		Key:	(D_W_ID,	D_ID)														
D_W_ID		Foreign	Key,	references	W_ID													
																		
																		
[		CUSTOMER	Table	Layout	]													
																		
Field		    Field	Definition				Comments											
C_ID		    96,000	unique	IDs			    3,000	are	populated	per	district							
C_D_ID		    20	unique	IDs														
C_W_ID		    2*W	unique	IDs														
C_FIRST		    variable	text,	size	16													
C_MIDDLE	    fixed	text,	size	2													
C_LAST		    variable	text,	size	16													
C_STREET_1	    variable	text,	size	20													
C_STREET_2	    variable	text,	size	20													
C_CITY		    variable	text,	size	20													
C_STATE		    fixed	text,	size	2													
C_ZIP		    fixed	text,	size	9													
C_PHONE		    fixed	text,	size	16													
C_SINCE		    date	and	time														
C_CREDIT		fixed	text,	size	2		GC=good,	BC=bad										
C_CREDIT_LIM	signed	numeric(12,	2)														
C_DISCOUNT		signed	numeric(4,	4)														
C_BALANCE		signed	numeric(12,	2)														
C_YTD_PAYMENT	signed	numeric(12,	2)														
C_PAYMENT_CNT	numeric(4)																
C_DELIVERY_CNT	numeric(4)																
C_DATA		variable	text,	size	500		Miscellaneous	information										
Primary Key:	(C_W_ID,	C_D_ID,	C_ID)													
(C_W_ID, C_D_ID)	Foreign	Key,	references (D_W_ID, D_ID)													
																		
[		HISTORY	Table	Layout	]													
																		
Field Name		Field	Definition				Comments											
H_C_ID		    96,000	unique	IDs														
H_C_D_ID		20	unique	IDs														
H_C_W_ID		2*W	unique	IDs														
H_D_ID		    20	unique	IDs														
H_W_ID		    2*W	unique	IDs														
H_DATE		    date and	time														
H_AMOUNT		signed	numeric(6,	2)														
H_DATA		    variable	text,	size 24		Miscellaneous	information										
Primary		Key:	none															
(H_C_W_ID,		H_C_D_ID,	H_C_ID)	Foreign	Key,		references	(C_W_ID,	C_D_ID,	C_ID)								
(H_W_ID,		H_D_ID)	Foreign	Key,	references		(D_W_ID,	D_ID)										
Comment:		Rows	in	the	History		table	do	not	have	a	primary	key	as,	within	the	context	of
benchmark,		there	is	no	need		to	uniquely	identify	a	row	within	this	table.				
Note:		The	TPC-C	application	does		not	have	to	be	capable	of	utilizing	the	increased	range	of	C_ID
values		beyond	6,000.00															
																		
[		NEW-ORDER	Table	Layout	]													
																		
Field		Field	Definition				Comments											
NO_O_ID		10,000,000	unique	IDs														
NO_D_ID		20	unique	IDs														
NO_W_ID		2*W	unique	IDs														
Primary		Key:	(NO_W_ID,	NO_D_ID,	NO_O_ID)													
(NO_W_ID,		NO_D_ID,	NO_O_ID)	Foreign	Key,		references	(O_W_ID,	O_D_ID, O_ID)								
																		
[		ORDER	Table	Layout	]													
																		
Field		    Field	Definition				Comments											
O_ID		    10,000,000	unique	IDs														
O_D_ID		    20	unique	IDs														
O_W_ID		    2*W	unique	IDs														
O_C_ID		    96,000	unique	IDs														
O_ENTRY_D		date	and	time														
O_CARRIER_ID	10	unique	IDs, or null													
O_OL_CNT		numeric(2)					    Count	of	Order-Lines									
O_ALL_LOCAL		numeric(1)																
Primary		Key:	(O_W_ID,	O_D_ID,	O_ID)													
(O_W_ID,		O_D_ID,	O_C_ID)	Foreign	Key,		references	(C_W_ID,	C_D_ID,	C_ID)								
																		
[		ORDER-LINE	Table	Layout	]													
																		
Field		Name	Field	Definition			Comments											
OL_O_ID		        10,000,000	unique	IDs														
OL_D_ID		        20	unique	IDs														
OL_W_ID		        2*W	unique	IDs														
OL_NUMBER		    15	unique	IDs														
OL_I_ID		        200,000	unique	IDs														
OL_SUPPLY_W_ID		2*W	unique	IDs														
OL_DELIVERY_D		date	and	time,	or null													
OL_QUANTITY		    numeric(2)																
OL_AMOUNT		    signed	numeric(6,	2)														
OL_DIST_INFO		fixed	text,	size	24													
Primary		Key:	(OL_W_ID,	OL_D_ID,	OL_O_ID,		OL_NUMBER)											
(OL_W_ID,		OL_D_ID,	OL_O_ID)	Foreign	Key,		references	(O_W_ID,	O_D_ID,	O_ID)								
(OL_SUPPLY_W_ID,		OL_I_ID)	Foreign	Key,	references		(S_W_ID,	S_I_ID)										
																		
																		
[	ITEM	Table	Layout	]													
																		
Field Name		Field	Definition				Comments											
I_ID		    200,000	unique	IDs			    100,000	items	are	populated								
I_IM_ID		    200,000	unique	IDs			    Image	ID	associated	to	Item							
I_NAME		    variable	text,	size	24													
I_PRICE		    numeric(5,	2)															
I_DATA		    variable	text,	size	50	Brand	information										
Primary		Key:	I_ID															
																		
																		
[	STOCK	Table	Layout	]													
																		
Field		Field	Definition				Comments											
S_I_ID		200,000	unique	IDs			100,000	populated	per	warehouse								
S_W_ID		2*W	unique	IDs														
S_QUANTITY		signed	numeric(4)															
S_DIST_01		fixed	text,	size	24													
S_DIST_02		fixed	text,	size	24													
S_DIST_03		fixed	text,	size	24													
S_DIST_04		fixed	text,	size	24													
S_DIST_05		fixed	text,	size	24													
S_DIST_06		fixed	text,	size	24													
S_DIST_07		fixed	text,	size	24													
S_DIST_08		fixed	text,	size	24													
S_DIST_09		fixed	text,	size	24													
S_DIST_10		fixed	text,	size	24													
S_YTD		    numeric(8)																
S_ORDER_CNT		numeric(4)																
S_REMOTE_CNT	numeric(4)																
S_DATA		    variable	text,	size	50		Make	information										
Primary		Key:	(S_W_ID,	S_I_ID)														
S_W_ID		Foreign	Key,	references	W_ID													
S_I_ID		Foreign	Key,	references	I_ID

mysql 또는 mariadb tpc-c 테이블 DDL

위의 테이블 레이아웃을 통해 작성된 실제 mariadb에 적용하는 테이블에 대한 DDL을 작성해 보았습니다.

CREATE TABLE IF NOT EXISTS WAREHOUSE (
  W_ID SMALLINT DEFAULT '0' NOT NULL,
  W_NAME VARCHAR(16) DEFAULT NULL,
  W_STREET_1 VARCHAR(32) DEFAULT NULL,
  W_STREET_2 VARCHAR(32) DEFAULT NULL,
  W_CITY VARCHAR(32) DEFAULT NULL,
  W_STATE VARCHAR(2) DEFAULT NULL,
  W_ZIP VARCHAR(9) DEFAULT NULL,
  W_TAX FLOAT DEFAULT NULL,
  W_YTD FLOAT DEFAULT NULL,
  CONSTRAINT W_PK_ARRAY PRIMARY KEY (W_ID)
);

CREATE TABLE IF NOT EXISTS DISTRICT (
  D_ID TINYINT DEFAULT '0' NOT NULL,
  D_W_ID SMALLINT DEFAULT '0' NOT NULL REFERENCES WAREHOUSE (W_ID),
  D_NAME VARCHAR(16) DEFAULT NULL,
  D_STREET_1 VARCHAR(32) DEFAULT NULL,
  D_STREET_2 VARCHAR(32) DEFAULT NULL,
  D_CITY VARCHAR(32) DEFAULT NULL,
  D_STATE VARCHAR(2) DEFAULT NULL,
  D_ZIP VARCHAR(9) DEFAULT NULL,
  D_TAX FLOAT DEFAULT NULL,
  D_YTD FLOAT DEFAULT NULL,
  D_NEXT_O_ID INT DEFAULT NULL,
  PRIMARY KEY (D_W_ID,D_ID)
);

CREATE TABLE IF NOT EXISTS ITEM (
  I_ID INTEGER DEFAULT '0' NOT NULL,
  I_IM_ID INTEGER DEFAULT NULL,
  I_NAME VARCHAR(32) DEFAULT NULL,
  I_PRICE FLOAT DEFAULT NULL,
  I_DATA VARCHAR(64) DEFAULT NULL,
  CONSTRAINT I_PK_ARRAY PRIMARY KEY (I_ID)
);

CREATE TABLE IF NOT EXISTS CUSTOMER (
  C_ID INTEGER DEFAULT '0' NOT NULL,
  C_D_ID TINYINT DEFAULT '0' NOT NULL,
  C_W_ID SMALLINT DEFAULT '0' NOT NULL,
  C_FIRST VARCHAR(32) DEFAULT NULL,
  C_MIDDLE VARCHAR(2) DEFAULT NULL,
  C_LAST VARCHAR(32) DEFAULT NULL,
  C_STREET_1 VARCHAR(32) DEFAULT NULL,
  C_STREET_2 VARCHAR(32) DEFAULT NULL,
  C_CITY VARCHAR(32) DEFAULT NULL,
  C_STATE VARCHAR(2) DEFAULT NULL,
  C_ZIP VARCHAR(9) DEFAULT NULL,
  C_PHONE VARCHAR(32) DEFAULT NULL,
  C_SINCE TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
  C_CREDIT VARCHAR(2) DEFAULT NULL,
  C_CREDIT_LIM FLOAT DEFAULT NULL,
  C_DISCOUNT FLOAT DEFAULT NULL,
  C_BALANCE FLOAT DEFAULT NULL,
  C_YTD_PAYMENT FLOAT DEFAULT NULL,
  C_PAYMENT_CNT INTEGER DEFAULT NULL,
  C_DELIVERY_CNT INTEGER DEFAULT NULL,
  -- C_DATA VARCHAR(1000),
  C_DATA TEXT(500),
  PRIMARY KEY (C_W_ID,C_D_ID,C_ID),
  UNIQUE (C_W_ID,C_D_ID,C_LAST,C_FIRST)
  -- CONSTRAINT C_FKEY_D FOREIGN KEY (C_W_ID, C_D_ID) REFERENCES DISTRICT (D_W_ID, D_ID)
);
CREATE INDEX IDX_CUSTOMER ON CUSTOMER (C_W_ID,C_D_ID,C_LAST);

CREATE TABLE IF NOT EXISTS HISTORY (
  H_C_ID INTEGER DEFAULT NULL,
  H_C_D_ID TINYINT DEFAULT NULL,
  H_C_W_ID SMALLINT DEFAULT NULL,
  H_D_ID TINYINT DEFAULT NULL,
  H_W_ID SMALLINT DEFAULT '0' NOT NULL,
  H_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
  H_AMOUNT FLOAT DEFAULT NULL,
  H_DATA VARCHAR(32) DEFAULT NULL
  -- CONSTRAINT H_FKEY_C FOREIGN KEY (H_C_W_ID, H_C_D_ID, H_C_ID) REFERENCES CUSTOMER (C_W_ID,C_D_ID,C_ID) ,
  -- CONSTRAINT H_FKEY_D FOREIGN KEY (H_W_ID, H_D_ID) REFERENCES DISTRICT (D_W_ID, D_ID)
);

CREATE TABLE IF NOT EXISTS STOCK (
  S_I_ID INTEGER DEFAULT '0' NOT NULL REFERENCES ITEM (I_ID),
  S_W_ID SMALLINT DEFAULT '0 ' NOT NULL REFERENCES WAREHOUSE (W_ID),
  S_QUANTITY INTEGER DEFAULT '0' NOT NULL,
  S_DIST_01 VARCHAR(32) DEFAULT NULL,
  S_DIST_02 VARCHAR(32) DEFAULT NULL,
  S_DIST_03 VARCHAR(32) DEFAULT NULL,
  S_DIST_04 VARCHAR(32) DEFAULT NULL,
  S_DIST_05 VARCHAR(32) DEFAULT NULL,
  S_DIST_06 VARCHAR(32) DEFAULT NULL,
  S_DIST_07 VARCHAR(32) DEFAULT NULL,
  S_DIST_08 VARCHAR(32) DEFAULT NULL,
  S_DIST_09 VARCHAR(32) DEFAULT NULL,
  S_DIST_10 VARCHAR(32) DEFAULT NULL,
  S_YTD INTEGER DEFAULT NULL,
  S_ORDER_CNT INTEGER DEFAULT NULL,
  S_REMOTE_CNT INTEGER DEFAULT NULL,
  S_DATA VARCHAR(64) DEFAULT NULL,
  PRIMARY KEY (S_W_ID,S_I_ID)
);

CREATE TABLE IF NOT EXISTS ORDERS (
  O_ID INTEGER DEFAULT '0' NOT NULL,
  O_C_ID INTEGER DEFAULT NULL,
  O_D_ID TINYINT DEFAULT '0' NOT NULL,
  O_W_ID SMALLINT DEFAULT '0' NOT NULL,
  O_ENTRY_D TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
  O_CARRIER_ID INTEGER DEFAULT NULL,
  O_OL_CNT INTEGER DEFAULT NULL,
  O_ALL_LOCAL INTEGER DEFAULT NULL,
  PRIMARY KEY (O_W_ID,O_D_ID,O_ID),
  UNIQUE (O_W_ID,O_D_ID,O_C_ID,O_ID)
  -- CONSTRAINT O_FKEY_C FOREIGN KEY (O_W_ID, O_D_ID, O_C_ID) REFERENCES CUSTOMER (C_W_ID,C_D_ID,C_ID)
);
CREATE INDEX IDX_ORDERS ON ORDERS (O_W_ID,O_D_ID,O_C_ID);

CREATE TABLE IF NOT EXISTS NEW_ORDER (
  NO_O_ID INTEGER DEFAULT '0' NOT NULL,
  NO_D_ID TINYINT DEFAULT '0' NOT NULL,
  NO_W_ID SMALLINT DEFAULT '0' NOT NULL,
  CONSTRAINT NO_PK_TREE PRIMARY KEY (NO_D_ID,NO_W_ID,NO_O_ID)
  -- CONSTRAINT NO_FKEY_O FOREIGN KEY (NO_W_ID, NO_D_ID, NO_O_ID) REFERENCES ORDERS (O_W_ID,O_D_ID,O_ID)
);

CREATE TABLE IF NOT EXISTS ORDER_LINE (
  OL_O_ID INTEGER DEFAULT '0' NOT NULL,
  OL_D_ID TINYINT DEFAULT '0' NOT NULL,
  OL_W_ID SMALLINT DEFAULT '0' NOT NULL,
  OL_NUMBER INTEGER DEFAULT '0' NOT NULL,
  OL_I_ID INTEGER DEFAULT NULL,
  OL_SUPPLY_W_ID SMALLINT DEFAULT NULL,
  OL_DELIVERY_D TIMESTAMP DEFAULT NULL,
  OL_QUANTITY INTEGER DEFAULT NULL,
  OL_AMOUNT FLOAT DEFAULT NULL,
  OL_DIST_INFO VARCHAR(32) DEFAULT NULL,
  PRIMARY KEY (OL_W_ID,OL_D_ID,OL_O_ID,OL_NUMBER)
  -- CONSTRAINT OL_FKEY_O FOREIGN KEY (OL_W_ID, OL_D_ID, OL_O_ID) REFERENCES ORDERS (O_W_ID, O_D_ID, O_ID )
  -- CONSTRAINT OL_FKEY_S FOREIGN KEY (OL_I_ID, OL_SUPPLY_W_ID) REFERENCES STOCK (S_I_ID, S_W_ID)
);
--CREATE INDEX IDX_ORDER_LINE_3COL ON ORDER_LINE (OL_W_ID,OL_D_ID,OL_O_ID);
--CREATE INDEX IDX_ORDER_LINE_2COL ON ORDER_LINE (OL_W_ID,OL_D_ID);
CREATE INDEX IDX_ORDER_LINE_TREE ON ORDER_LINE (OL_W_ID,OL_D_ID,OL_O_ID);

 

 

구현 규칙

TPC-C 문서에 다음과 같이 구현 규칙이 설명되어 있습니다.

 

1. 데이터베이스 내에서 레코드의 물리적 클러스터링이 허용됩니다.

 

2. 논리적 읽기/쓰기를 피하기 위해 행을 다르게 표현하는 뷰(View)는 제외됩니다.

2번 조항의 목적은 애플리케이션이 보기를 사용하여 여러 연산을 하나로 결합하지 않고 트랜잭션 프로필에 정의된 의 논리 연산을 구현하도록 하는 것입니다.

 

3. 모든 테이블에는 데이터베이스 크기 요구 사항에 정의된 대로 적절하게 조정된 레코드 수가 있어야 합니다.

 

4. 테이블의 수평, 수직 분할, 즉 파티션이 허용됩니다. 테이블의 행 그룹을 다른 파일, 디스크 또는 영역에 할당할 수 있습니다. 이러한 파티셔닝을 구현하는 경우 해당 파티셔닝의 세부 정보를 공개해야 합니다.

 

위의 파티션에서 데이터의 논리적 구조에 대한 지식(예: 행 또는 속성 경계에 대한 지식)에 근거하지 않고 데이터를 다른 파일, 디스크 또는 영역에 할당하는 것은 파티셔닝으로 간주되지 않습니다. 예를 들어, 하나 이상의 논리 테이블을 저장하는 물리적 파일을 여러 디스크에 분산하거나 제거하는 것은 물리적 파일에 저장된 논리 구조에 대한 지식 없이 하드웨어 또는 운영 체제에 의해 수행되는 한 파티셔닝으로 간주되지 않습니다.

결론적으로, 데이터베이스에서 파티셔닝을 한 것을 제외하고는 파일을 분리하거나 하는 경우에는 파티셔닝으로 간주하지 않기 때문에 세부정보를 공개할 필요가 없습니다.

 

5. 모든 테이블에 대해 복제가 허용됩니다. 복제되는 테이블의 모든 사본 원자성, 일관성 및 격리 요건을 모두 충족해야 합니다. 복제가 구현된 경우 해당 복제에 대한 세부 정보를 공개해야 합니다.

복제된 테이블은 사본 중 하나만 지속성을 만족하면 됩니다.

 

6. 성능 개선과 관계없는 경우 속성(필드)을 추가하거나 중복시킬 수 있습니다.

 

7. 각 속성(필드)은 논리적으로 분리되어 있어야 하며 데이터 관리자가 독립적으로 액세스 할 수 있어야 합니다.
예를 들어, W_STREET_1과 W_STREET_2는 W_STREET로 합쳐질 수 없습니다.

또는, S_DATA는 S_DATA_1과 S_DATA_2로 나뉘어질 수 없습니다.

 

8. 각 테이블의 기본 키는 행의 물리적 디스크 주소나 그 오프셋을 직접 나타내서는 안 됩니다. 행은 단순히 저장 공간의 시작 부분에서 오프셋 되기 때문에 애플리케이션은 상대 주소 지정을 사용하여 행을 참조할 수 없습니다. 이는 일반적인 처리 과정에서 레코드를 추가, 삭제 및 수정하는 조항이 있는 해싱 체계 또는 기타 파일 조직을 배제하지 않습니다.

예외: History 테이블은 상대 주소 지정을 사용할 수 있지만 다른 모든 요구 사항이 적용됩니다.

이 조항의 의도는 트랜잭션을 실행하거나 트랜잭션 요청을 제출하는 애플리케이션 프로그램(2.1.7항 참조)이 모든 액세스에 물리적 ID 식별자가 아닌 논리적 식별자를 사용하고, 논리적 키를 관련 행의 테이블 내 위치로 번역하거나 번역을 보조하는 사용자 작성 코드를 포함하지 않도록 하는 것입니다.
예를 들어, 애플리케이션이 논리적 주소에서 물리적 주소로의 '번역 테이블'을 작성하여 성능 향상을 위해 사용하는 것은 합법적이지 않습니다.

 

내부 레코드 또는 행 식별자(예: 튜플 ID 또는 커서)는 다음과 같은 조건에서 사용할 수 있습니다.
실행된 각 트랜잭션에 대해 행에 대한 초기 액세스는 트랜잭션 프로필에 지정된 키를 통해 이루어져야 하며 다른 속성을 통해서는 안 됩니다. 초기 액세스에는 모든 행의 삽입, 삭제, 검색 및 업데이트가 포함됩니다.

 

9. 모든 테이블에서 삽입 및 삭제가 수행되는 것은 아니지만, 테스트 중에 이 사실을 특별히 활용하도록 시스템을 구성해서는 안 됩니다. 삽입은 본질적으로 구성된 시스템에서 사용 가능한 저장 공간에 의해 제한되지만, 테이블 카디널리티의 5%에 해당하는 최소 행 수와 해당 테이블에 존재하는 키 값 범위의 두 배 이상의 키 값을 사용하여 테이블에 삽입하는 데는 제한이 없어야 합니다.

추가 5% 테이블 카디널리티를 위한 공간은 테스트 실행을 위해 구성되고 그에 따라 가격이 책정되어야 합니다. 나중에 공간을 구성하고 동적으로 할당하는 시스템의 경우, 이 공간은 할당된 것으로 간주하고 가격을 책정할 때 정적 공간으로 포함해야 합니다.

 

10. 애플리케이션 프로그램의 일부로 수행되는 모든 계산의 최소 소수점 정밀도는 해당 계산의 모든 개별 항목의 최대 소수점 정밀도여야 합니다.

 

11. 테이블 속성 가변 텍스트, 고정 텍스트, 날짜 및 시간, 숫자는 해당 속성에 대해 정의된 유형의 데이터를 저장하는 것이 문서화된 목적인 데이터 관리 시스템(즉, 애플리케이션 프로그램이 아닌)의 기본 데이터 유형을 사용하여 구현해야 합니다. 예를 들어 날짜 및 시간은 날짜 및 시간 정보를 저장하도록 설계된 기본 데이터 유형으로 구현해야 합니다.

 

오늘은 데이터베이스의 성능을 측정하는 tpc.org의 표준 벤치마크인 tpc-c에 대해서 알아보았습니다.

해당 표준 문서는 130 페이지가량 되는데, 오늘은 그중 앞 부분의 개략적인 내용과 테이블 구조에 대해서 알아보았고, 구현 규칙까지 알아보았습니다.

전체 문서는 아래에 첨부하오니 참고하시고 추가 내용은 이어서 정리하도록 하겠습니다.

tpc-c_v5.11.0 (1).pdf
1.06MB

 

facebook twitter kakaoTalk kakaostory naver band shareLink