FS(Ext3,JFS,XFS,ReiserFS)에 따른 MySQL 버전별 Benchmark
처음 이 테스트를 한 것은 2005년 1월 무렵이었습니다. 이전에는 FreeBSD에서 MySQL을 사용했었고 1월에는 새 서버에 데비안을 사용하려고 했습니다. OS를 바꾼 이유는 FreeBSD에서 부하가 걸리면 mysqld가 좀비가 되는 현상 때문에 리눅스로 옮겨갈 생각을 했습니다.(Jeremy의 http://jeremy.zawodny.com/blog/archives/000203.html 기사를 참고하세요.)
데비안 설치시 저널 파일 시스템 종류를 선택할 수 있습니다. Ext3, JFS, ReiserFS, XFS 의 차이점이 있을까 하는 의문에 검색을 해보니 차이가 날 거 같아서 각각의 파일 시스템으로 MySQL의 sql-bench 를 돌려봤습니다.
미리 말씀드립니다만, 이 결과는 단순히 서로 다른 파일 시스템상에서 MySQL 벤치마크를 돌린 결과일 뿐입니다. 이 결과로 디비 성능이 정해지는 건 아닙니다. 단순히 참조용으로만 사용하시면 됩니다. 이 결과가 모든 걸 설명하지 않습니다.
sql-bench 는 MySQL 바이너리나 소스에 들어있는 벤치마크 스크립트로, perl-DBD-mysql 와 perl-DBI 가 필요합니다. 데비안, 페도라, 센트 등은 MySQL 을 설치하면 자동으로 깔리고, 젠투는 수동으로 깔아줘야 합니다.
2005년 1월에는 그야말로 단순무식하게 파일 시스템을 바꿀 때마다 OS를 새로 설치했습니다. 진짜 무식했죠. ㅡ.ㅡ;; 아래 결과는 다음과 같은 시스템에서 테스트한 것입니다. (이때는 파일 시스템별로 한번씩만 테스트를 했습니다.)
시스템 사양 : Dell PowerEdge 1850
Intel(R) Xeon(TM) CPU 2.80GHz, 2 way
RAM : 1G
LSILogic 1030 Ultra4 Adapter
SEAGATE ST373307LC DS09 36G
OS : Debian Sarge(당시 Testing 버전)
숫자가 의미하는 것은 수행하는 데 걸린 시간을 말합니다. raw data(첨부파일) 를 보시면 나옵니다만, wallclock secs 라고 나옵니다. 실제 초와 똑같지는 않은데 거의 비슷한 듯 합니다. 각 테스트가 정확히 뭘 의미하는 지는 디비 쪽 공부하시는 분들이 알려주시면 좋겠네요. ^^;; output 을 살펴보니 insert, select, create 를 10,000 ~ 100,000 row 정도 돌려보는 테스트 같군요.
Type Total alter ATIS big connect create insert select wisconsin 1st-nosmp-2.4.27-reiser 1783 14 8 8 103 711 840 83 6 1st-nosmp-2.4.27-xfs 1620 12 8 8 98 591 806 82 5 1st-nosmp-2.6.8-ext3 2321 32 8 8 99 859 1122 75 6 2nd-smp-2.6.8-reiser 1810 29 9 9 85 882 706 73 6 2nd-smp-2.6.8-xfs 1503 11 8 8 79 605 700 72 5 2nd-smp-ext3 2161 31 9 9 82 830 1015 73 6 3rd-smp-with-cnf-xfs 1466 15 7 8 72 618 665 71 4 4th-smp-with-cnf-static-xfs 1902 13 15 11 67 602 752 434 5
테이블 태그가 지원되지 않아서 헷갈릴까봐 표로 된 링크를 겁니다.
http://dharana.egloos.com/2091263#t1
이때는 JFS를 테스트 못해 봤습니다. 검색을 해보니 아직 충분한 데이터가 없다는 결과 뿐이더군요. 위 결과에 따라 XFS 파일 시스템을 택했고, 1년 동안 문제없이 잘 사용하고 있습니다.
=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=
2005년 12월. 새 서버를 또 설치해야 했습니다. 이번에는 서버 종류가 두 가지라서 각각의 경우를 테스트 해보기로 했습니다. 원래 디비 서버, 웹 서버로 사용할 용도였습니다.(서버 사양은 http://www.inempire.com/iehosting/shosting.html 참고)
디비 서버 사양 : IBM x336
Intel Xeon 3.0GHz 2M L2, 2 way
FSB 800MHz
4G RAM(DDR2-400 R-ECC x 4)
73G LSI/Symbios Logic 53C1030 Fusion-MPT Dual Ultra320 SCSI
웹 서버 사양 : Inter K1104
Intel Xeon 3.0GHz 2M L2, 2 way
FSB 533MHz
2G RAM
73G Adaptec AIC-7902B U320 SCSI
이전 경험을 바탕으로 매번 OS를 새로 설치하지 않고 어떻게 쉽게 각 파일 시스템을 테스트 할 수 있을까를 고민해 본 결과 다음과 같은 방법을 생각해 냈습니다.(이렇게 나오기까지 많은 시행착오를... ㅜ.ㅜ)
벤치마크 테스트 중에 실제로 파일을 쓰고 지우고 하는 과정은 데비안 기준으로 /var/lib/mysql/test 에서 일어납니다. 배포판에 따라 위치는 조금씩 틀립니다. 먼저 각각의 파일 시스템으로 포맷된 4개의 파티션을 만듭니다.
/data_ext3 /data_jfs /data_reiser /data_xfs
각 파일 시스템으로 마운트 시킨 뒤에 MySQL 이 실제 사용하는 데이터 디렉토리를 각 파티션으로 옮긴 뒤에 원래 디렉토리와 심볼릭 링크로 연결시켜 줍니다. 이렇게 하면 재부팅이나 재설치 없이 한 번의 스크립트로 모든 파일 시스템에 대한 테스트를 할 수 있습니다.
OS 별로 설치한 방법은 다음과 같습니다.
데비안
1. 안정본(Sarge)과 테스팅본(Etch, 2005-12-11)을 시디로 구워서 각각 expert26, expert 로 설치했습니다.
(단 x336 에서는 2.6 커널로 설치를 하면 시디롬을 인식하는 못하는 현상이 발생했습니다. 2.4 커널로 설치하면 가능하고 일단 설치 후에 2.6 커널을 apt 로 바꿨습니다.)
2. 커널은 제시된 것 중에서 가장 높은 버전을 선택했습니다.(안전: 2.6.8-2-smp, 테스팅: 2.6.12-1-686-smp)
3. 안정본은 NPTL 0.60, 테스팅본은 NPTL 2.3.5 입니다. 안정본은 MySQL 5.0 을 깔면 NPTL 2.3.5 로 올라갑니다.
4. 최소 설치로 한 후에 apt 로 MySQL 4.1을 설치하고 테스트 한 후, 4.1을 지운 후에 5.0 버전을 설치하고 다시 테스트를 했습니다. 의존성에 관계된 패키지 외에 설치한 것은 vim 과 htop 뿐입니다.
5. x336 은 램이 4G 인데, 기본 커널로는 모두 지원이 안되서 커널 재컴파일을 했습니다. 설치시 선택된 config 파일에서 64G 램만 선택해서 재컴파일 했습니다.
젠투
1. http://www.gentoo.org/doc/en/handbook/2005.1/handbook-x86.xml 에 따라 설치했습니다.
2. 설치 후 emerge --deep --update world 를 하고 USE="-X nptl" 을 사용했습니다.(NPTL 2.3.5)
3. 업데이트 후 emerge mysql 을 하니 4.1이 설치되더군요. 5.0 포티지 설치는 실력이 안되서 못했습니다. 대신 MySQL 바이너리 5.0.16 으로 테스트를 했습니다.
4. perl-DBD-mysql perl-DBI 를 따로 설치해줘야 벤치마크 스크립트가 실행됩니다.
페도라 코어 4
1. 설치시 부트 프롬프트에서 다음과 같이 하면 바로 여러가지 파일 시스템을 이용할 수 있습니다.
boot: linux jfs reiserfs xfs
2. 최소 설치(Gnome, KDE 생략)를 한 후에 /etc/inittab 에서 런레벨을 3으로 하고 재부팅을 해서 X 는 사용하지 않았습니다.
3. MySQL 4.1 은 yum 을 통해 깔았고, 5.0.16 은 젠투처럼 배포되는 바이너리를 이용했습니다.
CentOS ServerCD 4.2
1. 센트 시디 중에서 서버용 시디를 이용해서 최소 설치했습니다.
2. 센트는 설치시 여러 파일 시스템을 이용하지 못하므로 일단 설치 후에 2.6.9-22ELsmp config 파일을 이용해 재컴파일 했습니다.
3. 센트의 경우 커널 컴파일 옵션에 따라 테스트 결과 차가 상이하게 났습니다.
4. 페도라와 마찬가지로 MySQL 4.1은 yum을 이용해서, 5.0.16 은 바이너리를 이용했습니다.
=0=0=0=0=0=0=0=0=0=0=0=0=0=0=
먼저 웹 서버에서 테스트한 결과입니다. txt 가 붙은 건 한 번만 돌린 결과이고 나머지는 5번 돌려서 평균을 낸 값입니다. 5번을 돌렸을 때 편차는 크지 않았습니다. 자세한 것은 raw data 를 참조하십시오.
뒤에 B 가 붙은 것은 MySQL.com 에서 내려받아서 설치한 바이너리 배포본이고, s 가 붙은 것은 소스 컴파일시 static 옵션을 준 것입니다. 커널 버전 뒤에 r 이 붙은 건 웹 서버가 두 대인데 서로 바꿔서 테스트한 경우입니다.
표 형태로 보시려면 아래를 클릭.
http://dharana.egloos.com/2091263#t2
Type Total alter ATIS big connect create insert select wisconsin 01-2.6.12-386-jfs-4.1.txt 1166 9 8 10 81 260 715 66 6 01-2.6.12-386-jfs-5.0.txt 1170 9 7 13 87 201 748 89 7 01-2.6.12-386r-xfs-4.1 1176 9 7 10 81 257 730 66 6 01-2.6.12-386r-xfs-5.0 1243 8 8 13 86 256 765 90 7 01-2.6.12-686-jfs-5.0 1107 9 8 14 86 189 695 90 6 01-2.6.12-686-reiser-4.1 1258 28 8 11 83 334 715 64 6 01-2.6.12-686-reiser-5.0.txt 1280 27 9 14 87 323 709 92 7 01-2.6.12-686r-jfs-4.1 1032 9 8 11 81 150 693 63 5 01-2.6.12-686r-jfs-5.0 1061 9 8 13 86 148 692 90 6 01-2.6.12-686r-xfs-4.1 1168 9 8 11 83 276 701 64 5 01-2.6.12-686r-xfs-5.0 1199 9 8 13 87 271 703 90 6 01-2.6.14-gentoo-ext3-4.1 1678 34 12 11 62 394 803 274 5 01-2.6.14-gentoo-jfs-4.1 1195 10 12 11 61 239 591 270 4 01-2.6.14-gentoo-reiser-4.1 1392 31 12 11 60 392 611 275 5 01-2.6.14-gentoo-xfs-4.1 1283 10 12 11 60 301 607 282 4 01-2.6.8-jfs-4.1.txt 1090 10 7 9 77 252 654 66 5 01-2.6.8-jfs-5.0 1023 10 7 12 84 136 669 90 6 01-2.6.8-reiser-4.1 1183 27 8 9 77 298 680 68 6 01-2.6.8r-ext3-4.1B 10119 33 8 9 78 287 9523 67 6 01-2.6.8r-ext3-4.1 1450 28 7 9 76 352 829 65 6 01-2.6.8r-ext3-5.0B 1714 36 8 10 80 385 951 94 6 01-2.6.8r-ext3-5.0 1568 32 8 11 83 334 906 92 6 01-2.6.8r-ext3-5.0s 1537 30 8 12 86 310 907 87 6 01-2.6.8r-jfs-4.1B 9791 12 7 10 77 234 9369 66 5 01-2.6.8r-jfs-4.1 985 10 7 9 76 148 654 66 5 01-2.6.8r-jfs-5.0B 1149 12 8 10 80 274 657 93 5 01-2.6.8r-jfs-5.0 1034 10 7 12 84 144 670 91 6 01-2.6.8r-reiser-4.1B 9822 31 8 10 77 279 9334 67 6 01-2.6.8r-reiser-4.1 1139 28 7 9 77 268 668 66 5 01-2.6.8r-reiser-5.0B 1398 32 8 10 81 477 679 93 6 01-2.6.8r-reiser-5.0 1260 30 8 11 83 330 687 92 6 01-2.6.8r-xfs-4.1B 9806 10 8 10 81 253 9361 67 6 01-2.6.8r-xfs-4.1 1109 9 7 8 76 265 661 65 5 01-2.6.8r-xfs-5.0B 1166 10 8 10 84 272 671 93 6 01-2.6.8r-xfs-5.0 1170 9 7 12 86 270 679 90 6 01-2.6.8r-xfs-5.0s 1181 9 8 12 88 277 684 85 6
=0=0=0=0=0=0=0=0=0=0=0=0=0=0=
디비 서버에 대한 결과입니다. 다섯번씩 돌려서 평균을 낸 값이고, 편차는 크지 않았습니다.
센트 경우, 커널 컴파일 시에 /usr/src/linux/configs/kernel-2.6.9-i686-hugemem.config 와 /boot/config-2.6.9-22.ELsmp 에서 파일 시스템만을 추가한 후에 컴파일 해봤습니다. boot 밑의 config 파일을 수정한 게 훨씬 결과값이 좋았습니다. 두 파일의 차이는 다음과 같습니다.(cent-2.6.9가 성능이 낮음. cent-2.6.9r 이 성능이 높은 쪽)
107,111c106,110 (여기가 성능이 높은 쪽입니다.) < # CONFIG_X86_4G is not set < # CONFIG_X86_SWITCH_PAGETABLES is not set < # CONFIG_X86_4G_VM_LAYOUT is not set < # CONFIG_X86_UACCESS_INDIRECT is not set < # CONFIG_X86_HIGH_ENTRY is not set --- (이건 성능이 낮은 쪽) > CONFIG_X86_4G=y > CONFIG_X86_SWITCH_PAGETABLES=y > CONFIG_X86_4G_VM_LAYOUT=y > CONFIG_X86_UACCESS_INDIRECT=y > CONFIG_X86_HIGH_ENTRY=y
표 형태로 보려면 아래를 클릭.
http://dharana.egloos.com/2091547#t3
Type Total alter ATIS big connect create insert select wisconsin 03-2.6.12-smp-jfs-5.0 1746 15 9 13 97 745 755 95 7 03-2.6.14-gentoo-ext3-4.1 2003 29 13 12 68 821 740 284 5 03-2.6.14-gentoo-jfs-4.1 1814 14 12 11 67 799 625 284 5 03-2.6.14-gentoo-jfs-4.1B 8757 16 5 9 76 705 7872 58 4 03-2.6.14-gentoo-reiser-4.1 1905 27 13 11 68 864 647 273 5 03-2.6.14-gentoo-xfs-4.1 1616 16 13 12 68 584 638 285 5 03-2.6.8-smp-ext3-4.1 1689 27 8 9 86 634 812 69 6 03-2.6.8-smp-ext3-5.0 1784 27 9 11 93 651 846 92 7 03-2.6.8-smp-jfs-4.1 1735 20 8 9 86 818 708 69 6 03-2.6.8-smp-jfs-5.0 1786 18 8 12 93 829 717 92 7 03-2.6.8-smp-reiser-4.1 1593 25 8 9 86 654 725 69 6 03-2.6.8-smp-reiser-5.0 1655 26 8 12 93 671 734 92 7 03-2.6.8-smp-xfs-4.1 1517 14 8 8 86 587 721 69 5 03-2.6.8-smp-xfs-5.0 1511 15 8 12 93 544 726 93 7 03-2.6.8-smp2-jfs-5.0 1744 20 8 11 91 796 710 91 6 03-2.6.8r-ext3-5.0 1813 28 9 13 94 656 862 94 7 03-2.6.8r-jfs-5.0 1773 16 8 13 95 789 740 93 7 03-2.6.8r-reiser-5.0 1797 29 9 13 95 784 753 95 7 03-2.6.8r-xfs-5.0 1607 11 9 13 95 610 753 94 7 03-F60-50-opti 2188 13 17 14 83 466 1083 413 7 03-F60-50 2217 13 17 15 85 467 1093 422 7 03-F60-50-stat-opti-lt 1951 13 14 13 77 466 934 340 6 03-F60-50-stat-opti 2151 13 16 14 82 466 1060 403 7 03-F60-50-stat 2157 13 17 14 82 465 1058 408 7 03-F60smp-41-stat-opti-lt1 2050 13 17 19 91 446 1086 296 7 03-F60smp-50-stat-opti-lt 2033 14 14 13 97 484 982 336 7 03-F60smp-50-stat-opti-lt1 2043 14 15 12 97 504 978 333 7 03-F60smpule-41-stat-opti-lt 2176 13 19 23 132 444 1164 302 7 03-cent-2.6.9-ext3-4.1 2332 32 26 24 125 637 1170 311 9 03-cent-2.6.9-ext3-4.1 1907 29 17 13 78 629 849 288 6 03-cent-2.6.9-ext3-5.0B 2198 35 16 23 140 774 1071 125 9 03-cent-2.6.9-jfs-4.1 2354 20 25 24 126 696 1156 310 8 03-cent-2.6.9-jfs-5.0B 2104 20 16 22 140 723 1045 123 9 03-cent-2.6.9-reiser-4.1 2410 30 26 24 126 716 1169 319 9 03-cent-2.6.9-reiser-5.0B 2279 33 17 22 140 874 1056 123 9 03-cent-2.6.9-xfs-4.1 2289 15 27 24 126 625 1157 311 9 03-cent-2.6.9-xfs-5.0B 1959 16 16 22 141 571 1054 124 9 03-cent-2.6.9r-ext3-4.1 1901 29 16 14 78 634 834 289 7 03-cent-2.6.9r-ext3-5.0B 1840 34 10 11 92 770 808 100 7 03-cent-2.6.9r-jfs-4.1 1919 17 17 14 78 693 808 292 6 03-cent-2.6.9r-jfs-5.0B 1736 17 10 12 92 722 770 99 6 03-cent-2.6.9r-reiser-4.1 1977 28 18 14 79 713 828 297 6 03-cent-2.6.9r-reiser-5.0B 1916 31 10 12 93 846 809 101 7 03-cent-2.6.9r-xfs-4.1 1859 12 17 13 79 619 828 289 6 03-cent-2.6.9r-xfs-5.0B 1603 14 10 11 92 569 793 101 6 03-fc4-2.6.11-ext3-4.1 2112 28 17 15 99 624 1011 285 7 03-fc4-2.6.11-ext3-5.0B 2075 32 11 13 113 750 994 104 8 03-fc4-2.6.11-jfs-4.1 2019 14 17 15 99 699 892 284 7 03-fc4-2.6.11-jfs-5.0B 1871 15 10 14 113 752 848 104 7 03-fc4-2.6.11-reiser-4.1 1980 28 18 15 98 634 902 286 7 03-fc4-2.6.11-reiser-5.0B 1988 30 11 14 114 836 865 105 8 03-fc4-2.6.11-xfs-4.1 1954 12 18 15 99 615 910 286 7 03-fc4-2.6.11-xfs-5.0B 1706 14 10 14 114 577 857 106 7
=0=0=0=0=0=0=0=0=0=0=0=0=0=0=
결과 정리.
1.
원래 디비 서버용 스펙이 더 좋아서 좋은 결과가 나올 줄 알았는데, 데비안 설치시 문제도 있고, 성능도 낮게 나오는 군요. 혹시 다른 OS 에서는 제대로 나오나 싶어서 센트와 페도라를 깔아봤습니다만, 데비안과 비슷한 결과였습니다. x336 홈페이지서는 레드햇을 공식 지원한다고 해놨는데, 센트나 페도라로도 별로 뛰어난 성능을 보이진 않는군요.
2.
IBM x336 에서는 XFS 가 성능이 높게 나오지만, Intel K1104 에서는 JFS 가 제일 높게 나옵니다.
3.
세부 항목을 보면 크게 차이가 나는 부분이 create 와 insert 인데 이게 뭘 뜻하는 지는 잘 모르겠습니다.
4.
mysql 사이트서 4.1.16 과 5.0.16 을 바이너리로 받아서 테스트를 해보니 4.1은 문제가 있는 지 결과가 무척 낮게 나왔고, 5.0.16 은 각 리눅스 배포본의 패키지와 그리 다르지 않은 결과를 보였습니다.
5.
위 결과로 볼 때, 파일 시스템이 MySQL 벤치마크 테스트에 미치는 영향은
인텔 서버 : JFS > XFS > ReiserFS > Ext3 IBM 서버 : XFS > ReiserFS > Ext3 > JFS
순 입니다. (대체 IBM 서버서 IBM이 만든 파일 시스템이 제일 성능이 안 나오는 이유가 뭔지... ㅡ.ㅡ;;)
6.
센트의 커널 컴파일에서 봤듯이 시스템의 튜닝에 따라 성능 차가 크게 날 수 있다는 것을 알 수 있습니다.
7.
디비 서버에서 FreeBSD 로 했을 때와 리눅스로 했을 때의 차이는 꽤 큽니다. Jeremy 씨가 말했던 것처럼 특별한 취향이 없으면 MySQL 돌리기에는 리눅스가 더 나은 것 같습니다.(위 표에서 stat 는 정적 컴파일, lt 는 리눅스 쓰레드 사용, opti 는 컴파일 시 BUILD_OPTIMIZED 를 넣은 경우를 말합니다. FreeBSD 6.0 을 사용했고, smp 가 붙은 것은 smp 용으로 커널 컴파일을 다시 한 것이고, smpule 는 스케쥴러를 ULE 로 선택한 경우입니다.)
첨부 | 파일 크기 |
---|---|
raw.tgz | 326.64 KB |
숫자가 의미하는게 트랜잭션을 수행하는데 걸린 시간인가요 아님 단위시간당
숫자가 의미하는게 트랜잭션을 수행하는데 걸린 시간인가요 아님 단위시간당 처리한 트랜잭션인가요?
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
고생하셨습니다.다만, 파일 시스템이 속력이 평가기준의 모든 잣대가
고생하셨습니다.
다만, 파일 시스템이 속력이 평가기준의 모든 잣대가 아니라,
IBM-JFS같은 불상사가 나오는 것 같습니다.
매우 유용하네요...
XFS 탐이 나는 군요...
와 유용한 정보이군요...감사합니다.
와 유용한 정보이군요...
감사합니다.
There is no spoon. Neo from the Matrix 1999.
숫자가 의미하는 것은 수행하는 데 걸린 시간입니다. wallclock 라
숫자가 의미하는 것은 수행하는 데 걸린 시간입니다. wallclock 라고 표시되더군요. 무슨 뜻인지는 모르겠습니다. ^^;;
각 파일시스템이 단순 속도로 비교할 수 있는 부분은 아니지요.각
각 파일시스템이 단순 속도로 비교할 수 있는 부분은 아니지요.
각 용도에 따라서 그에 맞는 파일시스템을 사용하시는것이 올바른것이 아닐까 하는 생각을 해 봅니다.
아무래도 큰 파일을 다루는데 적합한 구조를 가지는 파일 시스템이 있는가 하면 작지만 다량의 파일을 다루는데 적합한 파일시스템도 있기 마련일테니까요.
참고로 innoDB 를 이용하면 filesystem 위에 db 파일들이
참고로 innoDB 를 이용하면 filesystem 위에 db 파일들이 위치되는 형식이 아니라 아예 raw device 에 table space 를 만드는 것도 가능합니다...
이론적으론 raw device 쪽이 성능은 훨 씬 좋을 듯 싶은데... 혹시나 가능하다면 다음 벤치마크 땐 이것도 한 번 체크해봐주셨음 하는... 작은 바램이 :evil:
http://dev.mysql.com/doc/refman/5.1/en/innodb-raw-devices.html
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
댓글 달기