Database

MySQL®

MySQL®은 Open DBMS로 다양한 제품군으로 분류되어 사용자의 요구사항에 따라 주요 시스템에 범용적으로 널리 사용되고 있습니다. 또한 Enterprise 환경에서 사용할 수 있는 최적의 성능을 보장합니다.

MySQL® Database Server 강력하고 간결한 소프트웨어

  • Commit, rollback, crash recovery, low-level locking등 트렌젝션을 완전히 지원하는 다중 스토리지 엔진을 가지고 있음
  • 메모리에서 동작하는 빠른 스토리지 엔진부터 완전한 트렌젝션을 지원하고 고가용성을 위한 클러스터링을 지원하는 엔진까지 다양한 선택이 가능
  • 쿼리 캐싱(cashing)을 통한 비약적인 성능의 향상과 데이터베이스 복제를 사용하여 하나의 마스터 서버로부터 많은 수의 슬레이브 서버를 운영함으로써 속도와 안정성 모두를 향상.
  • 진보된 권한관리와 SSL지원을 포함한 강력한 보안시스템으의 채용으로 어플리케이션의 보안을 강화.
  • 풀텍스트 인덱싱과 검색을 사용하여 단어와 문장에 대한 빠른 검색이 가능

MySQL® 제품별 기능 정의 MySQL® 개요

ANSI SQL표준
서브쿼리, 조인, 커서, 준비명령문, 뷰, 트리거, 저장 프로시져, 사용자정의함수 지원
정보 스키마, 유니코드, 참조 무결성, 서버 실행 데이터 무결성 보장
JDBC, ODBC, .NET, PHP, Python, Perl, Ruby 등의 다양한 언어에서 SQL 서버로 접속할 수 있도록 코드 제공
제품 개요
오래 전부터 제공되었던 MYISAM을 비롯하여, 트랜잭션 기능을 제공하는 Inno DB 제공
메모리 상에서 동작하여 매우 빠른 쿼리실행을 보장하는 Memory, 외부의 DB와 링크기능을 제공하는 Federated 등의 스토리지 엔진을 사용하는 어플리케이션에 최적의 성능 보장
주요 기능
대용량의 데이터를 조합하여 활용할 수 있게 해주는 Data Warehousing 등에서 안정적이며, 믿을 수 있는 서비스를 제공하는 DBMS
온라인 핫 백업 / SSL, 내장 데이터 암복호화 / 입상 외장 보안 제어, 뷰 지원, 감사용 트리거 등 기능 제공

MySQL® Server

...
  • 범위성 & 성능
  • Dtawarehouse
  • Business Intelligence Reporting
  • 사용자 개발
  • 사회 기반 시설
  • 운영 모니터링
  • 정보 통합
  • 가장 인기있는 오픈소스 데이터베이스
  • 가장 빠르게 성장하고 있는 데이터베이스
  • TCO를 크게 낮추면서도 광범위한 어플리케이션 적용
  • 간결한 솔루션을 제공하고자 하는 지속적인 노력
  • MySQL® 의 모든 제품은 오픈소스 라이센스하에서 제공
  • 오픈소스 솔루션이 적합하지 않은 상황에 적용하기 위한 상용 라이센스의 제품을 판매
  • 높은 신뢰성과 빠른 성능
  • 편리한 설치와 쉬운 사용법
  • 다중-스토리지 엔진 구조 (속도, 간결함, 안정성)
  • 데이터베이스 시스템 관리에 필요한 최고의 유연성
  • 다양한 플랫폼에 대한 소스코드를 제공
  • 20가지 이상의 플랫폼에서 사용 가능한 크로스플랫폼 지원
  • 백만명 이상의 교육과 인증을 받은 개발자들 – 높은 수준의 개발자를 쉽게 찾을 수 있음

MariaDB

MySQL 데이터베이스를 개발한 개발자들이 효율적인 데이터베이스 솔루션과 최고수준의 서비스를 제공하기
위하여 기존 MySQL를 기본으로 확대 발전시킨 OSS DBMS으로 기존 MySQL과 99% 호환이 가능하며, 추가적인 다양한 기능을 제공(백업, 모니터링 등)

