La creación de la tabla MySQL es increíblemente lenta

10

Una creación de tabla simple en una de mis bases de datos MySQL lleva una eternidad:

mysql> CREATE TABLE blah (id BIGINT UNSIGNED NOT NULL PRIMARY KEY);
Query OK, 0 rows affected (16.58 sec)

La máquina está bastante inactiva:

01:21:26 PM       CPU     %user     %nice   %system   %iowait    %steal     %idle
01:21:27 PM       all      0.50      0.00      0.21      0.00      0.00     99.29

¿Alguna idea de cómo investigar esto?

EDITAR : Siguiendo el consejo de DTest , este es el perfil de ejecución:

mysql> SHOW PROFILE FOR QUERY 1;
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| starting             | 0.000044 |
| checking permissions | 0.000024 |
| creating table       | 8.668129 |
| After create         | 0.000014 |
| query end            | 0.000005 |
| freeing items        | 0.000028 |
| logging slow query   | 0.000004 |
| logging slow query   | 0.000206 |
| cleaning up          | 0.000006 |
+----------------------+----------+
Adam Matan
fuente
@ Phil Una máquina física con unos 16 GB de memoria.
Adam Matan
@ Phil Es un servidor de producción con muchas operaciones MySQL, por lo que el disco no debe estar inactivo.
Adam Matan

Respuestas:

10

Activaría el perfil para tener una idea de lo que lleva tanto tiempo. Un ejemplo usando la CLI de mysql:

SET profiling = 1;
CREATE TABLE blah (id BIGINT UNSIGNED NOT NULL PRIMARY KEY);
SET profiling = 1;

Debería obtener una respuesta como esta:

mysql> SHOW PROFILES;
| Query_ID | Duration   | Query |
+----------+------------+-------------------------------------------------------------+
|        1 | 0.00913800 | CREATE TABLE blah (id BIGINT UNSIGNED NOT NULL PRIMARY KEY) |
+----------+------------+-------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SHOW PROFILE FOR QUERY 1;
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| starting             | 0.000071 |
| checking permissions | 0.000007 |
| Opening tables       | 0.001698 |
| System lock          | 0.000043 |
| creating table       | 0.007260 |
| After create         | 0.000004 |
| query end            | 0.000004 |
| closing tables       | 0.000015 |
| freeing items        | 0.000031 |
| logging slow query   | 0.000002 |
| cleaning up          | 0.000003 |
+----------------------+----------+
11 rows in set (0.00 sec)
Derek Downey
fuente
1
@AdamMatan no está seguro si leyó la documentación de creación de perfiles, pero hay otros indicadores para mostrar el perfil de la consulta CPU, BLOCK IOetc. que podrían ayudarlo en la etapa de 'creación de tabla'.
Derek Downey