MySQL 질문입니다.

mangnanism의 이미지

2가지 질문인데요.

먼저, 여러 게시판마다 각각 테이블이 있는데 테이블의 용량이 3기가를 넘어가면 특정 select문의 응답이 늦어 그 뒤로 요청되는 select 쿼리들이 locked되어 쓰레드가 갑자기 늘어나는 현상이 계속 발생하는데요. 임시방편으로 10초정도 지난 select문을 죽이는 쉘스크립트를 쓰고 있긴한데 3기가 이상의 대용량 파일일때 성능향상을 기대할 수 있는 방법이 있을까요? 쿼리나 테이블 구조를 바꿀수 있는 상황은 아니네요.

그리고 insert가 많이 발생하는 테이블이 있습니다. 이 테이블에서 정기적으로 select를 실행해야하는데 이 select만 1분이상 걸립니다. 이 1분이상 동안 발생하는 insert쿼리는 전부 locked되어 쓰레드가 난리도 아니네요. 방법이 있을까요?

위 두문제 전부 갑자기 늘어나는 쓰레드문제인데요. 데이터가 계속 변하기 때문에 쿼리캐시는 끈 상태이고 하드웨어 성능도 딸리지 않습니다. 엔진은 둘다 MyISAM입니다.

winner의 이미지

Table partioning을 사용하면 Query는 변경하지 않고, table을 나눌 수 있을 겁니다.

mangnanism의 이미지

아, 파티셔닝을 좀 보니깐 아직 MySQL에서 초기단계인데 안정적일까요? 매뉴얼도 그다지 많지않네요.

mangnanism의 이미지

2번째 질문인 "insert가 많이 발생하는 테이블이 있습니다. 이 테이블에서 정기적으로 select를 실행해야하는데 이 select만 1분이상 걸립니다. 이 1분이상 동안 발생하는 insert쿼리는 전부 locked되어 쓰레드가 난리도 아니네요. 방법이 있을까요?"

요거는 리플리케이션은 안될것 같고 클러스터를 구성하면 해결될까요? 한대는 insert만 하고 한대는 select만 하구요.

doodoori2의 이미지

row 단위 locking이 되는 innoDB가 좋을 것 같습니다만

이런 작업 하시기 전에는 백업 잘 해두시고요.

huhushow의 이미지

아주 중요한게 아니면 언락해서 조회하세요.....
1번도 언락 하시고.....
그럼 일단 락 잡아서 뒤의 쿼리들이 접근 못하는건 해결될꺼고
1번같은 경우는 어떤 쿼리가 악성인지를 봐야 판단이 가능합니다.
수만건을 불러오는게 아니라면 3기가 정도의 테이블에서 수초이상 걸리는건
대용량이라 그런게 아니라
쿼리를 발로 짜서 그런거니까요.