Поделиться через


Рекомендации по производительности конечной точки аналитики SQL

Область применения:✅ конечная точка аналитики SQL в Microsoft Fabric

Конечная точка аналитики SQL позволяет запрашивать данные в lakehouse с помощью языка T-SQL и протокола TDS. Каждый lakehouse имеет одну конечную точку аналитики SQL. Количество конечных точек аналитики SQL в рабочей области соответствует количеству озерных домов и зеркальных баз данных , подготовленных в этой рабочей области.

Фоновый процесс отвечает за сканирование lakehouse за изменения и актуальность конечной точки аналитики SQL для всех изменений, зафиксированных в озерах в рабочей области. Процесс синхронизации прозрачно управляется платформой Microsoft Fabric. При обнаружении изменений в лейкхаусе фоновый процесс обновляет метаданные и конечную точку аналитики SQL отражает изменения, зафиксированные в таблицах Lakehouse. В обычных условиях эксплуатации задержка между lakehouse и конечной точкой аналитики SQL составляет менее одной минуты.

Автоматически созданная схема в конечной точке аналитики SQL Lakehouse

Конечная точка аналитики SQL управляет автоматически созданными таблицами, чтобы пользователи рабочей области не могли изменять их. Пользователи могут обогатить модель базы данных, добавив собственные схемы SQL, представления, процедуры и другие объекты базы данных.

Для каждой таблицы Delta в Lakehouse конечная точка аналитики SQL автоматически создает таблицу в схеме dbo . Типы данных схемы автогенерированного типа для конечной точки аналитики SQL см. в разделе "Типы данных" в Microsoft Fabric.

Таблицы в конечной точке аналитики SQL создаются с дополнительной задержкой. После создания или обновления таблицы Delta Lake в озере таблица конечных точек аналитики SQL, ссылающаяся на таблицу Delta lake, будет автоматически создана или обновлена автоматически в течение 10 секунд.

Время обновления таблицы связано с тем, как оптимизированы таблицы Delta. Дополнительные сведения см . в статье по оптимизации таблиц Delta Lake и V-Order , чтобы узнать больше о ключевых сценариях и подробном руководстве по эффективному обслуживанию таблиц Delta для максимальной производительности.

Вы можете вручную выполнить обновление автоматического сканирования метаданных на портале Fabric. На странице конечной точки аналитики SQL нажмите кнопку "Обновить " на панели инструментов обозревателя , чтобы обновить схему. Перейдите к конечной точке аналитики SQL и найдите кнопку обновления, как показано на следующем рисунке.

Снимок экрана: портал Fabric с кнопкой

Руководство

  • Автоматическое обнаружение метаданных отслеживает изменения, зафиксированные в lakehouses, и является одним экземпляром для рабочей области Fabric. Если вы наблюдаете повышенную задержку для синхронизации изменений между lakehouses и конечной точкой аналитики SQL, это может быть связано с большим количеством озерных домов в одной рабочей области. В таком сценарии рассмотрите возможность переноса каждого озера в отдельную рабочую область, так как это позволяет масштабировать автоматическое обнаружение метаданных.
  • Файлы Parquet неизменяемы по дизайну. При выполнении операции обновления или удаления разностная таблица добавит новые файлы parquet с набором изменений, увеличивая количество файлов с течением времени в зависимости от частоты обновлений и удалений. Если планового обслуживания нет, в конечном итоге этот шаблон создает затраты на чтение, и это влияет на время синхронизации изменений в конечной точке аналитики SQL. Чтобы устранить эту проблему, запланируйте регулярные операции обслуживания таблиц Lakehouse.
  • В некоторых сценариях может наблюдаться, что изменения, зафиксированные в озерном доме, не отображаются в связанной конечной точке аналитики SQL. Например, возможно, вы создали новую таблицу в Lakehouse, но она не указана в конечной точке аналитики SQL. Или, возможно, вы зафиксировали большое количество строк в таблице в озерном доме, но эти данные не отображаются в конечной точке аналитики SQL. Рекомендуется инициировать синхронизацию метаданных по запросу, активируемую с помощью параметра ленты обновления редактора запросов SQL. Этот параметр заставляет синхронизацию метаданных по запросу, а не ожидать завершения фоновой синхронизации метаданных.

