MySQL performance Xhark 김재홍.

Slides:



Advertisements
Similar presentations
이혁재 /KASA NoSQL. 요약 NoSQL 소개 데이타베이스 관련 문서 대상 : 클라이언트 프로그래머 NoSQL 소개 데이타베이스 관련 문서 대상 : 클라이언트 프로그래머.
Advertisements

1 SQL 정보보호학과 양 계 탁. 2 SQL 개요 SQL 개요 3 Database u 연관된 데이터들의 집합 u 데이터를 쉽게 관리하는 프로그램 종 류종 류 관계형 데이터베이스 객체지향형 데이터베이스 계층형 데이터베이스 네트워크 데이터베이스 데이터를 2 차원적인 테.
SQLite 소개 및 안드로이드에서의 사용법
강사: 이종인 다우 교육원 전임강사 / 온디멘드 수석 컨설턴트 / FMG 수석 컨설턴트
SQL 언어 SQL.
Allow reverse scans allow reverse scnas. allow reverse scans allow reverse scnas.
DB2 Information Management DB2 UDB CLP Command Summary.
소리가 작으면 이어폰 사용 권장!.
데이터 모델링 방법론 2003년 03월.
소프트웨어시스템설계(6주) 데이터베이스 연동
질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL
관계 대수와 SQL.
Database & Internet Computing Laboratory 한 양 대 학 교
제 5 장 인덱스 생성 및 관리.
4장. 관계 대수와 SQL SQL 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어
APM 실습 (MySQL).
Chapter 05 SQL 인젝션 공격.
JDBC 프로그래밍 이수지 이동주 1.
Apache Hive 빅데이터 분산 컴퓨팅 박영택.
SQL 개요 SQL 개요 - SQL은 현재 DBMS 시장에서 관계 DBMS가 압도적인 우위를 차지하는 데 중요한 요인의 하나
MySQL grandmarnier.
SQL Server 2005 데이터베이스 가용성 강화 측면에서 본 데이터베이스 미러링과 스냅샷, 복제
데이터베이스 담당교수 신정식 Chapter 4 SQL(1).
Excel OLAP Reporting / OWC를 이용한
데이터베이스 와 JDBC 1.데이터베이스와 데이터베이스 관리 시스템은? 2.데이터베이스 장점?
Chapter 01 데이터베이스 시스템.
11장. 데이터베이스 서버 구축과 운영.
오라클 데이터베이스 성능 튜닝.
kHS 데이터베이스 테이블 및 인덱스 kHS.
MySQL 기본 사용법.
트랜잭션과 잠금 트랜잭션 처리 메커니즘을 자세히 이해한다. 트랜잭션의 종류를 파악한다.
6장. 물리적 데이터베이스 설계 물리적 데이터베이스 설계
4.2 SQL 개요 SQL 개요 SQL은 IBM 연구소에서 1974년에 System R이라는 관계 DBMS 시제품을 연구할 때 관계 대수와 관계 해석을 기반으로, 집단 함수, 그룹화, 갱신 연산 등을 추가하여 개발된 언어 1986년에 ANSI(미국 표준 기구)에서 SQL.
ER-Win 사용 방법.
차례 튜닝 - 프로필러를 이용한 튜닝 프로필러 친해지기 프로필러 결과 테이블로 만들기 프로필러 결과 분석하기
소프트웨어시스템 실험 Software Systems Lab. 데이터베이스 기초
단일 테이블 조회를 위한 SELECT 문을 이해한다. 열 제약조건과 행 제약조건을 이해한다. 결과 집합 변경 방법을 이해한다.
14 뷰(View) 뷰의 개념 뷰 관리.
뷰와 저장 프로시저 뷰의 개념을 이해한다. 뷰의 정의와 관리 방법을 이해한다. 뷰를 사용함으로써 생기는 장점을 알아본다.
1장. 데이터베이스 시스템 컴퓨터를 사용하여 정보를 수집하고 분석하는데 데이터베이스 기술이 활용되고 있음
16장. 테이블의 변경 새로운 행 삽입 테이블에서 테이블로 행을 복사 행 값의 변경 테이블에서 행 삭제
SQL.
YOU Youngseok 트랜잭션(Transaction) YOU Youngseok
01 데이터베이스 개론 데이터베이스의 등장 배경 데이터베이스의 발전 과정 데이터베이스의 정의 데이터베이스의 특징
강사: 이종인 다우 교육원 전임강사 / 온디멘드 수석 컨설턴트 / FMG 수석 컨설턴트
4장. 데이터베이스와 테이블 MySQL 데이터베이스 테이블의 생성 테이블 데이터 처리(삽입, 변경, 삭제) 작업
SQL Server 7.0 세미나 (Performance Tuning)
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
Chapter 3: Introduction to SQL
고급 T-SQL.
CHAPTER 06. 데이터베이스 자료의 조직적 집합체_데이터베이스 시스템의 이해
정보처리기사 8조 신원철 양진원 유민호 이기목 김다연 윤현경 임수빈 조현진.
SQL Query in the SSMS : DB, Table
JSP 게시판 구현.
ER-Win 4.0 Database Modeling Ⅰ. Logical Design
11장. GROUP BY와 HAVING 열의 그룹화 2개 이상의 열에 대한 그룹화
3장. SQL Server 2008전체 운영 실습 및 DB와 프로그램의 연동
시스템 분석 및 설계 글로컬 IT 학과 김정기.
SQL INJECTION MADE BY 김 현중.
MS-SQL7.0 Implementation 강의 노트
06. SQL 명지대학교 ICT 융합대학 김정호.
테이블 관리 테이블 생성,수정,삭제 데이터 입력 수정, 삭제 2010학년도 2학기.
상세 개념적 모델링. 상세 개념적 모델링 정규화를 하는 이유 데이터의 중복성 제거 데이터 모형의 단순화 Entity, Attribute의 누락 여부검증 데이터 모형의 안전성 검증.
1. 관계 데이터 모델 (1) 관계 데이터 모델 정의 ① 논리적인 데이터 모델에서 데이터간의 관계를 기본키(primary key) 와 이를 참조하는 외래키(foreign key)로 표현하는 데이터 모델 ② 개체 집합에 대한 속성 관계를 표현하기 위해 개체를 테이블(table)
뇌를 자극하는 Windows Server 장. 데이터베이스 서버.
1장. 서 론 데이터베이스의 개요 모델의 종류 관계형 모델과 객체 지향형 데이터베이스 SQL이란 무엇인가?
Stored program 장종원
Data Base Mysql.
제 5 장 MariaDB인덱스 생성 및 관리.
Presentation transcript:

