НейроАгент

Проблема с памятью в Power BI: Маленький Excel-файл вызывает загрузку 800MB

Узнайте, почему ваш маленький Excel-файл (1500 строк) потребляет 800MB в Power BI. Изучите проблемы с памятью при объединении запросов и методы оптимизации для снижения использования памяти при обновлении отчета.

У меня возникла проблема с производительностью в Power BI, при которой небольшой файл Excel (примерно 1500 строк и 800 КБ) вызывает загрузку запроса до 800 МБ при обновлении отчета. В моем отчете Power BI есть четыре подключения к файлам Excel, а проблемный запрос добавляет три других запроса, каждый из которых объединен с файлом из 1500 строк.

Что может вызывать такое значительное расширение памяти с 800 КБ до 800 МБ? Связана ли эта проблема с количеством отношений между таблицами, плохой архитектурой запросов или это может быть ошибка в Power BI?

НейроАгент

Небольшой файл Excel с 1500 строками и объемом 800 КБ действительно может вызвать у Power BI потребление до 800 МБ памяти при обновлении, и это расширение памяти в основном связано с тем, как Power BI обрабатывает операции слияния и добавления. Проблема заключается в практиках управления памятью Power BI при обработке запросов, где могут использоваться несколько контейнеров оценки для обработки преобразований, и каждая операция слияния требует загрузки всего набора данных в память для обработки.

Содержание

Понимание накладных расходов на память в Power BI

Использование памяти Power BI часто значительно превышает фактический размер набора данных из-за требований внутренней обработки. При выполнении полного обновления Power BI обычно требуется вдвое больше памяти, чем требует семантическая модель, поскольку она поддерживает как старую, так и новую версии сжатых данных в процессе обновления[^1]. Это означает, что ваш набор данных объемом 800 КБ может потребовать 1,6 МБ только для базовой операции обновления.

Однако реальное давление на память исходит от тенденции Power BI выделять дополнительную память для будущего расширения. Как объясняет один источник, Power BI может выделять до 12 ГБ для набора данных объемом 10 ГБ, чтобы оставить место для будущего роста[^1]. В вашем случае, с несколькими операциями слияния, этот механизм накладных расходов может вносить значительный вклад в раздувание памяти.

Кроме того, при обработке запросов Power BI может использовать несколько контейнеров оценки для обработки преобразований Power Query. Каждый из этих контейнеров может использовать до объема памяти, указанного в настройке MaxEvaluationWorkingSetInMB, что может еще больше усугубить использование памяти при сложных операциях[^9].


Проблемы с памятью при слиянии запросов

Расширение памяти, которое вы испытываете, скорее всего, связано с операциями слияния в вашей архитектуре запросов. Операции слияния в Power Query требуют загрузки всего набора данных в память для обработки, что объясняет резкий всплеск использования памяти[^3][^8].

Согласно результатам исследований, слияние должно происходить в памяти, поэтому чем больше таблиц участвуют в слиянии, тем больше памяти требуется[^3]. В вашем случае, хотя в файле Excel всего 1500 строк, при слиянии с тремя другими запросами каждая операция слияния требует загрузки всех данных в память[^8]. Это создает каскадный эффект, при котором каждая операция слияния увеличивает требования к памяти.

Один из участников сообщества сообщил, что каждый раз при выполнении запроса слияния “он должен загружать все данные в память снова для каждого слияния”[^8]. Это неэффективное поведение может объяснить, почему использование вашей памяти растет экспоненциально, а не линейно с увеличением числа слияний.

Кроме того, ваши операции слияния могут быть не оптимизированы. Как отмечает один источник, “Если ваши данные не отсортированы, вы можете отсортировать их в Power Query перед слиянием – но поскольку сортировка сама по себе требует времени, а сортировка для источников данных, не поддерживающих сворачивание, является еще одной из тех операций, которые требуют хранения таблицы в памяти, вы вряд ли получите какого-либо улучшения производительности”[^2]. Это указывает на то, что несортированные данные могут заставлять Power BI хранить больше данных в памяти, чем необходимо в процессе слияния.


Потребление памяти при добавлении запросов

Хотя операции слияния привлекают основное внимание, запросы добавления также вносят вклад в накладные расходы на память в вашем сценарии. Операции добавления вертикально складывают данные из запросов с идентичными структурами, но этот процесс складывания также требует выделения памяти[^4].

Функция объединения файлов в Power BI улучшает конечный пользовательский опыт, но добавляет накладные расходы на обработку запросов[^6]. Если вы используете эту функцию для обработки нескольких подключений Excel, вы можете испытывать этот эффект накладных расходов. Источник The Power User предполагает, что вы потенциально “можете пойти на компромисс в этом конечном пользовательском опыте, чтобы оптимизировать запрос и сделать его выполнение до 500% быстрее”[^6]. Когда вы добавляете запросы, Power BI необходимо поддерживать структуру и данные каждого объединяемого запроса, что может привести к фрагментации памяти и увеличению использования, особенно в сочетании с операциями слияния в том же потоке запросов.


Проблемы архитектуры запросов

