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 Launchpad は、スクリプトの実行を担当する外部プロセスのライフタイム、リソース、およびセキュリティ境界を管理するサービスです。 これは、フルテキスト インデックス作成およびクエリ サービスがフルテキスト クエリを処理する際に別のホストを起動する方法と似ています。 Launchpad サービスは、Microsoft によって発行された信頼できるランチャー、またはパフォーマンスとリソース管理の要件を満たすものとして Microsoft によって認定された信頼できるランチャーのみを起動できます。

SQL Server Launchpad サービスは、実行の分離のために、AppContainers を使用する SQLRUserGroup 以下で実行されます。

SQL Server マシン言語拡張機能を追加するデータベース エンジン インスタンスごとに、個別の SQL Server Launchpad サービスが作成されます。 データベース エンジン インスタンスごとに Launchpad サービスが 1 つあるため、外部スクリプトをサポートするインスタンスが複数ある場合は、インスタンスごとに Launchpad サービスが存在します。 データベース エンジン インスタンスは、それに対して作成されたスタート パッド サービスにバインドされます。 ストアド プロシージャまたは T-SQL 内の外部スクリプトをすべて呼び出すと、SQL Server サービスが同じインスタンス用に作成された Launchpad サービスを呼び出します。

サポートされている特定の言語でタスクを実行するために、スタート パッドにより、セキュリティで保護されたワーカー アカウントがプールから取得され、外部ランタイムを管理するサテライト プロセスが開始されます。 各サテライト プロセスは、Launchpad のユーザー アカウントを継承し、スクリプトの実行中にそのワーカー アカウントを使用します。 スクリプトで並列プロセスを使用する場合、それらは同じ単一のワーカー アカウントの下で作成されます。

コンポーネント間の通信チャネル

このセクションでは、コンポーネント間およびデータ プラットフォーム間の通信プロトコルについて説明します。

  • TCP/IP

    既定では、SQL Server と SQL サテライトの間の内部通信には TCP/IP が使用されます。

  • ODBC

    外部データ サイエンス クライアントとリモート SQL Server インスタンス間の通信には ODBC が使用されます。 SQL Server にスクリプト ジョブを送信するアカウントには、インスタンスへの接続権限と、外部スクリプトの実行権限の両方が付与されている必要があります。

    また、タスクによっては、アカウントに次の権限が必要になる場合があります。

    • ジョブによって使用されるデータを読み取る
    • テーブルへのデータの書き込み (たとえば、テーブルに結果を保存する場合)
    • データベース オブジェクトの作成 (たとえば、外部スクリプトを新しいストアド プロシージャの一部として保存する場合)

    SQL Server が、リモート クライアントから実行されるスクリプトの計算コンテキストとして使用され、実行可能ファイルによって外部ソースからデータを取得する必要がある場合は、ODBC が書き戻しに使用されます。 SQL Server により、リモート コマンドを発行しているユーザーの ID が、現在のインスタンス上のユーザーの ID にマップされ、そのユーザーの資格情報を使用して ODBC コマンドが実行されます。 この ODBC 呼び出しを実行するために必要な接続文字列は、クライアント コードから取得されます。

  • その他のプロトコル

    "チャンク" で動作するか、またはリモート クライアントにデータを転送する必要のあるプロセスでは、XDF ファイル形式も使用できます。 実際のデータ転送は、エンコードされた BLOB を使用して行われます。