Оптимизация пакета MySQL для различных операций - PullRequest
0 голосов
/ 08 апреля 2019

Фон

Я работаю над инструментом синхронизации данных , который прослушивает изменения из БД, обрабатывает эти изменения и отправляет их в другую целевую БД.

Когда я былВыполняя тестирование производительности на MySQL, я столкнулся с некоторыми проблемами.

Проблемы

Теперь я использую Spring JdbcTemplate#batchUpdate для отправки пакета изменений данных в MySQL.

String[] sqlStatement = new String[]{"insert ...;", "update ...;", "delete ...;"};
jdbcTemplate.batchUpdate(sqlStatement)

Этот вид пакета содержит различные виды операций (insert, update, delete) для разных таблиц.Поэтому опция rewriteBatchedStatements=true не очень полезна (хотя я добавил эту опцию, но не вижу никакого повышения).

Теперь средняя скорость вставки составляет около 1300 / с (хотя Elasticsearch может достигать 10000 и более.Ниже приведен некоторый результат теста).

    time: 20190407-022652
    src=800000
    dst=9302
    time: 20190407-022654
    src=800000
    dst=12070
    time: 20190407-022656
    src=800000
    dst=14863
    time: 20190407-022658
    src=800000
    dst=17536

То есть какие-либо предложения по оптимизации этого вида партии?

Возможное решение

  • autocommit=0; & commit; ?: может помочь целая партия в одной транзакции, но может быть побочный эффект, поэтому мы очень осторожны с этой опцией.

1 Ответ

0 голосов
/ 22 апреля 2019

Какая версия MySQL? Если 5.7, то это может быть решением: Перезапись запроса . См. Также руководство 5.7 .

...