Po pewnym oczekiwanym wzroście naszej usługi, wszystkie nagłe aktualizacje trwają bardzo długo, były one dość szybkie, aż do stołu osiągnęły około 2 MB rekordów, teraz zajmują około 40 60 sekund każdy.Aktualizacja MySQL trwała (zbyt) długo
update table1 set field1=field1+1 where id=2229230;
Query OK, 0 rows affected (42.31 sec)
Rows matched: 1 Changed: 0 Warnings: 0
Oto typy pól:
`id` bigint(20) NOT NULL auto_increment,
`field1` int(11) default '0',
Wynik z profilowaniem, do wyłączników kontekście, który jest jedynym, który wydaje się mieć wysokie numery na wynikach:
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)
Tabela zawiera około 2,5 miliona rekordów, identyfikator jest kluczem podstawowym i ma jeden unikalny indeks na innym polu (nieuwzględnione w aktualizacji).
To stolik innodb.
Jakieś wskazówki na temat tego, co może być przyczyną?
Jakieś konkretne zmienne, które mogą pomóc w śledzeniu problemu?
Czy istnieje "wyjaśnienie" aktualizacji?
EDIT: Również Właśnie zauważyłem, że tabela zawiera również:
`modDate` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
Wyjaśnij:
+----+-------------+---------------+-------+---------------+---------+---------+-------+------+-------+
| 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)
Co to jest typ pól 'field1' i' id'? –
Możesz spróbować profilować tę kolejkę. Zobacz http://dev.mysql.com/tech-resources/articles/using-new-query-profiler.html –
Wygląda nieparzyste - dopasowano 1 wiersz, ale dotyczy to zerowych wierszy? –