|
|
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, возникла проблема - при сложном запросе он выполняется порядка 11-15 секунд, требуется помощь в оптимизации конфигурации MySQL без изменения запроса или кода движка. После перезагрузки демона MySQL в течение 3-4 часов запрос выполняется за 1-2 секунды, далее стандартные 11-15 секунд. Прошу сильно не ругать за вывернутые настройки буферов в my.cnf , потому как через них ищется узкое место. БД - InnoDB MySQL : mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1 CPU : 8 RAM : 32Gb БД : 9Gb slow.log : Код: plsql 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. profile : Код: plsql 1. Код: plsql 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. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. my.cnf : Код: 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. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2015, 11:34:21 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
Electronnnnn5.1.73 Electronnnnn Код: plsql 1. Удивительно, что у вас хоть когда-то получается 1-2 секунды. А вообще стоило бы ещё и план выполнения показать. Или планы, если они различаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2015, 11:42:50 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
tanglir, explain : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2015, 11:52:18 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
Ну, что и ожидалось, DEPENDENT SUBQUERY, которые НСД ни разу не dependent. Насчёт оптимизации самого запроса - я вижу только 2 пути, оба не особо хорошие: 1)расписать запрос в несколько запросов, объединённых юнионом, заменив в каждом подзапрос на join: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Плюс - нет depented squbquery, минус - запрос, хоть он и быстрей, но выполняется трижды. Что выгодней - надо смотреть. 2)Сначала выполнять эти подзапросы, потом собирать результирующий запрос с прямой подстановкой полученных списков ид-ов. Плюс тот же, минусы - вынос логики работы с данными в приложение (впрочем, можно всё сделать на сервере через prep statement...). ЗЫ. Странно, конечно, что сначала всё работает относительно быстро... вы не пробовали после замедления пересобрать статистику по используемым таблицам? ЗЗЫ. Архистранно, что один из подзапросов использует индекс, а другой нет, хотя различаются они только одним получаемым полем. Это точно эксплейн этого запроса? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2015, 12:27:06 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
tanglirНасчёт оптимизации самого запроса - я вижу только 2 пути, оба не особо хорошие: К сожалению, на данном этапе запрос не переписать, требуется помощь или совет, каким образом можно оптимизировать именно сам MySQL сервер для более быстрой обработки. tanglirЗЫ. Странно, конечно, что сначала всё работает относительно быстро... вы не пробовали после замедления пересобрать статистику по используемым таблицам? Каким образом это можно сделать ? tanglirЗЗЫ. Архистранно, что один из подзапросов использует индекс, а другой нет, хотя различаются они только одним получаемым полем. Это точно эксплейн этого запроса? :) К сожалению, да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2015, 12:40:38 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
ElectronnnnnКаким образом это можно сделать ? https://dev.mysql.com/doc/refman/5.0/en/analyze-table.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2015, 12:52:18 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
Electronnnnn , 1) покажите, пожалуйста из вывода mysqltuner.pl секции "Storage Engine Statistics" и "Performance Metrics". Только эти, остальное неинтересно; 2) покажите вывод tuning-primer.sh; 3) какая у Вас ОС, есть ли у Вас возможность заменить mysql на более новый или на Percona, Maria? Если мне не изменяет мой склероз, в mysql 5.1 с чем то похожим на Вашу ситуацию встречался. А в более поздних - такого не припомню.. --- Виктор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2015, 08:34:34 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
VGrey1) покажите, пожалуйста из вывода mysqltuner.pl секции "Storage Engine Statistics" и "Performance Metrics". Только эти, остальное неинтересно; Код: sql 1. 2. 3. 4. 5. 6. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. По MyISAM проходился "mysqlcheck -o " , знаю, что InnoDB так не сделать и нужно делать дамп бд, удалять и создавать заново. Сильно ли влияет в данном случае фрагментация на производительность, если после перезапуска в течение некоторого времени проблемный запрос выполняется буквально за 1-2 секунды ? VGrey2) покажите вывод tuning-primer.sh; Код: 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. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 3) какая у Вас ОС, есть ли у Вас возможность заменить mysql на более новый или на Percona, Maria? Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2015, 13:11:35 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
ElectronnnnnRAM : 32GbElectronnnnn Код: sql 1. Что ж вы творите-то??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2015, 21:07:47 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
Electronnnnn Код: sql 1. Сделайте 128 или 256 Мбайт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2015, 21:09:52 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
miksoftЧто ж вы творите-то??? Прошу сильно не ругать за вывернутые настройки буферов в my.cnf , потому как через них ищется узкое место. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2015, 21:10:42 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
Electronnnnn Код: sql 1. 2. 3. 4. innodb_buffer_pool_size нет смысла ставить больше, чем в размер всех InnoDB-таблиц и их индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2015, 23:58:45 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
miksoftinnodb_buffer_pool_size нет смысла ставить больше, чем в размер всех InnoDB-таблиц и их индексов. снизил в два раза, но оптимизацией тут не пахнет =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2015, 00:00:46 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
Electronnnnn Код: sql 1. 2. key_buffer_size нет смысла делать больше, чем суммарный размер индексов MyISAM-таблиц. Кстати, странно, что используется смесь таблиц на разных движках. Обычно это не требуется. Если нет специальных противопоказаний, то переведите MyISAM-таблицы (кроме системных) в InnoDB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2015, 00:02:49 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
Electronnnnnно оптимизацией тут не пахнет =)Тут хотя бы приблизительный порядок надо навести, иначе вы систему до свопа доведете. Или уже довели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2015, 00:05:01 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
miksoftElectronnnnnно оптимизацией тут не пахнет =)Тут хотя бы приблизительный порядок надо навести, иначе вы систему до свопа доведете. Или уже довели. в текущем треде только одна цель - ускорить эти тяжелые неоптимизированные запросы. Если нужно будет больше памяти серверу - добавим, если надо будет под базы подключить ссд - сделаем, но нужно точно знать из-за чего сначала после ребута сервиса запросы идут по одной секунде, после 4-6 часов работы по 11-15 секунд. Нет нужды перекраивать лимиты под более низкие именно для оптимизации потребляемой сервисом памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2015, 00:09:13 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
Electronnnnn Код: sql 1. 2. 3. Эти два параметра обычно изменяются парно и должны быть равны. Для внутренних временных таблиц работет меньше значение из них. http://dev.mysql.com/doc/refman/5.1/en/internal-temporary-tables.html The maximum size for in-memory temporary tables is the minimum of the tmp_table_size and max_heap_table_size values.Я бы предложил оба их установить в 2-4 ГБ для начала. И посмотреть сколько временных таблиц после этого будет валиться на диск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2015, 00:11:04 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
Electronnnnn Код: sql 1. ElectronnnnnЕсли нужно будет больше памяти серверу - добавим17 Терабайт добавите??? смешно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2015, 00:13:17 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
miksoftElectronnnnn Код: sql 1. ElectronnnnnЕсли нужно будет больше памяти серверу - добавим17 Терабайт добавите??? смешно... Собственно в первом посте и было указано, что на лимиты по памяти на обращать внимания. Лимиты вывернуты именно для того, чтобы найти хотя бы выход из ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2015, 00:16:47 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
Electronnnnn, Ну так вы уверены, что вы не загоняте систему в своп? Я вот не уверен:Electronnnnn Код: sql 1. Эта величина, конечно, не настоящая, но, тем не менее, перерасход памяти потрясает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2015, 00:23:33 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
miksoftElectronnnnn, Ну так вы уверены, что вы не загоняте систему в своп? Я вот не уверен:Electronnnnn Код: sql 1. Эта величина, конечно, не настоящая, но, тем не менее, перерасход памяти потрясает. Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2015, 00:24:34 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
Electronnnnn Код: sql 1. 2. 3. 4. 5. Это картина "после 4-6 часов работы" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2015, 00:26:38 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
miksoftElectronnnnn Код: sql 1. 2. 3. 4. 5. Это картина "после 4-6 часов работы" ? После суток-двух. Картина примерно одна и та же с начала перезагрузки сервера до начала торможений по запросам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2015, 00:30:16 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
miksoftElectronnnnn Код: sql 1. Сделайте 128 или 256 Мбайт. да в 0 эту шнягу надо ставить, в ноль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2015, 08:27:42 |
|
||
|
Оптимизация работы MySQL при выборке 50кк строк
|
|||
|---|---|---|---|
|
#18+
ElectronnnnnЛимиты вывернуты именно для того, чтобы найти хотя бы выход из ситуации. Electronnnnn , именно "вывернутые лимиты" и могут быть причиной Ваших проблем. miksoftElectronnnnn Код: sql 1. Сделайте 128 или 256 Мбайт. miksoft очень правильно отмечает, что "вывернутый" query_cache_size вполне может быть причиной Ваших проблем . Я бы рекомендовал начать именно с него - 64 - 128М, не больше, или, для опыта, вообще отключить, временно, и посмотреть, как себя будет вести система. Вообще, проблема локов, связанная с завышенным значением query_cache_size, изместна давно. Еще раз обращаю Ваше внимание на возможность заменить mysql5.1 на, например, MariaDB10, Percona Server, или просто на более новый mysql. Но, полюбому, не увлекайтесь "вывернутыми лимитами" - любое увеличение ресурсов сверх необходимых - накладные расходы и уменьшение производительности. Или проблемы с блокировками, как в случае с завышенным query_cache_size. --- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2015, 08:33:07 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39073416&tid=1832620]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 324ms |

| 0 / 0 |
