Настройка настраиваемых пулов SQL с помощью REST API Fabric

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

Пользовательские пулы SQL обеспечивают администраторам больше контроля над тем, как ресурсы выделяются для обработки запросов. В этом кратком руководстве вы настроите настраиваемые пулы SQL и просмотрите значения классификатора с помощью REST API Fabric.

Администраторы рабочей области могут использовать имя приложения (или имя программы) из строки подключения для маршрутизации запросов к разным вычислительным пулам. Администраторы рабочих областей также могут контролировать процент ресурсов, который каждый вычислительный пул SQL может использовать на основе лимита кратковременного масштабирования емкости рабочей области.

REST API Fabric определяет единую конечную точку для операций.

Необходимые условия

  • Доступ к объекту хранилища в рабочей области. Вы должны быть членом роли администратора.

Получение текущей конфигурации

Чтобы получить текущую конфигурацию, используйте следующий API.

Пример блокнота Fabric

В записной книжке Fabric Spark можно запустить следующий пример кода Python.

  • Код отправляет GET запрос в API конфигурации настраиваемого пула SQL и возвращает настраиваемую конфигурацию пула SQL для рабочей области.
  • Поле workspace_id использует mssparkutils.runtime.context для получения GUID рабочей области, в которой выполняется записная книжка. Чтобы настроить пользовательский пул SQL в другой рабочей области, обновите workspace_id на GUID рабочей области, в которой нужно настроить пользовательские пулы SQL.
import requests
import json
from notebookutils import mssparkutils

# This will get the workspace_id where this notebook is running. 
# Update to the workspace_id (guid) if running this notebook outside of the workspace where the warehouse exists.
workspaceId = mssparkutils.runtime.context.get('currentWorkspaceId') 

url = f'https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/warehouses/sqlPoolsConfiguration?beta=true'
response = requests.request(method='get', url=url, headers={'Authorization': f'Bearer {mssparkutils.credentials.getToken("pbi")}'})

if response.status_code == 200:
    print(json.dumps(response.json(), indent=4))
else:
    print(response.text)

Настройка настраиваемых пулов SQL

Следующий пример Python включает и настраивает настраиваемые пулы SQL. Этот код Python можно запустить в записной книжке Fabric Spark.

  • Конфигурация настраиваемых пулов SQL активна только в том случае, если customSQLPoolsEnabled для атрибута задано значение true. Вы можете задать полезную нагрузку в customSQLPools определении объекта, но если customSQLPoolsEnabled не установлено в true, полезная нагрузка игнорируется и используется автономное управление рабочими нагрузками.
  • Код настраивает два SQL-пула: ContosoSQLPool и AdhocPool.
    • Установлено, что ContosoSQLPool получит 70% доступных ресурсов. Классификатор имени приложения имеет значение MyContosoApp.
    • Все запросы SQL, поступающие из строки подключения, указывающей MyContosoApp имя приложения, классифицируются в ContosoSQLPool настраиваемый пул SQL и имеют доступ к 70% общих узлов емкости с возможностью ускорения.
    • Все запросы SQL, в имени приложения строки подключения которых не содержится MyContosoApp, отправляются в Adhoc пользовательский пул SQL, который определяется как пул по умолчанию. Эти запросы получают доступ к 30% всех узлов с возможностью временного увеличения мощности.
  • Все пользовательские конфигурации пула SQL должны иметь один пул SQL по умолчанию, идентифицируемый путем задания атрибута isDefault true.
  • Сумма всех maxResourcePercentage значений должна быть меньше или равна 100%.
  • Поле workspace_id использует mssparkutils.runtime.context для получения GUID рабочей области, в которой выполняется записная книжка. Чтобы настроить пользовательский пул SQL в другой рабочей области, обновите workspace_id на GUID рабочей области, в которой нужно настроить пользовательские пулы SQL.
import requests
import json
from notebookutils import mssparkutils

body = { 
  "customSQLPoolsEnabled": True, 
  "customSQLPools": [ 
    { 
      "name": "ContosoSQLPool", 
      "isDefault": False, 
      "maxResourcePercentage": 70,
      "optimizeForReads": False, 
      "classifier": { 
        "type": "Application Name", 
        "value": [ 
          "MyContosoApp"
        ] 
      } 
    }, 
    { 
      "name": "AdhocPool", 
      "isDefault": True, 
      "maxResourcePercentage": 30,
      "optimizeForReads": True
    } 
  ] 
}

# This will get the workspaceId where this notebook is running. 
# Update to the workspace_id (guid) if running this notebook outside of the workspace where the warehouse exists.
workspace_id = mssparkutils.runtime.context.get('currentWorkspaceId') 

url = f'https://api.fabric.microsoft.com/v1/workspaces/{workspace_id}/warehouses/sqlPoolsConfiguration?beta=true'
response = requests.request(method='patch', url=url, json=body, headers={'Authorization': f'Bearer {mssparkutils.credentials.getToken("pbi")}'})

