반응형

왜  binary 설치인가?

- yum install이나 apt-get, rpm 등 설치는 설치할 때는 편할지 모르지만 관리가 힘들다.

binary 설치하게 되면 초기 설정만 잘 해주며 폴더별로 관리하기 편하고 백업 및 마이그레이션 작업도 수월하기에 상용 서비스 DB를 설치할 때는 binary로 설치하는 것을 추천한다.

 

사전 확인 작업

 

1. 장비 하드웨어 스팩확인

1-1) CPU 확인

#물리 CPU 개수

 [root@ ~]# grep "physical id" /proc/cpuinfo | sort -u | wc -l
2

 

 

#CPU당 물리 코어 수

[root@ ~]# grep 'cpu cores' /proc/cpuinfo | tail -1
cpu cores : 6

 

#CPU 코어 전체개수

 [root@ ~]# grep -c processor /proc/cpuinfo
24

 

-> 맞는지 한번 계산해본다.

1 core * 6 * 2(가상 하이퍼스레딩) = 12

1 core * 6 * 2(가상 하이퍼스레딩) = 12

=> 총 24 코어

 

1-2) 메모리 확인

[root@~]# free -m
             total       used       free     shared    buffers     cached
Mem:         32079      29966       2113          1        563       5460
-/+ buffers/cache:      23942       8137
Swap:        15999       3360      12639

=> 32G

 

2. OS 스팩 확인

2-1) 설치 OS version 확인

[test-db@ ~]$ cat /etc/centos-release
CentOS release 6.10 (Final)

 

2-2) glibc 버전 확인

[test-db@ ~]$ getconf -a | grep libc
GNU_LIBC_VERSION                   glibc 2.12

 

3. 파일시스템 확인

[test-db@ ~]$ df -Th
Filesystem           Type   Size  Used Avail Use% Mounted on
...
/dev/sdb1            ext4   1.1T  126G  919G  12% /data
/dev/sda8            ext4   212G   95G  107G  48% /backup

 

DB를 설치할 경로(/data)에 파일시스템을 확인

제일 좋은 선택은 대용량이라면 XFS라고 하는데 실제로 마운트 옵션을 둘다 제대로 주고 테스트해본 바는 EXT4가 쿼리수행시간이 일정하게 들어오고 

XFS는 빠를땐 빠르고 느릴땐 느리고..뭔가 들쭉날쭉했다.

--> 실제 상용서비스는 마운트옵션은 EXT4로 사용중이다.

 

ex)

테스트 DB spec은 mysql 5.7.19 / SSD / 쿼리캐시 off/ 데이터는 100G / 테이블 300개

/ 테스트쿼리(OLAP) 수행시간 30초 / 조인테이블 6개 /인덱스 타고 풀스캔 없음

 

 4. 마운트옵션 확인

vi /etc/fstab
...
UUID=xxxxxxx-xxxd-4xx0-axx6-6xxxxxfxx5b1 /data                    ext4    defaults        1 2

 

 

defaults는 성능이 좋지 않다. 

아래처럼 변경하면 좀 더 나은 성능을 기대할 수 있다.

ext4 ---->         rw,noatime,nodiratime,nobarrier,data=ordered
xfs  ---->         rw, noatime,nodiratime,nobarrier,logbufs=8,logbsize=32k

 

5. 오픈파일 개수 설정

vi /etc/security/limits.conf

# mysql setting
mysql         soft    nproc         65535
mysql         hard   nproc         65535
mysql         soft    nofile         65535
mysql         hard   nofile         65535

 

6. 리눅스 커널 설정

- 보통은 오라클 설정과 비슷하게 한다.

솔직히 커널 튜닝까지는 자사 SE쪽에서 기존 프로세스대로 설치하고

넘겨줘서 보지 않았다 추후 공부할 예정이다.

-- 참조 사이트 : https://neo-orcl.tistory.com/tag/parameter

 

vi /etc/sysctl.conf

# Controls IP packet forwarding
net.ipv4.ip_forward = 0
# Controls source route verification
net.ipv4.conf.default.rp_filter = 1
# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0
# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0
# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1
# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1
# Disable netfilter on bridges.
#net.bridge.bridge-nf-call-ip6tables = 0
#net.bridge.bridge-nf-call-iptables = 0
#net.bridge.bridge-nf-call-arptables = 0
# Controls the default maxmimum size of a mesage queue
kernel.msgmnb = 65536
# Controls the maximum size of a message, in bytes
kernel.msgmax = 65536
# Controls the maximum shared segment size, in bytes
kernel.shmmax = 68719476736
# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296
# swap setting
vm.swappiness=0
net.ipv4.tcp_fin_timeout=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_keepalive_time=10
net.ipv4.tcp_keepalive_probes=2
net.ipv4.tcp_keepalive_intvl=2
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_syn_retries=1
net.ipv4.tcp_max_syn_backlog=8192

 

 

7. malloc 을 리눅스 OS에 기본설정말고 다른 걸로 바꿔라?

- 뮤택스 락부분에서 개선이 있다고 해서 jemalloc, tcmalloc 둘다 깔아서 써봤는데 별차이 없었다. 그냥 안쓰는 걸로..

 

8. CPU affinity 설정

- 누마(NUMA) 가 좋다고 해서 설정해봤는데 성능은 별차이 없었고

아직 개념이랑 왜 쓰는지 잘 모르겠다. 좀 더 확인해봐야 할 거 같다.

 

 

 

반응형
블로그 이미지

dung beetle

취미는 데이터 수집 직업은 MYSQL과 함께 일하는 DBA의 소소한 일상 이야기

,