Tengo una base de datos de registro de paquetes, que casi nunca se consulta. Solo necesita ser rápido en los insertos. Estoy usando InnoDB porque me gustaría mantener el cumplimiento de ACID, ya que incluso perder un solo paquete podría ser perjudicial para nuestros clientes. En un escenario de ajuste de rendimiento, envío 1,000,000 de paquetes al servidor a través de múltiples conexiones de base de datos. Pero no importa qué configuración use en my.cnf, no puedo lograr que el proceso mysqld use más del 900% de CPU en un sistema con 12 núcleos. (Nada más se está ejecutando en la caja).
He establecido lo siguiente
innodb_file_per_table = 1
innodb_write_io_threads = 64
innodb_read_io_threads = 64
innodb_thread_concurrency = 0
Si uso MyISAM, puedo obtener todos los paquetes escritos en aproximadamente 6 segundos. Pero InnoDB toma alrededor de 25. ¿Puedo hacer que MySQL use el resto de los recursos del sistema e inserte más rápido?
Editar: Aquí está el esquema de la tabla:
+-------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------------------+------+-----+---------+-------+
| t | bigint(20) unsigned | YES | | NULL | |
| a | char(1) | YES | | NULL | |
| sa | int(10) unsigned | YES | | NULL | |
| sb | int(10) unsigned | YES | | NULL | |
| sc | int(10) unsigned | YES | | NULL | |
| sd | int(10) unsigned | YES | | NULL | |
| sp | smallint(5) unsigned | YES | | NULL | |
| da | int(10) unsigned | YES | | NULL | |
| db | int(10) unsigned | YES | | NULL | |
| dc | int(10) unsigned | YES | | NULL | |
| dd | int(10) unsigned | YES | | NULL | |
| dp | smallint(5) unsigned | YES | | NULL | |
+-------+----------------------+------+-----+---------+-------+
edit2: He agrupado más inserciones para que una sola consulta esté cerca de la longitud máxima (aproximadamente 16,000,000 caracteres). La base de datos ahora aumenta al 1100% durante dos segundos, luego baja al 100% por el resto del tiempo. El tiempo total ahora es de 21 segundos, o aproximadamente un 16% más rápido que cuando comencé.
Hay una serie de factores que afectan la capacidad de maximizar el uso de múltiples núcleos.
Las herramientas como SAR le permitirán determinar si hay cuellos de botella que reducen su capacidad. Solo se advirtió, eliminando un cuello de botella, solo moverá el cuello de botella.
fuente