Производительность MYSQL (большой) UPDATE по сути связана с вводом-выводом: какие уроки следует усвоить?

У меня есть эта довольно большая таблица myISAM (более 95 млн строк), которую нужно обновлять раз в день (более 5 млн строк).

Запрос простой

UPDATE main_table a JOIN updated_values b ON a.id=b.id set a.theCount=b.theCount;

Время выполнять

  1. SSD RAID 5: 960 с
  2. ramDisk: 124 с
  3. Таблицы ПАМЯТИ: 20,1 с

Эти рисунки показывают, что вызов UPDATE связан с вводом-выводом (20 секунд для выполнения, когда данные уже находятся в памяти ...). Однако непонятно, что делать. Таблицы RamDisks и MEMORY требуют записи данных на стабильный носитель. Преобразование таблицы из MEMORY в MyISAM занимает вечность. Таким образом, самым быстрым решением является копирование файлов MyISAM на ramDisk, обновление и копирование обратно в рейд SSD, что занимает менее 20 секунд RT.

Есть ли способ настроить буферы mySQL таким образом, чтобы не было необходимости возиться с ramDisk? (эта система работает на Mac)

Проиндексированы ли a.id и b.id? Что говорит EXPLAIN [query] .. Вы также пробовали профилировать запрос UPDATE с помощью -> dev.mysql.com/doc/refman/5.7/en/show-profile.html

Raymond Nijland 24.04.2018 23:47

«Таким образом, самым быстрым решением является копирование файлов MyISAM на ramDisk, обновление и копирование обратно в рейд SSD, что занимает менее 20 секунд RT». Это вызывает проблемы ... Если вы не можете справиться с временем блокировки таблицы (960 с), запрос UPDATE должен рассмотреть возможность перехода на движок InnoDB ..

Raymond Nijland 24.04.2018 23:57

1. да, оба идентификатора проиндексированы, иначе как еще 5Mx95M завершится за 20 секунд ?? 2. Блокировка таблицы сама по себе не проблема.

user3127882 25.04.2018 00:11

Имеет ли значение изменение условия соединения на a.id=b.id and a.theCount<>b.theCount?

Yuri Lachin 25.04.2018 14:55

Вы также можете попробовать гибридный подход: поместить таблицу updated_values ​​в таблицу MEMORY, оставив большую на диске.

Yuri Lachin 25.04.2018 15:06

Не пробовали соединение с дополнительным условием по подсчету. Я сомневаюсь, что произойдут существенные изменения, поскольку большинство, если не все показатели, различаются.

user3127882 26.04.2018 15:36
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
6
24
0

Другие вопросы по теме