왜 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) 가 좋다고 해서 설정해봤는데 성능은 별차이 없었고
아직 개념이랑 왜 쓰는지 잘 모르겠다. 좀 더 확인해봐야 할 거 같다.
'RDB > mysql' 카테고리의 다른 글
Real Mysql 강의 소개 (0) | 2024.07.02 |
---|---|
slow query 슬로우 쿼리 로그 설정 및 확인방법 (mysql, mariadb) (0) | 2023.06.12 |
mysqld got signal 6 error / DB 재시작 에러 해결 1 (0) | 2023.05.04 |
mysql stored procedure 내에서 NAME_CONST() 함수 사용으로 성능저하 문제 (0) | 2023.02.02 |
mysqldump 사용시 주의점 (0) | 2023.01.10 |