共用方式為


SQL Server 語言延伸模組中的擴充性架構

適用於:SQL Server 2019 (15.x) 和更新版本

了解用於「SQL Server 語言延伸模組」的擴充性架構,此架構可讓您在 SQL Server 中執行外部程式碼。 SQL Server 2019 (15.x) 和更新版本支援 Java、Python 和 R。 程式碼會在語言執行階段環境中執行,作為核心資料庫引擎的延伸模組。

背景

擴充性架構其用途是提供 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) 和程式庫特定邏輯,以載入解譯器和程式庫。

Launchpad

SQL Server Launchpad 是一項服務,可管理負責執行指令碼之外部處理序的存留時間、資源和安全性界限。 這如同全文索引及查詢服務啟動個別的主機來處理全文查詢。 Launchpad 服務只能啟動由 Microsoft 發佈的受信任啟動器,或由 Microsoft 認證,以符合效能和資源管理的需求。

SQL Server Launchpad 服務會在使用 AppContainers 執行隔離的 SQLRUserGroup 底下執行。

系統會針對您新增 SQL Server 機器語言延伸模組的每個資料庫引擎實例建立個別的 SQL Server Launchpad 服務。 每個資料庫引擎實例都有一個 Launchpad 服務,因此如果您有多個具有外部腳本支援的實例,則每個實例都有一個 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 會將發出遠端命令的使用者身分識別,對應到目前執行個體上的使用者身分識別,並使用該使用者的認證來執行 ODBC 命令。 執行此 ODBC 呼叫所需的連接字串可從用戶端程式碼取得。

  • 其他通訊協定

    可能需要以「區塊」運作或將資料傳輸回遠端用戶端的處理序也可以使用 XDF 檔案格式 \(英文\)。 實際的資料傳輸是透過已編碼的 Blob 來進行。