title

text

D
Dmitry Melnik ИСП РАН
13:45 05 February
22 мин

Speeding up query execution in PostgreSQL using LLVM JIT compiler

Currently, PostgreSQL uses the interpreter to execute SQL-queries. This yields an overhead caused by indirect calls to handler functions and runtime checks, which could be avoided if the query were compiled into the native code "on-the-fly" (i.e. JIT-compiled): at a run time the specific table structure is known as well as data types used in the query. This is especially important for complex queries, which performance is CPU-bound. At the moment there are two major projects that implement JIT-compilation in PostgreSQL: a commercial database Vitesse DB and an open-source project PGStorm. The former uses LLVM JIT to achieve up to 8x speedup on selected TPC-H benchmarks, while the latter JIT-compiles the query using CUDA and executes it on GPU, which allows to speed up execution of specific query types by an order.

Our work is dedicated to adding support for SQL query JIT-compilation to PostgreSQL using LLVM compiler infrastructure. In the presentation we'll discuss how JIT-compilation can be used to speed up various stages of query execution in PostgreSQL, and the specifics of translating an SQL query into LLVM bitcode to achieve good performing native code. Also we'll present preliminary results for our JIT-compiler on TPC-H benchmark.

Слайды

Видео

Другие доклады

  • Magnus  Hagander
    Magnus Hagander PostgreSQL Global Development Group

    Evolution of the PostgreSQL community

    Unlike most other databases, PostgreSQL is developed by a community, and not by a company or even a foundation. Those who have been members of this community for a long time generally consider this a strength, but it can often be confusing to outsiders who are more used to dealing with traditional organization. For those who are not already on the inside, this talk will give an introduction to how the PostgreSQL community works and how the different parties interact, as well as how this has evolved over the years.

  • Marco Slot
    Marco Slot Citus Data

    CitusDB: an extension for Scaling out PostgreSQL

    CitusDB is an extension for PostgreSQL that can distribute tables across a cluster of PostgreSQL servers. Data is stored in shards that can use append-partitioning for bulk-loading of time series data or hash-partitioning for real-time data ingestion. SELECT queries on distributed tables are transparently parallelised across the cluster, using all available cores. Distributed tables can also be joined in parallel, even if they are not partitioned along the same column. CitusDB is especially suitable for real-time analytics use-cases such as dashboards which require fast analytical queries over live data, and can simultaneously act as a scalable operational database. This talk will describe the internals of CitusDB and give a live demo of a large-scale CitusDB cluster.

  • Bruce Momjian
    Bruce Momjian EnterpriseDB
    45 мин

    Postgres Going in Multiple Directions

    Postgres 9.5 adds many features designed to enhance the productivity of developers: UPSERT, CUBE, ROLLUP, JSONB functions, and PostGIS improvements. For administrators, it has row-level security, a new index type, and performance enhancements for large servers. This talk covers the top ten new features that appeared in the Postgres 9.5 release. It will also cover some of the major focuses for post-9.5 releases.

  • Alexander Krizhanovsky
    Alexander Krizhanovsky ООО "Лаборатория НатСис"
    45 мин

    Linux VMM for database developers

    We'll discuss how does Linux work with virtual memory. The following topics will be covered: * x86-64 page table, context switch and page fault; * internals of virtual memory management (VMM) in Linux; * page eviction methods in Linux, page cache and anonymous pages; * huge and gigantic pages, transparent huge pages; * how mmap(2) works and what madvise(2), msync(2) etc. provide; * why large databases don't use mmap(2), but rather implement buffer pool on their own; * ans surely how to tune Linux VMM using sysctl.