Я запускаю службу, которая принимает пользовательский запрос и добавляет его в таблицу с именем «queue», которая имеет 3 поля: userid
, и processed
.Оптимизация базы данных mysql - Список задач ест мой сервер
хранить там задачи, которые должны быть обработаны (я могу обрабатывать меньше задач, чем я получаю запросы)
К сожалению, я не очень много знаю об оптимизации тузда и моем сценарии обработки (что я бег 50 версий параллельно) использует запросы как те:
SELECT * FROM `queue` WHERE `processed` = 0 ORDER BY `queue`.`queuenumber`
Когда любой экземпляр кода принимает строку для обработки, он отмечает, что processed
= 1, поэтому он не будет рассмотрен в других случаях.
Так что, когда я бегу 50 экземпляров этого кода, он становится тяжелым в базе данных MySQL (и у меня есть только 4 Гб оперативной памяти)
Из-за того, что я получаю статистику, как те:
Traffic:
Received 15.8 MiB
Sent 42.9 GiB
ø per hour
Received: 3 MiB
Sent: 8.1 GiB
Немного статистики из PHPMyAdmin:
Как оптимизировать это? Чтобы иметь возможность запускать этот код параллельно, но не перечислять все таблицы?
// EDIT:
Результаты создания таблицы являются:
CREATE TABLE queue
( userid
INT (11) NOT NULL, queuenumber
INT (11) NOT NULL AUTO_INCREMENT, processed
TINYINT (1) NOT NULL, ПЕРВИЧНЫЙ КЛЮЧ (queuenumber
), уникальный ключ queuenumber
(queuenumber
), уникальный ключ userid
(userid
) ) ENGINE = InnoDB AUTO_INCREMENT = 121617 DEFAULT CHARSET = latin1
Пожалуйста, разместите полное сообщение 'CREATE TABLE', включая любые ключи. Кроме того, как часто вы попадаете в базу данных? Данные об использовании памяти, которые вы указали, не так высоки. –
Как это медленно? Стол становится большим? У вас есть указатель на 'queue.queuenumber'? – Haneev
Шаг 1. Не выбирайте *, если вам действительно не нужно каждое поле. –