Как увеличить скорость обновления записей в БД MySQL через скрипт?
Есть несколько файлов, в каждом файле более 10_000 строк вида "обновить поле, где id такое-то". Соответственно, я через Python отсплитил строки в массив.
Затем начал каждую запись записывать в БД синхронно. Все в принципе работает, на очень долго (за 12 часов обновилось только 15_000 записей)
Пробовал делать многопоточно (по 5, 20, 50 потоков) ни один из них не выполнил корректно 100 обновлений, т.к. выдавало ошибки долгого ожидания от MySQL.
Есть варианты как можно увеличить скорость записи или единственный путь получается - ждать синхронной записи?
Сейчас вот так работает:
from sqlalchemy import create_engine
from sqlalchemy import text
HOST = ''
USER = ''
PASS = ''
PORT = ''
DB_NAME = ''
COUNT_FILES = 10
engine = create_engine(
f'mysql://{USER}:{PASS}@{HOST}:{PORT}/{DB_NAME}', pool_size=30, max_overflow=15, pool_recycle=1200)
for number in range(1, COUNT_FILES):
with open(f'SQL_update_{number}.txt', 'r', encoding='utf-16LE') as file:
data_file = (file.read()).split(';')
all_row = len(data_file)
for number_row, UPDATE_DATA in enumerate(data_file, start=1):
print(f'read file#{number} из {COUNT_FILES}; row #{number_row + new} из {all_row}')
with engine.connect() as conn:
sql_text = text(UPDATE_DATA)
print(sql_text)
conn.execute(sql_text)
conn.commit()
UPDATE
Строки в файле вот такого вида:
UPDATE name_table SET name_field_table = 'ТУТ ОГРОМНАЯ СТРОКА НА 600 символов' WHERE id = <id_строки_в_таблице>
UPDATE2
Отправка пачками по 10 штук вида:
UPDATE name_table SET name_field_table = 'ТУТ ОГРОМНАЯ СТРОКА НА 600 символов' WHERE id = <id_строки_в_таблице>;
UPDATE name_table SET name_field_table = 'ТУТ ОГРОМНАЯ СТРОКА НА 600 символов' WHERE id = <id_строки_в_таблице>;
UPDATE name_table SET name_field_table = 'ТУТ ОГРОМНАЯ СТРОКА НА 600 символов' WHERE id = <id_строки_в_таблице>
....
в
conn.execute(sql_text)
просто зависает и не дает ответа, причем пачки формируются до
with engine.connect() as conn: