BBS 의 잦은 장애에 대해서

김정균의 이미지

요즘 BBS 가 서버 이전을 하고 나서, 상당히 불안한 모습을 보이는 것이 사실입니다. 얼마전의 검색 문제는 phpbb 의 logic 문제로서, 이 부분을 외부에서 실행되도록 분리를 한 후에 해결이 되었으나, 어제, 오늘 mysql process 가 죽는 문제가 발견이 되었습니다.

일단, 이 부분에 대해서는 디버깅 작업을 하고 있으며, 조만간 정상화를 시키도록 하겠습니다. 불편하시더라도 잠시만 참아 주세요 :-)

mysql process 가 죽는 문제에 대해서는 dmesg 에

Out of Memory: Killed process 16828 (mysqld).
Out of Memory: Killed process 16829 (mysqld).
Out of Memory: Killed process 9676 (httpd).
Out of Memory: Killed process 9676 (httpd).

mysql error.log 에

051126 14:54:39 [ERROR] /usr/sbin/mysqld: '/dev/shm/#sql_c3e_80.MYI' 테이블의 부정확한 키 존재. 수정하시오!
051126 14:54:39 [ERROR] /usr/sbin/mysqld: '/dev/shm/#sql_c3e_183.MYI' 테이블의 부정확한 키 존재. 수정하시오!
051126 14:54:39 [ERROR] /usr/sbin/mysqld: '/dev/shm/#sql_c3e_213.MYI' 테이블의 부정확한 키 존재. 수정하시오!
051126 14:54:39 [ERROR] /usr/sbin/mysqld: '/dev/shm/#sql_c3e_212.MYI' 테이블의 부정확한 키 존재. 수정하시오!
051126 14:54:39 [ERROR] /usr/sbin/mysqld: '/dev/shm/#sql_c3e_202.MYI' 테이블의 부정확한 키 존재. 수정하시오!

와 같은 메세지를 뿌리고 있습니다. Out of Memory 를 의심을 해서, 이전 검색 문제시에 튜닝을 하기 위하여 tmp dir 을 /dev/shm 으로 변경한 부분을 의심하고, df 를 해 보니 역시 /dev/shm (1G) 를 100% 사용을 하고 있었습니다. 그래서 일단, 이 부분을 default 값으로 복원을 한 상태 입니다. 제 예상으로는 아마 fix 가 되지 않을까 생각이 들기는 합니다.

여러분들이 열심히 들어와 주셔서 부하를 발생을 시켜 주시면.. 빨리 fix 가 될수도 있겠네요 :-) 증상이 나타나야지.. 원인도 찾을수 있을테니까요 ^^;

어쨌든, 사용에 불편을 드려서 죄송합니다. 좀 더 효율적인 구조로 만드려다 보니.. 그리고 남이 만들어 놓은 것을 최대한 변경없이 사용해 보려다 보니 제한 사항이 많아서 그렇습니다.

P.S
이번 사태로 phpbb code 를 본의 아니게 분석하게 되었는데.. 대형 사이트에서는 상당히 불합리한 logic 을 가진 것 같군요. 특히 검색 부분은 .. 최악 입니다. --;

김정균의 이미지

음.. 혹시 mysql 에 대해서 잘 아시는 분께 여쭤 보고 싶은데.. mysql 에서 tmpdir 에 임시 table 을 생성하는 경우가 어떤 것이 있을까요? 제가 아는 것은 sort 나 join 시에 mysql 설정에서 할당된 메모리 보다 사이즈가 클 경우에 임시 테이블을 생성해서 작업 하는 것으로 알고 있습니다. 그 외의 경우가 또 있을까요?

stadia의 이미지

루신 같은 것을 이용해서
검색을 완전 분리하는 것도 방법이 되겠네요.
그러면 db 부하도 좀 줄겠죠... 아마

불꽃오리의 이미지

역시 글 수가 65535개를 넘어서서 그런것인가 ㅡ.,ㅡ?

