Benchmarking
performance를 평가하는 지표이다.
DB benchmark 종류
- OLTP
사용자 요청(transaction)이 빈번하게 발생하고, 각 요청이 작고 빠르게 처리되어야하는 시스템이다.
짧고 간단한 쿼리로 구성되며 높은 동시성을 가진다.
- OLAP
대용량 데이터를 바탕으로 복잡한 분석 및 리포팅 작업을 수행하는 시스템이다.
실시간성보다는 분석 정확성을 중시한다.
- HTAP
OLTP와 OLAP를 동시에 처리하는 시스템이다.
TPC-C Scenario
New-Order, Payment, Order-Status, Delivery, Stock-Level에 대해 작업을 수행하고 benchmark를 평가할 수있다.
- Data model: WAREHOUSE, DISTRICT, CUSTOMER, ORDERS, ITEM과 같은 table을 포함한다.
- Concurrency: users들이 동시에 접속해서 update할 수있기 때문에 충돌이 안되게 해야한다.
벤치마크는 파라미터를 설정하여 다양한 크기, 시간에 대해 평가 할 수있다.
cd /root/benchbase/target/benchbase-postgres/config/postgres
vim sample_tpcc_config.xml
TPC-C 벤치마크 설정 파일에 들어가면
다음과 같이 time, scalefactor를 설정할 수 있다.
time은 어느 시간동안 수행하겠다는 의미이고 scalefactor는 얼만큼의 data를 처리하는지에 대한 값이다.
java -jar benchbase.jar -b tpcc -c /root/benchbase/target/benchbase-postgres/config/postgres/sample_tpcc_config.xml --create=true --load=true --execute=true
에서 create을 통해 테이블을 형성할 것 인지, load는 준비된 테이블에 데이터를 넣겠다는 것이고 execute는 실행하겠다는 의미로 여기서 원하는 benchmark수행에 따라 정하면 된다.
실행결과를 보면 초당 약 700개의 transaction을 처리 하는 것이다.
SQL Practice
TPC-C table을 보려면(https://github.com/cmu-db/benchbase/wiki/TPC-C)
\d
table에 대한 자세한 정보를 얻으려면 table이름를 다음과 같이 입력한다.
\d customer
- oorder
각 주문에 대한 일반적인 정보를 저장한다.
누가 주문했는지, 언제 주문했는지, 몇개의 아이템을 주문했는지
- new_order
아직 배송되지 않은 주문들을 추적한다.
주문이 새로 생성되면 이 테이블에 한 행이 추가된다.
해당 주문이 배송을 위해 선택 되면, 이 테이블에서 삭제된다.
- order_line
주문 내에 포함된 각 개별 상품의 상세정보를 저장한다.
어떤 상품이 주문됐는지, 수량은 얼마나 되는지, 금액은 얼마인지에 해당한다.
SQL practice1: I_DATA 컬럼에 "original"이라는 단어가 포함된 상품의 개수
SELECT COUNT(*) AS original_item_count FROM item WHERE i_data ILIKE"%original%";
SQL practice2: 재고 수량이 20 미만인 품목의 정보(I_ID,I_NAME,S_QUANTITY)를 10개만 조회
SELECT s.s_i_id,i.i_name,s.s_quantity FROM stock s JOIN item i ON i.i_id =s.s_i_id where s.s_quantity <20 limit 10;
SQL practice3:각 지역별로 배송되지 않은 주문(new_order)수를 구하여라
new_order table의 column들에 대해 설명해보면
- no_w_id: 주문이 속한 창고(warehouse)를 나타낸다.
- no_d_id: 주문이 속한 지점(district)의 ID이다.
- no_o_id: 주문 번호(order id)이다.
SELECT no_d_id,COUNT(*) AS pending_orders FROM new_order GROUP BY no_d_id ORDER BY no_d_id;
SQL practice4: 각 지역별로 고객의 평균 지불 금액을 구하시오.
SELECT c_d_id, AVG(C_YTD_PAYMENT) AS avg_payment FROM customer GROUP BY c_d_id ORDER BY c_d_id;
SQL practice5: 가장 많이 주문된 상품 5개를 수량 기준으로 조회하세요.
SELECT ol_i_id,SUM(ol_quantity) AS total_quantity FROM order_line GROUP BY ol_i_id ORDER BY total_quantity DESC LIMINT 5;
'Computing' 카테고리의 다른 글
[C++] Operator Overloading에 대해 알아보기 (0) | 2025.04.07 |
---|---|
[빅데이터 및 지식관리시스템] SQL에서 모든 것에 대한 만족을 표현하고 싶을때..? (0) | 2025.04.06 |
[C++] Function Overloading과 Template (0) | 2025.04.02 |
[빅데이터 및 지식관리시스템] Nested query와 Aggregate Operations (0) | 2025.04.01 |
[C++] Pointers and References part 1 (0) | 2025.03.25 |