Loading
Automazione dei processi aziendali
Sommario
Seleziona filtri

          Nessun risultato
          Nessun risultato
          Ecco alcuni suggerimenti per la ricerca

          Controlla l'ortografia delle parole chiave.
          Usa termini di ricerca più generici.
          Seleziona meno filtri per ampliare la tua ricerca.

          Cerca in tutta la Guida di Salesforce
          Risoluzione degli errori Apex_CPU_TIME_LIMIT_EXCEEDED nei flussi

          Risoluzione degli errori Apex_CPU_TIME_LIMIT_EXCEEDED nei flussi

          Quando una transazione consuma troppo tempo per la CPU, Salesforce genera un errore Apex_CPU_TIME_LIMIT_EXCEEDED. I flussi condividono questo limite con tutte le altre automazioni della stessa transazione, inclusi i trigger Apex.

          Versioni (Edition) richieste

          Visualizzare le versioni supportate.
          Autorizzazioni utente necessarie
          Per aprire, modificare, creare, attivare o disattivare un flusso utilizzando tutti i tipi di flusso, gli elementi e le funzioni disponibili in Flow Builder, inclusi Einstein e Agentforce per Flusso: Gestisci flusso
          Per visualizzare Imposta e accedere ai registri debug: Visualizza impostazione e configurazione
          Per visualizzare, conservare ed eliminare i registri debug e impostare i flag di traccia: Visualizza tutti i dati

          Salesforce impone un limite di tempo per una singola CPU di 10.000 millisecondi (10 secondi) per transazione sincrona. Ogni automazione di quella transazione, ad esempio trigger Apex, flussi, regole di flusso di lavoro e processi, attinge dallo stesso budget. Se un'altra automazione consuma prima la maggior parte del budget, anche un flusso ottimizzato può non riuscire. L'ordine di esecuzione dipende dal tipo di flusso. Per l'ordine completo, vedere Trigger e ordine di esecuzione.

          • I flussi prima del salvataggio vengono eseguiti prima nell'ordine rispetto ai flussi dopo il salvataggio.
          • I trigger Apex vengono eseguiti prima o dopo i flussi, a seconda del tipo di trigger.

          Per risolvere i problemi e ottimizzare i flussi che superano i limiti di tempo della CPU:

          • Informazioni sugli schemi comuni che causano errori di limite della CPU
          • Identificare gli elementi che consumano più tempo per la CPU
          • Applicare tecniche di ottimizzazione per ridurre il consumo della CPU
          • Implementare le linee guida di prevenzione per evitare errori nei limiti della CPU

          Problemi, soluzioni e tecniche di prevenzione per gli errori dei limiti della CPU

          Identificare i problemi comuni dei limiti della CPU, applicare soluzioni e seguire le tecniche di prevenzione per evitare errori Apex_CPU_TIME_LIMIT_EXCEEDED.

          Questa tabella fornisce un riferimento per la risoluzione degli errori dei limiti della CPU. Ogni riga descrive un problema comune, la soluzione per risolverlo e le tecniche per prevenirlo nei flussi futuri. Iniziare determinando se uno di questi problemi si applica al flusso. Se non si applica alcuna regola, un'altra automazione nella stessa transazione, ad esempio un trigger Apex, un altro flusso o una regola di flusso di lavoro, attinge dallo stesso budget CPU e può essere responsabile. Per identificare il consumo di CPU nell'intera transazione, esaminare i registri debug Apex. Per ulteriori dettagli, vedere Registri debug.

          Problema Soluzione Tecnica di prevenzione

          Operazioni DML (Data Manipulation Language) all'interno dei loop

          L'esecuzione di operazioni Crea record, Aggiorna record o Elimina record all'interno di un percorso loop consuma tempo della CPU a ogni iterazione. L'elaborazione di più record uno alla volta può esaurire rapidamente il limite.

          Esempio: Un flusso esegue un loop attraverso 100 opportunità e utilizza un elemento Crea record all'interno del loop per creare un'operazione per ogni opportunità, dando luogo a 100 operazioni DML separate.

          Utilizzo delle operazioni DML (Data Manipulation Language) basate su raccolta

          All'interno del loop, utilizzare gli elementi Assegnazione per aggiungere record a una variabile raccolta di record. Al termine del loop, utilizzare un singolo elemento Crea record, Aggiorna record o Elimina record per elaborare l'intera raccolta contemporaneamente. Questo approccio è chiamato bulkification.

          Esempio: Eseguire un loop tra le opportunità, utilizzare un elemento assegnazione per creare un'operazione per ogni opportunità. Utilizzare quindi un altro elemento di assegnazione per aggiungere ogni operazione a una variabile raccolta. Dopo il loop, utilizzare un elemento Crea record per creare tutte le operazioni contemporaneamente.

          Per ulteriori informazioni, vedere Esecuzione in blocco del flusso nelle transazioni.

          Non inserire mai operazioni DML all'interno di loop. Progettare sempre i flussi per raccogliere i record in una variabile raccolta durante il loop, quindi eseguire DML al termine del loop.

          Più query all'interno dei loop

          Gli elementi Ottieni record all'interno di un loop consumano molto tempo nella CPU, soprattutto quando si eseguono query su oggetti di grandi dimensioni o si utilizzano filtri complessi.

          Esempio: Un flusso esegue un loop attraverso gli account e utilizza Ottieni record all'interno del loop per ottenere i referenti correlati per ogni account, generando una query per account.

          Query sui dati prima dei loop

          Prima del loop, utilizzare un singolo elemento Ottieni record e utilizzare la funzionalità Ottieni record correlati per ottenere tutti i dati necessari con filtri appropriati. Durante il loop, utilizzare i dati raccolti anziché eseguire query su ogni iterazione. Se non è possibile utilizzare un singolo elemento Ottieni record, utilizzare un elemento Ottieni record per ottenere i record principali. Quindi, utilizzare un altro elemento Ottieni record per ottenere i record secondari. Filtrare i record secondari utilizzando un campo record, l'operatore In e la prima raccolta Ottieni record. Ad esempio, ID account > In > Account da Ottieni account.

          Esempio: Ottenere innanzitutto tutti i referenti correlati con un elemento Ottieni record che filtra in base agli ID account, quindi fare riferimento alla raccolta di referenti durante il loop.

          Evitare le query all'interno dei loop. Ottenere tutti i dati necessari prima di entrare nel loop.

          Formule complesse in loop

          Gli elementi di assegnazione che eseguono calcoli di formule complessi a ogni iterazione del loop accumulano tempo per la CPU, in particolare con la manipolazione delle stringhe, i calcoli delle date o le funzioni nidificate.

          Esempio: Un flusso esegue un loop in 500 record e ogni iterazione esegue più calcoli delle formule per derivare i valori dei campi.

          Semplificazione delle formule

          Suddividere le formule complesse in passaggi più semplici. Calcolare i valori che non cambiano all'esterno del loop. Ove possibile, evitare le funzioni nidificate. Valutare la possibilità di utilizzare campi formula sull'oggetto anziché formule del flusso.

          Per le operazioni su intere raccolte, ad esempio filtraggio, mappatura o ordinamento, un elemento Trasforma funziona in modo più efficiente di un loop. Per ottenere tutti i record correlati in una singola query anziché in una query per iterazione loop, utilizzare un elemento Ottieni record con l'operatore IN.

          Per ulteriori informazioni, vedere Trasforma elemento.

          Semplificare le formule e spostare i calcoli che non cambiano all'esterno del loop. Testare le prestazioni delle formule con volumi di dati realistici.

          Elaborazione di raccolte di record di grandi dimensioni

          I flussi pianificati o le operazioni batch che elaborano migliaia di record in una singola transazione, anche con un'adeguata operazione in blocco, possono consumare troppo tempo della CPU.

          Esempio: Un flusso pianificato ottiene 5000 record account ed esegue trasformazioni complesse sui dati di ogni record prima di aggiornarli.

          Utilizzo di approcci alternativi

          Per volumi di dati elevati, considerare:

          • Suddividere il lavoro in più flussi pianificati che elaborano ciascuno un sottoinsieme di record
          • Utilizzo dell'elaborazione batch Apex per volumi di dati estremi
          • Elaborazione incrementale dei record nel tempo
          • Utilizzo di Eventi piattaforma per distribuire l'elaborazione in più transazioni

          Filtrare i dati in anticipo per ridurre il numero di record elaborati. Utilizzare i filtri Ottieni record per ottenere solo i record necessari. Testare con volumi di dati realistici prima di distribuirli in produzione.

          Più flussi in una transazione

          Quando un flusso attiva altri flussi (tramite modifiche dei record o sottoflussi), il tempo CPU cumulativo di tutti i flussi nella transazione viene conteggiato nel limite.

          Esempio: Un flusso attivato da record sugli aggiornamenti account esegue più sottoflussi e attiva anche altri flussi attivati da record sugli oggetti correlati.

          Riduzione delle catene dei flussi

          Consolidare l'automazione correlata in un minor numero di flussi. Esaminare i criteri dei trigger di flusso per assicurarsi che i flussi vengano eseguiti solo quando necessario. Valutare la possibilità di utilizzare condizioni di immissione per limitare l'esecuzione dei flussi attivati da record.

          Esaminare l'impatto cumulativo di tutte le automazioni (flussi, processi, flussi di lavoro, trigger) che possono essere eseguite nella stessa transazione. Monitorare e ottimizzare l'intera catena di automazione.

          Carichi di dati

          I flussi attivati da record eseguiti durante le importazioni in blocco di dati o gli aggiornamenti globali richiedono un'elaborazione efficiente di tutti i record. I flussi inefficienti raggiungono i limiti della CPU durante le operazioni in blocco anche se funzionano bene per i singoli record.

          Esempio: Un utente importa 200 record account. Il flusso attivato da record prima del salvataggio esegue più ricerche e calcoli per ogni account.

          Ottimizzazione per le operazioni in blocco

          • Utilizzo di DML e query basati su raccolta
          • Considerare i flussi dopo il salvataggio per le operazioni non critiche (vengono eseguiti in modo asincrono e hanno limiti di CPU più elevati)
          • Utilizzare gli elementi Trasforma (Filtro, Mappa, Ordinamento) che operano su intere raccolte in modo più efficiente rispetto ai loop

          Per ulteriori informazioni, vedere Trasforma elemento.

          Si supponga sempre che i flussi attivati da record elaborino più record contemporaneamente. Eseguire il test con carichi di dati in blocco (utilizzando Data Loader o aggiornamenti globali) prima di distribuirli in produzione. Se non progettato correttamente, un flusso che funziona perfettamente per i singoli record può non riuscire durante le operazioni in blocco se non progettato correttamente.

          Linee guida di prevenzione generale

          • Monitoraggio delle prestazioni del flusso: Esaminare regolarmente i registri debug Apex per identificare i flussi che si avvicinano ai limiti della CPU, anche se non sono ancora riusciti. Il monitoraggio regolare consente di ottimizzare i flussi prima che causino problemi di produzione.
          • Test con dati realistici: Testare i flussi con volumi di dati realistici per individuare problemi di prestazioni prima dell'attivazione. La modalità di debug in genere esegue il test con un record, che non rileva problemi di operazioni in blocco.
          • Decisioni di ottimizzazione dei documenti: Utilizzare le descrizioni degli elementi per notare dove è stato applicato il bulking o altre ottimizzazioni. Questa documentazione aiuta i futuri manutentori a comprendere la progettazione e previene l'introduzione accidentale di problemi di prestazioni.
          • Iniziare in modo semplice e ottimizzare: Creare flussi a piccoli incrementi, testando le prestazioni in ogni fase. Ottimizzare un flusso di lavoro è più semplice che correggerne uno rotto complesso.

          Identificazione degli elementi che richiedono molta CPU in un flusso

          Utilizzare i registri debug Apex per individuare gli elementi del flusso che consumano più tempo per la CPU.

          1. Accedere a Imposta e immettere Registri debug nella casella Ricerca veloce.
          2. Impostare la registrazione debug per l'utente che riscontra l'errore o eseguire il flusso in modalità Debug.
          3. Riprodurre l'errore eseguendo il flusso.
          4. Aprire il registro debug generato.
          5. Cercare questi eventi chiave nel registro debug.
            • FLOW_CREATE_INTERVIEW_BEGIN: mostra quando viene avviato ogni flusso
            • FLOW_ELEMENT_LIMIT_USAGE: mostra il consumo di tempo della CPU per ogni elemento del flusso
            • CUMULATIVE_LIMIT_USAGE: mostra i totali in esecuzione del tempo CPU
          6. Identificare gli elementi con valori di tempo CPU elevati.
            I colpevoli comuni includono:
            • Elementi Loop con raccolte di grandi dimensioni.
            • Elementi Ottieni record con filtri complessi.
            • Operazioni DML con più record (Crea record, Aggiorna record, Elimina record).
            • Elementi di assegnazione con formule complesse.

          Ora si sa quali elementi consumano più tempo per la CPU. Utilizzare queste informazioni per applicare ottimizzazioni mirate.

          Per ulteriori informazioni sui registri debug, vedere Utilizzo dei registri nella Developer Console.

           
          Caricamento
          Salesforce Help | Article