Рекомендации по размеру секции

Выбор столбца секции для разностной таблицы в lakehouse также влияет на время синхронизации изменений в конечной точке аналитики SQL. Число и размер секций столбца секций важны для производительности:

  • Столбец с высоким кратностью (в основном или полностью из уникальных значений) приводит к большому количеству секций. Большое количество секций отрицательно влияет на производительность проверки обнаружения метаданных на наличие изменений. Если кратность столбца высока, выберите другой столбец для секционирования.
  • Размер каждой секции также может повлиять на производительность. Мы рекомендуем использовать столбец, который приведет к секции по крайней мере (или близко) к 1 ГБ. Рекомендуется использовать рекомендации по обслуживанию разностных таблиц; оптимизация. Скрипт Python для оценки секций см. в примере скрипта для сведений о секции.

Большой объем небольших файлов parquet увеличивает время синхронизации изменений между lakehouse и связанной с ней конечной точкой аналитики SQL. Вы можете в конечном итоге получить большое количество файлов parquet в разностной таблице по одной или нескольким причинам:

  • Если выбрать секцию для разностной таблицы с большим количеством уникальных значений, она секционируется по каждому уникальному значению и может быть пересекундирована. Выберите столбец секции, который не имеет высокой кратности, и приводит к отдельному размеру секции не менее 1 ГБ.
  • Скорость приема данных пакетной и потоковой передачи может также привести к небольшим файлам в зависимости от частоты и размера записываемых изменений в lakehouse. Например, может произойти небольшое количество изменений, поступающих в lakehouse, и это приведет к небольшим файлам parquet. Для этого рекомендуется реализовать регулярное обслуживание таблиц Lakehouse.

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

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

  1. Сначала необходимо указать путь ABSFF для разностной таблицы в переменной delta_table_path.
    • Путь ABFSS к разностной таблице можно получить из обозревателя портала Fabric. Щелкните правой кнопкой мыши имя таблицы, а затем выберите COPY PATH из списка параметров.
  2. Скрипт выводит все секции для разностной таблицы.
  3. Скрипт выполняет итерацию по каждой секции, чтобы вычислить общий размер и количество файлов.
  4. Скрипт выводит сведения о секциях, файлах на секции и размер каждой секции в ГБ.

Полный скрипт можно скопировать из следующего блока кода:

# Purpose: Print out details of partitions, files per partitions, and size per partition in GB.
  from notebookutils import mssparkutils

# Define ABFSS path for your delta table. You can get ABFSS path of a delta table by simply right-clicking on table name and selecting COPY PATH from the list of options.
  delta_table_path = "abfss://<workspace id>@<onelake>.dfs.fabric.microsoft.com/<lakehouse id>/Tables/<tablename>"

# List all partitions for given delta table
partitions = mssparkutils.fs.ls(delta_table_path)

# Initialize a dictionary to store partition details
partition_details = {}

# Iterate through each partition
for partition in partitions:
  if partition.isDir:
      partition_name = partition.name
      partition_path = partition.path
      files = mssparkutils.fs.ls(partition_path)
      
      # Calculate the total size of the partition

      total_size = sum(file.size for file in files if not file.isDir)
      
      # Count the number of files

      file_count = sum(1 for file in files if not file.isDir)
      
      # Write partition details

      partition_details[partition_name] = {
          "size_bytes": total_size,
          "file_count": file_count
      }
      
# Print the partition details
for partition_name, details in partition_details.items():
  print(f"{partition_name}, Size: {details['size_bytes']:.2f} bytes, Number of files: {details['file_count']}")