혹시나 싶어서 phpbb.com에 갔더니 30만개가 넘네요.
거기는 어떤식으로 운영하길래 그렇게 잘되는건지 ㅡ.ㅡ?

정균님 수고하십니다. 안그래도 많이 바쁘신듯 하신데 이런일까지 하시느라 연말 고생이 많으십니다.
고생하신만큼 크리스마스때 산타클로즈 선수에게서 선물 꼭 받기를 바랍니다.

세계 최고의 OS 개발자 - 오리
KLDP 가입시 해야 할 일
목표 : 세계정복
'X-MAS, 석탄일을 평일로 한글날과 오리의날을 국가공휴일로 만들자.'

송효진의 이미지

MyISAM 을 InnoDB 로 모두 이전하는건 어떨까요?
InnoDB 로 바꾸어도 쿼리 체계가 바뀌지는 않습니다.
한 파일로 되어있어서 DB 가 맛이가면 복구하기가 막막하고 한번에 몽땅 날아간다는 단점이 있기는 하지만,
백업만 잘 한다면 성능상의 잇점도 있을거고,
MyISAM 에 비해 운영중에 잘못되는 확률은 많이 적을겁니다.

InnoDB 가 깨지는 경우는 mysqld 가 정상적으로 종료되지 않았을경우에 가끔 있습니다.

ALTER TABLE 명령으로 간단하게 바꿀 수 있더군요.
만약 한다면, 용량이 큰 관계로 아파치를 내리고 작업하는게 안전할것 같습니다.

김정균의 이미지

송효진 wrote:
MyISAM 을 InnoDB 로 모두 이전하는건 어떨까요?
InnoDB 로 바꾸어도 쿼리 체계가 바뀌지는 않습니다.
한 파일로 되어있어서 DB 가 맛이가면 복구하기가 막막하고 한번에 몽땅 날아간다는 단점이 있기는 하지만,
백업만 잘 한다면 성능상의 잇점도 있을거고,
MyISAM 에 비해 운영중에 잘못되는 확률은 많이 적을겁니다.

InnoDB 가 깨지는 경우는 mysqld 가 정상적으로 종료되지 않았을경우에 가끔 있습니다.

ALTER TABLE 명령으로 간단하게 바꿀 수 있더군요.
만약 한다면, 용량이 큰 관계로 아파치를 내리고 작업하는게 안전할것 같습니다.

db type 의 문제일 것 같지는 않습니다. 위에서 phpbb.com 의 예도 들어 주셨는데, 현재 kldp bbs 의 문제는 sort 연산이 너무 많다는 것입니다. 이때까지 계속 query 들어오는 것만 지켜보고 있는데, bbs service 에서의 query 들은 대부분이 tmp table 을 생성 시키는 query 라는 것이죠. 아마 대표적으로 문제가 되는 것이 rss feed 가 아닐까 의심을 하고 있습니다. :-)

이럴때는 connect pool 을 사용하고 싶군요 :-)

oldbell의 이미지

rss feed 문제라면...
insert, update, delete 될때마다 rss feed에 해당하는 list를 가지는 별도의 table에 update, insert하는 것은 어떨가 싶습니다.

(delete시에는 약간의 트릭을 써야 될 수도 있겠네요..)

rss feed가 주기적으로 작동될 때에 sort등으로 db에 부하가 많이 발생한다면.. 한번 고려해볼만 하지 않을까요??

인생의 무게를 느껴라. 아는 만큼 보이는게다.

김정균의 이미지

oldbell wrote:
rss feed 문제라면...
insert, update, delete 될때마다 rss feed에 해당하는 list를 가지는 별도의 table에 update, insert하는 것은 어떨가 싶습니다.

(delete시에는 약간의 트릭을 써야 될 수도 있겠네요..)

rss feed가 주기적으로 작동될 때에 sort등으로 db에 부하가 많이 발생한다면.. 한번 고려해볼만 하지 않을까요??

지금 cron job 으로 대체해 볼까 생각 중입니다. 시간이 되면.. --;