Sincronizzare le repliche con scale-out

Questo articolo descrive come sincronizzare le repliche con scale-out di un modello semantico usando PowerShell nella riga di comando o tramite script.

Quando si lavora con il modello semantico di lettura/scrittura primario e gli utenti del modello semantico usano le repliche di sola lettura, è possibile eseguire refresh e aggiornamenti dei metadati del modello semantico senza influire su di essi. Tuttavia, le modifiche apportate al modello semantico e i refresh avvengono nel modello semantico primario. Per copiare le modifiche apportate alle repliche di sola lettura, è necessario sincronizzarlo con il modello semantico di lettura/scrittura.

Per impostazione predefinita, il parametro autoSyncReadOnlyReplicas è impostato su true: Power BI sincronizza automaticamente le repliche. È possibile disabilitare la sincronizzazione automatica impostando autoSyncReadOnlyReplicas su false. È tuttavia possibile scegliere di eseguire la sincronizzazione manualmente usando le API REST syncStatus e sync.

Per controllare lo stato di sincronizzazione delle repliche, usare l'API REST SyncStatus. Questo articolo descrive i comandi di PowerShell per l'uso di questa API.

Controllare lo stato di sincronizzazione della replica

###
# 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
}

Se l'API dello stato di sincronizzazione restituisce una risposta vuota o se scaleOutStatus è impostato su "Non disponibile", provare a caricare la replica di lettura/scrittura del modello semantico o eseguire un refresh sul modello per ottenere lo stato di sincronizzazione più recente.

Per altre informazioni, vedere Set di dati - Ottenere lo stato della sincronizzazione con scale out delle query nel gruppo nella guida di riferimento all'API REST di Power BI.

Disabilitare la sincronizzazione automatica delle repliche

###
# 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
        }
     }

Eseguire una sincronizzazione manuale della replica (script)

###
# 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

Per altre informazioni, vedere Set di dati - Attivare la sincronizzazione con scale out delle query nel gruppo nella guida di riferimento all'API REST di Power BI.

Eseguire una sincronizzazione manuale della replica (riga di comando)

Seguire questa procedura per sincronizzare le repliche usando Windows PowerShell:

  1. Aprire PowerShell e accedere a Power BI eseguendo questo comando:

    Login-PowerBI
    
  2. Ottenere gli ID dell'area di lavoro eseguendo il comando seguente. Sostituire <WorkspaceName> con il nome dell'area di lavoro.

    Get-PowerBIWorkspace -Name "<WorkspaceName>"  # Replace <WorkspaceName> with the name of your workspace
    
  3. Ottenere l'ID del modello semantico eseguendo il comando seguente. Sostituire <WorkspaceId> con l'ID dell'area di lavoro.

    Get-PowerBIDataset -WorkspaceId "<WorkspaceId>"  # Replace <WorkspaceId> with the Id of your workspace
    
  4. Controllare lo stato di sincronizzazione del modello semantico usando il comando seguente. Sostituire i valori di <WorkspaceId> e <DatasetId> di conseguenza.

    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
    

    Nell'output, i valori di minActiveReadVersion e minActiveReadTimestamp fanno riferimento alla replica di sola lettura. I valori commitVersion e commitTimestamp fanno riferimento al modello semantico di lettura/scrittura. Una differenza tra di esse indica che la replica di sola lettura rappresenta una versione precedente del modello semantico.

  5. Sincronizzare il modello semantico di lettura/scrittura e le repliche di sola lettura usando il comando seguente. Sostituire i valori di <WorkspaceId> e <DatasetId> di conseguenza.

    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
    

    Le informazioni sullo stato di sincronizzazione nell'output indicano che il modello semantico di lettura/scrittura e le repliche di sola lettura non sono sincronizzate, il che è previsto perché è stata appena attivata la sincronizzazione.

  6. Per verificare che la sincronizzazione sia stata completata, eseguire di nuovo il comando syncStatus del passaggio 4. Potrebbe essere necessario eseguire il comando alcune volte a seconda del periodo di tempo necessario per sincronizzare le copie del modello semantico. Al termine della sincronizzazione, controllare i valori di syncStartTime e syncEndTime per verificare il tempo impiegato dalla sincronizzazione.

Per altre informazioni, vedere Set di dati - Attivare la sincronizzazione con scale out delle query nel gruppo nella guida di riferimento all'API REST di Power BI.