2016-11-02 3 views
0

MySQL 데이터베이스에 액세스하려면 NodeJS 및 mysql 라이브러리를 사용하고 있습니다.NodeJS + mysql : 연결 풀을 사용하여 교착 상태 테이블로 연결

내가 하나의 연결을 설정하고 반복적으로 사용하는 경우, 그것을 잘 작동합니다 : 내가 대신 연결 풀을 사용하는 경우

global.mysql = mysql_module.createConnection({ 

     host: config.mysql.host, 
     user: config.mysql.user, 
     password: config.mysql.password 
    }); 

, 나는 거래 ER_LOCK_WAIT_TIMEOUT 오류를 얻을.

global.mysql = mysql_module.createPool({ 

     host: config.mysql.host, 
     user: config.mysql.user, 
     password: config.mysql.password, 
     database : config.mysql.database, 
     connectionLimit : 50 
    }); 

이상하게도 정확하게 동일한 데이터에서 정확히 같은 시간에 오류가 발생합니다. 즉, 나는 이전에 성명에서 마지막으로 삽입 된 ID를 사용할 때마다 3 개의 테이블에 연속적으로 삽입하는 트랜잭션이 있습니다. 일부 데이터에서는 제대로 작동하지만 일부 데이터에서는 세 번째 INSERTER_LOCK_WAIT_TIMEOUT 오류를 생성합니다. NodeJS에서 단일 연결을 사용할 때 이것은 제대로 작동하므로 연결 풀과 관련된 문제 여야합니다.

도움을 주시면 감사하겠습니다.

답변

0
없음

없는 내 자신의 질문에 asnwering의 큰 팬, 그러나 문제는 명시 적으로 풀에서 연결을 생성하고 트랜잭션 동안 모든 SQL 문을 사용하여 해결

pool.getConnection(function(err, connection) { 
    connection.query('START TRANSACTION', function(err, rows) { 
    // do all sql statements with connection and then 
    connection.query('COMMIT', function(err, rows) { 
     connection.release(); 
    }  
    }); 
});