MySQL performance Xhark 김재홍

MySQL이란? MySQL is a database management system. 어떻게? => 저장한다. MySQL은 database management system으로, database를 관리합니다. 자료를 처리하여 저장하거나 읽어오는 역할을 수행합니다. 이 세계에는 수 많은 database management system들이 있으며, MySQL은 수 많은 Open source database management system들 중에서 가장 유명합니다.

왜 MySQL performance를? 컴퓨터가 동작하는 데에 시간이 많이 드는 부분? 1. 데이터처리(프로그램 동작) 2. 입력과 출력 3. 네트워크 4. etc… Database!

MySQL이란? 어떻게? MyISAM InnoDB Arara에서는 InnoDB를 사용… 어떻게 데이터를 관리하는가? 그것은 조금씩 차이를 보이는데, 크게 MySQL에는 두가지 방식이 있습니다. MyISAM / InnoDB

MySQL Database의 구조 여러 Table들… MySQL의 Database는 여러 Table들로 이루어져 있습니다.

MySQL Table의 구조 Column, Row, Index…etc Index! Index = PRIMARY KEY, UNIQUE, INDEX, and FULLTEXT Why use index? MySQL의 Table의 구조를 살펴봅시다. Table은 Column과 Row와 Index등으로 이루어져 있습니다. 여기서 우리가 중요하게 여겨 보아야 할 것은 Index입니다.

MySQL에서 Index의 역할 Index는 검색을 위해 존재한다! => 모든 원소를 순서대로 보며 확인하는 수밖에…

