SlideShare una empresa de Scribd logo
1 de 10
Descargar para leer sin conexión
MySQL INSERT 성능 테스트
Jason Heo
http:/jason-heo.github.io/
2015.08.30.
테스트 계기
• prepared statement를 사용하면 입수 성능이
빨라질까?
– 검색 해 봤는데 찾을 수 없었다.
• 내가 직접 테스트해보자.
• 테스트하는 김에몇 가지 더 테스트
테스트 종류
• prepared stmt v.s. non-prepared stmt
• transaction 사용할 때 v.s. 미사용
• MULTI INSERT 구문의 성능
– INSERT INTO (), (), . . ., ()
Test 환경
CREATE TABLE `insert_perf_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`col1` int(11) DEFAULT NULL,
`col2` int(11) DEFAULT NULL,
`col3` int(11) DEFAULT NULL,
`col4` int(11) DEFAULT NULL,
`col5` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
• MacBook Air, Yosemite
• MySQL 5.6.25 (기본 설정 값 그대로 사용)
• PHP 5.5.27 (mysqli)
100만개 레코드 입력 시간
측정
prepared stmt (1/2)
76.76
70.96
68
69
70
71
72
73
74
75
76
77
78
prepared statement 미사용 prepared statement 사용
prepared statement 사용 여부에 따른 입수 시간
(lower is better)
입수 시간 (초)
• SQL Parsing이 없고, 값만 bind하면 되므로 많이 빠를 것으로 기대했는데...
• 생각보다 성능 향상이 적다
prepared stmt (2/2)
108
66
0
20
40
60
80
100
120
prepared statement 미사용 prepared statement 사용
prepared statement 사용 여부에 따른 Network
사용량 (lower is better)
Network 전송량 (MB)
• 혹시 PHP가 prepared statement를 emulation만 하는 것 아닌가 하고
network 사용량을 조사함
• network 사용량만 봐서는 bind된 값만 전송되는 것 같은데 왜 큰 효과가
트랜잭션 사용 여부
238.58
100.85
78.62 76.86 76.63 77.29 76.76
0
50
100
150
200
250
300
1개 10개 100개 1천개 1만개 10만개 100만개
commit interval 별 입수 시간 (lower is better)
입수 시간 (초)
• commit-interval이 10이란 이야기는 매 10개 INSERT마다 commit을 한다는
이야기
• 1이면 AUTO COMMIT
• 역시 트랜잭션을 사용해야 빠르다
MULTI INSERT
76.76
53
26.63
19.84
13.5 12.87 13.2
0
10
20
30
40
50
60
70
80
90
1개 2개 5개 10개 100개 1,000개 10,000개
MULTI INSERT 개수별 입수 속도 (lower is better)
입수 시간 (초)
• MySQL에서는 “INSERT INTO ... VALUES (), (), . . ., ()” 를
이용하여 INSERT 1번 호출에 여러 개의 Record를 INSERT할 수 있다
• 단순 입수라면 MULTI INSERT를 사용하는 것이 젤 빠르다
결론
• Prepared Statement의 성능 향상은 미비했다
– 이해가 잘 안 됨
• 트랜잭션을 켜주는 것 만으로도 성능 향상
효과가 높다
• MULTI INSERT를 방식으로 변환하면 더욱
빨라진다
주의 사항
• 테스트 환경에 따라 결과가 다를 수 있음

Más contenido relacionado

La actualidad más candente

NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션
흥배 최
 
[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++
KyeongWon Koo
 

La actualidad más candente (20)

Subversion Branch
Subversion BranchSubversion Branch
Subversion Branch
 
Binlog Servers 구축사례
Binlog Servers 구축사례Binlog Servers 구축사례
Binlog Servers 구축사례
 
Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기
 
Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기
 
Ansible
AnsibleAnsible
Ansible
 
02.실전! 시스템 관리자를 위한 Ansible
02.실전! 시스템 관리자를 위한 Ansible02.실전! 시스템 관리자를 위한 Ansible
02.실전! 시스템 관리자를 위한 Ansible
 
Node.js at OKJSP
Node.js at OKJSPNode.js at OKJSP
Node.js at OKJSP
 
Infiniflux vs influxdb 비교 테스트 결과 2016 12월-v2
Infiniflux vs influxdb 비교 테스트 결과 2016 12월-v2Infiniflux vs influxdb 비교 테스트 결과 2016 12월-v2
Infiniflux vs influxdb 비교 테스트 결과 2016 12월-v2
 
NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션NET 최선단 기술에 의한 고성능 웹 애플리케이션
NET 최선단 기술에 의한 고성능 웹 애플리케이션
 
Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교
 
[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++[0618구경원]초보 게임프로그래머를 위한 c++
[0618구경원]초보 게임프로그래머를 위한 c++
 
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
 
Node.js 현재와 미래
Node.js 현재와 미래Node.js 현재와 미래
Node.js 현재와 미래
 
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
 
Redis
RedisRedis
Redis
 
Red hat ansible engine 2.7 release(Korean version)
Red hat ansible engine 2.7 release(Korean version)Red hat ansible engine 2.7 release(Korean version)
Red hat ansible engine 2.7 release(Korean version)
 
500.JBoss Troubleshooting Essential
500.JBoss Troubleshooting Essential500.JBoss Troubleshooting Essential
500.JBoss Troubleshooting Essential
 
EC2용 SSH Tool - Eclair
EC2용 SSH Tool - EclairEC2용 SSH Tool - Eclair
EC2용 SSH Tool - Eclair
 
검색로그시스템 with Python
검색로그시스템 with Python검색로그시스템 with Python
검색로그시스템 with Python
 
Ansible - Introduction
Ansible - IntroductionAnsible - Introduction
Ansible - Introduction
 

Similar a Mysql insert-speed-150830063629-lva1-app6891

게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
Amazon Web Services Korea
 
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
NAVER D2
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
Jeongsang Baek
 
제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements
beamofhope
 

Similar a Mysql insert-speed-150830063629-lva1-app6891 (20)

Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014
 
제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀
제 9회 엑셈 수요 세미나 자료 연구컨텐츠팀
 
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
 
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
 
Gcd ppt
Gcd pptGcd ppt
Gcd ppt
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
 
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
 
Monitoring System for DevOps - Case of MelOn
Monitoring System for DevOps - Case of MelOnMonitoring System for DevOps - Case of MelOn
Monitoring System for DevOps - Case of MelOn
 
Owasp에 대하여
Owasp에 대하여Owasp에 대하여
Owasp에 대하여
 
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
 
20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)
20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)
20140528 AWS Meister BlackBelt - Amazon Kinesis (Korean)
 
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영
 
[DDD] 모바일 게임을 만들기 위한 AWS 고군분투기 (2019)
[DDD] 모바일 게임을 만들기 위한 AWS 고군분투기 (2019)[DDD] 모바일 게임을 만들기 위한 AWS 고군분투기 (2019)
[DDD] 모바일 게임을 만들기 위한 AWS 고군분투기 (2019)
 
제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements제1회 Tech Net Sql Server 2005 T Sql Enhancements
제1회 Tech Net Sql Server 2005 T Sql Enhancements
 
20180206 elasticsearch
20180206 elasticsearch20180206 elasticsearch
20180206 elasticsearch
 
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드 Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
 
ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기ECS+Locust로 부하 테스트 진행하기
ECS+Locust로 부하 테스트 진행하기
 
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
 

Último

Último (7)

실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 

Mysql insert-speed-150830063629-lva1-app6891

  • 1. MySQL INSERT 성능 테스트 Jason Heo http:/jason-heo.github.io/ 2015.08.30.
  • 2. 테스트 계기 • prepared statement를 사용하면 입수 성능이 빨라질까? – 검색 해 봤는데 찾을 수 없었다. • 내가 직접 테스트해보자. • 테스트하는 김에몇 가지 더 테스트
  • 3. 테스트 종류 • prepared stmt v.s. non-prepared stmt • transaction 사용할 때 v.s. 미사용 • MULTI INSERT 구문의 성능 – INSERT INTO (), (), . . ., ()
  • 4. Test 환경 CREATE TABLE `insert_perf_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `col1` int(11) DEFAULT NULL, `col2` int(11) DEFAULT NULL, `col3` int(11) DEFAULT NULL, `col4` int(11) DEFAULT NULL, `col5` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; • MacBook Air, Yosemite • MySQL 5.6.25 (기본 설정 값 그대로 사용) • PHP 5.5.27 (mysqli) 100만개 레코드 입력 시간 측정
  • 5. prepared stmt (1/2) 76.76 70.96 68 69 70 71 72 73 74 75 76 77 78 prepared statement 미사용 prepared statement 사용 prepared statement 사용 여부에 따른 입수 시간 (lower is better) 입수 시간 (초) • SQL Parsing이 없고, 값만 bind하면 되므로 많이 빠를 것으로 기대했는데... • 생각보다 성능 향상이 적다
  • 6. prepared stmt (2/2) 108 66 0 20 40 60 80 100 120 prepared statement 미사용 prepared statement 사용 prepared statement 사용 여부에 따른 Network 사용량 (lower is better) Network 전송량 (MB) • 혹시 PHP가 prepared statement를 emulation만 하는 것 아닌가 하고 network 사용량을 조사함 • network 사용량만 봐서는 bind된 값만 전송되는 것 같은데 왜 큰 효과가
  • 7. 트랜잭션 사용 여부 238.58 100.85 78.62 76.86 76.63 77.29 76.76 0 50 100 150 200 250 300 1개 10개 100개 1천개 1만개 10만개 100만개 commit interval 별 입수 시간 (lower is better) 입수 시간 (초) • commit-interval이 10이란 이야기는 매 10개 INSERT마다 commit을 한다는 이야기 • 1이면 AUTO COMMIT • 역시 트랜잭션을 사용해야 빠르다
  • 8. MULTI INSERT 76.76 53 26.63 19.84 13.5 12.87 13.2 0 10 20 30 40 50 60 70 80 90 1개 2개 5개 10개 100개 1,000개 10,000개 MULTI INSERT 개수별 입수 속도 (lower is better) 입수 시간 (초) • MySQL에서는 “INSERT INTO ... VALUES (), (), . . ., ()” 를 이용하여 INSERT 1번 호출에 여러 개의 Record를 INSERT할 수 있다 • 단순 입수라면 MULTI INSERT를 사용하는 것이 젤 빠르다
  • 9. 결론 • Prepared Statement의 성능 향상은 미비했다 – 이해가 잘 안 됨 • 트랜잭션을 켜주는 것 만으로도 성능 향상 효과가 높다 • MULTI INSERT를 방식으로 변환하면 더욱 빨라진다
  • 10. 주의 사항 • 테스트 환경에 따라 결과가 다를 수 있음