# #google-cloud-platform #airflow #google-cloud-composer
Вопрос:
Я пытаюсь создать задачу Dag, которая загружает таблицу MySQL в корзину GCS.
Однако встроенный оператор MySQLToGCSOperator, который делает это, похоже, хранит данные в памяти до тех пор, пока не завершит загрузку таблицы. Поскольку некоторые из наших таблиц составляют 100 ГБ , это приводит к тому, что рабочие используют всю доступную память при загрузке больших таблиц, что приводит к сбою в работе наших рабочих-составителей в какой-то момент после того, как они израсходовали всю память сервера.
Есть ли способ загрузить таблицу MySQL в GCS, не потребляя много оперативной памяти?
Я также попытался изменить параметр approx_max_file_size_bytes и тип файла (JSON/CSV), но это не имело никакого значения.
Использование воздушного потока 2.0.2.
Изображение композитора: композитор-1.17.0-предварительный просмотр.6-воздушный поток-2.0.2
Комментарии:
1. Неясно, нужно ли вам подтверждение, если это проблема с памятью, или вам нужно альтернативное решение MySQLToGCSOperator ?
2. Мне нужно, чтобы вы указали версию композитора, которую вы используете вместе с Airflow 2.0.2. Если ваша версия композитора больше не поддерживает Airflow 2.0.2, это будет объяснением того, почему она может плохо себя вести для вас. Кроме того, я был бы рад, если бы вы указали проблему, на которую вы нацелены, потому что ваш вопрос был довольно двусмысленным.
3. @MBHAPhoenix Я хотел бы знать, нормально ли это, и если да, то есть ли другое решение?
4. @MariCruzR извиняется за двусмысленность. Добавлена дополнительная информация к вопросу.
5. Размещена ли база данных MySQL в облачном SQL ? Или это внешняя БД?
Ответ №1:
Поскольку ваша цель-минимизировать влияние на производительность оперативной памяти при загрузке таблицы MySQL в GCS, я бы предложил использовать бессерверный экспорт, чтобы разгрузить основной экземпляр. Это может быть достигнуто с помощью команды gcloud export sql с тегом —offload.
gcloud sql export sql INSTANCE_NAME gs://BUCKET_NAME/sqldumpfile.gz
--database=DATABASE_NAME_1,[DATABASE_NAME_2…]
--table=TABLE_1,[TABLE_2…]
--offload
Этот метод должен помочь при экспорте данных из больших баз данных, поскольку он создает вторичный экземпляр, и он действителен, если вы используете облачный SQL.
Комментарии:
1. Я отредактировал свой комментарий в соответствии с новой версией вашего вопроса. Пожалуйста, просмотрите содержимое решения и скажите мне, помогло ли это повысить производительность вашей оперативной памяти.