Sep 26 2008

Bloom Filters

Tag: 10gR2, 11gR1, Parallel Processing, Partitioning, Query OptimizerChristian Antognini @ 6:24 pm

Oracle Database, as of 10g Release 2, uses bloom filters in various situations. Unfortunately, no information about their usage is available in Oracle documentation. For this reason, I decided to write a paper to explain not only what bloom filters are, but also, and foremost, to describe how Oracle Database makes use of them. Specifically, to explain how the database engine uses bloom filters to reduce data communication between slave processes in parallel joins and to implement join-filter pruning.

Originally, I wrote this paper for the IOUG Select Journal. Even if I wrote it last June, I wanted to receive the printed copies before putting it online. Today a packet with five copies of the Q4/2008 issue and a polo shirt arrived… Hence, it is now available online as well.

If you don’t have access to Select Journal, you can download it from this page.

11 Responses to “Bloom Filters”

  1. Comment: Chen Shapira

    Very enjoyable paper.
    I knew about Bloom Filters in general, but it was nice to see a simple PL/SQL implementation and to know where they are used within Oracle.

  2. Comment: Doug Burns

    Pretty timely, too! ;-) Page 14, here …

    http://www.oracle.com/technology/products/bi/db/exadata/pdf/exadata-technical-whitepaper.pdf

    I’ve made a start on your book, btw. Looks good so far but it’ll probably end up half-read for a few months like all the books do. I have a course slides deadline approaching so it’s back on the shelf for now ….

  3. Comment: Christian Antognini

    Hi Doug

    Timely ?!?

    I’m aware of bloom filters in Oracle since December 2005. So, I wanted to write something about them for a long time. IIRC we also discussed about them at the 2006 UKOUG conference… Therefore, I’m really happy that this short paper is, at last, published.

    Cheers,
    Chris

  4. Comment: Doug Burns

    I was laughing about the coincidence. I’ve been aware of bloom filters for quite a while too but it’s just funny that this should come out at a time when bloom filters happen to have been mentioned in the same week as they’re mentioned in an important Oracle white paper. It was just a small joke really.

  5. Comment: Doug Burns

    Well, not *just* a joke. It’s nice that your paper comes out just when a lot of people might be wondering what a Bloom Filter is. Therefore it is timely in that sense.

  6. Comment: Marco Gralike

    Thanks Christian for this really nice whitepaper and helped me with understanding some of the concepts
    (and thanks Doug for the link, although Kevin didn’t appriciated it)

    ;-)

  7. Comment: Martin Berger

    Dennis Yurichev [1] posted on Oracle-L [2] about a list of Undocumented Oracle Functions. There are (at least) 2 which might be of some interrest. Maybe they could look the examples more real ;-)

    SYS_OP_BLOOM_FILTER
    SYS_OP_BLOOM_FILTER_LIST
    

    [1] http://www.yurichev.com/
    [2] http://www.freelists.org/archives/oracle-l/10-2008/msg00037.html

  8. Comment: Kenny Roytman

    Christian,

    Thanks for the interesting paper.

    Any idea how Dennis Yurichev generates that listing of undocumented functions?

  9. Comment: Christian Antognini

    Hi Kenny

    On Linux/Unix I would execute the following command:

    strings $ORACLE_HOME/bin/oracle | grep -e "^SYS_OP_\w*$" | sort -u

    Cheers,
    Chris

  10. Comment: Dennis Yurichev

    Look at msqdef.o file in libserver11.a, it contain (if I’m correct) all functions, not just SYS_OP.

  11. Pingback: AMIS Technology blog » Blog Archive » Bloom Filters, Hierarchical Profiling,… - feast for DBAs (considered harmful..)

    [...] Bloom Filters – by Christian Antognini. [...]

Leave a Reply

All comments are filtered by Akismet and then moderated by me. So, it should be no surprise that spam and anything wholly inappropriate has no chance of making it onto the site. To send questions or comments not related to this blog post please use the contact form.

Your name (required)

Your email (will not be published) (required)

Your website

Your message (please wrap code examples in <pre> tags)