|
|
|
Один и тот же запрос на одном сервере выполняется в сотню раз дольше, чем на другом
|
|||
|---|---|---|---|
|
#18+
При этом сервер, на котором запрос зависает на 4-5 минут, в разы мощнее по железу. На слабом сильно загруженном сервере выполняется за 2-3 секунды. Запрос не оптимальный, но переделать всё по-человечески быстро не вариант, т.к. там куча кода, который этот запрос генерит, и очень много на него всего завязано. Присоединяю файл с запросом и результатами EXPLAIN на обоих серверах. Суть в том, что к нему джойнится около 50 таблиц, но все они джойнятся по PRIMARY KEY. Некоторые из таблиц джойнятся по первому из двух полей, входящих в PRIMARY, и содержат 3-5 значений, которые выводятся объединёнными функцией GROUP_CONCAT. При этом, EXPLAIN на серверах выглядят сильно по-разному. Насколько я знаю, в первом приближении оптимальность запроса можно оценить произведением значений в колонке rows. Так вот, для упомянутых выше таблиц, которые содержат несколько значений и объединяются GROUP_CONCAT, значение в rows на разных серверах отличается в десятки или сотни раз. База данных одна и та же, перенесена mysqldump'ом Версия сервера, на котором выполняется быстро: 5.1.49-3 Версия сервера, на котором выполняется медленно: 5.5.31-0+wheezy1-log Собственно, вопрос, в чём может быть причина такой работы на медленном сервере? Может быть существует какая-то настройка, или придётся делать даугрейд mysql до 5.1? Код запроса (извините, целиком): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. EXPLAIN на быстром сервере: idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEnrange"PRIMARY/vid"PRIMARY4NULL30Using where; Using temporary; Using filesort1SIMPLEctoeq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf1eq_refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEcf2eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf3refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEcf4eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf5eq_refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEngeq_refPRIMARYPRIMARY4mydb.cto.field_object_group_nid1 1SIMPLEctogeq_refPRIMARYPRIMARY4mydb.ng.vid1 1SIMPLEcfg1eq_refPRIMARYPRIMARY4mydb.ctog.vid1 1SIMPLEcfg2eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg3refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcf6refPRIMARYPRIMARY4mydb.n.vid5 1SIMPLEcf6fieq_refPRIMARYPRIMARY4mydb.cf6.field_images_fid1 1SIMPLEcf7eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf8eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf9refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEcf10eq_refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEcf11refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf12eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf13refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEcf14eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf15eq_refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEcf16eq_refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEcf17eq_refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEcf18eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf19eq_refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEcf20eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcfg4eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg5eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg6refPRIMARYPRIMARY4mydb.ctog.vid5 1SIMPLEcfg6fieq_refPRIMARYPRIMARY4mydb.cfg6.field_images_fid1Using index1SIMPLEcfg7eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg8eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg9refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg10eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg11refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg12eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg13refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcf21refPRIMARYPRIMARY4mydb.cto.vid3 1SIMPLEcf22eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf23eq_refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEcfg14eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg15eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg16eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg17eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg18eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg19eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg20eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg21eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg22eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEsf1eq_refPRIMARYPRIMARY4mydb.cto.vid1Using where; Using index1SIMPLEnreq_refPRIMARYPRIMARY4mydb.sf1.vid1Using where EXPLAIN на медленном сервере: idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEnrange"PRIMARY/vid"PRIMARY4NULL30Using where; Using temporary; Using filesort1SIMPLEctoeq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf1eq_refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEcf2eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf3refPRIMARYPRIMARY4mydb.cto.vid73 1SIMPLEcf4eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf5eq_refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEcf6refPRIMARYPRIMARY4mydb.n.vid396 1SIMPLEcf6fieq_refPRIMARYPRIMARY4mydb.cf6.field_images_fid1 1SIMPLEcf7eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf8eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf9refPRIMARYPRIMARY4mydb.cto.vid86 1SIMPLEcf10eq_refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEcf11refPRIMARYPRIMARY4mydb.n.vid74 1SIMPLEcf12eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf13refPRIMARYPRIMARY4mydb.cto.vid75 1SIMPLEcf14eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf15eq_refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEcf16eq_refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEcf17eq_refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEcf18eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf19eq_refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEcf20eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf21refPRIMARYPRIMARY4mydb.cto.vid187 1SIMPLEcf22eq_refPRIMARYPRIMARY4mydb.n.vid1 1SIMPLEcf23eq_refPRIMARYPRIMARY4mydb.cto.vid1 1SIMPLEngeq_refPRIMARYPRIMARY4mydb.cto.field_object_group_nid1 1SIMPLEctogeq_refPRIMARYPRIMARY4mydb.ng.vid1 1SIMPLEcfg1eq_refPRIMARYPRIMARY4mydb.ctog.vid1 1SIMPLEcfg2eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg3refPRIMARYPRIMARY4mydb.ctog.vid73Using index1SIMPLEcfg4eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg5eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg6refPRIMARYPRIMARY4mydb.ctog.vid396 1SIMPLEcfg6fieq_refPRIMARYPRIMARY4mydb.cfg6.field_images_fid1Using index1SIMPLEcfg7eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg8eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg9refPRIMARYPRIMARY4mydb.ctog.vid86Using index1SIMPLEcfg10eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg11refPRIMARYPRIMARY4mydb.ctog.vid74Using index1SIMPLEcfg12eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg13refPRIMARYPRIMARY4mydb.ctog.vid75Using index1SIMPLEcfg14eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg15eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg16eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg17eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg18eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg19eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg20eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg21eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEcfg22eq_refPRIMARYPRIMARY4mydb.ctog.vid1Using index1SIMPLEsf1eq_refPRIMARYPRIMARY4mydb.cto.vid1Using where; Using index1SIMPLEnreq_refPRIMARYPRIMARY4mydb.sf1.vid1Using where ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 13:41:29 |
|
||
|
Один и тот же запрос на одном сервере выполняется в сотню раз дольше, чем на другом
|
|||
|---|---|---|---|
|
#18+
На "медленном" сервере для всех таблиц, у которых в плане в колонке rows число отлично от единицы, сделайте ANALYZE TABLE. После это сделайте план еще раз и сравните, изменится ли. Если сильно изменится - в студию. Какой движок таблиц? Он точно одинаковый на обоих серверах? Конфиг MySQL насколько одинаков/различен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 13:51:10 |
|
||
|
Один и тот же запрос на одном сервере выполняется в сотню раз дольше, чем на другом
|
|||
|---|---|---|---|
|
#18+
miksoft, спасибо за ответ. Я немного сократил запрос, локализовав проблему в двух таблицах и двух id, чтобы удобнее было смотреть: Код: sql 1. 2. 3. 4. 5. EXPLAIN на медленном сервере: idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEnrangePRIMARYPRIMARY4NULL2Using where; Using temporary; Using filesort1SIMPLEcf3refPRIMARYPRIMARY4mydb.n.vid73 На быстром rows=1 всегда, на медленном rows становится равно 1, если в условии указать только одно значение идентификатора, например: WHERE (n.nid IN (5504)) ANALYZE TABLE даёт status=OK, после выполнения ничего не изменилось. Таблица на обоих серверах MyISAM, одинаковая, show create table даёт (одинаково): Код: sql 1. 2. 3. 4. 5. 6. 7. В конфигах на медленном стоит дефолтный my-huge.cnf из примеров. На быстром какой-то правленный, присоединяю, но по-моему правки там несущественные, типа кодировок и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 14:31:31 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38471288&tid=1835691]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 328ms |

| 0 / 0 |
