본문 바로가기

DB12

Row Generation 튜닝#1 - SingleStore ※ 테스트 장비 사양 - 8vCPU, 16GB ​ 이전 포스트에서 SingleStore 의 Row Generation 은 7억건에서 메모리 부족 에러가 발생했습니다. 그 이유는 create_array 및 table 로 변환한 모든 row 를 대상으로 row_number() 함수로 정렬을 수행하기 때문에 부가적인 메모리가 더 필요하기 때문입니다. 물론 정렬 작업 때문에 시간도 조금 더 필요합니다. create or replace function gen_rows(n bigint) returns table as return select row_number() over () as rn from table(create_array(n):>array(bigint)); 이제 정렬이 필요없도록 튜닝을 해보겠습니다. 먼저.. 2024. 1. 18.
Row Generation 성능 비교 - SingleStore, Oracle, MySQL, PostgreSQL 🎯 개요 ​이전 포스트에서 Row Generation 방법을 소개해 드렸습니다. 2024.01.04 - [연구노트] - Row Generation - SingleStore, Oracle, MySQL PostgreSQL 이번 포스트에서는 각 DB 마다 Row Generation 성능을 간단하게 비교하도록 하겠습니다. 비교 테스트에 사용한 장비는 8vCPU, 16GB 의 사양으로 Hands-On 테스트에 사용했던 장비를 그대로 사용하였고 여기에 Oracle XE 21c 를 추가로 설치했습니다. ​ ​ 🎯 Oracle Oracle XE 21c는 SGA+PGA 합쳐서 2GB 를 넘지 못하도록 제약이 걸려 있습니다. 따라서 불가피하게 PGA가 3000MB 로 설정되어 있는 Autonomous Database 에서.. 2024. 1. 12.
SingleStore Hands-On #5 Online Scale Out/In 🎯 개요 SingleStore 는 분산(Distributed) 데이터베이스로 Shared Nothing 구조를 가지고 있습니다. 따라서 현재 시스템보다 더 높은 성능이 요구될 때 쉽게 수평 확장(Scale Out)할 수 있는 것이 큰 장점입니다. ​ 이번 테스트에서는 k6 성능테스트 툴로 Data API 를 이용해 트랜잭션이 실행되는 도중에 온라인으로 수평 확장(Scale Out) 및 축소(Scale In) 작업을 수행하도록 하겠습니다. ​ 실제 SingleStore 입장에서는 Leaf Node 를 추가/삭제하는 작업을 수행합니다. ​ 🎯 gnuplot 설치 SingleStore 클러스터가 온라인 상태에서 Leaf 노드를 추가/삭제할 동안 성능의 변화를 파악하기 위해 k6 실행 결과를 csv 로 로깅할 .. 2023. 12. 21.
SingleStore Hands-On #4 Data API 🎯 개요 RDBMS 를 사용하는 고전적인 프로그래밍 방식은 프로그램 실행 초기에 커넥션(connection) 을 열고 특정 SQL 을 처리하기 위한 커서(cursor) 를 생성한 다음 커서의 실행 결과를 페치(fetch) 하여 처리하고 커넥션을 닫는 순서로 작성되곤 했습니다. ​ 문제는 커넥션을 맺거나 끊는 작업이 DBMS 입장에서는 상당히 무겁고 큰 비용이 발생하는 작업이라는 것입니다. 그래서 보통 일정 갯수이상의 커넥션을 미들웨어나 WAS 등에 커넥션 풀(Connection Pool) 형태로 만들어 두고 필요할 때마다 커넥션을 열고 닫는 것이 아니라 커넥션 풀에서 커넥션을 획득/반납하게 합니다. RDBMS 와 WAS 등의 미들웨어간에는 항상 커넥션이 유지되기 때문에 커넥션 생성 및 제거에 시스템 자원.. 2023. 11. 23.
SingleStore Hands-On #1 DB 설치 : SingleStore, PostgreSQL, MySQL 💻 Linux Machine Setup ​하나의 장비에 SingleStore, PostgreSQL, MySQL 을 함께 설치할 Linux Server 를 설정합니다. ​ 장비 사양 CPU : 8 vCPU Memory: 16GB (32GB 권장) HDD(SSD) : 70GB 이상 O/S : Red Hat 계열 version 7 (이 문서는 Oracle Linux 7 기준으로 작성되었습니다) sudo 권한 확보 현재 사용하는 계정명은 opc 입니다. 이 계정에 sudo 권한을 설정할 경우 root 계정에서 다음 명령어를 수행합니다. * 이미 sudo 권한이 부여됐다면 이 스텝은 건너 뛸 수 있습니다. # visudo -f /etc/sudoers 가장 아래 라인에 다음 추가 opc ALL=(ALL) NOPAS.. 2023. 11. 2.
SingleStore DB Directory Layout [1] 개요 그동안 SingleStore 를 설치하는 여러 내용들이 있었습니다. 이제부터는 설치된 SingleStore 의 디렉토리 구조와 각종 설정 파일들의 역할을 알아보도록 하겠습니다. 이번 포스트에서 설명할 환경은 Windows10 WSL2 를 기준으로 패키지 관리 프로그램이 디폴트이 설치한 SingleStore 를 기준으로 설명합니다. tarball 로 사용자환경에 맞게 커스텀으로 설치한 환경은 지금 설명과 많이 다릅니다. 설치하는 방법은 아래 링크를 참조하시기 바랍니다. ​https://a-platform.tistory.com/124 Windows 10 WSL2 에 SingleStore 설치 [1] 개요 SingleStore 는 현재 공식적으로 Intel 계열의 Linux Platform 만 지.. 2023. 10. 20.
M1 Mac 에 SingleStore 설치 [1] 소개 SingleStoreDB 는 집계(Aggregation) 및 필터링(Filtering) 성능을 높이기 위해 Intel 의 SSE4.2 및 AVX2 명령어세트를 이용해 SIMD(Single Instruction Multiple Data) 를 구현하고 있습니다. Apple Silicon 이 탑재된 M1/M2 계열 Mac 은 Intel 이 아닌 ARM Processor 계열이기 때문에 AVX2 등의 명령어세트가 지원되지 않아 SingleStore 를 M1 Mac 에서는 설치하여 사용해 보지 못했었습니다. ​ M1 Mac 을 사용하는 많은 개발자들의 요청이 빈번하자 SingleStore 버전 7.8.11 부터 SIMD 와 같은 여러 최적화 기법을 다수 희생해서라도 Docker Desktop 에 Cl.. 2023. 9. 14.
SingleStoreDB, PostgreSQL, MySQL 간단 조회 성능 비교 안녕하세요. ​ 이번에 간단하게 SingleStoreDB, PostgreSQL, MySQL 의 3가지 Database 를 동일한 장비에서 동일한 테이블과 SQL을 이용하여 조회 성능 비교를 해 보았습니다. ​ 장비 사양은 8vCPU, 32GB Memory, 100GB Boot Volume 입니다. 데이터셋은 CC By 4.0 License 를 가지고 있는 Stefan Proell, Eva Zangerle, Wolfgang Gassler 가 만든 Flughafen DB(https://github.com/stefanproell/flughafendb) 를 기초로 한 mysql 의 airportdb(https://dev.mysql.com/doc/airportdb/en/airportdb-introduction.h.. 2023. 9. 7.
SingleStoreDB Cloud 무료 사용법 가장 빠르게 SingleStoreDB 를 성능을 체험해 볼 수 있는 방법은 SingleStoreDB Cloud 에서 $500 에 해당하는 Credit 을 받아 AWS, Azure, GCP Cloud 중 원하는 곳에서 원하는 크기의 Workspace 를 생성하는 것입니다. 먼저 SingleStore Portal 에 가입하여 $500 에 해당하는 credit 을 받습니다. 가입이 되면 On-premise Server 설치 시 사용할 수 있는 License Key 도 무료로 제공됩니다. 이 License 를 가지고 총 32 vCPU, 128GB Memory 를 넘지 않는 한도 내에서 SingleStoreDB Standard 옵션 설치해 사용할 수 있습니다. ​ SingleStore Portal 에서 먼저 Wo.. 2023. 8. 31.