Bloom Filter Is Not Working In Prod But Working In Dev
(Doc ID 2392374.1)
Last updated on JULY 01, 2021
Applies to:
Oracle Database - Enterprise Edition - Version 11.2.0.4 and laterOracle Database Cloud Schema Service - Version N/A and later
Oracle Database Exadata Express Cloud Service - Version N/A and later
Gen 1 Exadata Cloud at Customer (Oracle Exadata Database Cloud Machine) - Version N/A and later
Oracle Database Cloud Exadata Service - Version N/A and later
Information in this document applies to any platform.
About bloom filter:
A Bloom filter, named after its creator Burton Bloom, is a low-memory data structure that tests membership in a set.
A Bloom filter correctly indicates when an element is not in a set, but can incorrectly indicate when an element is in a set. Thus, false negatives are impossible but false positives are possible.
Purpose of Bloom Filters:
A Bloom filter tests one set of values to determine whether they are members another set.
For example, one set is (10,20,30,40) and the second set is (10,30,60,70). A Bloom filter can determine that 60 and 70 are guaranteed to be excluded from the first set, and that 10 and 30 are probably members. Bloom filters are especially useful when the amount of memory needed to store the filter is small relative to the amount of data in the data set, and when most data is expected to fail the membership test.
Oracle Database uses Bloom filters to various specific goals, including the following:
Reduce the amount of data transferred to worker processes in a parallel query, especially when the database discards most rows because they do not fulfill a join condition
Eliminate unneeded partitions when building a partition access list in a join, known as partition pruning
Test whether data exists in the server result cache, thereby avoiding a disk read
Filter members in Exadata cells, especially when joining a large fact table and small dimension tables in a star schema
Bloom filters can occur in both parallel and serial processing.
Symptoms
- Having performance issues on job with bloom filtering
- Our prod and dev have similar data quantity and tables/indexes are almost identical. But when executing the same query, Dev is much faster than Prod
- Both prod and dev are with same bloom filtering init setting:
NAME VALUE
------------------------------------ --------------------------------
_bloom_filter_enabled TRUE
_bloom_filter_debug 0
_bloom_vector_elements 0
_bloom_predicate_enabled TRUE
_bloom_predicate_pushdown_to_storage TRUE
_bloom_folding_enabled TRUE
_bloom_folding_density 16
_bloom_folding_min 131072
_bloom_pushing_max 512
_bloom_max_size 268435456
_bloom_sm_enabled FALSE
_bloom_serial_filter on
_bloom_pruning_enabled TRUE
_bloom_pushing_total_max 262144
_bloom_minmax_enabled TRUE
Changes
Cause
To view full details, sign in with your My Oracle Support account. |
|
Don't have a My Oracle Support account? Click to get started! |
In this Document
Symptoms |
Changes |
Cause |
Solution |