DBAtlas · Atlas d'exploitation des bases de données

Configurer les statistiques incrémentales pour une table partitionnée

OracleStatistiques

Commande

-- 1) Enable incremental mode (global statistics are derived from partition synopses):
EXEC DBMS_STATS.SET_TABLE_PREFS('CUSTOMER_APP', 'SALE_PART', 'INCREMENTAL', 'TRUE');
EXEC DBMS_STATS.SET_TABLE_PREFS('CUSTOMER_APP', 'SALE_PART', 'INCREMENTAL_STALENESS', 'USE_STALE_PERCENT');
EXEC DBMS_STATS.SET_TABLE_PREFS('CUSTOMER_APP', 'SALE_PART', 'GRANULARITY', 'AUTO');

-- 2) The first gather scans everything and builds synopses; later ones read only changed partitions:
EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname => 'CUSTOMER_APP', tabname => 'SALE_PART');

-- 3) Verify:
SELECT DBMS_STATS.GET_PREFS('INCREMENTAL', 'CUSTOMER_APP', 'SALE_PART') AS incremental FROM dual;
SELECT partition_name, num_rows,
       TO_CHAR(last_analyzed,'YYYY-MM-DD HH24:MI:SS') AS last_analyzed, stale_stats
FROM   dba_tab_statistics
WHERE  owner = 'CUSTOMER_APP' AND table_name = 'SALE_PART'
ORDER  BY partition_position NULLS FIRST;

-- 4) Pre-build synopses on a staging table to be loaded via exchange (12c+):
-- EXEC DBMS_STATS.SET_TABLE_PREFS('CUSTOMER_APP', 'SALE_STAGE', 'INCREMENTAL', 'TRUE');
-- EXEC DBMS_STATS.SET_TABLE_PREFS('CUSTOMER_APP', 'SALE_STAGE', 'INCREMENTAL_LEVEL', 'TABLE');
-- EXEC DBMS_STATS.GATHER_TABLE_STATS('CUSTOMER_APP', 'SALE_STAGE');

Ce que fait la commande

En mode incrémental, un synopsis est stocké par partition ; les statistiques globales (niveau table), en particulier le NDV, sont calculées en fusionnant les synopsis sans relire toute la table. Seules les partitions modifiées sont relues.

Quand l'utiliser

Sur les grandes tables (échelle To) partitionnées par range/interval où les nouvelles données n'arrivent que dans les partitions récentes, lorsque la collecte des statistiques globales dépasse la fenêtre de maintenance.

Attention

Pas de licence propre, mais l'option Partitioning (EE payante) est déjà requise. Les synopsis consomment de l'espace dans SYSAUX (le format HyperLogLog 12.2+ est bien plus compact). La première collecte est un parcours complet ; lancez-la dans une fenêtre de maintenance. Donner à ESTIMATE_PERCENT une autre valeur que AUTO_SAMPLE_SIZE désactive le mode incrémental.

Ouvrir dans DBAtlas →

Voir aussi