Sincronizar réplicas de expansão
Este artigo descreve como sincronizar uma réplica de expansão de modelo semântico usando o PowerShell na linha de comando ou por meio de um script.
Quando você estiver trabalhando com o modelo semântico de leitura/gravação primário e os usuários do modelo semântico estiverem usando as réplicas somente leitura, você poderá executar atualizações de metadados do modelo semântico sem afetá-los. No entanto, as alterações e atualizações ocorrem no modelo semântico primário. Para copiar as alterações para as réplicas somente leitura, a réplica em questão precisa estar sincronizada com o modelo semântico de leitura/gravação.
Por padrão, o parâmetro autoSyncReadOnlyReplicas
é configurado como true
: o Power BI sincroniza as réplicas automaticamente. Você pode desabilitar a sincronização automática configurando autoSyncReadOnlyReplicas
como false
. No entanto, você pode optar por sincronizar manualmente usando syncStatus
e as APIs REST sync
.
Para verificar o status de sincronização das suas réplicas, use a API REST SyncStatus
. Este artigo descreve os comandos do PowerShell para usar essa API.
Verificar status de sincronização de réplica
###
# 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 a API de status de sincronização retornar uma resposta vazia ou se scaleOutStatus estiver definido como "Unavailable", tente carregar a réplica de leitura/gravação do modelo semântico ou executar uma atualização no modelo para obter o status de sincronização mais recente.
Para saber mais, confira Conjuntos de dados: obter o status de sincronização da expansão da consulta dentro do grupo na referência da API REST do Power BI.
Desabilitar a sincronização de réplica automática
###
# 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
}
}
Executar uma sincronização de réplica manual (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
Para saber mais, confira Conjuntos de dados: disparar a sincronização da expansão da consulta dentro do grupo na referência da API REST do Power BI.
Executar uma sincronização de réplica manual (linha de comando)
Siga essas etapas para sincronizar as réplicas usando o Windows PowerShell:
Abra o PowerShell e faça logon no Power BI executando este comando:
Login-PowerBI
Obtenha suas IDs do espaço de trabalho executando o comando abaixo. Substitua
<WorkspaceName>
pelo nome do workspace.Get-PowerBIWorkspace -Name "<WorkspaceName>" # Replace <WorkspaceName> with the name of your workspace
Obtenha a ID do modelo semântico executando o comando abaixo. Substitua
<WorkspaceId>
pela ID do seu espaço de trabalho.Get-PowerBIDataset -WorkspaceId "<WorkspaceId>" # Replace <WorkspaceId> with the Id of your workspace
Verifique o status da sincronização do modelo semântico usando o comando abaixo. Substitua os valores de
<WorkspaceId>
e<DatasetId>
de acordo.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
Na saída, os valores
minActiveReadVersion
eminActiveReadTimestamp
se referem à réplica somente leitura. Os valorescommitVersion
ecommitTimestamp
referem-se ao modelo semântico de leitura/gravação. Uma diferença entre eles indica que a réplica somente leitura representa uma versão mais antiga do modelo semântico.Sincronize o modelo semântico de leitura-gravação e as réplicas somente leitura usando o comando a seguir. Substitua os valores de
<WorkspaceId>
e<DatasetId>
de acordo.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
As informações do status de sincronização na saída indicam que o modelo semântico de leitura-gravação e as réplicas somente leitura estão fora de sincronia, o que é esperado porque você acabou de disparar a sincronização.
Para verificar se a sincronização foi concluída, execute novamente o comando
syncStatus
na Etapa 4. Talvez seja necessário executar o comando algumas vezes, dependendo do período necessário para sincronizar as cópias do modelo semântico. Quando a sincronização for concluída, verifique os valores desyncStartTime
esyncEndTime
para ver quanto tempo a sincronização levou.
Para saber mais, confira Conjuntos de dados: disparar a sincronização da expansão da consulta dentro do grupo na referência da API REST do Power BI.