Você está na página 1de 14

JIT

ONE MORE TIME


PALESTRANTES
Gerdan Rezende dos Santos Davy Alvarenga Machado
Brasília - DF Brasília - DF
Tecnisys Tecnologias Inovadoras Tecnisys Tecnologias Inovadoras
Especialista em Banco de Dados Especialista em Banco de Dados
e Big Data e Big Data
Ativo em várias comunidades de Ativista open source e curioso por
software livre, sendo um apaixonado por natureza
tecnologias open source
Revisor e contribuidor da comunidade
Organizador e palestrante do PGDay PostgreSQL e Apache
Brasília. Já palestrou em eventos da IBM,
Latinoware, entre outros Organizador e palestrante do PGDay
Brasília
https://www.linkedin.com/in/gerdan
https://br.linkedin.com/in/davy-alvarenga-machado
TECNISYS
Referência nacional em soluções open source
atuando no mercado de TI a mais de 25 anos
Parceira de empresas líderes internacionalmente,
tais como, EnterpriseDB, Hortonworks, Cloudera,
Red Hat, SUSE, entre outras
Especialistas em Banco de Dados, Big Data,
Sistemas Operacionais, Middlewares, entre outras
áreas
Principal via estratégica de mercado da
EnterpriseDB para o território brasileiro
Suporte ao PostgreSQL 24x7, com atendimento
inicial em menos de 15 min via 0800, site ou e-
mail
AGENDA
­ O que é o JIT
­ Operações JITed
­ Se liga!
­ Instalando, Configurando e Verificando
­ Benchmark
­ Dúvidas
JUST-IN-TIME (JIT)
­ Programa interpretado para liguagem de máquina (bytecode)

­ Expressões SQL para código nativo = Aumento de desempenho (CPU)

­ Tudo isso em tempo de planejamento baby!

­ LLVM (compiler infrastructure) – JIT Provider


­ Avaliação de Expressões e Deformação de Tuplas

­ Thank you so much Andres Freund!


OPERAÇÕES JITED
­ Avaliação de Expressões
Filtros (WHERE)
Agregações (GROUP BY, SUM, COUNT, MAX, MIN, etc)
Projeções (SELECT …)

­ Deformação de Tuplas
Representação in-memory de tuplas
Função própria para o layout data tabela
Acesso rápido e fácil

­ No futuro, outras operações poderão ser otimizadas pelo JIT


SE LIGA!
Não existe almoço grátis! O JIT tem o seu custo!

Good Queries longas, como consultas analíticas (OLAP)

Good Queries com várias expressões complexas, como agregações

Good Queries limitadas pelo CPU


Bad Queries rápidas
(JIT overhead maior que o tempo ganho na execução)
INSTALANDO …
­ Repositório

sudo yum install https://download.postgresql.org/pub/repos/...


sudo yum install postgresql11-server
sudo yum install epel-release (dependências do LLVM)
sudo yum install postgresql11-llvmjit

­ Código-fonte
sudo yum install centos-release-scl
sudo yum install llvm-toolset-7 llvm-toolset-7-llvm-devel.x86_64
PATH=/opt/rh/devtoolset-7/root/usr/bin/:/opt/rh/llvm-toolset-7/root/usr/bin/:$PATH
tar -xvf postgresql-11.0.tar.bz2
./configure --prefix=/home/postgres/pg11 --with-llvm
make
make install
CONFIGURANDO ...
­ Por padrão, o JIT vem desabilitado
postgresql.conf jit = on (não requer restart)
ALTER SYSTEM SET jit = on;
SET jit = on;

­ Acionamento baseado no custo estimado da query


jit_above_cost = 100000 (default)
jit_inline_above_cost = 500000 (default)
jit_optimize_above_cost = 500000 (default)
VERIFICANDO ...
=# SET jit_above_cost = 10;
SET
=# EXPLAIN ANALYZE SELECT SUM(relpages) FROM pg_class;

QUERY PLAN
-------------------------------------------------------------------------------------------------------------
Aggregate (cost=16.27..16.29 rows=1 width=8) (actual time=6.049..6.049 rows=1 loops=1)
-> Seq Scan on pg_class (cost=0.00..15.42 rows=342 width=4) (actual time=0.019..0.052 rows=356 loops=1)
Planning Time: 0.133 ms
JIT:
Functions: 3
Options: Inlining false, Optimization false, Expressions true, Deforming true
Timing: Generation 1.259 ms, Inlining 0.000 ms, Optimization 0.797 ms, Emission 5.048 ms, Total 7.104 ms
Execution Time: 7.416 ms

Tip Use a opção BUFFERS do EXPLAIN para analisar o impacto do


uso do cache na execução da query: EXPLAIN (ANALYZE, BUFFERS)
BENCHMARK
­ TPC-H - Sistemas de suporte à decisão
­ Scale Factor 10
Banco de dados de 22GB, incluindo índices
Loop de 10 min
AWS c5.4xlarge
­ Paralelização de queries desativada
­ PG 9.6 x PG 10 x PG 11 (JIT)
BENCHMARK
Pricing Summary Report Query (Q1)

select
l_returnflag, l_linestatus,
sum(l_quantity) as sum_qty,
sum(l_extendedprice) as sum_base_price,
sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
avg(l_quantity) as avg_qty,
avg(l_extendedprice) as avg_price,
avg(l_discount) as avg_disc,
count(*) as count_order
from
lineitem
where
l_shipdate <= date '1998-12-01' - interval ':1' day
group by
l_returnflag, l_linestatus
order by
l_returnflag, l_linestatus :n -1 ;
BENCHMARK
PostgreSQL 11
29.31%
MAIS RÁPIDO

Em 10 minutos,
30 EXECUÇÕES

Fonte: https://www.citusdata.com/blog/2018/09/11/postgresql-11-just-in-time/
DÚVIDAS? RTFM

OBRIGADO!