if response.status_code == 200:
    print("SQL Custom Pools configured successfully.")
else:
    print(response.text)

Подсказка

Используйте следующие полезные значения классификатора названия приложения (regex) для трафика из Fabric.

  • Чтобы классифицировать запросы из конвейеров Fabric, используйте ^Data Integration-to[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$.
  • Чтобы классифицировать запросы из Power BI, используйте ^(PowerBIPremium-DirectQuery|Mashup Engine(?: \(PowerBIPremium-Import\))?).
  • Чтобы классифицировать запросы из редактора запросов SQL на портале Fabric, используйте DMS_user.

Установка имени приложения в среде SQL Server Management Studio (SSMS)

Классификатор для настраиваемых пулов SQL использует параметр наименования приложения или программы в типовых строках подключения.

  1. В SQL Server Management Studio (SSMS) укажите имя сервера для хранилища и предоставьте данные для аутентификации. Рекомендуется Microsoft Entra MFA.

  2. Нажмите кнопку "Дополнительно ".

  3. На странице "Дополнительные свойства" в разделе "Контекст" измените значение имениMyContosoAppприложения на .

    Снимок экрана из SQL Server Management Studio страницы

  4. Нажмите ОК.

  5. Нажмите Подключиться.

  6. Чтобы создать некоторые примеры действий, используйте это подключение в SSMS для выполнения простого запроса в хранилище, например:

    SELECT *
    FROM dbo.DimDate;
    

Анализировать аналитические сведения о запросах в пользовательском SQL-пуле

  1. Просмотрите динамическое sys.dm_exec_sessions представление управления, чтобы увидеть, что MyContosoApp распознается как имя приложения, переданное из SSMS в подсистему SQL.

    SELECT session_id, program_name
    FROM   sys.dm_exec_sessions
    WHERE  program_name = 'MyContosoApp';
    

    Рассмотрим пример.

    Скриншот из SQL Server Management Studio, показывающий результаты запроса на sys.dm_exec_sessions и сессию, обозначенную именем программы MyContosoApp.

  2. Поскольку program_name соответствует имени приложения в MyContosoApp пользовательском SQL-пуле, этот запрос использует ресурсы в этом пуле. Чтобы доказать, какой пользовательский пул SQL использовал запрос, можно запросить системное представление queryinsights.exec_requests_history. Подождите 10–15 минут, чтобы аналитические сведения о запросах заполнялись, а затем выполните следующий запрос.

    SELECT distributed_statement_id, submit_time, 
           program_name, sql_pool_name, start_time, end_time
    FROM   queryinsights.exec_requests_history 
    WHERE  program_name = 'MyContosoApp';
    
  3. Вы также можете определить пул для запроса, используя его идентификатор запроса. В редакторе SQL-запросов портала Fabric выполните запрос к конечной точке хранилища или аналитики SQL.

    SELECT *
    FROM dbo.DimDate;
    
  4. Выберите вкладку "Сообщения" и запишите идентификатор инструкции для выполнения запроса. В редакторе запросов SQL program_nameDMS_user, который вы ранее настроили на использование пользовательского пула SQL MyContosoApp.

  5. Подождите 10–15 минут, чтобы аналитические сведения о запросах заполнились.

  6. Получите sql_pool_name и другие сведения, чтобы убедиться, что был использован правильный пользовательский пул SQL.

    SELECT distributed_statement_id, submit_time, 
           program_name, sql_pool_name, start_time, end_time
    FROM   queryinsights.exec_requests_history 
    WHERE  distributed_statement_id = '<Statement ID>';
    

Возврат конфигурации настраиваемых пулов SQL

Чтобы вернуть рабочую область в исходное состояние, измените свойство customSQLPoolsEnabledна False . Если вы хотите сохранить конфигурацию настраиваемых пулов SQL, необходимо передать имя каждого пула, как в списке customSQLPools .

В этом примере код Python отключает пользовательские пулы SQL и возвращается к конфигурации автономного управления рабочими нагрузками с использованием SELECT и непуловыми SELECT. Запрос PATCH выполняется с заданным customSQLPoolsEnabled свойством False.

import requests
import json
from notebookutils import mssparkutils

body = { 
  "customSQLPoolsEnabled": False, 
  "customSQLPools": [] 
}

# This will get the workspaceId where this notebook is running. 
# Update to the workspace_id (guid) if running this notebook outside of the workspace where the warehouse exists.
workspace_id = mssparkutils.runtime.context.get('currentWorkspaceId') 

url = f'https://api.fabric.microsoft.com/v1/workspaces/{workspace_id}/warehouses/sqlPoolsConfiguration?beta=true'
response = requests.request(method='patch', url=url, json=body, headers={'Authorization': f'Bearer {mssparkutils.credentials.getToken("pbi")}'})

if response.status_code == 200:
    print("SQL Custom Pools successfully disabled.")
else:
    print(response.text)