Identificare le dichiarazioni che influiscono su una tabella

Usare gli elenchi di utilizzo per identificare le sezioni di istruzioni DML che hanno effetto su una particolare tabella quando le sezioni di istruzioni vengono eseguite. È possibile visualizzare le statistiche per ogni dichiarazione e usarle per determinare dove sia necessario un monitoraggio o una messa a punto aggiuntivi.

Informazioni preliminari

Effettuare le seguenti attività:

  • Identificare una tabella per la quale si desidera visualizzare le statistiche di utilizzo degli oggetti. È possibile utilizzare la funzione MON_GET_TABLE table per visualizzare le metriche di monitoraggio di una o più tabelle.
  • Per emettere le dichiarazioni richieste, assicurarsi che i privilegi detenuti dall'ID di autorizzazione di ciascuna dichiarazione includano l'autorità DBADM o l'autorità SQLADM.
  • Assicurarsi di avere il privilegio EXECUTE sulle funzioni della tabella MON_GET_TABLE_USAGE_LIST e MON_GET_USAGE_LIST_STATUS.

Informazioni su questa attività

Quando si visualizza l'output della funzione di tabella MON_GET_TABLE, si può notare un valore insolito per un elemento del monitor. È possibile utilizzare gli elenchi di utilizzo per determinare se qualche istruzione DML ha contribuito a questo valore.

Gli elenchi di utilizzo contengono statistiche su fattori come i blocchi e l'utilizzo del pool di buffer per ogni istruzione che ha interessato una tabella in un determinato periodo di tempo. Se si determina che un'istruzione ha influito negativamente su una tabella, utilizzare queste statistiche per determinare dove sia necessario un ulteriore monitoraggio o come l'istruzione possa essere messa a punto.

Procedura

Per identificare le dichiarazioni che influiscono su una tabella:

  1. Impostate il parametro di configurazione mon_obj_metrics su EXTENDED lanciando il seguente comando:
    DB2 UPDATE DATABASE CONFIGURATION USING MON_OBJ_METRICS EXTENDED

    L'impostazione di questo parametro di configurazione su EXTENDED garantisce la raccolta di statistiche per ogni voce dell'elenco di utilizzo.

  2. Creare un elenco di utilizzo per la tabella utilizzando l'istruzione CREATE USAGE LIST.
    Ad esempio, per creare l'elenco d'uso INVENTORYUL per la tabella SALES.INVENTORY, eseguire il comando seguente:
    CREATE USAGE LIST SALES.INVENTORYUL FOR TABLE SALES.INVENTORY
  3. Attivare la raccolta delle statistiche di utilizzo degli oggetti con l'istruzione SET USAGE LIST STATE.
    Per esempio, per attivare la raccolta per l'elenco d'uso INVENTORYUL, eseguire il seguente comando:
    SET USAGE LIST SALES.INVENTORYUL STATE = ACTIVE
  4. Durante la raccolta delle statistiche sugli oggetti, assicurarsi che l'elenco di utilizzo sia attivo e che sia allocata una quantità di memoria sufficiente per l'elenco di utilizzo utilizzando la funzione della tabella MON_GET_USAGE_LIST_STATUS.
    Ad esempio, per controllare lo stato dell'elenco d'uso INVENTORYUL, eseguire il seguente comando:
    SELECT MEMBER,
           STATE,
           LIST_SIZE,
           USED_ENTRIES,
           WRAPPED
    FROM TABLE(MON_GET_USAGE_LIST_STATUS('SALES', 'INVENTORYUL', -2))
  5. Eseguire le istruzioni per le quali si desidera raccogliere le statistiche di utilizzo degli oggetti.
  6. Quando il periodo di tempo per il quale si desidera raccogliere le statistiche di utilizzo degli oggetti è trascorso, disattivare la raccolta dei dati dell'elenco di utilizzo utilizzando l'istruzione SET USAGE LIST STATE.
    Ad esempio, per disattivare la raccolta per l'elenco d'uso INVENTORYUL, eseguire il seguente comando:
    SET USAGE LIST SALES.INVENTORYUL STATE = INACTIVE
  7. Visualizzare le informazioni raccolte utilizzando la funzione MON_GET_TABLE_USAGE_LIST.
    È possibile visualizzare le statistiche per un sottoinsieme o per tutte le dichiarazioni che hanno interessato la tabella durante il periodo di tempo per il quale sono state raccolte le statistiche.
    Ad esempio, per visualizzare solo le 10 istruzioni che leggono il maggior numero di righe della tabella, eseguire il seguente comando:
    SELECT MEMBER,
           EXECUTABLE_ID,
           NUM_REFERENCES,
           NUM_REF_WITH_METRICS,
           ROWS_READ,
           ROWS_INSERTED,
           ROWS_UPDATED,
           ROWS_DELETED
    FROM TABLE(MON_GET_TABLE_USAGE_LIST('SALES', 'INVENTORYUL', -2))
    ORDER BY ROWS_READ DESC
    FETCH FIRST 10 ROWS ONLY
  8. Se si desidera visualizzare il testo di una dichiarazione che ha influito sulla tabella, utilizzare il valore dell'elemento executable_id nell'output MON_GET_TABLE_USAGE_LIST come input per la funzione della tabella MON_GET_PKG_CACHE_STMT.
    Ad esempio, per visualizzare il testo di una particolare dichiarazione, si può usare il comando seguente:
    SELECT STMT_TEXT
    FROM TABLE
    (MON_GET_PKG_CACHE_STMT(NULL, x'01000000000000007C0000000000000000000000020020081126171720728997', NULL, -2))
  9. Usate l'elenco delle dichiarazioni e le statistiche fornite per le dichiarazioni per determinare dove è necessario un ulteriore monitoraggio o messa a punto, se necessario.
    Ad esempio, una dichiarazione che presenta un valore basso per l'elemento di monitoraggio pool_writes rispetto al valore dell'elemento di monitoraggio direct_writes potrebbe avere problemi di buffer pool che richiedono attenzione.

Operazioni successive

Quando non si ha bisogno delle informazioni contenute nell'elenco di utilizzo, liberare la memoria associata all'elenco di utilizzo utilizzando l'istruzione SET USAGE LIST STATE. Ad esempio, per liberare la memoria associata all'elenco d'uso INVENTORYUL, eseguire il seguente comando:
SET USAGE LIST SALES.INVENTORYUL STATE = RELEASED