주요 기능 및 성능

  • Global Transaction ID

    쉽게 Replication을 설정하고 새로운 Slave를 쉽게 연결 가능, Multi Source Replication 지원

  • Mulit-source Replication

    하나의 Slave에 여러 Master의 데이터를 복제 가능

  • Parallel Slave

    MySQL 5.6의 기능 중 하나로 Master의 transaction과 마찬가지로 Slave에서도 병렬로 transaction를 처리

  • Spider Storage Engine(샤딩 기능 제공)
  • 통계는 각 SQL문에 대한 최적의 실행 계획을 선택하는 쿼리 최적화 프로그램에 의해 사용
  • 데이터의 쿼리 최적화 프로그램은 복잡한 다중 테이블 쿼리에 더 나은 쿼리 실행 계획을 선택
  • Online Alter(시스템을 중단하지 않고 스키마의 많은 변경 작업 가능) 제공

Replication

Replication enhancements

  1. Global Transaction Id
    Replication에서 새로운 Global Transaction Id(GTID)를 소개
    1. 쉽게 Replication을 설정하고 새로운 Slave를 쉽게 연결 가능
    2. Multi Source Replication과 같이 다른 Replication 기능을 지원
, GTID의 도입으로 Slave들의 충돌 없이 안전하게 사용 가능
  2. Mulit-source Replication
    1. 하나의 Slave에 여러 Master의 데이터를 복제 가능 (기존 Slave는 하나의 Master만 설정이 가능함)
    2. 하나의 서버에서 전체 복사본의 데이터를 사용할 때 유용함
    3. tumblr, Microblog Site, Yahoo의 일부는 이미 사용 중
  3. Parallel Slave

    • MySQL 5.6의 기능 중 하나로 Master의 transaction과 마찬가지로 Slave에서도 병렬로 transaction를 처리 따라서 Slave에서의 지연 확률이 현저히 낮아짐

Replication enhancements

mariadb img-1
mariadb img-1

MariaDB Storage Engine

Storage Engine

  1. Cassandra Storage Engine
    • MariaDB에 데이터를 Cassandra 데이터와 결합 하여 Cassandra 데이터에 읽기 쓰기 수행 가능
    • Cassandra Ring에 많은 MariaDB 서버를 연결하여 고가용성 클러스터를 생성
  2. Connect Storage Engine
    • 데이터가 MariaDB에 저장된 데이터의 부분인 것 처럼 파일 또는 ODBC 하위의 데이터를 처리
  3. Sequence Storage Engine

    • 메모리에 저장되어 쿼리에 사용할 수 있는 Sequence를 생성
  4. Spider Storage Engine
    • 메모리에 저장되어 쿼리에 사용할 수 있는 Sequence를 생성
  5. TokuDB
    • 쓰기 속도의 고성능 워크로드를 위해 설계된 스토리지 엔진
    • fractal tree indexes를 사용

Storage Engine 종류

maria img-3
  1. InnoDB(XtraDB)
    • InnoDB를 대체 하는 MVCC기반의 Storage Engine

    • 멀티코어 시스템에서 더 나은 성능과 높은 워크로드를 가짐

    • MariaDB에서는 FEDERATEDX라는 새로운 네이밍을 사용
  2. Aria
    • 차세대에 MyISAM 스토리지 엔진을 대체하기 위해 개발

    • MyISAM에서 파생되었으며, Crash-Safe를 목표로 진행 중, 부분적으로 Transaction을 제공
  3. PBXT(트랜잭션 제공)
    • Transaction Log에 선 기록 없이 바로 DB에 기록

    • 완전한 ACID를 준수함
    • MariaDB 5.5부터는 더 이상 유지보수를 제공하지 않으므로 기본 스토리지 엔진에서 제외
  4. OQGRAPH

    • Graph 기능을 제공하는 스토리지 엔진
    • (MariaDB 5.5에는 기본으로 Plugin이 들어있지 않음)
  5. FEDERATED (트랜잭션 제공)
    • 원격 DB 서버 테이블에 네트워크로 접근하는 스토리지 엔진으로 기존
    • 원격 DB에서 로컬 DB로 결과 값만 전달한다는 점에서 MySQL에 기본으로 장착된 FEDERATED와 
가장 큰 차이점이 있음
  6. SphinxSE
    • Full-Text Searching이 필요할 때 사용할 수 있는 스토리지 엔진.
    • 단, SphinxSE은 어디까지나 Sphinx의 일부분이며, 스토리지 엔진 사용을 위해서는 Sphinx 데몬을 
별도로 설치 필요

Staple Storage Engine (1)

