使用分散式查詢的跨租用戶報告

適用於:Azure SQL Database

在本教學課程中,您會跨整個租用戶資料庫集執行分散式查詢,以進行報告。 這些查詢可以擷取隱藏在 Wingtip Tickets SaaS 租用戶的日常操作資料中的深入解析。 為此,您可以將額外的報表資料庫部署至目錄伺服器,並使用彈性查詢來啟用分散式查詢。

您會在本教學課程中學到:

  • 如何部署報表資料庫
  • 如何跨所有租用戶資料庫執行分散式查詢
  • 每個資料庫中的全域檢視如何跨租用戶啟用有效查詢

若要完成本教學課程,請確定已完成下列必要條件:

跨租用戶報告模式

cross-tenant distributed query pattern

SaaS 應用程式的其中一種應用情形是使用儲存在雲端的大量租用戶資料,以深入了解應用程式的操作和使用方式。 這些深入解析可以引導應用程式和服務中的功能開發、使用性改進及其他投資。

在單一多租用戶資料庫中存取此資料很容易,但當此資料大規模分散到可能數千個資料庫時,則並不輕鬆。 其中一種方法是使用彈性查詢,其可跨一組具有通用結構描述的分散式資料庫進行查詢。 這些資料庫可以跨不同的資源群組和訂用帳戶散發,但需要共用一般登入。 彈性查詢會使用單一前端資料庫,其中會定義外部資料表,以鏡像分散式 (租用戶) 資料庫中的資料表或檢視。 提交至此前端資料庫的查詢會進行編譯,以產生分散式查詢計畫,並視需要將部分查詢向下推送至租用戶資料庫。 彈性查詢會使用目錄資料庫中的分區對應來判斷所有租用戶資料庫的位置。 前端資料庫的設定和查詢是使用標準 Transact-SQL 直接作業,並支援從 Power BI 和 Excel 等工具進行查詢。

彈性查詢透過將查詢分散到租用戶資料庫,可立即深入解析即時生產資料。 當彈性查詢從許多資料庫提取資料時,查詢延遲可能會高於提交至單一多租用戶資料庫的對等查詢。 設計查詢,以將傳回至前端資料庫的資料降到最低。 彈性查詢通常最適合用來查詢少量即時資料,而不是建置常用或複雜的分析查詢或報表。 如果查詢效能不佳,請查看執行計畫,了解查詢的哪個部分會向下推送至遠端資料庫,以及傳回多少資料。 需要複雜彙總或分析處理的查詢,可藉由將租用戶資料擷取至針對分析查詢最佳化的資料庫或資料倉儲,獲得更好的處理效果。 租用戶分析教學課程說明了此模式。

取得 Wingtip Tickets SaaS Database Per Tenant 應用程式指令碼

可在 WingtipTicketsSaaS-DbPerTenant GitHub 存放庫中使用 Wingtip Tickets SaaS 多租用戶資料庫指令碼和應用程式來源程式碼。 關於下載和解除封鎖 Wingtip Tickets SaaS 指令碼的步驟,請參閱一般指引

建立票證銷售資料

若要針對更有趣的資料集執行查詢,請透過執行票證產生器來建立票證銷售資料。

  1. PowerShell ISE 中,開啟 ...\Learning Modules\Operational Analytics\Adhoc Reporting\Demo-AdhocReporting.ps1 指令碼,並設定下列值:
    • $DemoScenario = 1,購買各地事件的票證
  2. F5 以執行指令碼並產生票證銷售。 當指令碼執行時,請繼續進行本教學課程中的步驟。 票證資料會在 [執行特定分散式查詢] 區段中查詢,因此請等候票證產生器完成。

探索全域檢視

在 Wingtip Tickets SaaS Database Per Tenant 應用程式中,會為每個租用戶提供資料庫。 因此,資料庫資料表中包含的資料會限定為單一租用戶的觀點。 不過,在跨所有資料庫進行查詢時,彈性查詢會將資料視為租用戶分區化之單一邏輯資料庫的一部分,這點非常重要。

為了模擬此模式,會將一組全域檢視新增至租用戶資料庫,將租用戶 ID 投射到全域查詢的每個資料表中。 例如,VenueEvents 檢視會將計算的 VenueId 新增至從Events 資料表投射的資料行。 同樣地,VenueTicketPurchasesVenueTickets 檢視會新增從其各自的別資料表投影的計算 VenueId 資料行。 彈性查詢會使用這些檢視來平行處理查詢,並在 VenueId 資料行存在時,將其向下推送至適當的遠端租用戶資料庫。 這可大幅減少傳回的資料量,並導致許多查詢的效能大幅提升。 這些全域檢視已在所有租用戶資料庫中預先建立。

  1. 開啟 SSMS 並連線至 tenants1-<USER> 伺服器

  2. 展開 [資料庫],以滑鼠右鍵按一下 contosoconcerthall 資料連線,然後選取 [新增查詢]

  3. 執行下列查詢來探索單一租用戶資料表與全域檢視之間的差異:

    -- The base Venue table, that has no VenueId associated.
    SELECT * FROM Venue
    
    -- Notice the plural name 'Venues'. This view projects a VenueId column.
    SELECT * FROM Venues
    
    -- The base Events table, which has no VenueId column.
    SELECT * FROM Events
    
    -- This view projects the VenueId retrieved from the Venues table.
    SELECT * FROM VenueEvents
    

