사이트 속도 질문입니다.

사이트 속도 질문입니다.

QA

사이트 속도 질문입니다.

본문

아미나를 이용하고 있습니다.

 

현재 동접자는 정확히 알수 없지만 일방문자는 3~4만 정도이며 포인트를 많이 활용하고 있습니다.

 

서버 사양은 48vCPU 96GB메모리 400GB SSD 11TB Transfer 을 이용하고 있습니다.

 

사이트의 전반적인 속도도 그렇지만 특히나 게시글에 접속할때면 엄청 느려집니다.

 

젤 느린때는 40초 이상도 됩니다.

 

하루 종일 느린것은 아닙니다. 접속자가 별로 없는 새벽시간에는 메인과 카테고리는 상당히 빠릅니다.

 

하지만 접속자가 별로 없는 시간에도 게시글은 느릴때는 정말 많이 느립니다.

 

정말 많이 검색해보고 별의별 시도를 다 해봤지만 아직도 이유를 찾지 못하고 있습니다.

 

일단 포인트를 사용하는 부분에 대해서는 저번에 포인트 정리를 해줌으로써 속도가 좀 빨라지는듯 하더니 다시금 속도가 느려집니다.

(포인트에 대한 부분때문에 느려지는것도 있다는건 분명 알고 있지만 궁극적인 문제는 아닌것 같더라구요)

 

DB는 innodb 를 이용하고 있으며

 

full text search를 이용하고 있습니다. (검색은 상당히 빠릅니다!!) 

 

동시접속자 worker 를 이용하고 있습니다.

 

서버 사양에 맞게 my.cnf 파일에서도 buffer_size 등등 여러가지 설정을 변경해주었습니다.

 

skip-external-locking

skip-host-cache

skip-name-resolve

 

등등도 쓰고 있습니다.

 

슬로우쿼리에 대한 부분은 이상한것이 

 

예를 들어 롱 쿼리를 10초로 해주면 아무것도 못잡다가 1초로 해야만 포인트에 대한 부분만 찍힙니다.

 

5초 10초 20초 30초 해줄때는 아무것도 잡히질 않습니다. 실제 사이트에서는 40초 이상걸리는것들이 상당히 많은데요

 

롱쿼리를 5초로 해주고 mysql 에서 sleep 명령어로 7초를 해주면 이건 또 잡긴합니다.

 

이부분은 아직 해결 못한상태입니다.

 

사이트에서 개발자모드로 네트워크를 보면 boarb.php 이부분만 상당히 느립니다. 40초 정도 걸립니다.

 

이밖에 여러가지를 더 해주었지만 아무런 반응이 없습니다 오히려 더 느려지는 듯한 느낌도 받습니다.

 

g5_member 에 대해 테이블복구와 테이블최적화를 실행해주었지만 별다른 반응이 없습니다. 

 

어떤 부분을 더 체크 해봐야 할까요?  

이 질문에 댓글 쓰기 :

답변 3

메모리 입니다.

 

기본/etc/my.cnf  또는 mysql.ini 파일 점검 해보셨나요?

 

사이트의 느림의 원인은 너무많도 곳을 체크 해야합니다.

기본적으로 서버사양도 있겠지만..또한 그외 서버셋팅부분도 셋팅이 필요하죠.

 

그리고 난다음 웹사이트의 필요치 않은 , 물론 다 필요로 하겠지만.. ..과도한 API 사용으로 발행하기도하고, 또한 웹 쿼의 섹션 처리 부분에서 도 문제 가원인일수도 있습니다. 하나씩 모두 꼼꼼하게 체크 해볼수 밖에없을듯 합니다. 

스크립트또한 필요치 않은것은 정리 하셔야합니다. 어떤식으로 스크립트롤 구현에 따라서 달라질수 있으닌깐요...

 

일단 기본/etc/my.cnf  또는 mysql.ini 내용이 잇으면 한 번 보여줘보세요

현재 DB는 innodb  버퍼 크기 얼마나 설정하시고 있으신가요?

혹시 key_buffer_size = 768M
이부분 말씀이신가요? innodb 버퍼 크기는 어디서 어떻게 설정하는것인가요?

저 소스가 있는곳은 /etc/my.cnf 파일입니다.

이밖에도

전체적으로 보여드리면... 엉망이지만 ㅠㅠ

[client]
port = 3306
socket = /var/lib/mysql/mysql.sock

[mysqld]
skip-external-locking
skip-host-cache
skip-name-resolve

port = 3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

key_buffer_size = 768M
max_allowed_packet = 2M
table_open_cache = 512
sort_buffer_size = 768M
read_buffer_size = 768M
read_rnd_buffer_size = 16M
myisam_sort_buffer_size = 128M
thread_cache_size = 8
query_cache_size = 64M
thread_concurrency = 4