Index의 종류 하나의 Column이 Index가 될 수도 있지만, MySQL에서는 여러 개의 Column이 Index가 될 수도 있다. 즉… Multiple-Column-Index가 가능하다는 이야기! For example: CREATE TABLE test ( id INT NOT NULL, last_name CHAR(30) NOT NULL, first_name CHAR(30) NOT NULL, PRIMARY KEY (id), INDEX name (last_name,first_name) );

For Example Table “Users” id(PrimaryKey. auto_increment), username(UniqueKey), email(UniqueKey) Table “Users” Columns : id/username/password/nickname/email… Index: 1. SELECT * from Users where username=“NAME” 2. SELECT * from Users where nickname=“NICK” Username은 index에 있으니 B-tree에서 검색해서 저 조건에 맞는 Row를 모두 몹도록하자! Good! 으으… Nickname은 index에 없으니 모든걸 하나하나 비교해 볼 수 밖에…

해결방법? 방금과 같은 문제의 경우, nickname을 Key값으로 등록하면 된다.

For Example2 Table “Article_vote_status” id(PrimaryKey. auto_increment), user_id(Key), board_id(Key), article_id(Key) Table “Article_vote_status” Columns : id/user_id/board_id/article_id… Index: SELECT * from article_vote_status where user_id=UID and board_id=BID and article_id=AID user_id가 UID인 row들과, board_id가 BID인 row들과, article_id가 AID인 row들을 찾는다! 세개의 세트 중 개수가 가장 적은걸 선택해서, 조건에 맞는 것이 있나 하나하나 보도록 하자구!

해결방법? Multiple-Column-Index를 사용하자! (user_id, board_id, article_id)를 Key값으로 잡으면, 바로 원하는 것을 찾아낼 수 있다!

중요한 부분이었놔? Example1과 Example2에서 나온 부분은 소스에 숨겨져 있으니 한번 찾아보도록 하자. 사용 빈도가 적기 때문에 Time-critic한 부분은 아니다.

대체 어떻게 되어있길래? Database를 구성하는 방법에는 여러 가지가 있으나, 기본적으로 Tree구조를 이용한다. DS수업을 들은 사람이라면 B-tree를 기억하라!

대체 어떻게 되어있길래? Index를 이용해 Tree에서 검색하고, (log time)

두 가지 storage engine 1. MyISAM 2. InnoDB 이지만… 구조상의 큰 차이는 없다.

MyISAM Sun Microsystems GNU General Public License MyISAM은 Sun Mircosystems에서 만들었고, GPL입니다.

MyISAM InnoDB보다 빠르다. … 고는 하지만, 큰 차이는 없고 InnoDB가 더 빠른 경우도 존재한다. 저용량이다. BUT, 안정적이지 못하다.

MyISAM MyISAM방식은 transaction을 지원하지 않는다. =>에러가 나면 망한다…

MyISAM 어떤 구조로 되어있길래??? R-trees 4.1 (for the MyISAM storage engine) (R:rectangle)

Simple example of an R-tree for 2D rectangles

Visualization of an R*-tree for 3D cubes using ELKI

Similar to B-trees (by wiki)

MyISAM 추가되는 순서대로 Data를 저장한다. Data를 저장하는 file(.MYD)과 Index를 저장하는 file(.MYI)이 따로있다. 즉, 데이터를 따로 저장하고 Index로만 Tree를 구성한다. Index가 여러 개라면? => 여러 개의 Tree를 갖는다.

MyISAM Performance 삽입과정(INSERT) Connecting: (3) Sending query to server: (2) Parsing query: (2) Inserting row: (1 × size of row) Inserting indexes: (1 × number of indexes) * log N Closing: (1)

MyISAM Performance 삭제과정(DELETE) The time required to delete individual rows is exactly proportional to the number of indexes

MyISAM Performance 갱신과정(UPDATE) SELECT query with the additional overhead of a write. -> SELECT로 찾아서 바꾸고, Index로 이루어진 Tree들을 갱신해주는 것.

MyISAM Performance 검색과정(SELECT) 한 개의 row를 찾는데 걸리는 시간? log(row_count) / log(index_block_length / 3 * 2 / (index_length + data_pointer_length)) + 1. 몇 개의 “Block”을 읽어오는가로 속도가 결정되므로... 여러 개의 Row를 읽어오는 구문에 대해서는 어떻게 처리할까?

