Почему делают MySQL InnoDB вставляет / обновления на больших таблицах становятся очень медленными, когда существует несколько индексов?

У нас есть серия таблиц, которые выросли органически до нескольких миллионов строк в производстве, делающем вставку, или обновление может занять до двух секунд. Однако, если я вывожу таблицу и воссоздаю ее от запросов дампа, молния быстро.

Мы восстановили одну из таблиц путем создания копии, восстанавливающей индексы и затем делающей переименовать переключатель и копирующей по любым новым строкам, это работало, потому что та таблица только когда-либо добавляется к. Выполнение этого сделало молнию вставок и обновлений быстрой.

Мои вопросы:

То, почему делают, вставляет, становятся медленными со временем? Почему делает воссоздание таблицы, и выполнение импорта фиксируют это? Есть ли какой-либо способ, которым я могу восстановить индексы, не блокируя таблицу для обновлений?

19
задан Greg 8 February 2010 в 17:21
поделиться

2 ответа

Похоже, это либо

  • Дисбаланс индекса с течением времени
  • Фрагментация диска
  • Внутренняя фрагментация файлов данных innodb

Вы можете попробовать проанализировать таблицу foo , что не требует блокируется, всего несколько индексных погружений и занимает несколько секунд.

Если это не поможет, вы можете использовать

mysql> SET PROFILING=1;
mysql> INSERT INTO foo ($testdata);
mysql> show profile for QUERY 1;

, и вы увидите, на что тратится большая часть времени.

Очевидно, innodb работает лучше, когда вставки выполняются в порядке PK, это ваш случай?

9
ответ дан 30 November 2019 в 04:44
поделиться

Для обновления таблицы требуется перестроить индексы. Если вы выполняете массовые вставки, попробуйте выполнить их за одну транзакцию (как это делают дамп и восстановление). Если таблица настроена на запись, я бы все равно подумал об отбрасывании индексов или позволил бы фоновой задаче выполнять обработку чтения таблицы (например, путем копирования ее в индексированную).

1
ответ дан 30 November 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: