分享方式:


同步處理擴增複本

本文說明如何在命令列上或透過指令碼使用 PowerShell 同步處理語意模型擴增複本。

當您使用主要讀寫語意模型,且語意模型使用者正在使用唯讀複本時,您可以執行語意模型中繼資料更新和重新整理,而不會影響它們。 不過,對語意模型模型的變更和重新整理會在主要語意模型中進行。 若要將變更複製到唯讀複本,它必須與讀寫語意模型同步處理。

根據預設,autoSyncReadOnlyReplicas 參數會設定為 true - Power BI 會自動同步處理複本。 您可以將 autoSyncReadOnlyReplicas 設定為 false 來停用自動同步處理。 不過,您可以選擇使用 syncStatussync REST API 來手動同步處理。

若要檢查複本的同步處理狀態,請使用 SyncStatus REST API。 本文說明使用此 API 的 PowerShell 命令。

檢查複本同步處理狀態

###
# Check the scale-out replica sync status
###
Login-PowerBI | Out-Null

$workspaceId = '<enter workspaceId>'

$datasetId = Get-PowerBIDataset -WorkspaceId $workspaceId `
    | Where{$_.Name -match "<enter semantic model name>"} `
    | Select-Object -ExpandProperty Id -First 1 `
    | ForEach-Object {$_.Guid}

$response = Invoke-PowerBIRestMethod -Url "groups/$workspaceId/datasets/$datasetId/queryScaleOut/syncStatus" -Method Get | ConvertFrom-Json 
$response | Format-List

if ($response.commitVersion -eq $response.minActiveReadVersion)
{
    Write-Host "Semantic model read-write and read-only replicas are in sync."
}
else
{
    Write-Host "Semantic model read-write and read-only replicas are not in sync." -ForegroundColor Red
}

如果同步處理狀態 API 傳回空的回應,或如果 scaleOutStatus 設為 [無法使用],請嘗試載入語意模型的讀寫複本,或對模型執行重新整理以取得最新的同步處理狀態。

若要深入了解,請參閱 Power BI REST API 參考中的資料集 - 取得群組中的查詢擴增同步處理狀態

停用自動複本同步處理

###
# Disable automatic scale-out replica sync
###
Login-PowerBI | Out-Null

$workspaceId = '<enter workspaceId>'

$datasetId = Get-PowerBIDataset -WorkspaceId $workspaceId `
    | Where{$_.Name -match "<enter semantic model name>"} `
    | Select-Object -ExpandProperty Id -First 1 `
    | ForEach-Object {$_.Guid}

Invoke-PowerBIRestMethod -Url "groups/$workspaceId/datasets/$datasetId" `
    -Method Patch -Body '{ "queryScaleOutSettings": { "autoSyncReadOnlyReplicas": false }}'

Invoke-PowerBIRestMethod -Url "groups/$workspaceId/datasets/$datasetId" -Method Get `
    | ConvertFrom-Json | Select-Object -ExpandProperty queryScaleOutSettings `
    | ForEach { 
        if($_.autoSyncReadOnlyReplicas -eq $false)
        { 
            Write-Host "Success! Automatic replica synchronization has been disabled."
        } else
        {
            Write-Host "Something went wrong! Automatic replica synchronization is still enabled." -ForegroundColor Red
        }
     }

執行手動複本同步處理 (指令碼)

###
# Perform a manual replica sync
###
Login-PowerBI | Out-Null

$workspaceId = '<enter workspaceId>'

$datasetId = Get-PowerBIDataset -WorkspaceId $workspaceId `
    | Where{$_.Name -match "<enter semantic model name>"} `
    | Select-Object -ExpandProperty Id -First 1 `
    | ForEach-Object {$_.Guid}

$response = Invoke-PowerBIRestMethod -Url "groups/$workspaceId/datasets/$datasetId/queryScaleOut/sync" -Method Post -Body "" | ConvertFrom-Json

Write-Host 'Synchronizing the scale-out replicas...' -NoNewLine

while ($response.commitVersion -ne $response.minActiveReadVersion)
{
    Write-Host '.' -NoNewLine
    Start-Sleep -Seconds 10

    $response = Invoke-PowerBIRestMethod -Url "groups/$workspaceId/datasets/$datasetId/queryScaleOut/syncStatus" -Method Get | ConvertFrom-Json 
}

Write-Host 'Completed'
$response

若要深入了解,請參閱 Power BI REST API 參考中的資料集 - 觸發群組中的查詢擴增同步處理

執行手動複本同步處理 (命令列)

請依照下列步驟使用 Windows PowerShell 同步處理複本:

  1. 執行下列命令以開啟 PowerShell 並登入 Power BI:

    Login-PowerBI
    
  2. 執行下列命令以取得您的工作區識別碼。 將 <WorkspaceName> 換成您的工作區名稱。

    Get-PowerBIWorkspace -Name "<WorkspaceName>"  # Replace <WorkspaceName> with the name of your workspace
    
  3. 執行下列命令以取得語意模型識別碼。 以您的工作區的識別碼取代 <WorkspaceId>

    Get-PowerBIDataset -WorkspaceId "<WorkspaceId>"  # Replace <WorkspaceId> with the Id of your workspace
    
  4. 使用下列命令來檢查語意模型的同步處理狀態。 請據以取代 <WorkspaceId><DatasetId> 的值。

    Invoke-PowerBIRestMethod -Url 'groups/<WorkspaceId>/datasets/<DatasetId>/queryScaleOut/syncStatus' -Method Get | ConvertFrom-Json | Format-List  # Replace <WorkspaceId> with the Id of your workspace and <DatasetId> with the Id of your semantic model
    

    在輸出中,minActiveReadVersionminActiveReadTimestamp 值會參考唯讀複本。 commitVersioncommitTimestamp 值會參考讀寫語意模型。 它們之間的差異指示唯讀複本代表舊版的語意模型。

  5. 使用下列命令來同步處理讀寫語意模型和唯讀複本。 請據以取代 <WorkspaceId><DatasetId> 的值。

    Invoke-PowerBIRestMethod -Url 'groups/<WorkspaceId>/datasets/<DatasetId>/queryScaleOut/sync' -Method Post -Body "" | ConvertFrom-Json | Format-List  # Replace <WorkspaceId> with the Id of your workspace and <DatasetId> with the Id of your semantic model
    

    輸出中的同步處理狀態資訊指示讀寫語意模型和唯讀複本不同步,這是預期的,因為您剛剛觸發了同步處理。

  6. 若要確認同步處理已完成,請再次執行步驟 4 中的 syncStatus 命令。 視同步處理語意模型複本所需的時間長度而定,您可能需要執行該命令數次。 同步處理完成時,請檢查 syncStartTimesyncEndTime 的值以查看同步處理花費了多長時間。

若要深入了解,請參閱 Power BI REST API 參考中的資料集 - 觸發群組中的查詢擴增同步處理