Я работаю над приложением, которое включает в себя много записей в базе данных, примерно ~ 70% операций вставки и 30% операций чтения. Это соотношение также включает в себя обновления, которые я считаю одним чтением и одной записью. Через операторы вставки несколько клиентов вставляют данные в базу данных через оператор вставки ниже:
$mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)");
Вопрос в том, должен ли я использовать либо insert_delay, либо механизм mysqli_multi_query , потому что оператор вставки использует ~ 100% ЦП на сервере. Я использую движок InnoDB в своей базе данных, поэтому вставка с задержкой невозможна. Вставка на сервер ~ 36k / ч и чтение 99,89%, также я использую оператор SELECT, чтобы получить данные семь раз в одном запросе , этот запрос занимает 150 секунд на сервере для выполнения. Какую технику или механизм я могу использовать для этой задачи? Моя память сервера составляет 2 ГБ, я должен расширить память ?. Посмотрите на эту проблему, любые предложения будут благодарны мне.
Структура стола:
+-----------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user | varchar(100) | NO | | NULL | |
| uniq_name | varchar(200) | NO | | NULL | |
| ad_name | varchar(200) | NO | | NULL | |
| ad_delay_time | int(11) | NO | | NULL | |
| track_time | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
+-----------------+--------------+------+-----+-------------------+----------------+
Состояние моей базы данных в настоящий момент показывает 41 тыс. Вставок (записей), что очень медленно для моей базы данных.
SHOW FULL PROCESSLIST
когда он берет 100% процессора? Сколько соединений вы разрешаете против того, сколько было взято за это время?
SHOW GLOBAL VARIABLES LIKE 'innodb%';
и SELECT VERSION();
и отобразите их вывод.