У меня большой запрос в php, использующий MYSQLI_USE_RESULT, чтобы не помещать все результаты в память php. Потому что, если я использую MYSQLI_STORE_RESULT, он поместит все данные в память для всех результатов, что занимает несколько ГБ ОЗУ, вместо того, чтобы получать строку за строкой. Он возвращает миллионы строк, и каждая строка будет генерировать запрос API, поэтому запрос будет выполняться в течение нескольких дней. В то же время у меня есть другие mysql запросы, которые обновляют / вставляют таблицы, связанные с первым запросом, и я думаю, что это вызывает рост журнала отмены без остановки.
Я настраиваю innodb_undo_tablespaces = 2 и innodb_undo_log_truncate = ВКЛ, поэтому журнал отмены отделен от ibdata1, но файлы отмены по-прежнему велики, пока я не уничтожу запросы, которые выполнялись в течение нескольких дней.
Я выполнил «УСТАНОВИТЬ УРОВЕНЬ ИЗОЛЯЦИИ СДЕЛКИ СДЕЛКИ ЧИТАТЬ НЕОБЕСПЕЧЕННЫЙ;» перед запуском длинного запроса, надеясь, что это предотвратит рост файла отмены, но этого не произошло.
Другие запросы, которые обновляются / вставляются, имеют автокоммит.
В 1-2 день, файл отмены уже 40 ГБ.
Вопрос: как предотвратить увеличение этого файла отмены? Поскольку я не хочу сохранять предыдущую версию данных, пока выполняется запрос. Это не важно, если я получу обновленные данные вместо данных, которые были на момент запроса.