У меня есть приложение, которое отправляет вызовы функций в мою базу данных mySQL.После отправки функция делает то, что ей нужно (включая выбор одной строки, INSERT и UPDATE по индексу).
Сейчас я могу делать около миллиона вызовов MySQL в день.Эти вызовы функций mySQL разбиты на фактические «вызовы» моего приложения, которые могут быть от 1 до 20 различных вызовов функций mySQL.Мое приложение получает около 120 000 «вызовов функций приложения» в день.
У меня 12 гигабайт оперативной памяти, поэтому я увеличил объем оперативной памяти InnoDB с 2 до 8 гигабайт, и это, похоже, не увеличилось.Далее я решил, что если 1 поток получает столько, добавление потоков увеличит его.Итак, я сделал это, и теперь я вижу тонны и тонны ошибок блокировки индекса.
Я знаю, что MySQL говорит, что нужно просто повторно отправить запрос, что работает, но я не вижу значительного увеличения скорости.Я в основном добиваюсь 180 000 «вызовов функций приложения» на моем конце независимо от потоков, когда однопоточность составляла около 120 000.Это потому, что когда-то у меня около 2-3 потоков, постоянные ошибки блокировки потоков.
Теперь у каждой из моих таблиц есть тонны индексов для эффективности поиска, поскольку у меня миллионы строк.Тем не менее, я планирую реплицировать эту базу данных, чтобы новый экземпляр выполнял большую часть поиска на SLAVE, в то время как основные данные хранятся на моем MASTER (который является всеми обновлениями / вставками).Из-за этого я подумал, может быть, удаление всех индексов на MASTER, кроме первичного ключа и уникальных ключей, уменьшит это?Тогда я мог бы добавить индексы на РАБЕ.Однако я даже не уверен, сработает ли это, используя базовую функцию mySQL REPLICATION, если индексы разные, поскольку это моя первая попытка его использования.
Любое предложение о том, что мне следует сделать, чтобы сделать это более эффективным.Сейчас MySQL обрабатывает примерно 1/20 от того, что мне нужно в данный день.
Я ценю любые отзывы.