개인적으로 pthread 의 사용에 익숙치 않은지라 thread 처리시에 어떻게 무엇을 처리해 줘야 하는지는 잘 모릅니다. 이 부분은 thread 프로그래밍의 대가가 계시면 도움을 주시면 고맙겠군요. 말씀 드릴 부분은 MySQL 접속 부분입니다. 작성하시는 프로그램이 얼마만큼 빈번하게 mysql connection 을 일으키는지는 알수 없지만 디비 서버가 감당할수 없을 정도로 connection 이 빈번하게 일어 난다면 틀림없이 스레드 프로세스에서 딜레이가 생기면서 심할 경우 디비 서버 자체가 못견디는 현상이 나타날 수 있습니다.
이 부분을 해결하기 위해서는 정확한 트래픽의 추정이 필요하며, 필요할 경우 디비 락 보다는 connection pooling 이 필요할지도 모릅니다. MySQL 은 특정 테이블에 쓰기 작업을 하는 경우 raw-level table locking 을 자동으로 시도합니다. 그러므로 쓰기가 많은 경우 MySQL 의 경우 많은 CPU loading 과 latency 가 걸리게 됩니다. 이것은 읽기가 많은 작업과는 질적으로 다른 경우지요. 그리고 connection 이 많은 경우에 table locking 을 시도하게 되면 하나의 connection 작업이 안정될 것이라는 것은 보장되지만 다른 많은 connection 시도들이 실패하게 되는 경우도 발생하게 될 것입니다. 여러가지 상황을 머리에 그려 보시고 프로젝트를 진행하시기 바랍니다.
>>이희석 님께서 쓰시길<<
:: 제 프로그램은 일반 웹프로그램과는 좀 다르지만,
::
:: UDP패킷을 받아서 MySQL에 빈번히 넣고 빼는 그런 프로그램입니다.
:: 최악의 가정은 OS(또는 LAN CARD)가 패킷을 받을수 있는 동안 계속해서
:: MySQL접근을 해야 하는 것이죠..몇일이 지속될수도 있습니다.
::
:: 그때 매 패킷 마다 같은 루틴의 MySQL접근 함수를 수행하는데..
:: 이럴때 pthread_mutex_lock같은걸 써야 하는지요?
:: 실제로 돌려보면 you can't run this command now이러한 메세지가
:: 나오더군요.. 얼마 못가서 이런 메세지만 계속해서 뜹니다.
::
:: 만약 pthread_mutex_lock을 쓸려면 어떤 주의 사항이 있는지요?
:: 아님 MySQL에서 table lock을 걸어 주는 방법이 있다고 하는데
:: 이거 사용하는 방법은 어떤것인지요.. 사실 테이블 락거는건
:: 해보긴 했지만 제대로 되는 지 안되는지 확인이 불가능해서요..
::
:: 고수님들의 고견을 바랍니다.
|