[질문] MYSQL INSERT, SELECT 시 LOCK 문제..
글쓴이: leolo / 작성시간: 수, 2005/04/13 - 9:05오후
질문이 있습니다...
mysql에서 select를 하는데요,
약 10개의 쓰레드가 모두들 한 테이블만 select를 합니다.
그러다 보면, mysql_real_query()에서 에러가 나옵니다.
에러 내용은 아래와 같습니다. Lost connection to MySQL server during query(2013)
내용인즉, 질의하다고 Mysql 연결을 잃어버렸다는 것인데요.
아래 코드 처럼 뮤텍스 락을 걸면 에러나 나오지 않고 잘 됩니다.
여기서, 저는 몇가지 방법을 생각했는데요. 어떤 방법이 좋을지
좀 추천부탁드립니다.
1. select, insert, delete시 뮤텍스 락을 건다.
2. mysql 컴파일시 thread-safe client library인 libmysqlclient_r.a를 링크하여 사용하는 방법.
3. 쓰레드별로 mysql connection를 따로둔다.
어떤 것이 좋은가요?
int insertMysql(const char *query) { int ret; pthread_mutex_lock(&db_mutex); if((ret = mysql_real_query(&mysql, query, (unsigned)strlen(query)) != 0)) { DebugLog((DEB_ERROR, "[%s.%d][mysql_real_query] error(%s)(%d) \n", __FILE__, __LINE__, mysql_error(&mysql), mysql_errno(&mysql))); reconnectMysql(); pthread_mutex_unlock(&db_mutex); return K_FAIL; } pthread_mutex_unlock(&db_mutex); return K_SUCCESS; }
Forums:
3번에 한표! 제 생각으로는 동기화 문제는 mysql 에게 위임시키고
3번에 한표! 제 생각으로는 동기화 문제는 mysql 에게 위임시키고
각 쓰레드별로 연결을 설정하는 것이 좋을 듯 싶은데요..
연결해야 할 쓰레드가 많다면야 자바로 연동할 때 사용하는 ConnectionPool
비스므리한 것을 구현해서 써야겠지만.. 10개 정도라면.. 아무런!!
무리 없이 동작할 듯 싶습니다.
---------------------------------------
세계는 넓고, 할일은 많다.
저라면 2번.쓰래드 쓸때 사용하라도 일부러 만들어준 라이브러리이므로
저라면 2번.
쓰래드 쓸때 사용하라도 일부러 만들어준 라이브러리이므로
나름대로 뭔가 최적화 되어 있는게 있을 수 있다고 생각합니다.
일부러 수고 스럽게 만들어준 정성을 봐서라도 2번에 한표~
[마감임박] 오후 1시까지만 답변 받겠습니다. 1시 이후에 코딩들
답변 주신 분들 감사합니다.
실력이 있으면 삶이 편하다... 영차 영차...
댓글 달기