@ugin_root

Nodejs+mysql(node-mysql), запросов 2000+ в секунду, через 5-40 минут ошибка "Error: read ECONNRESET"

0. Nodejs+mysql(https://github.com/felixge/node-mysql)
1. Сluster. Количество потоков = количество процессоров + 1 (мастер очень редко выполняет запросы)
2. Количество запросов с каждого потока примерно равно 500 в секунду
3. Общее количество запросов примерно равно 2000 в секунду (зависит от количества процессоров)
4. Windows 8.1 + mysql(5.1.41)
5. Первые 5 - 40 минут приложение работает как положено
6. Ошибка выпадает на запросах обновления таблицы
7. Запросы очень жирные VARCHAR(10) + MEDIUMTEXT (от 1 до ~16Мб)
8. Все запросы жирные, ошибка всегда происходит на разных
9. Текст ошибки "Error: read ECONNRESET"

И наконец вопрос, в чём проблема и что мне сделать, что-бы она исчезла?

P.S: Понимаю что сервер сам закрывает соединение, но что с этим делать не пойму. Есть вариант создавать новые соединения, но это больше похоже на костыль, а не на решение.

UPD: Потоки "умирают" по одному. Последний "живёт" дольше других.
  • Вопрос задан
  • 3035 просмотров
Решения вопроса 1
@ugin_root Автор вопроса
Пулы в конечном итоге тоже падали. У меня получилось решить проблему банальным увеличением "max_allowed_packet" и "query_alloc_block_size" до 20 Мб, проблема пропала.

P.S: Забыл что это тяжёлое приложение и что дома у меня дефолтные настройки mysql, грешил на винду, т.к. на убунте всё прекрасно работало.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
andreyelpaev
@andreyelpaev
iOS Developer
Пробовали работать через Pool?

var pool  = mysql.createPool({
  host     : 'example.org',
  user     : 'bob',
  password : 'secret'
});

pool.getConnection(function(err, connection) {
   connection.query( 'SELECT something FROM sometable', function(err, rows) {
        connection.release(); 
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы