Проблема производительности с upsert в mysql Авроре - PullRequest
0 голосов
/ 08 января 2020

Я публикую здесь проблему производительности, с которой мы имеем дело с оператором Upsert в MySQL База данных Aurora. Подробности упомянуты ниже.

Предпосылки: Предположим, что существует схема db1 с таблицей с именем tab1 (col1, col2, col3, col4, col5, col6). На col5 и col6 создается уникальный индекс. Мы создали уникальное представление в схеме db1 с той же структурой, что и tab1, которая содержит последние данные из tab1. Также имеется схема db2, в которой создается таблица tab2 с той же структурой tab1 и уникальным индексом. Данные из уникального представления вставляются / обновляются в tab2 схемы db2 с помощью оператора upsert. Этот процесс выполняется каждый день, так что tab2 будет иметь самые последние данные из tab1.

Проблема: Впервые, поскольку в tab2 не было данных, оператор upsert выполнялся очень быстро, как и ожидалось , Второй раз, когда дельта-загрузка пришла к уникальному представлению из tab1 схемы db1. Эти инкрементные / дельта-данные должны быть вставлены и обновлены в tab2 схемы db2 с помощью оператора upsert. Следующая инструкция upsert выполняется очень долго. Не уверен, почему это занимает очень много времени. Синтаксис выглядит следующим образом.

ВСТАВИТЬ В Tab2 ВЫБРАТЬ v. *, CURDATE () ОТ db1.uniqueview КАК ВКЛЮЧИТЬ ОБНОВЛЕНИЕ КЛЮЧЕВОГО КЛЮЧА col1 = v.col1, col2 = v.col2, col3 = v.col3 , col4 = v.col4;

В настоящее время Tab1 содержит около 2 миллионов строк. Эти данные легко вставляются в tab2, когда мы запустили указанную выше команду. Для следующих инкрементальных загрузок операция вставки выполняется очень медленно.

Пожалуйста, помогите решить проблему или свои мысли.

Спасибо за Advance

...