Ottimizzazione della coda di espressioni

È possibile che sia necessario che il motore delle espressioni venga ottimizzato a seconda delle risorse del server, del numero di espressioni e della complessità di ciascuna installazione. In generale, questo processo implica l'ottimizzazione e la misurazione delle prestazioni per un parametro alla volta, ripetuto fino a che le prestazioni non possono essere migliorate ulteriormente. È necessario conservare una traccia dei record. Una nuova ottimizzazione è necessaria per una modifica dell'hardware, dell'uso e della configurazione.
Un amministratore deve controllare le seguenti impostazioni dell'applicazione per ogni installazione:
Tabella 1. Impostazioni dell'applicazione per l'ottimizzazione della coda di espressioni
Impostazione Unità Impostazione predefinita Runtime* Descrizione Suggerimento per l'ottimizzazione
formula.queue.maxage h 24 Il numero massimo (non garantito) di ore per cui è conservata la cronologia della coda di espressioni. Sono eliminate soltanto le espressioni in esecuzione. Ciò è possibile mediante il lavoro di cleanup della formula. Le voci della coda eseguite nella tabella delle code di formule sono conservate come cronologia di esecuzione. Questa cronologia è utilizzata per controllare i loop di esecuzione e per generare le statistiche. Se le statistiche non sono necessarie, questo numero può essere ridotto in una configurazione ad alta velocità di trasmissione dati in modo da mantenere bassa la dimensione della tabella. Non impostare mai questo valore su zero, in quanto un controllo dei loop corretto richiede una cronologia di almeno un'ora.
formula.queue.maxsize voci 500000 Il numero massimo di voci desiderate nella coda di espressioni. L'attività di cleanup consiste nel tenere il numero di voci al di sotto di questo numero limitando la cronologia. Sono eliminate soltanto le espressioni in esecuzione. Questa impostazione sovrascrive l'impostazione formula.queue.maxage. Questo numero può essere diminuito per mantenere bassa la dimensione della cronologia della coda durante periodi di carico elevato e salvare la cronologia in altri momenti. Un buon compromesso consiste nel mantenere questo numero leggermente al di sotto della velocità di trasmissione dati media durante il periodo formula.queue.maxage.
formula.execution.batch.size voci 30 Il numero di voci della coda di espressioni allocate per un thread a ogni esecuzione dell'allocazione. Le voci sono contrassegnate come "started". Il thread viene eseguito attraverso tali voci e le completa prima di allocare un nuovo batch.

Questa è un'impostazione importante. Informazioni di base: le espressioni sono eseguite simultaneamente su diversi thread su diversi nodi allo stesso tempo, ma sempre in un ordine cronologico basato sulle dipendenze. Ad esempio, se due espressioni sulla coda non sono correlate tra loro, queste possono essere eseguite in un altro ordine, diverso da quello con cui sono state aggiunte. Di conseguenza, le voci delle espressioni potrebbero non essere eseguite se sono presenti delle istanze o delle voci i cui valori dipendono da esse non eseguite prima. Questo effetto, insieme alla simultaneità, richiede l'allocazione per evitare conflitti, ordini non coerenti e operazioni ridondanti.

Poiché l'allocazione è un'operazione costosa, diverse espressioni sono allocate insieme al requisito precedente e con la condizione che sono eseguite in un determinato ordine. Se viene allocato un numero elevato di espressioni, il sovraccarico di allocazione viene salvato, ma la simultaneità viene bloccata. La regola generale consiste nel tenere basso questo numero se le espressioni formano lunghe catene di dipendenze, e aumentarlo se le catene sono piccole o se le dipendenze sono poche. È possibile modificare questo valore durante il runtime e ottimizzarlo fino al raggiungimento di un valore ottimale ragionevole. I valori inferiori a 10 o maggiori di 200 sono raramente ottimali.

formula.cleanup.interval msecs 1800000 No La frequenza di cleanup della coda di espressioni. In questo caso, sono applicate le impostazioni maxage e maxsize. Di solito, si verifica solo una limitazione delle code. Il primo cleanup si verifica quando il server viene avviato, momento in cui viene eseguita una manutenzione speciale. Inoltre, ogni due settimane (di notte) viene eseguito un controllo di integrità dell'espressione. La maggior parte delle volte, il valore predefinito è un valore ragionevole. Se la velocità di trasmissione dati è elevata, il processo di cleanup richiederà più tempo, ma dovrà essere eseguito più spesso e viceversa. Evitare di aumentare troppo questo tempo, in quanto si può verificare un'interruzione o un calo delle prestazioni se il carico aumenta significativamente all'improvviso (ad esempio, dopo l'importazione o l'aggiunta di un attributo).
formula.background.interval msecs 10000 No La frequenza di controllo della coda di espressioni per l'esecuzione di nuove espressioni non allocate. Una volta terminato il batch, viene avviato immediatamente un nuovo controllo, senza attendere la fine dell'intervallo. Se la coda contiene comunque voci non valutate al successivo intervallo, viene avviato un nuovo thread utente per aumentare la capacità. Nelle versioni precedenti di Rational Focal Point, l'esecuzione era asincrona e immediata. Quando le espressioni venivano spostate nel database, l'esecuzione non era possibile senza il rischio di incorrere in deadlock. Questo è l'intervallo con cui la coda di espressioni viene controllata per verificare la presenza di nuove espressioni da eseguire, ovvero il tempo massimo (insieme al tempo di esecuzione) che l'utente deve attendere (ovvero, per aggiornare) perché un'espressione venga eseguita. Il polling per le voci della coda non valutate non è costoso se non vi sono voci e pertanto il tempo è breve. Tuttavia, se l'intervallo è troppo breve, verranno consumate risorse in maniera non necessaria. Ciò influenza la scalata della simultaneità. Se il thread utente avviato per l'intervallo precedente non è terminato entro l'intervallo, verrà avviato un altro thread (fino a thread.per.nodes). Se la scalata è troppo lenta o se sono richieste latenze di valutazione inferiori, è possibile ridurre questo numero. Se le espressioni sono utilizzate raramente, sarà invece possibile aumentarlo leggermente.
formula.max.background.threads.per.node count 2 No Il numero massimo di thread simultanei che eseguono le espressioni per ogni nodo. Il numero massimo corrente dipende dinamicamente dalla presenza di thread liberi nel pool di thread dell'applicazione. La scalata di simultaneità descritta in background.interval aumenta il numero di thread di valutazione espressioni sul nodo a ogni intervallo, se sono presenti altre operazioni da effettuare. Tale valore richiede la presenza di thread liberi nel pool di thread dell'applicazione, ottimizzata automaticamente in base al numero di core CPU (virtuali o fisici). Inoltre, il valore ha un tetto massimo (cap) per non consumare l'ultimo thread nel pool. È possibile modificare questo numero. Ciò nonostante, non sono garantite ottime prestazioni in quanto il valore dipende notevolmente dalla capacità di simultaneità del database. Un segno che il valore è troppo basso è dato dal fatto che la coda ha spesso espressioni non valutate e che il carico del database è basso.
formula.cleanup.enabled boolean true Per impostazione predefinita, il cleanup della coda di espressioni è abilitato. Il cleanup non deve mai essere disabilitato tranne per eseguire il debug o durante l'esecuzione di misurazioni delle prestazioni in cui il cleanup deve essere escluso. Con questa impostazione, non è necessario effettuare alcuna ottimizzazione. Non modificarlo. Conservare il valore predefinito "true".

* Runtime indica se l'impostazione dell'applicazione ha effetto durante il runtime (Yes) o solo all'avvio (No).


Feedback