Udostępnij za pośrednictwem


Synchronizowanie replik skalowanych w poziomie

W tym artykule opisano sposób synchronizowania replik modelu semantycznego skalowalnego w poziomie przy użyciu programu PowerShell w wierszu polecenia lub za pomocą skryptu.

Podczas pracy z podstawowym modelem semantycznym odczytu i zapisu, a użytkownicy modelu semantycznego korzystają z replik tylko do odczytu, można wykonywać aktualizacje i odświeżanie semantycznych metadanych modelu bez wpływu na nie. Jednak zmiany modelu semantycznego i odświeżania mają miejsce w podstawowym modelu semantycznym. Aby skopiować zmiany do replik tylko do odczytu, należy ją zsynchronizować z modelem semantycznym odczytu i zapisu.

Domyślnie autoSyncReadOnlyReplicas parametr jest ustawiony na true — usługa Power BI automatycznie synchronizuje repliki. Automatyczną synchronizację można wyłączyć, ustawiając wartość autoSyncReadOnlyReplicas false. Można jednak wybrać ręczną synchronizację przy użyciu syncStatus interfejsów API REST i sync .

Aby sprawdzić stan synchronizacji replik, użyj interfejsu SyncStatus API REST. W tym artykule opisano polecenia programu PowerShell dotyczące korzystania z tego interfejsu API.

Sprawdzanie stanu synchronizacji repliki

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

Jeśli interfejs API stanu synchronizacji zwraca pustą odpowiedź lub jeśli parametr scaleOutStatus ma wartość "Niedostępne", spróbuj załadować replikę odczytu i zapisu modelu semantycznego lub odświeżyć model, aby uzyskać najnowszy stan synchronizacji.

Aby dowiedzieć się więcej, zobacz Zestawy danych — uzyskiwanie stanu synchronizacji skalowania w poziomie w grupie w dokumentacji interfejsu API REST usługi Power BI.

Wyłączanie automatycznej synchronizacji replik

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

Wykonywanie ręcznej synchronizacji repliki (skrypt)

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

Aby dowiedzieć się więcej, zobacz Zestawy danych — wyzwalanie synchronizacji w poziomie zapytań w poziomie w grupie w dokumentacji interfejsu API REST usługi Power BI.

Wykonywanie ręcznej synchronizacji repliki (wiersz polecenia)

Wykonaj następujące kroki, aby zsynchronizować repliki przy użyciu programu Windows PowerShell:

  1. Otwórz program PowerShell i zaloguj się do usługi Power BI, uruchamiając następujące polecenie:

    Login-PowerBI
    
  2. Pobierz identyfikatory obszaru roboczego, uruchamiając poniższe polecenie. Zastąp <WorkspaceName> ciąg nazwą obszaru roboczego.

    Get-PowerBIWorkspace -Name "<WorkspaceName>"  # Replace <WorkspaceName> with the name of your workspace
    
  3. Pobierz identyfikator modelu semantycznego, uruchamiając poniższe polecenie. Zastąp <WorkspaceId> ciąg identyfikatorem obszaru roboczego.

    Get-PowerBIDataset -WorkspaceId "<WorkspaceId>"  # Replace <WorkspaceId> with the Id of your workspace
    
  4. Sprawdź stan synchronizacji modelu semantycznego, używając poniższego polecenia. Zastąp odpowiednio wartości <WorkspaceId> i <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
    

    W danych wyjściowych minActiveReadVersion wartości i minActiveReadTimestamp odwołują się do repliki tylko do odczytu. Wartości commitVersion i commitTimestamp odwołują się do modelu semantycznego odczytu i zapisu. Różnica między nimi wskazuje, że replika tylko do odczytu reprezentuje starszą wersję modelu semantycznego.

  5. Zsynchronizuj model semantyczny odczytu i zapisu i repliki tylko do odczytu przy użyciu następującego polecenia. Zastąp odpowiednio wartości <WorkspaceId> i <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
    

    Informacje o stanie synchronizacji w danych wyjściowych wskazują model semantyczny odczytu i zapisu, a repliki tylko do odczytu nie są zsynchronizowane, co jest oczekiwane, ponieważ właśnie wyzwolono synchronizację.

  6. Aby sprawdzić, czy synchronizacja została ukończona, uruchom syncStatus ponownie polecenie w kroku 4 . Może być konieczne uruchomienie polecenia kilka razy w zależności od czasu wymaganego do zsynchronizowania kopii modelu semantycznego. Po zakończeniu synchronizacji sprawdź wartości syncStartTime i syncEndTime sprawdź, jak długo trwała synchronizacja.

Aby dowiedzieć się więcej, zobacz Zestawy danych — wyzwalanie synchronizacji w poziomie zapytań w poziomie w grupie w dokumentacji interfejsu API REST usługi Power BI.