user=mysql
symbolic-links=0
max_allowed_packet=8M
default-storage-engine=InnoDB
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow_query.log
long_query_time = 30
log_slow_rate_limit = 1
log_slow_verbosity = query_plan
log_slow_admin_statements
log_error=/var/log/mysql/error.log

sql_mode = ''
log-bin=mysql-bin
server-id = 1

[mysqld_safe]
log-error=/var/log/mysql/mysqld.log
pid-file=/var/log/mysql/mysqld.pid


이렇게 되어 있는데요 지식이 없어서.. 제가 정확하게 할 줄 몰라서.... 그냥 막 올려놨습니다..

흠 관련 디렉트로 설정을 여기다 다 하셨군요 ;;
일단 현재 서버 사양에 맞게 48vCPU 96GB메모리 400GB SSD 11TB 정리부터 좀 해봅시다..
부럽군요 --;;

버퍼 및 케시관련부분을 다음과 같이 정리 해본다면?
key_buffer_size = 768M
sort_buffer_size = 768M
read_buffer_size = 768M
read_rnd_buffer_size = 16M
myisam_sort_buffer_size = 128M
query_cache_size = 64M

또그리고

로깅및 엔진처리부분은 다음과 같이한다면?
default-storage-engine=InnoDB
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow_query.log
long_query_time = 10
log_slow_rate_limit = 1
log_slow_verbosity = query_plan
log_slow_admin_statements

그리고남어지는 그대로 정의 해보세요

여기서 메모리 사용 체크를 한번 해봅시다.
현재 보시면 innodb_buffer_pool_size 는 빠져잇는상태입니다. 일반적으로 서버 전체 메모리의 70-80% 정도로 설정은 해주셔야합니다.
96G * 0.8 이므로 다음과 같이

innodb_buffer_pool_size = 76800M

그리고
key_buffer_size 은 MyISAM 테이블을 사용하는 경우 MyISAM 인덱스에 대한 캐싱에 사용되므로,.메모리의 10-25% 설정해 주는게 좋구요.
96G * 0.15 이닌까는.

key_buffer_size = 14400M

또그리고,
query_cache_size 이 값은 메모리의 일부를 차지하므로 적절한 값을 설정해야 합니다.
즉, 큰 캐시가 필요하다면 메모리의 1/4 정도 설정해주는게 좋습니다.
1기가면 적당할듯싶습니다.

query_cache_size = 1024M

네 이렇게 설정해 주시면 적당할것 참고로 현제 서버메모리에 맞게 이이상을 주면줬지 이하로는 줘서는 않된다는것 잊지마세요, 또한 항상 독립서버일경우 권한을 가지고있다면 그서버사양에 맞게 최소로 계산해서 해주셔야 합니다.  몰론 규칙은 없으니.. 참고하시구요^

그리고 한가지더 보시면,...
ong_query_time = 30 을 준다는것은  30초 이상 걸리는 쿼리를 슬로우 쿼리로 간주한다는겁니다.
따라서 적당한 10초 정도 주면은 되지않을까합니다.

서버 사양은 충분히 좋네요.

slow query log 확인하시고 느린 부분 explain 해보시고 적절한 인덱스를 생성해 주세요. 

할수있는 한 모든 slow query 를 점검해 보세요.

 

 

게시판을 접속할때에 속도가 느리다면,

게시판 인덱스를 절적하게 수정하여 처리를 할 수 도있습니다.

특정 게시판의 글중 댓글이 많다면 더 느릴수도있고,

간단하게는 인덱스쪽부터 살펴보셔야할듯 합니다.

long_query_time 은 3초 정도로 변경하세요.

로그에 기록되는 slow로그들을 하나씩

ssh mysql 에 접속

explain 쿼리 내용;
을 통해 문제점 파악

mysql  에서 인덱스 생성

이작업 반복입니다.

인덱스 잡는법은 explain 결과 값을 chatGPT에 물어보세요.

인덱스 생성방법 구글링 하셔서 공부하세요.

https://www.google.com/search?q=mysql+slow+query+%EC%9D%B8%EB%8D%B1%EC%8A%A4+%EC%83%9D%EC%84%B1&rlz=1C1YTUH_koKR1070KR1071&oq=mysql+slow+query+%EC%9D%B8%EB%8D%B1%EC%8A%A4+%EC%83%9D%EC%84%B1&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIKCAEQABiABBiiBDIKCAIQABiABBiiBDIKCAMQABiABBiiBDIKCAQQABiABBiiBDIKCAUQABiABBiiBNIBCTEwNzYwajBqN6gCALACAA&sourceid=chrome&ie=UTF-8



chatGPT 로 질문 해보시면 개념 잡는데 도움됩니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 58,830
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT