Простое обновление mysql с 40 миллионами и 128 ГБ ОЗУ занимает слишком много времени

Если действительно не должно быть ситуации, когда вы заканчиваете дублирующими комбинациями quize_no и phone в этой таблице, то первое, что вам нужно сделать, это изменить структуру таблицы, чтобы добавить уникальный ключ к этим столбцам.

Например: ALTER TABLE score_mm ADD UNIQUE (quize_no, phone);

Это не исправит все, что вызывает вызовы нескольких вставных запросов, но по крайней мере защитит целостность ваших данных, не допуская каких-либо строк с двойные комбинации значений.

0
задан Hp_issei 19 January 2019 в 10:21
поделиться

1 ответ

table_open_cache=1024000

НЕТ! Это таблиц , а не байтов . Измените его на 2000.

key_buffer_size=2147483648

Если вы используете InnoDB, а не MyISAM:

key_buffer_size = 50M
innodb_buffer_pool_size is fine at 96G (for 128GB of RAM)

Это почти бесполезно, измените на 5:

long_query_time=100

И ... [ 1116]

# Thread Specific Values
sort_buffer_size=2147483648
read_buffer_size=2147483648
read_rnd_buffer_size=1073741824
join_buffer_size=1073741824
bulk_insert_buffer_size=4294967296
tmp_table_size=17179869184
max_heap_table_size=8589934592

Прочитайте этот комментарий! Каждое соединение может распределять эти размеры! Вам не хватит оперативной памяти. Поменяться местами или произойдет сбой! Даже если у вас много оперативной памяти, эти цифры чрезмерны.

innodb_flush_method = unbuffered

В руководстве говорится:

unbuffered: ... используется для внутреннего тестирования производительности и в настоящее время не поддерживается. Используйте на свой страх и риск.

innodb_random_read_ahead = 1

Из руководства:

Поскольку эта функция может улучшить производительность в некоторых случаях и снизить производительность в других, прежде чем полагаться на этот параметр, проведите тестирование как с, так и без настройка включена.

Итог: отменить все ваши изменения конфигурации , кроме buffer_pool.

0
ответ дан Rick James 19 January 2019 в 10:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: