Estoy trabajando en una aplicación que involucra muchas escrituras de bases de datos, aproximadamente ~ 70% de inserciones y 30% de lecturas. Esta proporción también incluiría actualizaciones que considero que son una lectura y una escritura. A través de las declaraciones de inserción, varios clientes insertan datos en la base de datos a través de la siguiente declaración de inserción:
$mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)");
La pregunta es si debería usar insert_delay o mysqli_multi_query mecanismo porque la declaración de inserción utiliza ~ 100% de CPU en el servidor. Estoy usando el motor InnoDB en mi base de datos, por lo que no es posible la inserción retrasada. La inserción en el servidor es de ~ 36k / hr y 99.89% de lectura, también estoy usando la instrucción select para recuperar datos siete veces en una sola consulta , esta consulta tarda 150 segundos en ejecutarse en el servidor. ¿Qué tipo de técnica o mecanismo puedo usar para esta tarea? La memoria de mi servidor es de 2 gb, ¿debería expandir la memoria? Eche un vistazo a este problema, cualquier sugerencia me lo agradecerá.
Estructura de la mesa:
+-----------------+--------------+------+-----+-------------------+----------------+
| 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 | |
+-----------------+--------------+------+-----+-------------------+----------------+
El estado actual de mi base de datos muestra 41k inserciones (escrituras), lo cual es muy lento para mi base de datos.
SHOW FULL PROCESSLIST
cuando está tomando 100% de CPU? ¿Cuántas conexiones estás permitiendo frente a cuántas se toman durante este tiempo?
SHOW GLOBAL VARIABLES LIKE 'innodb%';
y SELECT VERSION();
y muestre su salida.