본문 바로가기

프로젝트/APM Web Server 개발

(5)
[트랜잭션, EM]네이티브 쿼리 임시 테이블 미적용 문제 (24.06.17) 최근 프로젝트에서 JPA를 사용하여 네이티브 쿼리를 실행하는 도중 임시 테이블에 데이터가 삽입되지 않는 문제를 겪었다. 원인을 트러블슈팅한 결과를 여기에 정리한다.문제 상황JPA 네이티브 쿼리를 사용하여 임시 테이블에 데이터를 삽입하고 이를 기반으로 조회하는 로직을 구현했다.하지만, 데이터가 임시 테이블에 삽입되지 않는 문제가 발생했다. 로그를 확인한 결과, 데이터가 삽입되는 과정에서는 문제가 없었지만 조회할 때는 데이터가 없는 것으로 나타났다.@Service@RequiredArgsConstructorpublic class SpansServiceImpl implements SpansService { private final ResourceService resourceServiceImpl; pr..
(in 연산 → join) 및 커스텀 NativeQuery (24.06.14) 현재현재 사용하고 있는 IN 연산 최적화에 대한 접근 방식은 다음과 같다시간 단위로 파티셔닝을 통해 필요한 데이터의 범위를 줄인 후,(where created_at between (a, b) .. create_at을 기준으로 파티셔닝)IN 연산을 사용하여 특정 조건의 값들을 필터링하고 있음.이 과정에서 IN SET의 경우 SET을 사용하며, 최대 배치 사이즈 = 5000으로 실시한 뒤 스플릿하여 IO를 여러 번 보내고 있음.//조회 로직 중 일부 public List getSpansUseTraceIdSet(List inputTraceIdSet, Long minTime, Long maxTime ) { try { Timestamp createdAtMin = new Timest..
PostgreSQL partioning table (24.06.11) PostgreSQL Partitioning Table1. 개념 정의Partitioning Table: 대량의 데이터를 효율적으로 관리하고 조회 성능을 향상시키기 위해 테이블을 작은 단위(파티션)로 나누는 기술이다. 각 파티션은 독립된 테이블처럼 동작하며, 전체 테이블은 이러한 파티션의 집합으로 관리된다.2. 파티셔닝의 종류Range Partitioning: 특정 열의 값 범위에 따라 데이터를 나눈다.예시: 날짜 열을 기준으로 월별로 데이터를 분할.CREATE TABLE measurement ( city_id int, logdate date, peaktemp int, unitsales int) PARTITION BY RANGE (lo..
JSONB 타입 다뤄보기 - 1 (24.05.22) PostgreSQL의 경우 다른 RDB와 달리, 특별한 타입의 데이터를 저장할 수 있다.Attribute로 bigint가 아니고 bigint[]의 배열 형태나, JSONB 등의 조금 더 자유로운 데이터 타입으로 저장할 수 있다는 점이다.이것은 실제 DB에서 JDBC를 통해 넘어오는 데이터 중 일부이다.[ { "id": 592492460020000000, "scope_name": "io.opentelemetry.spring-scheduling-3.1", "scope_version": "2.1.0-alpha", "trace_id": "E'\\\\\\\\x32058E6FA0A913CCA9D567F003A0AD2A'", "span_id": "E'\\\\\\\\x82A02E838327..
대규모 쿼리 최적화 1차 시도 (IN 방지..) (24.05.21) Trace와 Span 상황효율적 탐색 질의 :Trace와 Span 데이터가 존재. Trace의 PK를 Span이 FK로 가지는 1:N 매핑 관계'다수'의 Trace를 조회하고, 이와 연관된 '다수'의 Span을 매핑하여 가져와야 함.이를 위해 Trace를 IO를 통해 한번 조회하고, 이것의 Id Set을 통해 IN 연산을 사용하여 Span들을 가져오려고 했음.하지만 3번의 경우 대용량 데이터라 상당히 많은 시간이 소요될 것 같음. 이를 극복하기 위해 다음 방법이 유효한지?: '다른 조건'을 통해 Span의 모집단을 먼저 줄이고, 이후 Join이나 In 연산을 사용.ex)Trace id set (1, 2, 3 .. N) Spans in (traceId)를 바로 사용함 (많은 시간) Spans where t..