Partager via


Synchroniser les répliques scale-out

Cet article explique comment synchroniser des réplicas de scale-out de modèle sémantique à l’aide de PowerShell sur la ligne de commande ou par script.

Lorsque vous utilisez le modèle sémantique principal en lecture/écriture et des utilisateurs du modèle sémantique utilisent des réplicas en lecture seule, vous pouvez effectuer des mises à jour et des actualisations des métadonnées du modèle sémantique sans les affecter. Toutefois, les modifications apportées au modèle sémantique et les actualisations se produisent dans le modèle sémantique principal. Pour copier les modifications apportées aux réplicas en lecture seule, ces modifications doivent être synchronisées avec le modèle sémantique en lecture/écriture.

Par défaut, le paramètre autoSyncReadOnlyReplicas est défini sur true – Power BI synchronise automatiquement les réplicas. Vous pouvez désactiver la synchronisation automatique en définissant autoSyncReadOnlyReplicas sur false. Vous pouvez toutefois choisir de synchroniser manuellement en utilisant syncStatus et des API REST sync.

Pour vérifier l’état de synchronisation de vos réplicas, utilisez l’API REST SyncStatus. Cet article décrit les commandes PowerShell pour l’utilisation de cette API.

Vérifier l’état de synchronisation des réplicas

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

Si l’API d’état de synchronisation retourne une réponse vide ou si scaleOutStatus est défini sur « Indisponible », essayez de charger le réplica en lecture-écriture du modèle sémantique ou d’effectuer une actualisation sur le modèle pour obtenir l’état de synchronisation le plus récent.

Pour plus d’informations, consultez Jeux de données – Obtenir l’état de synchronisation du Scale-out de requête en groupe dans la référence de l’API REST Power BI.

Désactiver la synchronisation automatique des réplicas

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

Effectuer une synchronisation manuelle des réplicas (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

Pour plus d’informations, consultez Jeux de données – Déclencher la synchronisation d’un Scale-out de requête en groupe dans la référence de l’API REST Power BI.

Effectuer une synchronisation manuelle des réplicas (ligne de commande)

Procédez comme suit pour synchroniser les réplicas à l’aide de Windows PowerShell :

  1. Ouvrez PowerShell et connectez-vous à Power BI en exécutant cette commande :

    Login-PowerBI
    
  2. Obtenez les ID de votre espace de travail en exécutant la commande ci-dessous. Remplacez <WorkspaceName> par le nom de votre point de terminaison.

    Get-PowerBIWorkspace -Name "<WorkspaceName>"  # Replace <WorkspaceName> with the name of your workspace
    
  3. Obtenez l’identifiant du modèle sémantique en exécutant la commande ci-dessous. Remplacez <WorkspaceId> par l’ID de votre espace de travail.

    Get-PowerBIDataset -WorkspaceId "<WorkspaceId>"  # Replace <WorkspaceId> with the Id of your workspace
    
  4. Vérifiez l’état de synchronisation de votre modèle sémantique en utilisant la commande ci-dessous. Remplacez les valeurs de <WorkspaceId> et <DatasetId> en conséquence.

    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
    

    Dans la sortie, les valeurs minActiveReadVersion et minActiveReadTimestamp font référence à la réplica en lecture seule. Les valeurs commitVersion et commitTimestamp font référence à la copie du modèle sémantique en lecture/écriture. Une différence entre eux indique que le réplica en lecture seule représente une version antérieure du modèle sémantique.

  5. Synchronisez le modèle sémantique en lecture/écriture et les réplicas en lecture seule à l’aide de la commande suivante. Remplacez les valeurs de <WorkspaceId> et <DatasetId> en conséquence.

    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
    

    Les informations sur l’état de synchronisation de la sortie indiquent que le modèle sémantique en lecture/écriture et les réplicas en lecture seule ne sont pas synchronisés, ce qui est attendu, car vous venez de déclencher la synchronisation.

  6. Pour vérifier que la synchronisation est terminée, exécutez à nouveau la commande syncStatus à l’étape 4. Il est possible que vous deviez exécuter la commande plusieurs fois, en fonction de la durée nécessaire à la synchronisation des copies du modèle sémantique. Une fois la synchronisation terminée, vérifiez les valeurs de syncStartTime et syncEndTime pour voir la durée de la synchronisation.

Pour plus d’informations, consultez Jeux de données – Déclencher la synchronisation d’un Scale-out de requête en groupe dans la référence de l’API REST Power BI.