Ваша архитектура запросов с четырьмя подключениями к Excel и несколькими операциями слияния/добавления, вероятно, страдает от нескольких проблем, которые усугубляют использование памяти:

  1. Несколько контейнеров оценки: Power BI может создавать несколько контейнеров оценки при обновлении, каждый из которых способен использовать значительный объем памяти[^9]. При вашей сложной структуре запросов, включающей несколько слияний и добавлений, это может привести к одновременной работе нескольких контейнеров.

  2. Неэффективные операции соединения: Один из пользователей сообщил, что даже с небольшим количеством совпадающих строк (менее 30 000), Power Query обрабатывал все 40 миллионов строк, что указывает на неэффективные операции соединения[^9]. Ваши операции слияния могут испытывать аналогичную неэффективность, заставляя Power BI обрабатывать больше данных, чем необходимо.

  3. Отсутствие оптимизации запросов: Источник Data Bear подчеркивает необходимость “уменьшить нагрузку на нашу модель данных для оптимальной работы. Нам нужно поддерживать используемую память как можно меньшей”[^1]. Ваша текущая архитектура может быть не оптимизирована для минимального использования памяти.

  4. Необходимая загрузка данных: Как предлагает один из советов по производительности, при получении данных из источников данных, применении преобразований и слиянии или добавлении запросов, вы можете получить таблицы, содержащие больше данных, чем фактически необходимо[^10]. Каждая ненужная колонка или строка увеличивает давление на память во время операций слияния и добавления.


Возможные решения

Для решения проблемы расширения памяти рассмотрите следующие стратегии оптимизации:

Оптимизация операций слияния

  • Удаление ненужных столбцов: Удаляйте столбцы перед операциями слияния для уменьшения объема памяти[^2]. Как отмечает один источник, “удалите любые ненужные столбцы перед слиянием в любом случае”[^2].
  • Снижение параллелизма: Уменьшите количество объектов, обрабатываемых параллельно при обновлении[^10]. “Снижение параллелизма и введение разделения для больших таблиц могут значительно снизить требования к памяти при обновлении”[^10].
  • Рассмотрите возможность сворачивания запросов: Убедитесь, что ваши источники данных поддерживают сворачивание запросов, что позволяет Power Query передавать преобразования обратно в источник, снижая использование памяти.

Реализация инкрементного обновления

Настройте Инкрементное обновление для вашей семантической модели[^1]. Это особенно важно, если ваша модель становится больше и постепенно потребляет больше памяти. Инкрементное обновление обрабатывает только новые или измененные данные, а не весь набор данных.

Настройки выделения памяти

Настройте параметры выделения памяти Power Query. Вы можете выделить больше памяти контейнерам оценки в Power BI Desktop[^9], но это следует делать с осторожностью, так как это может увеличить общее потребление памяти.

Переработка архитектуры запросов

  • Объединение источников данных: Вместо четырех отдельных подключений к Excel рассмотрите возможность их объединения в один, хорошо структурированный источник данных, если это возможно.
  • Предварительная обработка данных: Выполняйте предварительные преобразования данных в Excel или другом инструменте перед импортом в Power BI.
  • Использование режима DirectQuery: Для больших наборов данных рассмотрите возможность использования режима DirectQuery вместо режима импорта, хотя это может быть не подходит для вашего небольшого файла Excel.

Мониторинг и диагностика

Для лучшего понимания шаблонов использования памяти реализуйте следующие стратегии мониторинга:

Диагностика запросов

Используйте Диагностику запросов для мониторинга использования памяти во время операций[^3]. “Теперь доступна информация в Profiler и Log Analytics, которая tells вам о пиковом использовании памяти и процессорного времени во всех запросах Power Query для одного обновления в службе Power BI, а также об использовании памяти для обновления в целом”[^3].

Профилирование памяти

Мониторьте использование памяти в процессе обновления с помощью Диспетчера задач Windows или аналогичных инструментов, чтобы определить, когда происходит всплеск использования памяти, и соотнести это с конкретными операциями запросов.

Ресурсы сообщества

Взаимодействуйте с сообществом Power BI для получения конкретных рекомендаций по вашей архитектуре запросов. Сообщества Microsoft Fabric и Power BI имеют обширные обсуждения оптимизации памяти[^1][^8].

Заключение

Расширение памяти с 800 КБ до 800 МБ в вашем отчете Power BI в основном вызвано совокупным эффектом нескольких операций слияния и добавления, каждая из которых требует полной загрузки набора данных в память. Эта проблема связана с плохой архитектурой запросов, а не с ошибкой в самом Power BI. Для решения этой проблемы сосредоточьтесь на оптимизации операций слияния путем удаления ненужных столбцов, снижения параллелизма и, возможно, переработки архитектуры запросов для минимизации накладных расходов на память. Реализация инкрементного обновления и использование инструментов мониторинга, таких как Диагностика запросов, поможет вам лучше понимать и управлять шаблонами использования памяти. С помощью этих оптимизаций вы сможете значительно снизить потребление памяти при обновлении отчета, сохраняя необходимую функциональность.

Источники

  1. Large semantic models in Power BI Premium - Microsoft Fabric
  2. Chris Webb’s BI Blog: Optimising The Performance Of Power Query Merges In Power BI, Part 3: Table.Join And SortMerge
  3. Microsoft Power BI Insights: Power Query merge performance; Desktop features; Small multiples
  4. Merge Queries in Power BI for More Insightful Visuals
  5. Data Preparation Part 3 - Merging and Appending Queries - Data Bear
  6. Combine or Append Data: Optimal Combination Pattern — The Power User
  7. Shape and Combine Data in Power BI Desktop Tutorial - Microsoft Learn
  8. Solved: Merging Tables Efficiency Question - Microsoft Power BI Community
  9. PowerQuery: Merge Queries HORRIBLE performance - Microsoft Fabric Community
  10. Performance Tip for Power BI; Enable Load Sucks Memory Up - RADACAD