online_advisor
online_advisor : Suggest missing indexes and extended statistics online
Overview
| ID | Extension | Package | Version | Category | License | Language |
|---|---|---|---|---|---|---|
| 5270 | online_advisor | online_advisor | 1.0 | ADMIN | PostgreSQL | C |
| Attribute | Has Binary | Has Library | Need Load | Has DDL | Relocatable | Trusted |
|---|---|---|---|---|---|---|
--sLd-r | No | Yes | Yes | Yes | yes | no |
| Relationships | |
|---|---|
| See Also | index_advisor hypopg pg_qualstats |
Requires shared_preload_libraries=online_advisor on PostgreSQL 14-16; PGSTY backports upstream PG18 hook compatibility.
Packages
| Type | Repo | Version | PG Major Compatibility | Package Pattern | Dependencies |
|---|---|---|---|---|---|
| EXT | PIGSTY | 1.0 | 18 17 16 15 14 | online_advisor | - |
| RPM | PIGSTY | 1.0 | 18 17 16 15 14 | online_advisor_$v | - |
| DEB | PIGSTY | 1.0 | 18 17 16 15 14 | postgresql-$v-online-advisor | - |
| Linux / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
el8.x86_64 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 |
el8.aarch64 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 |
el9.x86_64 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 |
el9.aarch64 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 |
el10.x86_64 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 |
el10.aarch64 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 |
d12.x86_64 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 |
d12.aarch64 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 |
d13.x86_64 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 |
d13.aarch64 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 |
u22.x86_64 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 |
u22.aarch64 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 |
u24.x86_64 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 |
u24.aarch64 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 |
u26.x86_64 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 |
u26.aarch64 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 | PIGSTY 1.0 |
Source
pig build pkg online_advisor; # build rpm/debInstall
Make sure PGDG and PIGSTY repo available:
pig repo add pgsql -u # add both repo and update cacheInstall this extension with pig:
pig install online_advisor; # install via package name, for the active PG version
pig install online_advisor -v 18; # install for PG 18
pig install online_advisor -v 17; # install for PG 17
pig install online_advisor -v 16; # install for PG 16
pig install online_advisor -v 15; # install for PG 15
pig install online_advisor -v 14; # install for PG 14Config this extension to shared_preload_libraries:
shared_preload_libraries = 'online_advisor';Create this extension with:
CREATE EXTENSION online_advisor;Usage
Sources:
- Official README for version 1.0
- Extension control file
- Version 1.0 SQL objects
- Sample preload configuration
online_advisor observes PostgreSQL execution plans and workload timing, then recommends indexes, extended statistics, or prepared statements. It reports candidates only; it never creates an index or statistics object automatically.
Core Workflow
Preload the library and restart PostgreSQL:
shared_preload_libraries = 'online_advisor'Create and activate the extension in each database whose workload should be observed:
CREATE EXTENSION online_advisor;
-- Calling an extension function activates collection in this database.
SELECT get_executor_stats();After representative workload has run, inspect the recommendations:
SELECT * FROM proposed_indexes;
SELECT * FROM proposed_statistics;
SELECT * FROM get_executor_stats();
-- Keep separate index candidates instead of combining compatible clauses.
SELECT * FROM propose_indexes(combine => false);Review each generated create_index or create_statistics statement before applying it. Run ANALYZE after creating an index or statistics object so the planner can use current statistics.
Objects and Settings
proposed_indexes: view overpropose_indexes(combine, reset)with filtering volume, call count, elapsed time, and a candidateCREATE INDEXstatement.proposed_statistics: view overpropose_statistics(combine, reset)with misestimation, call count, elapsed time, and a candidateCREATE STATISTICSstatement.get_executor_stats(reset): returns aggregate planning and execution time, query count, and planning-overhead ratios.online_advisor.filtered_threshold: minimum filtered-row count considered for an index proposal; default1000.online_advisor.misestimation_threshold: actual-to-estimated row ratio considered for statistics; default10.online_advisor.min_rows: minimum returned rows for misestimation analysis; default1000.online_advisor.max_index_proposalsandonline_advisor.max_stat_proposals: proposal capacities; set them before the extension is activated.online_advisor.do_instrumentation,online_advisor.log_duration, andonline_advisor.prepare_threshold: control collection and prepared-statement advice.
Caveats
- Instrumentation adds workload overhead; measure it on the target system and disable collection when it is not needed.
- The index heuristic does not reason about operator ordering in compound indexes, join indexes, or indexes used only to avoid sorting.
- The extension does not estimate the benefit of a proposed index. Use plan review or a hypothetical-index tool before building expensive indexes.
- Advice is database-local and depends on the workload observed since activation or reset.