Архитектура расширяемости в расширениях языка SQL Server

Область применения: SQL Server 2019 (15.x) и более поздних версий

Сведения об архитектуре расширяемости, используемой для расширений языка SQL Server и позволяющей выполнять внешний код в SQL Server. Java, Python и R поддерживаются в SQL Server 2019 (15.x) и более поздних версиях. Код выполняется в языковой среде как расширение основного ядра СУБД.

Общие сведения

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

Любой поддерживаемый внешний язык может быть запущен путем вызова хранимой процедуры, после чего табличные результаты возвращаются непосредственно в SQL Server. Это упрощает использование внешнего языка из любого приложения, которое может отправлять SQL-запрос и обрабатывать результаты.

Схемы архитектуры

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

Архитектура компонентов в Windows:

Diagram of component architecture on Windows.

Архитектура компонентов в Linux:

Diagram of Component architecture on Linux.

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

Панель запуска

Панель запуска SQL Server — это служба, которая управляет временем жизни, ресурсами и границами безопасности внешнего процесса, отвечающего за выполнение скрипта. Это похоже на то, как служба полнотекстового индексирования и обработки запросов запускает отдельный узел для обработки полнотекстовых запросов. Служба панели запуска может запускать только доверенные средства запуска, опубликованные корпорацией Майкрософт, или сертифицированные корпорацией Майкрософт в качестве требований к производительности и управлению ресурсами.

Служба "Панель запуска SQL Server" работает в SQLRUserGroup, которая использует AppContainers для изоляции выполнения.

Для каждого экземпляра ядра СУБД создается отдельная служба панели запуска SQL Server, в которую добавляются расширения языка компьютера SQL Server. Существует одна служба панели запуска для каждого экземпляра ядра СУБД, поэтому если у вас есть несколько экземпляров с поддержкой внешних скриптов, у вас есть служба панели запуска для каждого из них. Экземпляр ядра СУБД привязан к созданной для нее службе панели запуска. Все вызовы внешнего скрипта в хранимой процедуре или T-SQL приводят к тому, что служба SQL Server вызывает службу панели запуска, созданную для одного экземпляра.

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

Каналы связи между компонентами

В этом разделе описаны протоколы связи между компонентами и платформами данных.

  • TCP/IP

    По умолчанию внутренние связи между SQL Server и спутником SQL используют TCP/IP.

  • ODBC

    Обмен данными между внешними клиентами обработки и анализом данных и удаленным экземпляром SQL Server использует ODBC. Учетная запись, отправляющая задания в рамках сценариев в SQL Server, должна иметь разрешения и для подключения к экземпляру, и для выполнения внешних скриптов.

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

    • Чтение данных, используемых заданием
    • Запись данных в таблицы. Например, при сохранении результатов в таблицу.
    • Создание объектов базы данных: например, при сохранении внешнего скрипта в рамках новой хранимой процедуры

    Когда SQL Server используется как контекст вычислений для выполняемого сценария, отправленного с удаленного клиента, а исполняемый сценарий должен получать данные из внешнего источника, для обратной записи используется ODBC. SQL Server сопоставляет идентификатор пользователя, вызывающего удаленную команду, с идентификатором пользователя в текущем экземпляре и выполняет команду ODBC, используя учетные данные этого пользователя. Строка подключения, необходимая для выполнения этого вызова ODBC, получается из клиентского кода.

  • Другие протоколы

    Процессы, которые могут потребоваться для работы в блоках или передачи данных обратно удаленному клиенту, также могут использовать формат файла Xdf-File. Фактический перенос данных осуществляется через закодированные BLOB-объекты.