Feature MyISAM Memory InnoDB Archive NDB
Storage limits 256TB RAM 64TB None 384EB
Transactions No No Yes No Yes
Locking granularity Table Table Row Table Table
Geospatial data type support Yes No Yes Yes Yes
Geospatial indexing support Yes No No No No
B-tree indexes Yes Yes Yes No Yes
Hash indexes No Yes No[a] No Yes
Full-text search indexes Yes No No No No
Clustered indexes No No Yes No No
Data caches No N/A Yes No Yes
Index caches Yes N/A Yes No Yes
Compressed data Yes[b] No Yes[c] Yes No
Encrypted data[d] Yes Yes Yes Yes Yes
Cluster database support No No No No Yes
Replication support[e] Yes Yes Yes Yes Yes
Foreign key support No No Yes No No
Backup / point-in-time recovery[f] Yes Yes Yes Yes Yes
Query cache support Yes Yes Yes Yes Yes
Update statistics for data dictionary Yes Yes Yes Yes Yes

Strage Engine(샤딩 구성도)

샤딩 구성도(Data 분산 처리)

mariadb img-1
mariadb img-1

Optimizer enhancements

Optimizer enhancements

  1. 독립적으로 통계데이터를 제공

    MairaDB 10 이전 버전의 경우 통계는 스토리지 엔진에 의해 스스로 공급 되었고 통계 품질은 
일반적으로 불량하고 스토리지 엔진 Interface는 제한이 많았음

    MariaDB 10 버전 부터 통계는 각 SQL문에 대한 최적의 실행 계획을 선택하는 쿼리 최적화 
프로그램에 의해 사용
    더 나은 실행 계획 및 최종 사용자의 더 나은 통계 결과는 일반적으로 빠른 결과를 도출 가능

  2. Histograms

    쿼리 최적화, Histogram은 모두 인덱스가 아닌 인덱스 열을 수집 할 수 있음

    데이터의 쿼리 최적화 프로그램은 복잡한 다중 테이블 쿼리에 더 나은 쿼리 실행 계획을 선택

  3. EXISTS 서브쿼리의 최적화

    가능하면 IN에 하위 쿼리를 EXISTS로 변환하여 가능하면 최적화 합니다.

    이 변환은 특정 종류의 세미 조인 최적화 또는 EXISTS로 연결된 서브쿼리들을 구체적으로 
최적화하도록 지원

Administration improvements

  1. Role

    MairaDB 10에 드디어 Role이 도입
    
이제 DBA는 특정 권한을 가진 역할을 만들고 사용자에게 역할을 할당 가능

  2. Show Explain

    실행되고 있는 쿼리문을 얻으면 Slow Query에 대해서 설명

  3. Explain Insert/Update/delete


    insert / update / delete 문에 대한 explain 지원

  4. Show Plugin SONAME

    설치 되어 있는 모든 Plugin 정보를 확인 가능

  5. Shutdown

    서버의 Shutdown을 위해 마지막에 SQL로 종료 가능

  6. Kill Query ID

    해당 ID가 Thread ID가 아닌 특정 쿼리를 kill

  7. Per-connection Memory usage


    사용되는 메모리의 양을 각 Connection 별로 나열

Other

Other important new feature

  1. New REGEXP

    새로운 SQL과 정규식 표현식 라이브러리 PCRE로 전환할 수 있는 REGEXP_REPLACE, REGEXP_SUBSTR, 
REGEXP_INSTR 등 으로 MairaDB 텍스트 처리 기능을 향상

  2. Delete… RETURNING


    많은 사용자가 결과셋에서 삭제된 행을 반환하는 기능으로 문장의 끝에 추가하여 사용 가능

  3. Alter… IF [NOT] EXISTS


    Alter 문에서 이제 예를 들어 키워드 IF를 추가하거나 IF NOT을 추가 할 수 있음

  4. Named Dynamic Columns

    MariaDB 초창기 버전의 경우 Dynamic Columns의 각 열은 번호에 의해 참조 될 수 있음

    MariaDB 10에서 열 이름으로 지칭 가능

  5. Multiple GET_LOCK()

    많은 사용자 레벨의 잠금 사용이 지원

Merged Features

