SQL에서 GROUP BY를 쓰면 여러 row가 하나의 그룹으로 접힌다. 예를 들어 고객별 매출 합계를 구하면 고객마다 하나의 row만 나온다. 반면 window function은 원래 결과 row를 그대로 유지한다. 그리고 각 row에 대해 “이 row가 속한 문맥에서 계산한 값”을 옆에 붙여준다. Oracle 문서는 window function을 다음처럼 설명한다. A window function combines aggregate, ranking, or analytic functions with an over-clause for windowed calculations. 즉 window function은 크게 보면 다음 구조다. (Oracle Docs) ...
PostgreSQL Window Functions
postgres-window-functions 이 글은 PostgreSQL 18 문서 기준으로 적는다. PostgreSQL 문서의 current 링크는 시간이 지나면 다른 버전을 가리킬 수 있으므로, 여기서는 일부러 /docs/18/ 링크를 기준으로 본다. PostgreSQL의 Window Function 문서를 다시 읽어보면 첫인상은 조금 밋밋하다. Oracle Window Function 문서를 먼저 보고 오면 특히 그렇다. Oracle 쪽 문서는 aggregate_function, ranking_function, analytic_function, over_clause, partition_by_clause, order_by_clause, frame_clause를 비교적 직접적으로 나눠 설명한다. (Oracle Docs) 반면 PostgreSQL의 functions-window 문서는 꽤 짧다. row_number, rank, dense_rank, percent_rank, cume_dist, ntile, lag, lead, first_value, last_value, nth_value 같은 내장 Window Function 목록을 보여주고, 일반 aggregate function도 OVER 절이 붙으면 Window Function처럼 동작할 수 있다고 설명하는 정도다. (PostgreSQL) ...
리눅스 Huge Page 사용법: 프로그래머를 위한 5가지 API 가이드
Huge Page는 TLB 미스를 줄여 성능을 비약적으로 향상시키지만, 리눅스 커널은 이를 사용하는 여러 가지 통로를 제공합니다. 모든 API를 외울 필요는 없습니다. 실무에서 가장 많이 쓰이는 순서대로 전략을 세워봅시다. 1. Huge Page 사용 방식 인기 투표 실제 오픈소스 프로젝트와 기업용 솔루션에서 채택하는 빈도를 기준으로 나열한 우선순위입니다. 1위: madvise (THP) - 가장 유연하고 대중적입니다. (Redis, JVM 등) 2위: Shared Memory (shmget / hugetlbfs) - DB 엔진의 표준입니다. (PostgreSQL, MySQL 등) 3위: mmap (+ MAP_HUGETLB) - 엄격한 제어가 필요한 특수 분야에서 씁니다. (DPDK 등) 4위: memfd_create - 최신 리눅스 환경에서 선호되는 깔끔한 방식입니다. 5위: libhugetlbfs - 코드를 고칠 수 없는 레거시 환경용입니다. 2. madvise 방식: “가장 우아한 힌트” 이 방식은 Transparent Huge Pages (THP) 기능을 활용합니다. 커널이 평소에는 4KB 페이지로 관리하다가, 개발자가 “여기 좀 합쳐줘"라고 힌트를 주면 Huge Page로 전환합니다. ...
리눅스 HugePages: 커널의 구현 겉핥기
‘페이지 매핑 단위가 커지면 관리할 페이지 수가 줄어드니 TLB 효율이 좋아져서 성능이 빨라지겠지’라는 개념적 사실만 알고, 리눅스에서 이것이 어떻게 구현되는지 찾아볼 기회가 없었습니다. 현대 리눅스 커널은 이 거대한 페이지들을 구체적으로 어떻게 구현해서 관리하고 있는지, 그리고 과연 어떤 상황에서 켜는 게 정답인지에 대한 운영 가이드를 정리해 봅니다. 1. 4KB의 한계와 Huge Pages의 등장 리눅스 커널의 기본 메모리 관리 단위는 4KB입니다. 하지만 64GB 이상의 대용량 메모리를 사용하는 환경에서는 이 단위가 시스템에 큰 부담이 됩니다. ...