Perché la vista materializzata non si aggiorna per il mio cluster Amazon Redshift?

Ultimo aggiornamento: 26/10/2022

La vista materializzata non si aggiorna per il mio cluster Amazon Redshift. Perché succede e come posso aggiornare la mia vista materializzata?

Breve descrizione

I seguenti scenari possono impedire l'aggiornamento di una vista materializzata in Amazon Redshift o richiedere molto tempo per il completamento:

  • REFRESH MATERIALIZED VIEW non va a buon fine con errore di autorizzazione
  • Viene visualizzato l'errore: Invalid operation: Materialized view mv_name could not be refreshed as a base table changed physically due to vacuum/truncate concurrently (Operazione non valida: la vista materializzata mv_name non può essere aggiornata come tabella base modificata fisicamente a causa di un vuoto/troncamento simultaneo). Prova di nuovo;
  • REFRESH MATERIALIZED VIEW non è aggiornabile
  • REFRESH MATERIALIZED VIEW è stato inviato ed è in esecuzione da molto tempo
  • L'attività di aggiornamento non viene mostrata in un aggiornamento automatico a causa di un carico di lavoro attivo

Risoluzione

REFRESH MATERIALIZED VIEW non va a buon fine con errore di autorizzazione

È necessario essere il proprietario per eseguire un'operazione REFRESH MATERIALIZED VIEW su una vista materializzata. Inoltre, è necessario disporre dei seguenti privilegi:

  • Privilegio SELECT sulle tabelle base sottostanti
  • Privilegio USAGE sullo schema

Se la vista materializzata è un ricalcolo completo anziché un aggiornamento incrementale, è necessario disporre anche del privilegio CREATE sullo schema. Per definire i privilegi, consulta GRANT. Per ulteriori informazioni, consulta Autorefreshing a materialized view (Aggiornamento automatico di una vista materializzata).

Operazione non valida: la vista materializzata mv_name non può essere aggiornata come tabella base modificata fisicamente a causa di un vuoto/troncamento simultaneo. Prova di nuovo;

L'errore si verifica quando REFRESH MATERIALIZED VIEW e VACUUM vengono inviati per essere eseguiti contemporaneamente sulla tabella di base. Al termine dell'operazione, è possibile inviare nuovamente REFRESH MATERIALIZED VIEW.

REFRESH MATERIALIZED VIEW non è aggiornabile

Le viste materializzate non aggiornabili possono essere causate da operazioni che:

  • Rinominano o eliminano una colonna.
  • Cambiano il tipo di colonna.
  • Modificano il nome di una tabella o di uno schema di base

Nota: è possibile eseguire query sulle viste materializzate in questa condizione, ma non possono essere aggiornate. I vincoli precedenti si applicano anche se la colonna non viene utilizzata nella vista materializzata.

Per verificare se i dati nella vista materializzata sono obsoleti e le informazioni sullo stato della vista materializzata, utilizza STV_MV_INFO. Per visualizzare l'attività di aggiornamento della vista materializzata, utilizza SVL_MV_REFRESH_STATUS. In questo stato non aggiornabile della vista materializzata, è necessario eliminare e ricreare la vista materializzata per mantenerla aggiornata.

Di seguito sono riportati alcuni esempi di messaggi di errore che potresti visualizzare:

```Detail: Procedure <mv_sp_*****_2_1>  does not exist```
```column <column name> does not exist```
```DETAIL:  schema "<schema name>" does not exist ;```
```ERROR: Materialized view <mv namme> is unrefreshable as a base table was renamed.```

REFRESH MATERIALIZED VIEW è stato inviato ed è in esecuzione da molto tempo

REFRESH MATERIALIZED VIEW funziona come una normale query eseguita sul cluster. Per confermare che la query è in esecuzione, procedi come segue:

  • Per visualizzare le query attive in esecuzione sui dati, utilizza STV_INFLIGHT.
  • Per registrare lo stato corrente delle query in base alla gestione del carico di lavoro (WLM), utilizza STV_WLM_QUERY_STATE.
  • Per trovare informazioni sulle query e sui passaggi delle query che sono attivamente in esecuzione sui nodi di calcolo, utilizza STV_EXEC_STATE.

Le prestazioni dell'operazione REFRESH MATERIALIZED VIEW sono soggette ai seguenti fattori:

  • Blocchi delle tabelle: per visualizzare gli aggiornamenti correnti sulle tabelle del database, consulta STV_LOCKS.
  • Risorse allocate: per visualizzare la configurazione della classe di servizio per WLM, consulta STV_WLM_SERVICE_CLASS_CONFIG.
  • Tipo di aggiornamento: aggiornamento incrementale o completo. Per visualizzare il tipo di aggiornamento subito dalla vista materializzata, consulta SVL_MV_REFRESH_STATUS.

Se le prestazioni di REFRESH MATERIALIZED VIEW sono lente, consulta Improve query performance (Miglioramento delle prestazioni delle query).

L'attività di aggiornamento non viene mostrata in un aggiornamento automatico a causa di un carico di lavoro attivo

Amazon Redshift dà priorità ai carichi di lavoro rispetto all'aggiornamento automatico. Questa prioritizzazione potrebbe interrompere l'aggiornamento automatico per preservare le prestazioni del carico di lavoro e ritardare l'aggiornamento di alcune viste materializzate. In alcuni casi, le viste materializzate potrebbero richiedere un comportamento di aggiornamento più deterministico. Per creare un comportamento di aggiornamento più deterministico, utilizza quanto segue:

  • Aggiornamento manuale come descritto in REFRESH MATERIALIZED VIEW
  • Aggiornamento pianificato tramite le operazioni API del sistema di pianificazione di Amazon Redshift o la console

Per ulteriori informazioni, consulta Autorefreshing a materialized view (Aggiornamento automatico di una vista materializzata).


Questo articolo è stato utile?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?