Merged Features and Functionality from MySQL 5.6

  1. InnoDB

    대부분의 InnoDB의 성능 향상된 내용은 MariaDB에 포함

  2. Performance Schema


    새로운 이벤트 필터링, 계측 및 기타 새로운 성능 스키마 추가

  3. Online Alter


    시스템을 중단하지 않고 스키마의 많은 변경 작업 가능

  4. Order by ~ Limit Optimization을 사용하는 쿼리를 위한 Filesort Optimization

    Limit 최적화 순서를 사용하여 쿼리에 대한 Filesort 최적화

  5. Create Temporary table에 대한 권한
  6. Character-set 확장
  7. GET DIAGNOSTICS
  8. TO_BASE64(), FROM_BASE64

Percona Server

Percona Server XtraDB는 MySQL InnoDB스토리지 엔진의 향상된 버전입니다. 특히 메모리를 보다 효율적으로 사용하며, 더많은 코어를 확장할 수 있도록 설계되어 있습니다. 새로운 기능은 특히 InnoDB의 일부 제한된 기능을 완화하도록 설계되어 있으며, 아래와 같은 특징을 가지고 있습니다.

  1. Query가 보다 더 일관되고 빠르게 실행된다
  2. 최신의 고사양 하드웨어를 보다 더 효율적으로 사용한다
  3. 데이터를 샤딩해야 될 시점이 늦춰지거나, 필요 없을 수도 있다.
  4. 호스팅이나 전력 비용을 절약할 수 있다.
  5. 관리나 성능 튜닝에 드는 시간을 절약할 수 있다.
  6. 높은 가동시간을 달성할 수 있다.
  7. 문제를 해결하는데 원인을 추측할 필요가 없다.

Percona XtraBackup

XtraBackup은 MySQL용 Backup Tool이며, MySQL서버를 무중단으로 백업이 가능한 오픈소스 프로그램이다

전체 백업
Innobackupex라는 명령으로 xtrabackup을 좀더 사용하기 편리하게 perl script로 구현
증분 백업
마지막 backup이후 변경된 사항만 이어서 backup하는 기능
원격 전체 백업
옵션값을 지정하여 로컬에서 원격지로 백업 파일을 전송하는 방식
원격 증분 백업
백업 데이터를 스트림으로 원격 서버에 전송

MySQL® Backup Tool 기능 비교

Features Percona XtraBackup MySQL Enterprise Backup (InnoDB Hot Backup)
License GPL Proprietary
Price Free $5000 per server
Open source Yes -
Streaming and encryption formats Open source Proprietary
Supported MySQL flavors Percona Server,MySQL,MariaDB MySQL
Non-blocking InnoDB backups Yes Yes
Blocking MyISAM backups Yes Yes
Incremental backups Yes Yes
Full compressed backups Yes Yes
Incremental compressed backups Yes -
Fast incremental backups Yes -
Incremental backups with archived logs Yes -
Encrypted backups Yes Yes
Streaming backups Yes Yes
Parallel local backups Yes Yes
Parallel streaming backups Yes -
Parallel compression Yes Yes
Parallel encryption Yes Yes
Parallel apply-log Yes Yes
Throttling Yes Yes
Point-in-time recovery support Yes Yes
Safe slave backups Yes -
Compact backups Yes Yes
Buffer pool state backups Yes -
Individual tables export Yes Yes
Individual partitions export Yes -
Restoring tables to a different server Yes Yes
Data & index file statistics Yes -
InnoDB secondary indexes defragmentation Yes -
rsync support to minimize lock time Yes -
Improved FTWRL handling Yes -
Backup history table - Yes
Backup progress table - Yes
Offline backups - Yes
Tape backups with Oracle Secure Backup - Yes

Percona Tool kit

Pt-query-digest

  • 쿼리 분석
  • 슬로우 쿼리 로그, 쿼리 로그. 조회
  • tcpdump를 작동

Pt-table-checksum

  • MySQL의 복제 무결성을 확인.
  • percona 사에서 제공하는 percona tools 중 하나
  • 원래는 maatkit tools 의 부분인 mk-table-checksum
  • 마스터와 리플리케이션이 일치하는지를 파악하기 위한 도구
    1. 마스터 서버에 checksums 테이블 생성
    2. 마스터 서버의 각 테이블의 checksum을 확인해 checksums테이블에 기록.
    3. 리플리케이션을 통해서 테이블 checksums이 전파되면 pt-table-checksum은 각 슬레이브로 접근해서 슬레이브의 데이터와 리플리케이션을 통해서 만들어진 슬레이브의 checksums 테이블 간의 checksum을 비교.
    4. 결과 출력.

Pt-table-sync

서로 다른 서버간에 MySQL 테이블 데이터를 동기화

Pt-online-schema-change

