mysql проблема производительности для большой таблицы - PullRequest
0 голосов
/ 11 октября 2018

У вас очень большая таблица - более 500 миллионов записей.Таблица полностью нормализована.Таблица является таблицей innodb.Запросы выполняются медленнее, чем приемлемо, даже если они максимально оптимизированы.Несмотря на то, что таблица уже медленная, прогнозируется, что в течение следующих 6 месяцев она удвоится.Что бы вы рассмотрели, чтобы решить текущую проблему с производительностью и учесть возможное увеличение в четыре раза данных в таблице?

Я понял, что если запросы выполняются медленно, проблема возникает из-за любой вычислительной мощности,ОЗУ, диск или количество серверов.Можете ли вы сказать на дочернем языке, как облачные вычисления или балансировка нагрузки или добавление ОЗУ / ЦП / диска помогают увеличить время ответа на запрос с 7 секунд до 1 секунды для такого большого количества строк?Допустим, у вас есть X-серверы и Y-RAM и Z-диски емкостью C, что дает мне S1 секундное время ответа на запрос.Как вы можете изменить X, Y, Z, C, чтобы увеличить / уменьшить S1 на 1 секунду?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

«Таблица полностью нормализована» - поскольку существует такая вещь, как «чрезмерная нормализация», давайте посмотрим SHOW CREATE TABLE для таблиц.

  • Множество индексов по фактутаблица (таблица с 500M строками) снижает производительность INSERT.
  • Непрерывные значения (даты, дата-время, числа) должны не быть нормализованными.Нормализация причиняет боль много , когда вам нужно искать в диапазоне таких значений.

«Я узнал, что если запросы медленные, проблема исходит от любой вычислительной мощности,ОЗУ, диск или количество серверов. "- Это сказка старой жены.Обычно есть способы улучшить индексацию и / или формулировку запросов и / или схемы (как упомянуто выше).

Вы знакомы с «составными» индексами?

«Можете ли выРасскажите на детском языке, как облачные вычисления, балансировка нагрузки или добавление ОЗУ / ЦП / диска помогают увеличить время ответа на запрос с 7 до 1 секунды для такого большого количества строк? "Ответ: «Никто из них не поможет».MySQL выполняет один запрос в одном ЦП, и ввод-вывод на сервере также, вероятно, будет однопоточным.Параллелизма (на который вы ссылаетесь) не существует в MySQL;когда это произойдет, пользователь сам должен написать код, а потом оплакивать, что он не помог так сильно, как ожидалось.

"тогда лучше перенести эти данные в MongoDB или любую другую базу данных NoSQL" -- Вы упускаете суть.Если вам нужно прочитать 500M строк (или даже 1M), это займет время.Не существует волшебной пули для ускорения ввода-вывода.

Извините, что расплывчато, но существуют десятки принципов, которые могут значительно ускорить работу с 500M строк.

Большая помощь в хранилищах данных - «Сводные таблицы».Они часто делают вещи 10 раз так быстро.Но они требуют вас , чтобы построить и поддерживать их.(Опять же, я неясен из-за отсутствия подробностей о вашем случае использования.)

"для 99% случаев, которые попадают в стек через поток, это не так" - возможно, только 98%.

О единственном аппаратном исправлении, которое может увеличить скорость в 2 раза, является замена вращающегося диска на SSD.Процессоры значительно не улучшились за 18 лет.64 ядра помогает, когда у вас есть 64 соединения, но не когда вы определяете время ожидания 1 соединения.Разделение лучше всего делать, когда необходимые данные можно разделить на несколько серверов.

0 голосов
/ 11 октября 2018

Я бы предложил включить медленный журнал запросов и начать с регистрации запросов, которые требуют более 5 секунд.Запросы из журнала должны анализироваться на производительность.После этого включите еще один раунд на 4,3,2,1 секунды.Не забудьте переключить журнал после выполнения этого анализа.

Если вы все еще работаете медленно, то можете подумать о своем оборудовании - медленный san, или обычный жесткий диск, или sd?После этого вы можете подумать о вашем оперативной памяти ... вам нужно больше, потому что система все время переставляет?Не в последнюю очередь подумайте о вашем процессоре ... но, может быть, вы находитесь на распущенном пи - который обычно медленный; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...