Después de un crecimiento esperado en nuestro servicio, de repente algunas actualizaciones llevan mucho tiempo, estas solían ser bastante rápidas hasta que la tabla alcanzaba unos 2MM de registros, ahora toman alrededor de 40- 60 segundos cada uno.Toma de actualización MySQL (demasiado) mucho tiempo
update table1 set field1=field1+1 where id=2229230;
Query OK, 0 rows affected (42.31 sec)
Rows matched: 1 Changed: 0 Warnings: 0
Éstos son los tipos de campos:
`id` bigint(20) NOT NULL auto_increment,
`field1` int(11) default '0',
resultado de la elaboración de perfiles, para cambios de contexto que es el único que parece tener un número elevado de los resultados:
mysql> show profile context switches
-> ;
+----------------------+-----------+-------------------+---------------------+
| Status | Duration | Context_voluntary | Context_involuntary |
+----------------------+-----------+-------------------+---------------------+
| (initialization) | 0.000007 | 0 | 0 |
| checking permissions | 0.000009 | 0 | 0 |
| Opening tables | 0.000045 | 0 | 0 |
| System lock | 0.000009 | 0 | 0 |
| Table lock | 0.000008 | 0 | 0 |
| init | 0.000056 | 0 | 0 |
| Updating | 46.063662 | 75487 | 14658 |
| end | 2.803943 | 5851 | 857 |
| query end | 0.000054 | 0 | 0 |
| freeing items | 0.000011 | 0 | 0 |
| closing tables | 0.000008 | 0 | 0 |
| logging slow query | 0.000265 | 2 | 1 |
+----------------------+-----------+-------------------+---------------------+
12 rows in set (0.00 sec)
La tabla contiene aproximadamente 2,5 millones de registros, el ID es la clave principal y tiene un índice único en otro campo (no incluido en la actualización).
It's a innodb table.
¿Alguna indicación sobre cuál podría ser la causa?
¿Alguna variable en particular que pueda ayudar a rastrear el problema?
¿Hay alguna "explicación" para las actualizaciones?
EDIT: También me acabo de dar cuenta que la tabla también tiene una:
`modDate` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
Explicar:
+----+-------------+---------------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------+-------+---------------+---------+---------+-------+------+-------+
| 1 | SIMPLE | table1 | const | PRIMARY | PRIMARY | 8 | const | 1 | |
+----+-------------+---------------+-------+---------------+---------+---------+-------+------+-------+
1 row in set (0.02 sec)
¿Qué es el tipo de campos 'field1' y' id'? –
Puede tratar de perfilar esta cola. Consulte http://dev.mysql.com/tech-resources/articles/using-new-query-profiler.html –
Parece impar: ¿1 fila coincide, pero cero filas afectadas? –