Write 잠금 기능을 제거하고 그 기능을 trigger로 풀어서 원본 테이블의 R/W를 가능하게 했고 trigger를 통해 데이터 동기화를 이루었다.

  1. 새로운 임시테이블 생성
  2. 새로운 임시테이블 alter
  3. Trigger 생성
  4. 데이터 복사
  5. 테이블 리네임 (swap)
  6. Foreign key 업데이트 (존재할 경우)
  7. Old 테이블 drop.

ClustrixDB

클라우드 또는 데이터센터를 위한 최초의 스케일 아웃(Scale-Out) 데이터베이스로서 MySQL과 유사하게 작동하나 Replication 이나 Sharding없이 확장이 가능한 OLTP에 최적화된 상용 RDBMS입니다.

clustrix load balancer
clustrix high concurrency

주요기능 및 특징

  • Shared Nothing Architecture
  • More Transactions, More Connections, More Reads, More Writes
  • Auto Scale-Out, Fault-tolerant, MySQL Compatible
  • ACID Compliant
  • Transactions & Joins
  • OLTP 서비스구조에 최적화
  • 모든서버에서 Reads/Writes Process 가능
  • 유연한 라이센스 지원(Flex-Up & Flex-Down)
  • Online Schema Change
  • 단일 Instance로 최소화된 DB관리기능
  • Node 추가에 따른 선형적인 성능향상
clustrix oltp

Approach

  • Read Transaction만큼이나 Write Transaction도 많아요!
  • Scale-Up에 대한 비용부담이 커서 더이상은 단일 인스턴스 Scale-Up은 피하고 싶어요!
  • Sharding으로 인한 Application의 복잡도와 운영비용이 커지고 있어서 걱정입니다!
  • Slave에 대한 지연이 증가하고 있어요!
  • HA(High Availability) 구성이 점점 복잡해 지고 있어요!
  • 고비용의 스토리지를 꼭 써야 하나요?
  • 쓰기확장성이 필요한데, 어떻게 해야할 지 고민입니다!
  • Node에 장애가 발생해면 자동으로 감지해서 서비스에 영향이 없도록 하려면 어떻게 해야 하나요?
clustrix approach
  • MySQL Compatible (Not MySQL, Designed to look like MySQL)
  • Like a Single Instance DB
  • Simple Install / Simple Management
  • No Change Application
  • Scales Read, Write, Storage
  • 3 Nodes Minimum, Load Balancer(H/W or S/W)

DBMS 구조

clustrix compiler, engine, map, data
clustrix architecture

Query Compiler

clustrix query compiler
clustrix query compiler
  • Data Map : 모든 Node는 현재 데이터의 순서 복제와 위치에 대해서 알고 있습니다.
  • Database Engine : 모든 Node는 DB연산이 가능합니다. Leader Node, Master Node, Aggregator Node가 따로 존재하지 않고 평등합니다.
  • Data (Table Slices) : 모든 Table의 Data는 Rebalancer에 의해서 자동 재분배됩니다. Rebalancer는 지능적으로 테이블을 자동분할하고 조각데이터를 다른 Node로 복제구성하며 자동분배/보호를 수행합니다.
clustrix table slice
clustrix table slice

Performance Benchmarks

  • Oak4 = 4 (8-core) servers
  • Oak16 = 16 (8-core) servers
  • Oak28 = 28 (8-core) servers

OLTP 100% Reads

clustrix oltp 100% reads

OLTP 90:10 Mix

clustrix oltp 90:10 mix

ClustrixDB vs Aurora vs MySQL RDS

ClustrixDB vs Aurora vs MySQL RDS

Precautions

  • Long Transaction
  • 명시적인 테이블 잠금
  • Stored Procedure 사용 지양
  • No geospatial, Full-text Search
  • 제한적인 XML 지원
clustrix oltp, olap

Backup & Replication & Disaster Recovery

  • Parallel Backup ( up to 10x faster)
  • Asynchronous Multi-Point Replication
  • Replication to Any Cloud, Any DataCenter, AnyWhere

Monitoring

ClustrixDB는 Web기반의 DBMS 상태를 모니터링할 수 있는 Clustrix Insight를 제공합니다

Current system status

clustrix monitoring insight

Historical Workload Comparison

ClustrixDB workload

Real-time Transactions

ClustrixDB real-time transactions

Resource utilization

ClustrixDB resource utilization

Custom Reports

ClustrixDB custom reports