Этот вопрос закрыт для ответов, так как повторяет вопрос Почему insert выполняется более 0.01 секунды?
@samokiller

Почему доступ к MySQL такой медленный?

У меня консольное приложение на c++ которое берет данные из файла и загоняет их в MySQL server InnoDB запросом:
"insert into xyz values ('123456789012345',1234,56,78,90,12,34,5678,123456,7,123456,1,12345)".
Этот запрос крутится внутри while.
Одна запись - это 15 полей на 65-70 байт.
Подключаюсь через c++ connector v.1.1.0 x64, mysql server 8.

Когда база была на SSD писал примерно по 1000 записей/сек. т.е. около 68 кБайт/секунду.
Когда база на HDD то вообще по 3-10 записей/сек. т.е. около 210 байт/секунду.

Такие же скорости сохраняются даже если не из файла данные читать, а просто так данными БД забивать.
Вопрос: из-за чего такая фантастически низкая скорость и как это изменить?

5f3963d16171a796100227.jpeg

Вот тут есть хорошая статья, которая говорит что надо посылать несколько записей в 1 запросе или использовать импорт напрямую в БД из спец.отформатированного файла.
https://medium.com/@benmorel/high-speed-inserts-wi...

Но меня больше волнует почему вообще такая низкая скорость? Это ведь всё на localhost происходит. Мне кажется дело то ли в коннекторе старой версии, то ли ещё в чём то программном.
  • Вопрос задан
  • 182 просмотра
Ответы на вопрос 1
@edo1h
Вопрос: из-за чего такая фантастически низкая скорость и как это изменить?

а вы уверены, что она фантастически низкая? 1000 пишущих транзакций в секунду — отличная производительность.

mysql (как и большинство БД) по умолчанию считает транзакцию завершённой после успешного fsync.
https://www.percona.com/blog/2018/02/08/fsync-perf...
https://docs.google.com/spreadsheets/d/1E9-eXjzsKb... (колонка journal iops)

так что да, писать в базу не по одной строчке, а пачками (уменьшать число транзакций). или отключать fsync, если данные не особо важны.
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы