Quando si creano tabelle virtuali, alcune di queste statistiche non vengono raccolte correttamente.
Sintomi
Le statistiche di tabella a volte non vengono raccolte durante la creazione di tabelle virtuali. Le statistiche di tabella mancanti possono avere un impatto grave sulle prestazioni della query.
Risoluzione del problema
- Determinare se le statistiche della tabella sono mancanti eseguendo il seguente comando.
select cast(TABNAME as varchar(25)), TYPE, COLCOUNT, STATS_TIME from SYSCAT.TABLES where TABSCHEMA='<schema>' and CARD = -1;
Sostituire < schema> con il nome schema della tabella virtuale. Il comando elenca tutti gli oggetti dello schema che hanno un CARD di -1, che indica che le statistiche non sono state raccolte.
- Per ogni tabella con cardinalità -1, eseguire il comando seguente, sostituendo <schema> e <nome_tabella> con il nome dell'oggetto virtualizzato.
call SYSPROC.NNSTAT(NULL, '<schema>', '<table_name>', '<list_of_columns_commonly_used_in_predicates>', '', 2, '/tmp/<table_name>.log', ?, 1);
Questa chiamata raccoglie le statistiche a livello di tabella e a livello di colonna per le colonne specificate in < list_of_columns_commonly_used_in_predicates>. Se la tabella ha poche colonne, è possibile raccogliere le statistiche per tutte le colonne nella tabella passando
NULL
per l'argomento dell'elenco di colonne. La chiamata utilizza il metodo di raccolta delle statistiche basate sui dati, che può essere costoso da eseguire. È possibile raccogliere statistiche in orari non di picco. Per ulteriori informazioni, consultare SYSPROC.NNSTAT procedura memorizzata. - Ripetere il passo 1 per assicurarsi che tutte le statistiche della tabella siano raccolte.
Per ulteriori informazioni, vedere Miglioramento delle prestazioni delle query in Data Virtualization.