Configurer les statistiques incrémentales pour une table partitionnée
OracleStatistiquesCommande
-- 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.