Definizione delle priorità

Quando un utente apre una sessione del database, a questa sessione viene assegnata una priorità. La priorità della sessione determina la priorità di tutti i lavori inviati durante la sessione. Ad esempio, se a una sessione viene assegnata la priorità ALTA, anche tutti i lavori inviati durante quella sessione avranno la priorità ALTA, così come i piani corrispondenti.

La priorità di una particolare sessione (e dei relativi lavori e piani) è determinata da diversi fattori:
  • Impostazioni di sistema
  • Impostazioni dell'utente che ha inviato il lavoro corrispondente
  • Impostazioni per i gruppi di utenti a cui l'utente appartiene, se presenti
  • Impostazioni per la sessione utilizzata per inviare il lavoro corrispondente
Inoltre, le regole di schedulazione possono modificare le priorità del piano quando determinate condizioni sono soddisfatte dagli attributi del lavoro corrispondente.
Le seguenti impostazioni determinano le priorità predefinite e massime per una sessione:
  • Emettere il comando SET SYSTEM DEFAULT per impostare i seguenti parametri:
    DEFPRIORITÀ
    La priorità predefinita del sistema, che è quella assegnata a tutti i lavori per i quali non è stata impostata una priorità in altro modo. L'impostazione predefinita è NORMALE.
    MAXPRIORITÀ
    La priorità massima del sistema, che è il livello di priorità più alto che può essere impostato per qualsiasi lavoro. L'impostazione predefinita è CRITICA.
  • Per ogni utente, è possibile eseguire il comando CREATE USER o ALTER USER per impostare i seguenti parametri:
    DEFPRIORITÀ
    La priorità predefinita dell'utente, che è la priorità assegnata a qualsiasi lavoro inviato dall'utente.
    MAXPRIORITÀ
    La priorità massima dell'utente, ovvero il livello di priorità più alto che l'utente può impostare per qualsiasi lavoro inviato.
  • Per ogni gruppo di utenti, è possibile eseguire il comando CREATE GROUP o ALTER GROUP per impostare i seguenti parametri:
    DEFPRIORITÀ
    La priorità predefinita del gruppo, ovvero la priorità assegnata a qualsiasi lavoro inviato da un membro del gruppo di utenti.
    MAXPRIORITÀ
    La priorità massima del gruppo, ovvero il livello di priorità più alto che un membro del gruppo di utenti può impostare per qualsiasi lavoro inviato.
La prima delle seguenti regole da applicare determina la priorità assegnata a una sessione:
  1. All'utente è stata assegnata una priorità predefinita diversa da NESSUNO? In caso affermativo, la priorità viene assegnata alla sessione.
  2. L'utente è membro di almeno un gruppo di utenti per il quale è stata specificata una priorità predefinita diversa da NESSUNO? In tal caso, alla sessione viene assegnata la priorità più bassa tra quelle predefinite.
  3. Alla sessione viene assegnata la priorità predefinita del sistema.
Se la priorità determinata supera la priorità massima dell'utente, viene assegnata la priorità massima. La prima delle seguenti regole da applicare determina la priorità massima per un particolare utente:
  1. All'utente è stata assegnata una priorità massima diversa da NESSUNO? In tal caso, la priorità massima dell'utente è quella o la priorità massima del sistema, a seconda di quale sia più bassa.
  2. L'utente è membro di almeno un gruppo di utenti per il quale è stata specificata una priorità massima diversa da NESSUNO? In tal caso, la priorità massima dell'utente è la più bassa tra quelle predefinite e la priorità massima del sistema.

Un utente può lanciare il comando ALTER SESSION per modificare la priorità della sessione. Questo influisce su tutti i lavori attualmente in esecuzione e che vengono inviati durante il resto della sessione.

Inoltre, una regola di schedulazione può modificare la priorità dei piani di un lavoro quando si verificano determinate condizioni. La priorità impostata da una regola di scheduler non è soggetta ad alcuna restrizione di priorità massima imposta a un particolare utente o gruppo di utenti o alla priorità massima del sistema. È possibile creare regole di pianificazione che utilizzano una qualsiasi combinazione dei seguenti criteri per sovrascrivere la priorità determinata da altri mezzi:
Quale utente ha inviato il lavoro corrispondente
È possibile utilizzare le regole di pianificazione per annullare l'assegnazione della priorità di un piano in base all'utente che lo presenta. Ad esempio, la seguente regola di scheduler imposta la priorità di tutti i piani per i lavori inviati dall'utente bob su CRITICO, indipendentemente da qualsiasi restrizione di priorità imposta a bob direttamente, tramite un gruppo di utenti o dalla priorità massima del sistema:
IF USER IS bob THEN SET PRIORITY CRITICAL
Il contenuto dei campi delle informazioni sul cliente
Un amministratore o un programma applicativo può impostare i seguenti campi di informazioni sul client in una query:
ID utente
L'ID utente con cui il client è in esecuzione.
Nome applicazione
Il nome del client.
Nome stazione di lavoro
Il nome host della workstation su cui gira il client.
Stringa account
Il valore della stringa di contabilità dalle informazioni sul client specificate per la sessione.
È possibile utilizzare le regole di pianificazione per assegnare una priorità in base al contenuto di questi campi (vedere Informazioni sul client). Ad esempio, la seguente regola di pianificazione aumenta la priorità di tutti i piani per i lavori inviati dall'applicazione Cognos:
IF CLIENT_APPLICATION_NAME IS Cognos THEN INCREASE PRIORITY
Stime dei costi
Per ogni piano, l'ottimizzatore calcola il costo previsto per la sua elaborazione. È possibile utilizzare le regole di pianificazione per assegnare una priorità in base alla stima dei costi calcolati. Ad esempio, le seguenti regole di pianificazione modificano le priorità dei piani in base alle stime dei costi:
IF ESTIMATE < 4 THEN SET PRIORITY NORMAL
IF ESTIMATE >= 4 ESTIMATE < 30 THEN SET PRIORITY HIGH
IF ESTIMATE >= 30 THEN SET PRIORITY LOW
Il database a cui si deve accedere
È possibile utilizzare le regole di pianificazione per assegnare o modificare le priorità dei piani in base al database a cui accede ciascun piano. Ad esempio, le seguenti regole di scheduler diminuiscono la priorità di tutti i piani che accedono al database dbx1:
IF DATABASE IS dbx1 THEN DECREASE PRIORITY
La tabella a cui si deve accedere
È possibile utilizzare le regole di pianificazione per assegnare o modificare le priorità dei piani in base alla tabella a cui accede ciascun piano. Ad esempio, la seguente regola di pianificazione riduce la priorità di tutti i piani che accedono alla tabella tab1 o tab2:
IF TABLE IN (tab1,tab2) THEN DECREASE PRIORITY
Tag personalizzati
È possibile aggiungere un numero qualsiasi di tag alle sessioni (vedere Tag). Tutti i piani che rientrano nell'ambito di quella sessione ricevono lo stesso tag. È anche possibile creare regole di pianificazione che aggiungono tag direttamente a tutti i piani che soddisfano le condizioni specificate dalla regola. È quindi possibile utilizzare le regole di pianificazione per assegnare o modificare le priorità del piano in base a questi tag. Ad esempio, la seguente regola di pianificazione aumenta la priorità di tutti i piani per i quali sono stati impostati i tag specificati:
IF TAG IS eom THEN INCREASE PRIORITY
Importante: fare attenzione quando si assegna la priorità critica e alta. Se si assegnano troppi lavori alla priorità alta o critica, si rischia di bloccare il lavoro a priorità normale e bassa.