Uso de estatísticas pelo postgre sql

Click here to load reader

  • date post

    12-Jun-2015
  • Category

    Technology

  • view

    66
  • download

    4

Embed Size (px)

description

Apresentação de José Arthur sobre estatísticas para banco de dados.

Transcript of Uso de estatísticas pelo postgre sql

  • 1. Uso de Estatsticas peloPostgreSQLJos ArthurLocaweb

2. Por que importante reduzir I/O?Latency Numbers Every Programmer Should Know L1 cache reference: 1ns Main memory reference: 100ns SSD random read: 16.000ns 16s Disk seek: 4.000.000ns 4msPorque I/O uma operao demorada.(fonte:http://www.eecs.berkeley.edu/~rcs/research/interactive_latency.html) 3. Por que importante reduzir I/O?Um banco de dados faz muitas operaes nodisco, reduzir este nmero, bem como acessar odisco de forma ordenada levam a um melhortempo de resposta.Usando estatsticas para o acesso, conseguimosreduzir o nmero de operaes no disco eatingimos o objetivo de melhorar a perfomance. 4. "customers_pkey" PRIMARY KEY, btree (customerid)"ix_cust_user_password" UNIQUE, btree (username, password)"ix_cust_username" UNIQUE, btree (username)"ix_cust_email" btree (email) WHERE email IS NOT NULL 5. Ciclo de vida de uma consulta 6. Ciclo de vida de uma consulta 7. Ciclo de vida de uma consulta 8. Ciclo de vida de uma consulta 9. Ciclo de vida de uma consulta 10. Ciclo de vida de uma consulta 11. Ciclo de vida de uma consulta 12. Atualizao das estatsticas Pelo custo da operao, as estatsticas no soatualizadas a cada modificao O processo de atualizao das estatsticas papel dovacuum (autovacuum) autovacuum_vacuum_threshold (50 tuplas) autovacuum_analyze_scale_factor (10% da tabela) Para criar as estatsticas, o banco l uma AMOSTRAALEATRIA dos dados Executar duas vezes seguidas um analyze pode resultar emestatsticas diferentes 13. postgresql.conf Baseado em uma escala arbitrria Configurvel no postgresql.conf seq_page_cost random_page_cost cpu_tuple_cost cpu_index_tuple_cost cpu_operator_cost effective_cache_size 14. Onde esto as estatsticas Estatsticas da tabela pg_class relpages: pginas da tabela (estimado) reltuples: tuplas (linhas) da tabela pg_statistic Dados estatsticos por coluna pg_stats Viso mais simples de entender Garante as permisses 15. pg_classds2=# SELECT relname, relkind, reltuples, relpages FROM pg_classWHERE relname in ('customers', 'customers_pkey','ix_cust_user_password', 'ix_cust_username', 'ix_cust_email');relname | relkind | reltuples | relpages-----------------------+---------+-------------+----------customers_pkey | i | 6e+06 | 19972ix_cust_email | i | 5.39869e+06 | 26768ix_cust_user_password | i | 6e+06 | 37765ix_cust_username | i | 6e+06 | 28061customers | r | 6e+06 | 153079(5 rows) 16. pg_statisticNome Descriostarelid O oid do objeto (tabela ou ndice)statattnum Colunastatinherit Herana de tabelastanullfrac Frao de nulosstawidth Mdia em bytes do tamanhostadistinct Elementos distintosmenor que zero: multiplicador do nmerode registrosmaior que zero: nmero de distintosstakindN Tipo da estatsticastaopN Operao da estatstica (=, Bitmap Heap Scan on orders (cost=4.59..87.30 rows=21 width=30)Recheck Cond: (customerid = customers.customerid)-> Bitmap Index Scan on ix_order_custid (cost=0.00..4.59 rows=21width=0)Index Cond: (customerid = customers.customerid) Selectivity =(1 - null_frac1) * (1 - null_frac2) * min(1/num_distinct1, 1/num_distinct2) (1 0) * (1 0,161867) * min(1/6000000, 1/0,161867) = 0.000000166666666666666667 Rows = (outer_cardinality * inner_cardinality) * selectivity (9 * 3.59648e+060) * 0.000000166666666666666667 = 4 31. Documentao PostgreSQL http://www.postgresql.org/docs/9.3/static/using-explain.html http://www.postgresql.org/docs/9.3/static/planner-stats.html http://www.postgresql.org/docs/9.3/static/planner-stats-details.htmlGIT src/backend/optimizer/util/plancat.c src/backend/optimizer/path/clausesel.c src/backend/utils/adt/selfuncs.c src/include/catalog/pg_statistic.h