Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PostgreSQL - dlaczego moje zapytania są takie wolne?

Adam Okoń
January 18, 2017

PostgreSQL - dlaczego moje zapytania są takie wolne?

Adam Okoń

January 18, 2017
Tweet

More Decks by Adam Okoń

Other Decks in Programming

Transcript

  1. PostgreSQL - Dlaczego moje
    zapytania są takie wolne?
    Adam Okoń
    Elegant Code

    View full-size slide

  2. Przykładowy EXPLAIN

    View full-size slide

  3. W jaki sposób możemy poprawić wrażenia
    z korzystania z psql?
    W jaki sposób możemy zlokalizować wolne
    zapytania?
    Jak podejść do tematu analizy i
    optymalizacji zapytań?
    Rozkład jazdy

    View full-size slide

  4. W jaki sposób mogę poprawić
    wrażenia z korzystania z
    psql?

    View full-size slide

  5. Pimp my psql przy pomocy .psqlrc
    https:/
    /github.com/thoughtbot/dotfiles/blob/
    master/psqlrc

    View full-size slide

  6. pgcli
    https:/
    /github.com/dbcli/pgcli

    View full-size slide

  7. W jaki sposób
    zlokalizować wolne
    zapytania?

    View full-size slide

  8. pg_stat_statements
    Wymagane: postgresql-contrib

    View full-size slide

  9. Przykładowa konfiguracja w pliku
    postgresql.conf

    View full-size slide

  10. SELECT
    (total_time / 1000 / 60) as total_minutes,
    (total_time/calls) as average_time,
    query
    FROM pg_stat_statements
    ORDER BY 1 DESC
    LIMIT 100;
    http:/
    /www.craigkerstiens.com/2013/01/10/more-on-postgres-
    performance/

    View full-size slide

  11. Jak podejść do
    tematu analizy i
    optymalizacji?

    View full-size slide

  12. Przykładowy EXPLAIN

    View full-size slide

  13. Czy możemy wyciągnąć
    więcej informacji na temat
    zapytania przy pomocy
    EXPLAIN?

    View full-size slide

  14. Dla nieprzekonanych EXPLAIN z
    poziomu ActiveRecord
    https:/
    /github.com/bradurani/pg-eyeballs

    View full-size slide

  15. Analiza zapytania -
    counting

    View full-size slide

  16. Analiza zapytania -
    filtrowanie

    View full-size slide

  17. Analiza zapytania -
    sortowanie

    View full-size slide

  18. Optymalizacja
    zapytania przez
    dodanie indeksów

    View full-size slide

  19. Indeksy warunkowe
    SELECT * FROM events WHERE user_id =
    1 AND active = TRUE;
    CREATE INDEX
    index_events_on_created_at ON events
    USING btree (user_id) WHERE active =
    TRUE;

    View full-size slide

  20. https:/
    /coderwall.com/p/9hxejg/advanced-rails-
    indexing-where-clause-postgresql
    Jak dodać indeks warunkowy w
    migracji ActiveRecord

    View full-size slide

  21. Co możemy zrobić kiedy
    mamy duży zbiór danych i
    chcemy dodać indeks na
    bazie produkcyjnej?

    View full-size slide

  22. Jak dodać indeks współbieżnie w
    migracji ActiveRecord
    https:/
    /robots.thoughtbot.com/how-to-create-
    postgres-indexes-concurrently-in

    View full-size slide

  23. Zrozumieć
    wykorzystanie indeksów
    SELECT relname,
    100 * idx_scan / (seq_scan + idx_scan) percent_of_times_index_used,
    n_live_tup rows_in_table
    FROM
    pg_stat_user_tables
    WHERE
    seq_scan + idx_scan > 0
    ORDER BY
    n_live_tup DESC;
    http:/
    /www.craigkerstiens.com/2012/10/01/understanding-postgres-
    performance/

    View full-size slide

  24. Przydatne linki
    https:/
    /www.postgresql.org/docs/current/static/using-explain.html
    https:/
    /robots.thoughtbot.com/reading-an-explain-analyze-query-plan
    http:/
    /www.craigkerstiens.com/2012/10/01/understanding-
    postgres-performance/
    https:/
    /devcenter.heroku.com/articles/postgresql-indexes
    http:/
    /blog.redpanthers.co/optimising-postgresql-database-query-
    using-indexes/
    http:/
    /tatiyants.com/pev/#/plans/new
    https:/
    /www.amazon.com/gp/product/184951030X

    View full-size slide

  25. Dzięki!
    Adam Okoń (@adamokon)
    https:/
    /github.com/aokon

    View full-size slide