在這些檢視中,VenueId 會計算為 Venue 名稱的雜湊,但任何方法都可以用來導入唯一值。 這種方法類似於計算租用戶鑰匙以用於目錄中的方式。

若要檢查 [場地] 檢視的定義:

  1. 在 [物件總管] 中,展開 contosoconcerthall>[檢視]

    Screenshot shows the contents of the Views node, including four types of Venue d b o.

  2. 以滑鼠右鍵按一下 dbo.Venues

  3. 選取 [指令碼檢視作為]>[建立至]>[新查詢編輯器視窗]

編寫任何其他 Venue 檢視的指令碼,以查看其如何新增 VenueId

部署用於分散式查詢的資料庫

此練習會部署 adhocreporting 資料庫。 這是前端資料庫,其中包含用於查詢所有租用戶資料庫的結構描述。 資料庫會部署到現有的目錄伺服器,這是用於範例應用程式中所有管理相關資料庫的伺服器。

  1. PowerShell ISE 中,開啟 ...\Learning Modules\Operational Analytics\Adhoc Reporting\Demo-AdhocReporting.ps1

  2. 設定 $DemoScenario = 2[部署特定報表資料庫]。

  3. F5 以執行指令碼並建立 adhocreporting 資料庫。

在下一節中,您會將結構描述新增至資料庫,以便用來執行分散式查詢。

設定用於執行分散式查詢的「前端」資料庫

本練習會將結構描述 (外部資料來源和外部資料表定義) 新增至 adhocreporting 資料庫,以在所有租用戶資料庫上啟用查詢。

  1. 開啟 SQL Server Management Studio,並連線到您在上一個步驟中建立的臨機操作報表資料庫。 資料庫的名稱為 adhocreporting

  2. 在 SSMS 中,開啟 ...\Learning Modules\Operational Analytics\Adhoc Reporting\ Initialize-AdhocReportingDB.sql

  3. 檢閱 SQL 指令碼並注意:

    彈性查詢會使用資料庫範圍的認證來存取每個租用戶資料庫。 此認證需要可在所有資料庫中使用,而且通常應授與啟用這些查詢所需的最低權限。

    create credential

    使用目錄資料庫做為外部資料來源,查詢會在查詢執行時散發到目錄中註冊的所有資料庫。 由於每個部署的伺服器名稱不同,此指令碼會從執行指令碼的目前伺服器 (@@servername) 取得目錄資料庫的位置。

    create external data source

    參考上一節中所述並使用 DISTRIBUTION = SHARDED(VenueId) 定義之全域檢視的外部資料表。 由於每個 VenueId 都會對應至個別資料庫,因此這可改善許多案例的效能,如下一節所示。

    create external tables

    建立和填入的本機資料表 VenueTypes。 此參考資料表在所有租用戶資料庫中通用,因此可以在這裡以本機資料表表示,並填入通用資料。 對於某些查詢,在前端資料庫中定義此資料表可以減少需要移至前端資料庫的資料量。

    create table

    如果您以這種方式加入參考資料表,請務必在更新租用戶資料庫時更新資料表結構描述和資料。

  4. F5 執行指令碼,並初始化 adhocreporting 資料庫。

現在您可以執行分散式查詢,並收集所有租用戶的深入解析!

執行分散式查詢

現在已設定 adhocreporting 資料庫,請執行一些分散式查詢。 包含執行計畫,以進一步了解查詢處理發生的位置。

檢查執行計畫時,將滑鼠停留在計畫圖示上以取得詳細資料。

請務必注意,當定義外部資料來源時,設定 DISTRIBUTION = SHARDED(VenueId) 可改善許多案例的效能。 由於每個 VenueId 會對應至個別資料庫,因此可以輕鬆地從遠端執行篩選,只傳回所需的資料。

  1. 在 SSMS 中,開啟 ...\Learning Modules\Operational Analytics\Adhoc Reporting\Demo-AdhocReportingQueries.sql

  2. 請確定您已連線到 adhocreporting 資料庫。

  3. 選取 [查詢] 功能表,然後按下 [包括實際執行計畫]

  4. 反白顯示 [目前註冊的地點?] 查詢,然後按 F5

    此查詢會傳回整個場地清單,說明如何快速且輕鬆地查詢所有租用戶,並從每個租用戶傳回資料。

    檢查計畫,並看到整個成本是在遠端查詢中。每個租用戶資料庫會從遠端執行查詢,並將其場地資訊傳回至前端資料庫。

    SELECT * FROM dbo.Venues

  5. 選取下一個查詢,然後按 F5

    此查詢會聯結租用戶資料庫和本機 VenueTypes 資料表的資料 (本機,因為它是 adhocreporting 資料庫中的資料表)。

    檢查計畫,並看到大部分的成本是遠端查詢。 每個租用戶資料庫都會傳回其場地資訊,並使用本機 VenueTypes 資料表執行本機聯結,以顯示自訂名稱。

    Join on remote and local data

  6. 現在選取 [票證最多的是哪一天?] 查詢,然後按 F5

    此查詢會執行更複雜的聯結和彙總。 大部分的處理都是從遠端進行。 只有單一資料列,包含每個場地每天的門票銷售計數,會傳回前端資料庫。

    query

下一步

在本教學課程中,您已了解如何:

  • 跨所有租用戶資料庫執行分散式查詢
  • 部署報表資料庫,並定義執行分散式查詢所需的結構描述。

現在請嘗試租用戶分析教學課程,探索將資料擷取至個別的分析資料庫,以進行更複雜的分析處理。

其他資源