MyISAM Performance 검색과정(SELECT) To eliminate rows from consideration. If there is a choice between multiple indexes, MySQL normally uses the index that finds the smallest number of rows

InnoDB Oracle Corporation GNU General Public License or proprietary InnoDB는 Oracle Coporation에서 만들었고, 이거도 GPL인데 proprietary라서 제공된 기능 이외의 사용은 제한됩니다.

InnoDB 좀 느리다. 고 용량이다. Transaction을 지원한다.

InnoDB InnoDB는 오류가 발생하면, Transaction 기능을 통해 스스로 로그를 통해 빠르게 복구하는 기능을 가지고 있다. 즉, 안정적이다. Database는 서로 query가 충돌하는 경우가 많으므로, 이 기능은 상당히 중요하다. 이것이 InnoDB가 MyISAM보다 자주 쓰이는 이유이다.

InnoDB MyISAM과 비슷한 구조를 하고있다. 뭐가 다를까? -> 1. B-tree를 이용한다. 2. Transaction을 지원한다. 3. 2번을 위해 좀더 용량이 크다. 4. 엔진 스스로 캐시한다. (MyISAM은 OS가 캐시함) 6. InnoDB는 하나의 파일에 저장된다. 등등… InnoDB : Row-level Locking MyISAM : Table-level Locking ->보통 속도는 MyISAM이 빠르지만, 같은 Table을 여러 Thread가 사용한다면? InnoDB가 빠르다! 5. Locking 방법이 다르다.

InnoDB INFORMATION_SCHEMA 위의 테이블에서 여러 옵션들이 조정가능하다. 자세한 사항은 Reference를 참고하시길…

InnoDB 어떤 구조로 되어있길래??? “TableSpace라는 곳에 모든걸 저장한다!” PDF파일 참고

Cache 캐시 기능이란? 특정 쿼리에 대해서 결과를 저장해두는 것. 주의할 점! Select * from t1 캐시에서는 두 개를 다르게 인식한다.

최적화 속도의 중심은 바로 SELECT구문에 있다! 보통 가장 많이 사용되며, 가장 느리다. 어떻게 하면 이걸 빠르게 할 수 있을까?

SELECT 최적화 Removal of unnecessary parentheses: ((a AND b) AND c OR (((a AND b) AND (c AND d)))) -> (a AND b AND c) OR (a AND b AND c AND d) Constant folding: (a<b AND b=c) AND a=5 -> b>5 AND b=c AND a=5 Constant condition removal (needed because of constant folding): (B>=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6) -> B=5 OR B=6

SELECT 최적화 SELECT COUNT(*) FROM tbl_name; SELECT MIN(key_part1),MAX(key_part1) FROM tbl_name; SELECT MAX(key_part2) FROM tbl_name WHERE key_part1=constant; SELECT ... FROM tbl_name ORDER BY key_part1,key_part2,... LIMIT 10; ORDER BY key_part1 DESC, key_part2 DESC, ... LIMIT 10; 빠른 구문의 예

SELECT 최적화 SELECT key_part1,key_part2 FROM tbl_name WHERE key_part1=val; SELECT COUNT(*) FROM tbl_name WHERE key_part1=val1 AND key_part2=val2; SELECT key_part2 FROM tbl_name GROUP BY key_part1; SELECT ... FROM tbl_name ORDER BY key_part1,key_part2,... ; ORDER BY key_part1 DESC, key_part2 DESC, ... ; 빠른 구문의 예

SQLAlchemy SQLAlchemy는 무엇을 하는가? 결국 Query를 만들어준다. Example) Qeury.session().filter_by(A).all();

SQLAlchemy 자세한 것은 없음…

Arara의 문제점? 글목록 # XXX: 갖고 와서 빼는군여. 가져올 때 빼세요. article_list = session.query(model.Article).filter_by(root_id=None).order_by(model.Article.id.desc())[offset:last]

수고하셨습니다.

Reference http://dev.mysql.com/doc/refman/5.0/en/ http://en.wikipedia.org/wiki/R-tree http://www.innodb.com/doc/