postgresql lib를 이용한 코딩중
글쓴이: tkfkdgody / 작성시간: 화, 2008/06/17 - 10:34오전
안녕하세요
postgresql lib를 이용해서 데이타를 인서트에 관련해서 코딩했습니다.
그런데 문제는 초당 수백개의 패킷이 인서트 될 때 PQexec()함수가 실행되다가 죽는 현상이 있습니다.
char buf[200]; PGresult* result; sprintf(buf, "INSERT INTO info values(now(), \'%s\', \'%s\')", account, ip); result = this->doSQL(cnn, buf); printf("%x \n", result); if (PQresultStatus(result) != PGRES_COMMAND_OK) { puts("insert error"); } PQclear(result); PGresult* DB::doSQL(PGconn* cnn, char* sql) { PGresult* result; puts("1"); result = PQexec(cnn, sql); // <<<<<<< 죽는 부분입니다 puts("2"); return result; }
1과 2를 찍어보면 초당 수백개가 디비에 인서트 되다가 순간 PQexec()에서 죽습니다.
좀 더 문제에 대해서 자세히 쓰고 싶은데 현재 나온 팩트는 이거밖에 없네요... ;;
조언 좀 부탁드리겠습니다...
아 그리고 mssql lib를 이용해서도 구현하고 싶은데 찾을 수가 없네요... 꽤 많이 찾아본거 같은데 도움이 될만한 사이트가 있는지요...
Forums:
위의 코드만으로는
위의 코드만으로는 문제가 보이지 않네요. 자주 사용하는 SQL문은 PQprepare, PQexecPrepared로 성능을 향상시킬 수 있습니다. 자세한 것은 PostgreSQL Manual 참고하십시오.
데이터베이스 관련해서 논의하기 좋은 곳은 http://database.sarang.net/ 이 있습니다.
단순 insert에서 죽는
단순 insert에서 죽는 것은 좀 이상하군요.
buf가 작거나한것은 아닌지?
1, 2 말고 query 자체를 DB에 던지기 전에 화면이나 로그에 찍어보는 것을 권합니다.
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
댓글 달기