ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ืขื ืžืกื“ื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื”ืœื•ื‘

ืื ื™ ืžืฆื™ืข ืœืš ืœืงืจื•ื ืืช ื”ืชืžืœื™ืœ ืฉืœ ื”ื“ื•"ื— ืฉืœ ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘ "ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ืขืœ ืžืกื“ื™ ื ืชื•ื ื™ื"

Shared_buffers = 25% - ื”ืื ื–ื” ื”ืจื‘ื” ืื• ืžืขื˜? ืื• ื‘ื“ื™ื•ืง ื ื›ื•ืŸ? ืื™ืš ืืชื” ื™ื•ื“ืข ืื ื”ื”ืžืœืฆื” - ื”ืžื™ื•ืฉื ืช ืœืžื“ื™ - ืžืชืื™ืžื” ื‘ืžืงืจื” ื”ืกืคืฆื™ืคื™ ืฉืœืš?

ื–ื” ื”ื–ืžืŸ ืœื’ืฉืช ืœืกื•ื’ื™ื™ืช ื‘ื—ื™ืจืช ืคืจืžื˜ืจื™ postgresql.conf "ื›ืžื• ืžื‘ื•ื’ืจ". ืœื ื‘ืขื–ืจืช "ื˜ื•ื ืจื™ื ืื•ื˜ื•ืžื˜ื™ื™ื" ืขื™ื•ื•ืจื™ื ืื• ืขืฆื•ืช ืžื™ื•ืฉื ื•ืช ืžืžืืžืจื™ื ื•ื‘ืœื•ื’ื™ื, ืืœื ืขืœ ืกืžืš:

  1. ื ื™ืกื•ื™ื™ื ืžืื•ืžืชื™ื ื‘ืงืคื“ื ื•ืช ืขืœ ืžืกื“ื™ ื ืชื•ื ื™ื, ืฉื‘ื•ืฆืขื• ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™, ื‘ื›ืžื•ื™ื•ืช ื’ื“ื•ืœื•ืช ื•ื‘ืชื ืื™ื ืงืจื•ื‘ื™ื ื›ื›ืœ ื”ืืคืฉืจ ืœ"ืงืจื‘ื™ื™ื",
  2. ื”ื‘ื ื” ืžืขืžื™ืงื” ืฉืœ ื”ืชื›ื•ื ื•ืช ืฉืœ DBMS ื•ืžืขืจื›ืช ื”ื”ืคืขืœื”.

ืฉื™ืžื•ืฉ ื‘-Nancy CLI (https://gitlab.com/postgres.ai/nancy), ื ืกืชื›ืœ ืขืœ ื“ื•ื’ืžื” ืกืคืฆื™ืคื™ืช - shared_buffers ื”ื™ื“ื•ืขื™ื ืœืฉืžืฆื” - ื‘ืžืฆื‘ื™ื ืฉื•ื ื™ื, ื‘ืคืจื•ื™ืงื˜ื™ื ืฉื•ื ื™ื ื•ื ื ืกื” ืœื”ื‘ื™ืŸ ื›ื™ืฆื“ ืœื‘ื—ื•ืจ ืืช ื”ื”ื’ื“ืจื” ื”ืื•ืคื˜ื™ืžืœื™ืช ืขื‘ื•ืจ ื”ืชืฉืชื™ืช, ืžืกื“ ื”ื ืชื•ื ื™ื ื•ื”ืขื•ืžืก ืฉืœื ื•.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื ื“ื‘ืจ ืขืœ ื ื™ืกื•ื™ื™ื ืขื ืžืกื“ื™ ื ืชื•ื ื™ื. ื–ื”ื• ืกื™ืคื•ืจ ืฉื ืžืฉืš ืงืฆืช ื™ื•ืชืจ ืžื—ืฆื™ ืฉื ื”.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืžืขื˜ ืขืœื™. ื ื™ืกื™ื•ืŸ ืขื Postgres ื™ื•ืชืจ ืž-14 ืฉื ื™ื. ืžืกืคืจ ื—ื‘ืจื•ืช ืจืฉืชื•ืช ื—ื‘ืจืชื™ื•ืช ื™ื™ืกื“ื•. Postgres ื”ื™ื” ื•ืžืฉืžืฉ ื‘ื›ืœ ืžืงื•ื.

ื’ื ืงื‘ื•ืฆืช RuPostgres ื‘-Meetup, ืžืงื•ื 2 ื‘ืขื•ืœื. ืื ื—ื ื• ืžืชืงืจื‘ื™ื ืœืื˜ ืœืื˜ ืœ-2 ืื™ืฉ. RuPostgres.org.

ื•ื‘ืžื—ืฉื‘ื™ื ืฉืœ ื›ื ืกื™ื ืฉื•ื ื™ื, ื›ื•ืœืœ Highload, ืื ื™ ืื—ืจืื™ ืขืœ ืžืกื“ื™ ื ืชื•ื ื™ื, ื‘ืคืจื˜ Postgres ืžื”ื”ืชื—ืœื”.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื•ื‘ืฉื ื™ื ื”ืื—ืจื•ื ื•ืช, ื”ืชื—ืœืชื™ ืžื—ื“ืฉ ืืช ืคืจืงื˜ื™ืงืช ื”ื™ื™ืขื•ืฅ ืฉืœื™ Postgres 11 ืื–ื•ืจื™ ื–ืžืŸ ืžื›ืืŸ.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื•ื›ืฉืขืฉื™ืชื™ ืืช ื–ื” ืœืคื ื™ ื›ืžื” ืฉื ื™ื, ื”ื™ื™ืชื” ืœื™ ื”ืคืกืงื” ืžืกื•ื™ืžืช ื‘ืขื‘ื•ื“ื” ื™ื“ื ื™ืช ืคืขื™ืœื” ืขื Postgres, ื›ื ืจืื” ืžืื– 2010. ื”ื•ืคืชืขืชื™ ืขื“ ื›ืžื” ืฉื’ืจืช ื”ืขื‘ื•ื“ื” ืฉืœ DBA ื”ืฉืชื ืชื”, ื•ื›ืžื” ืขื‘ื•ื“ืช ื›ืคื™ื™ื ืขื“ื™ื™ืŸ ืฆืจื™ื›ื” ืœืฉืžืฉ. ื•ืžื™ื“ ื—ืฉื‘ืชื™ ืฉืžืฉื”ื• ืคื” ืœื ื‘ืกื“ืจ, ืื ื™ ืฆืจื™ืš ืœืขืฉื•ืช ื™ื•ืชืจ ืžื”ื›ืœ.

ื•ืžื›ื™ื•ื•ืŸ ืฉื”ื›ืœ ื”ื™ื” ืžืจื•ื—ืง, ืจื•ื‘ ื”ืœืงื•ื—ื•ืช ื”ื™ื• ื‘ืขื ื ื™ื. ื•ื”ืจื‘ื” ื›ื‘ืจ ื ืขืฉื” ืื•ื˜ื•ืžื˜ื™ืช, ื‘ืจื•ืจ. ืขื•ื“ ืขืœ ื›ืš ื‘ื”ืžืฉืš. ื›ืœื•ืžืจ, ื›ืœ ื–ื” ื”ื‘ื™ื ืœืจืขื™ื•ืŸ ืฉืฆืจื™ืš ืœื”ื™ื•ืช ืžืกืคืจ ื›ืœื™ื, ื›ืœื•ืžืจ, ืื™ื–ื•ืฉื”ื™ ืคืœื˜ืคื•ืจืžื” ืฉืชื”ืคื•ืš ื›ืžืขื˜ ืืช ื›ืœ ืคืขื•ืœื•ืช ื”-DBA ืœืื•ื˜ื•ืžื˜ื™ื•ืช ื›ืš ืฉื ื™ืชืŸ ื™ื”ื™ื” ืœื ื”ืœ ืžืกืคืจ ืจื‘ ืฉืœ ืžืกื“ื™ ื ืชื•ื ื™ื.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื“ื•ื— ื–ื” ืœื ื™ื›ืœื•ืœ:

  • "ื›ื“ื•ืจื™ ื›ืกืฃ" ื•ื”ืฆื”ืจื•ืช ื›ืžื• - ื”ื’ื“ืจ 8 GB ืื• 25% shared_buffers ื•ืืชื” ืชื”ื™ื” ื‘ืกื“ืจ. ืœื ื™ื”ื™ื” ื”ืจื‘ื” ืขืœ shared_buffers.
  • ื”ืืจื“ืงื•ืจ "ืงืจื‘ื™ื™ื".

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื•ืžื” ื™ืงืจื”?

  • ื™ื”ื™ื• ืขืงืจื•ื ื•ืช ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืื ื• ืžื™ื™ืฉืžื™ื ื•ืžืคืชื—ื™ื. ื™ื”ื™ื• ื›ืœ ืžื™ื ื™ ืจืขื™ื•ื ื•ืช ืฉืขื•ืœื™ื ื‘ื“ืจืš ื•ื›ืœื™ื ืฉื•ื ื™ื ืฉืื ื—ื ื• ื™ื•ืฆืจื™ื ืœืจื•ื‘ ื‘-Open Source, ื›ืœื•ืžืจ ืื ื—ื ื• ืขื•ืฉื™ื ืืช ื”ื‘ืกื™ืก ื‘-Open Source. ื™ืชืจ ืขืœ ื›ืŸ, ื™ืฉ ืœื ื• ื›ืจื˜ื™ืกื™ื, ื›ืœ ื”ืชืงืฉื•ืจืช ื”ื™ื ืœืžืขืฉื” ืงื•ื“ ืคืชื•ื—. ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืžื” ืื ื—ื ื• ืขื•ืฉื™ื ืขื›ืฉื™ื•, ืžื” ื™ื”ื™ื” ื‘ืžื”ื“ื•ืจื” ื”ื‘ืื” ื•ื›ื•'.
  • ื›ืžื• ื›ืŸ, ื™ื”ื™ื” ื ื™ืกื™ื•ืŸ ืžืกื•ื™ื ื‘ืฉื™ืžื•ืฉ ื‘ืขืงืจื•ื ื•ืช ืืœื•, ื‘ื›ืœื™ื ืืœื• ื‘ืžืกืคืจ ื—ื‘ืจื•ืช: ืžืกื˜ืืจื˜ืืคื™ื ืงื˜ื ื™ื ื•ืขื“ ื—ื‘ืจื•ืช ื’ื“ื•ืœื•ืช.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืื™ืš ื›ืœ ื–ื” ืžืชืคืชื—?

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืจืืฉื™ืช, ื”ืžืฉื™ืžื” ื”ืขื™ืงืจื™ืช ืฉืœ DBA, ื‘ื ื•ืกืฃ ืœื”ื‘ื˜ื—ืช ื™ืฆื™ืจืช ืžื•ืคืขื™ื, ืคืจื™ืกืช ื’ื™ื‘ื•ื™ื™ื ื•ื›ื•', ื”ื™ื ืœืžืฆื•ื ืฆื•ื•ืืจื™ ื‘ืงื‘ื•ืง ื•ืœื™ื™ืขืœ ืืช ื”ื‘ื™ืฆื•ืขื™ื.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืขื›ืฉื™ื• ื–ื” ืžื•ื’ื“ืจ ื›ื›ื”. ืื ื—ื ื• ืžืกืชื›ืœื™ื ืขืœ ื”ื ื™ื˜ื•ืจ, ืื ื—ื ื• ืจื•ืื™ื ืžืฉื”ื•, ืื‘ืœ ื—ืกืจื™ื ืœื ื• ื›ืžื” ืคืจื˜ื™ื. ืื ื—ื ื• ืžืชื—ื™ืœื™ื ืœื—ืคื•ืจ ื‘ื–ื”ื™ืจื•ืช ืจื‘ื” ื™ื•ืชืจ, ื‘ื“ืจืš ื›ืœืœ ืขื ื”ื™ื“ื™ื™ื, ื•ืžื‘ื™ื ื™ื ืžื” ืœืขืฉื•ืช ืขื ื–ื” ื›ืš ืื• ืื—ืจืช.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื•ื™ืฉ ืฉืชื™ ื’ื™ืฉื•ืช. Pg_stat_statements ื”ื•ื ืคืชืจื•ืŸ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืœื–ื™ื”ื•ื™ ืฉืื™ืœืชื•ืช ืื™ื˜ื™ื•ืช. ื•ื ื™ืชื•ื— ืฉืœ ื™ื•ืžื ื™ Postgres ื‘ืืžืฆืขื•ืช pgBadger.

ืœื›ืœ ื’ื™ืฉื” ื™ืฉ ื—ืกืจื•ื ื•ืช ืจืฆื™ื ื™ื™ื. ื‘ื’ื™ืฉื” ื”ืจืืฉื•ื ื”, ื–ืจืงื ื• ืืช ื›ืœ ื”ืคืจืžื˜ืจื™ื. ื•ืื ื ืจืื” ืืช ื”ืงื‘ื•ืฆื•ืช SELECT * FROM ื”ื˜ื‘ืœื” ืฉื‘ื” ื”ืขืžื•ื“ื” ืฉื•ื•ื” ืœ-"?" ืื• "$" ืžืื– Postgres 10. ืื ื—ื ื• ืœื ื™ื•ื“ืขื™ื ืื ื–ื• ืกืจื™ืงืช ืื™ื ื“ืงืก ืื• ืกืจื™ืงืช seq. ื–ื” ืžืื•ื“ ืชืœื•ื™ ื‘ืคืจืžื˜ืจ. ืื ืชื—ืœื™ืฃ ืฉื ืขืจืš ื ื“ื™ืจ ืฉื ืชืงืœ ื‘ื•, ื–ื• ืชื”ื™ื” ืกืจื™ืงืช ืื™ื ื“ืงืก. ืื ืชื—ืœื™ืฃ ืฉื ืขืจืš ืฉืชื•ืคืก 90% ืžื”ื˜ื‘ืœื”, ืกืจื™ืงืช ื”ื”ืžืฉืš ืชื”ื™ื” ื‘ืจื•ืจื”, ื›ื™ Postgres ื™ื•ื“ืข ืืช ื”ืกื˜ื˜ื™ืกื˜ื™ืงื”. ื•ื–ื” ื—ืกืจื•ืŸ ื’ื“ื•ืœ ืฉืœ pg_stat_statements, ืœืžืจื•ืช ืฉื—ืœืง ืžื”ืขื‘ื•ื“ื” ืžืชื‘ืฆืขืช.

ื”ื—ื™ืกืจื•ืŸ ื”ื’ื“ื•ืœ ื‘ื™ื•ืชืจ ืฉืœ ื ื™ืชื•ื— ื™ื•ืžืŸ ื”ื•ื ืฉืืชื” ืœื ื™ื›ื•ืœ ืœื”ืจืฉื•ืช ืœืขืฆืžืš "log_min_duration_statement = 0" ื›ื›ืœืœ. ื•ื’ื ืขืœ ื–ื” ื ื“ื‘ืจ. ื‘ื”ืชืื ืœื›ืš, ืื™ื ืš ืจื•ืื” ืืช ื›ืœ ื”ืชืžื•ื ื”. ื•ืฉืื™ืœืชื” ื›ืœืฉื”ื™, ืฉื”ื™ื ืžื”ื™ืจื” ืžืื•ื“, ืขืฉื•ื™ื” ืœืฆืจื•ืš ื›ืžื•ืช ืขืฆื•ืžื” ืฉืœ ืžืฉืื‘ื™ื, ืื‘ืœ ืืชื” ืœื ืชืจืื” ืื•ืชื” ื›ื™ ื”ื™ื ืžืชื—ืช ืœืกืฃ ืฉืœืš.

ืื™ืš DBAs ืคื•ืชืจื™ื ืืช ื”ื‘ืขื™ื•ืช ืฉื”ื ืžื•ืฆืื™ื?

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืœื“ื•ื’ืžื”, ืžืฆืื ื• ื‘ืขื™ื” ื›ืœืฉื”ื™. ืžื” ืขื•ืฉื™ื ื‘ื“ืจืš ื›ืœืœ? ืื ืืชื” ืžืคืชื—, ืื– ืืชื” ืชืขืฉื” ืžืฉื”ื• ื‘ืžื•ืคืข ื›ืœืฉื”ื• ืฉื”ื•ื ืœื ื‘ืื•ืชื• ื’ื•ื“ืœ. ืื ืืชื” DBA, ืื– ื™ืฉ ืœืš ื‘ื™ืžื•ื™. ื•ื™ื›ื•ืœ ืœื”ื™ื•ืช ืจืง ืื—ื“. ื•ื”ื•ื ื”ื™ื” ื‘ืคื™ื’ื•ืจ ืฉืœ ืฉื™ืฉื” ื—ื•ื“ืฉื™ื. ื•ืืชื” ื—ื•ืฉื‘ ืฉืชืœืš ืœื”ืคืงื”. ื•ืืคื™ืœื• DBAs ืžื ื•ืกื™ื ื•ืื– ืœื‘ื“ื•ืง ื‘ื™ื™ืฆื•ืจ, ืขืœ ื”ืขืชืง. ื•ืงื•ืจื” ืฉื”ื ื™ื•ืฆืจื™ื ืื™ื ื“ืงืก ื–ืžื ื™, ืžื•ื•ื“ืื™ื ืฉื”ื•ื ืขื•ื–ืจ, ื–ื•ืจืงื™ื ืื•ืชื• ื•ื ื•ืชื ื™ื ืœืžืคืชื—ื™ื ื›ื“ื™ ืฉื™ื›ื ื™ืกื• ืื•ืชื• ืœืงื‘ืฆื™ ื”ื”ื’ื™ืจื”. ื–ื” ืžืกื•ื’ ื”ืฉื˜ื•ื™ื•ืช ืฉืงื•ืจื•ืช ืขื›ืฉื™ื•. ื•ื–ื• ื‘ืขื™ื”.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

  • ื›ื•ื•ื ืŸ ืชืฆื•ืจื•ืช.
  • ื‘ืฆืข ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ืกื˜ ื”ืื™ื ื“ืงืกื™ื.
  • ืฉื ื” ืืช ืฉืื™ืœืชืช SQL ืขืฆืžื” (ื–ื• ื”ืฉื™ื˜ื” ื”ืงืฉื” ื‘ื™ื•ืชืจ).
  • ื”ื•ืกืฃ ืงื™ื‘ื•ืœืช (ื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ ื‘ืจื•ื‘ ื”ืžืงืจื™ื).

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื™ืฉ ื”ืจื‘ื” ื“ื‘ืจื™ื ืฉืงื•ืจื™ื ื‘ื“ื‘ืจื™ื ื”ืืœื”. ื™ืฉ ื”ืจื‘ื” ื™ื“ื™ื•ืช ื‘-Postgres. ื™ืฉ ื”ืจื‘ื” ืžื” ืœื“ืขืช. ื™ืฉ ื”ืจื‘ื” ืื™ื ื“ืงืกื™ื ื‘-Postgres, ืชื•ื“ื” ื’ื ืœืžืืจื’ื ื™ ื”ื›ื ืก ื”ื–ื”. ื•ื›ืœ ื–ื” ืฆืจื™ืš ืœื“ืขืช, ื•ื–ื” ืžื” ืฉื’ื•ืจื ืœื-DBA ืœื”ืจื’ื™ืฉ ื›ืื™ืœื• DBAs ืžืชืจื’ืœื™ื ืžืื’ื™ื” ืฉื—ื•ืจื”. ื›ืœื•ืžืจ, ืืชื” ืฆืจื™ืš ืœืœืžื•ื“ 10 ืฉื ื™ื ื›ื“ื™ ืœื”ืชื—ื™ืœ ืœื”ื‘ื™ืŸ ืืช ื›ืœ ื–ื” ื›ืจื’ื™ืœ.

ื•ืื ื™ ืœื•ื—ื ื ื’ื“ ื”ืงืกื ื”ืฉื—ื•ืจ ื”ื–ื”. ืื ื™ ืจื•ืฆื” ืœืขืฉื•ืช ื”ื›ืœ ื›ื“ื™ ืฉืชื”ื™ื” ื˜ื›ื ื•ืœื•ื’ื™ื”, ื•ืฉืื™ืŸ ืื™ื ื˜ื•ืื™ืฆื™ื” ื‘ื›ืœ ื–ื”.

ื“ื•ื’ืžืื•ืช ืžื”ื—ื™ื™ื ื”ืืžื™ืชื™ื™ื

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืจืื™ืชื™ ืืช ื–ื” ืœืคื—ื•ืช ื‘ืฉื ื™ ืคืจื•ื™ืงื˜ื™ื, ื›ื•ืœืœ ืฉืœื™. ืคื•ืกื˜ ืื—ืจ ื‘ื‘ืœื•ื’ ืื•ืžืจ ืœื ื• ืฉืขืจืš ืฉืœ 1 ืขื‘ื•ืจ default_statistict_target ื”ื•ื ื˜ื•ื‘. ืื•ืงื™ื™, ื‘ื•ื ื ื ืกื” ืืช ื–ื” ื‘ื”ืคืงื”.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื•ื”ื ื” ืื ื—ื ื• ื›ืืŸ, ื‘ืขื–ืจืช ื”ื›ืœื™ ืฉืœื ื• ืฉื ืชื™ื™ื ืžืื•ื—ืจ ื™ื•ืชืจ, ื‘ืขื–ืจืช ื ื™ืกื•ื™ื™ื ื‘ืžืื’ืจื™ ื”ืžื™ื“ืข ืฉืขืœื™ื”ื ืื ื—ื ื• ืžื“ื‘ืจื™ื ื”ื™ื•ื, ื ื•ื›ืœ ืœื”ืฉื•ื•ืช ื‘ื™ืŸ ืžื” ืฉื”ื™ื” ืœื‘ื™ืŸ ืžื” ืฉื”ืคืš.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื•ื‘ืฉื‘ื™ืœ ื–ื” ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื™ืฆื•ืจ ื ื™ืกื•ื™. ื”ื•ื ืžื•ืจื›ื‘ ืžืืจื‘ืขื” ื—ืœืงื™ื.

  • ื”ืจืืฉื•ืŸ ื”ื•ื ื”ืกื‘ื™ื‘ื”. ืื ื—ื ื• ืฆืจื™ื›ื™ื ื—ืชื™ื›ืช ื—ื•ืžืจื”. ื•ื›ืฉืื ื™ ืžื’ื™ืข ืœืื™ื–ื• ื—ื‘ืจื” ื•ื—ื•ืชื ืขืœ ื—ื•ื–ื”, ืื ื™ ืื•ืžืจ ืœื”ื ืœืชืช ืœื™ ืืช ืื•ืชื” ื—ื•ืžืจื” ื›ืžื• ื‘ื™ื™ืฆื•ืจ. ืขื‘ื•ืจ ื›ืœ ืื—ื“ ืžื”ืžืืกื˜ืจื™ื ืฉืœืš, ืื ื™ ืฆืจื™ืš ืœืคื—ื•ืช ืคื™ืกืช ื—ื•ืžืจื” ืื—ืช ื›ื–ื•. ืื• ืฉื–ื•ื”ื™ ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืœืžืฉืœ ื‘ืืžื–ื•ืŸ ืื• ื‘ื’ื•ื’ืœ, ืื• ืฉืื ื™ ืฆืจื™ืš ื‘ื“ื™ื•ืง ืืช ืื•ืชื” ื—ื•ืžืจื”. ื›ืœื•ืžืจ, ืื ื™ ืจื•ืฆื” ืœื™ืฆื•ืจ ืžื—ื“ืฉ ืืช ื”ืกื‘ื™ื‘ื”. ื•ื‘ืžื•ืฉื’ ื”ืกื‘ื™ื‘ื” ืื ื• ื›ื•ืœืœื™ื ืืช ื”ื’ืจืกื” ื”ืขื™ืงืจื™ืช ืฉืœ Postgres.
  • ื”ื—ืœืง ื”ืฉื ื™ ื”ื•ื ืžื•ืฉื ื”ืžื—ืงืจ ืฉืœื ื•. ื–ื”ื• ืžืกื“ ื ืชื•ื ื™ื. ื ื™ืชืŸ ืœื™ืฆื•ืจ ืื•ืชื• ื‘ื›ืžื” ื“ืจื›ื™ื. ืื ื™ ืืจืื” ืœืš ืื™ืš.
  • ื”ื—ืœืง ื”ืฉืœื™ืฉื™ ื”ื•ื ื”ืขื•ืžืก. ื–ื” ื”ืจื’ืข ื”ื›ื™ ืงืฉื”.
  • ื•ื”ื—ืœืง ื”ืจื‘ื™ืขื™ ื”ื•ื ืžื” ืื ื—ื ื• ื‘ื•ื“ืงื™ื, ื›ืœื•ืžืจ ืžื” ื ืฉื•ื•ื” ืœืžื”. ื ื ื™ื— ืฉื ื•ื›ืœ ืœืฉื ื•ืช ืคืจืžื˜ืจ ืื—ื“ ืื• ื™ื•ืชืจ ื‘ืชืฆื•ืจื”, ืื• ืฉื ื•ื›ืœ ืœื™ืฆื•ืจ ืื™ื ื“ืงืก ื•ื›ื•'.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืื ื—ื ื• ืคื•ืชื—ื™ื ื ื™ืกื•ื™. ื”ื ื” pg_stat_statements. ื‘ืฆื“ ืฉืžืืœ ื–ื” ืžื” ืฉืงืจื”. ืžื™ืžื™ืŸ - ืžื” ืงืจื”.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืžืฉืžืืœ default_statistics_target = 100, ืžื™ืžื™ืŸ = 1. ืื ื—ื ื• ืจื•ืื™ื ืฉื–ื” ืขื–ืจ ืœื ื•. ื‘ืกืš ื”ื›ืœ, ื”ื›ืœ ื”ืฉืชืคืจ ื‘-000%.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืื‘ืœ ืื ื ื’ืœื•ืœ ืœืžื˜ื”, ื™ื”ื™ื• ืงื‘ื•ืฆื•ืช ืฉืœ ื‘ืงืฉื•ืช ืž-pgBadger ืื• ืž-pg_stat_statements. ื™ืฉื ืŸ ืฉืชื™ ืืคืฉืจื•ื™ื•ืช. ื ืจืื” ืฉื—ืœืง ืžื”ื‘ืงืฉื•ืช ื™ืจื“ ื‘-88%. ื•ื›ืืŸ ืžื’ื™ืขื” ื”ื’ื™ืฉื” ื”ื”ื ื“ืกื™ืช. ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื—ืคื•ืจ ื™ื•ืชืจ ืคื ื™ืžื” ื›ื™ ืื ื—ื ื• ืชื•ื”ื™ื ืœืžื” ื”ื•ื ืฉืงืข. ืืชื” ืฆืจื™ืš ืœื”ื‘ื™ืŸ ืžื” ืงืจื” ืขื ื”ืกื˜ื˜ื™ืกื˜ื™ืงื”. ืžื“ื•ืข ื™ื•ืชืจ ื“ืœื™ื™ื ื‘ืกื˜ื˜ื™ืกื˜ื™ืงื” ืžื•ื‘ื™ืœื™ื ืœืชื•ืฆืื•ืช ื’ืจื•ืขื•ืช ื™ื•ืชืจ.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืื• ืฉืื ื—ื ื• ืœื ื™ื›ื•ืœื™ื ืœื—ืคื•ืจ, ืื‘ืœ ืœืขืฉื•ืช "ALTER TABLE ... ALTER COLUMN" ื•ืœื”ื—ื–ื™ืจ 100 ื“ืœื™ื™ื ื‘ื—ื–ืจื” ืœืกื˜ื˜ื™ืกื˜ื™ืงื” ืฉืœ ื”ืขืžื•ื“ื” ื”ื–ื•. ื•ืื– ืขื ื ื™ืกื•ื™ ื ื•ืกืฃ ื ื•ื›ืœ ืœื•ื•ื“ื ืฉื”ืชื™ืงื•ืŸ ื”ื–ื” ืขื–ืจ. ืืช ื›ืœ. ื–ื•ื”ื™ ื’ื™ืฉื” ื”ื ื“ืกื™ืช ืฉืขื•ื–ืจืช ืœื ื• ืœืจืื•ืช ืืช ื”ืชืžื•ื ื” ื”ื›ื•ืœืœืช ื•ืœืงื‘ืœ ื”ื—ืœื˜ื•ืช ืขืœ ืกืžืš ื ืชื•ื ื™ื ื•ืœื ืขืœ ืื™ื ื˜ื•ืื™ืฆื™ื”.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื›ืžื” ื“ื•ื’ืžืื•ืช ืžืชื—ื•ืžื™ื ืื—ืจื™ื. ื™ืฉื ื ืžื‘ื—ื ื™ CI ื‘ื‘ื“ื™ืงื•ืช ื‘ืžืฉืš ืฉื ื™ื ืจื‘ื•ืช. ื•ืฉื•ื ืคืจื•ื™ืงื˜ ื‘ื“ืขืชื• ืœื ื™ื—ื™ื” ืœืœื ื‘ื“ื™ืงื•ืช ืื•ื˜ื•ืžื˜ื™ื•ืช.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื‘ืชืขืฉื™ื•ืช ืื—ืจื•ืช: ื‘ืชืขื•ืคื”, ื‘ืชืขืฉื™ื™ืช ื”ืจื›ื‘, ื›ืฉืื ื—ื ื• ื‘ื•ื“ืงื™ื ืื•ื•ื™ืจื•ื“ื™ื ืžื™ืงื”, ื™ืฉ ืœื ื• ื’ื ืืคืฉืจื•ืช ืœืขืฉื•ืช ื ื™ืกื•ื™ื™ื. ืœื ื ืฉื’ืจ ืžืฉื”ื• ืžืชื•ืš ืฆื™ื•ืจ ื™ืฉื™ืจื•ืช ืœื—ืœืœ, ืื• ืฉืœื ื ื™ืงื— ืžื™ื“ ืžื›ื•ื ื™ืช ื›ืœืฉื”ื™ ืœืžืกืœื•ืœ. ืœืžืฉืœ, ื™ืฉ ืžื ื”ืจืช ืจื•ื—.

ืื ื• ื™ื›ื•ืœื™ื ืœื”ืกื™ืง ืžืกืงื ื•ืช ืžืชืฆืคื™ื•ืช ืขืœ ืชืขืฉื™ื•ืช ืื—ืจื•ืช.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืจืืฉื™ืช, ื™ืฉ ืœื ื• ืกื‘ื™ื‘ื” ืžื™ื•ื—ื“ืช. ื–ื” ืงืจื•ื‘ ืœื™ื™ืฆื•ืจ, ืื‘ืœ ืœื ืงืจื•ื‘. ื”ืชื›ื•ื ื” ื”ืขื™ืงืจื™ืช ืฉืœื• ื”ื™ื ืฉื”ื•ื ืฆืจื™ืš ืœื”ื™ื•ืช ื–ื•ืœ, ืฉื ื™ืชืŸ ืœื—ื–ื•ืจ ืขืœื™ื• ื•ืื•ื˜ื•ืžื˜ื™ ื›ื›ืœ ื”ืืคืฉืจ. ื•ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ื’ื ื›ืœื™ื ืžื™ื•ื—ื“ื™ื ืœื‘ื™ืฆื•ืข ื ื™ืชื•ื— ืžืคื•ืจื˜.

ืกื‘ื™ืจ ืœื”ื ื™ื— ืฉื›ืืฉืจ ืื ื• ืžืฉื’ืจื™ื ืžื˜ื•ืก ื•ื˜ืกื™ื, ื™ืฉ ืœื ื• ืคื—ื•ืช ื”ื–ื“ืžื ื•ืช ืœืœืžื•ื“ ื›ืœ ืžื™ืœื™ืžื˜ืจ ืฉืœ ืคื ื™ ื”ื›ื ืฃ ืžืืฉืจ ื‘ืžื ื”ืจืช ืจื•ื—. ื™ืฉ ืœื ื• ื™ื•ืชืจ ื›ืœื™ ืื‘ื—ื•ืŸ. ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ืจืฉื•ืช ืœืขืฆืžื ื• ืœืฉืืช ืขื•ื“ ื“ื‘ืจื™ื ื›ื‘ื“ื™ื ืฉืื ื—ื ื• ืœื ื™ื›ื•ืœื™ื ืœื”ืจืฉื•ืช ืœืขืฆืžื ื• ืœื”ืขืœื•ืช ืขืœ ืžื˜ื•ืก ื‘ืื•ื•ื™ืจ. ืื•ืชื• ื“ื‘ืจ ืขื Postgres. ืื ื• ืขืฉื•ื™ื™ื, ื‘ืžืงืจื™ื ืžืกื•ื™ืžื™ื, ืœืืคืฉืจ ืจื™ืฉื•ื ืžืœื ืฉืœ ืฉืื™ืœืชื•ืช ื‘ืžื”ืœืš ื ื™ืกื•ื™ื™ื. ื•ืื ื—ื ื• ืœื ืจื•ืฆื™ื ืœืขืฉื•ืช ืืช ื–ื” ื‘ื”ืคืงื”. ืื•ืœื™ ืืคื™ืœื• ื ืชื›ื ืŸ ืœืืคืฉืจ ื–ืืช ื‘ืืžืฆืขื•ืช auto_explain.

ื•ื›ืžื• ืฉืืžืจืชื™, ืจืžื” ื’ื‘ื•ื”ื” ืฉืœ ืื•ื˜ื•ืžืฆื™ื” ืคื™ืจื•ืฉื” ืฉืื ื—ื ื• ืœื•ื—ืฆื™ื ืขืœ ื”ื›ืคืชื•ืจ ื•ื—ื•ื–ืจื™ื. ื›ื›ื” ื–ื” ืฆืจื™ืš ืœื”ื™ื•ืช, ื›ื“ื™ ืฉื™ื”ื™ื• ื”ืจื‘ื” ื ื™ืกื•ื™ื™ื, ื›ื“ื™ ืฉื–ื” ื™ื”ื™ื” ื‘ื–ืจื.

ื ื ืกื™ CLI - ื”ื‘ืกื™ืก ืฉืœ "ืžืขื‘ื“ืช ืžืกื“ื™ ื”ื ืชื•ื ื™ื"

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื•ื›ืš ืขืฉื™ื ื• ืืช ื”ื“ื‘ืจ ื”ื–ื”. ื›ืœื•ืžืจ, ื“ื™ื‘ืจืชื™ ืขืœ ื”ืจืขื™ื•ื ื•ืช ื”ืืœื” ื‘ื™ื•ื ื™, ืœืคื ื™ ื›ืžืขื˜ ืฉื ื”. ื•ื›ื‘ืจ ื™ืฉ ืœื ื• ืืช ืžื” ืฉื ืงืจื ื ื ืกื™ CLI ื‘ืงื•ื“ ืคืชื•ื—. ื–ื”ื• ื”ื‘ืกื™ืก ืœื‘ื ื™ื™ืช ืžืขื‘ื“ืช ืžืกื“ ื ืชื•ื ื™ื.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื ื ืกื™ - ื–ื” ื‘ืงื•ื“ ืคืชื•ื—, ื‘-Gitlab. ืืชื” ื™ื›ื•ืœ ืœื”ื’ื™ื“ ืืช ื–ื”, ืืชื” ื™ื›ื•ืœ ืœื ืกื•ืช ืืช ื–ื”. ื”ื‘ืืชื™ ืงื™ืฉื•ืจ ื‘ืฉืงื•ืคื™ื•ืช. ืืชื” ื™ื›ื•ืœ ืœืœื—ื•ืฅ ืขืœื™ื• ื•ื”ื•ื ื™ื”ื™ื” ืฉื ืœืขื–ื•ืจ ืขื ื›ืœ ื”ื›ื‘ื•ื“.

ื›ืžื•ื‘ืŸ, ื™ืฉ ื”ืจื‘ื” ืขื“ื™ื™ืŸ ื‘ืคื™ืชื•ื—. ื™ืฉ ืฉื ื”ืจื‘ื” ืจืขื™ื•ื ื•ืช. ืื‘ืœ ื–ื” ืžืฉื”ื• ืฉืื ื—ื ื• ืžืฉืชืžืฉื™ื ื‘ื• ื›ืžืขื˜ ื›ืœ ื™ื•ื. ื•ื›ืฉื™ืฉ ืœื ื• ืจืขื™ื•ืŸ - ืœืžื” ื–ื” ืฉื›ืืฉืจ ืื ื• ืžื•ื—ืงื™ื 40 ืฉื•ืจื•ืช, ื”ื›ืœ ืžืกืชื›ื ื‘-IO, ืื– ื ื•ื›ืœ ืœืขืจื•ืš ื ื™ืกื•ื™ ื•ืœื‘ื—ื•ืŸ ื‘ื™ืชืจ ืคื™ืจื•ื˜ ืœื”ื‘ื™ืŸ ืžื” ืงื•ืจื” ื•ืื– ืœื ืกื•ืช ืœืชืงืŸ ืืช ื–ื” ืชื•ืš ื›ื“ื™ ืชื ื•ืขื”. ื›ืœื•ืžืจ, ืื ื—ื ื• ืขื•ืฉื™ื ื ื™ืกื•ื™. ืœื“ื•ื’ืžื”, ืื ื• ืžืฉื ื™ื ืžืฉื”ื• ื•ืจื•ืื™ื ืžื” ืงื•ืจื” ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ. ื•ืื ื—ื ื• ืœื ืขื•ืฉื™ื ืืช ื–ื” ื‘ื”ืคืงื”. ื–ื• ืžื”ื•ืช ื”ืจืขื™ื•ืŸ.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืื™ืคื” ื–ื” ื™ื›ื•ืœ ืœืขื‘ื•ื“? ื–ื” ื™ื›ื•ืœ ืœืขื‘ื•ื“ ื‘ืื•ืคืŸ ืžืงื•ืžื™, ื›ืœื•ืžืจ ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ืืช ื–ื” ื‘ื›ืœ ืžืงื•ื, ืืชื” ื™ื›ื•ืœ ืืคื™ืœื• ืœื”ืคืขื™ืœ ืืช ื–ื” ืขืœ MacBook. ืื ื—ื ื• ืฆืจื™ื›ื™ื ื“ื•ืงืจ, ื‘ื•ื ื ืœืš. ื–ื” ื”ื›ืœ. ืืชื” ื™ื›ื•ืœ ืœื”ืคืขื™ืœ ืื•ืชื• ื‘ืžืงืจื” ืžืกื•ื™ื ืขืœ ืคื™ืกืช ื—ื•ืžืจื”, ืื• ื‘ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช, ื‘ื›ืœ ืžืงื•ื.

ื•ื™ืฉ ื’ื ื”ื–ื“ืžื ื•ืช ืœืจื•ืฅ ืžืจื—ื•ืง ื‘ืืžื–ื•ืŸ ื‘-EC2 Instance, ื‘ื ืงื•ื“ื•ืช. ื•ื–ื• ื”ื–ื“ืžื ื•ืช ืžื’ื ื™ื‘ื” ืžืื•ื“. ืœื“ื•ื’ืžื”, ืืชืžื•ืœ ืขืจื›ื ื• ื™ื•ืชืจ ืž-500 ื ื™ืกื•ื™ื™ื ื‘ืžื•ืคืข i3, ื”ื—ืœ ืžื”ืฆืขื™ืจ ื‘ื™ื•ืชืจ ื•ื›ืœื” ื‘-i3-16-xlarge. ื•-500 ื ื™ืกื•ื™ื™ื ืขืœื• ืœื ื• 64 ื“ื•ืœืจ. ื›ืœ ืื—ื“ ื ืžืฉืš 15 ื“ืงื•ืช. ื›ืœื•ืžืจ, ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ืฉืžืฉืชืžืฉื™ื ืฉื ื‘ืกืคื•ื˜ื™ื, ื–ื” ืžืื•ื“ ื–ื•ืœ - 70% ื”ื ื—ื”, ื”ื—ื™ื•ื‘ ืฉืœ ืืžื–ื•ืŸ ืœืฉื ื™ื™ื”. ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ื”ืจื‘ื”. ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ืžื—ืงืจ ืืžื™ืชื™.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื•ืฉืœื•ืฉ ื’ืจืกืื•ืช ืขื™ืงืจื™ื•ืช ืฉืœ Postgres ื ืชืžื›ื•ืช. ื–ื” ืœื ื›ืœ ื›ืš ืงืฉื” ืœืกื™ื™ื ื›ืžื” ื™ืฉื ื™ื ื•ื’ื ืืช ื”ื’ืจืกื” ื”-12 ื”ื—ื“ืฉื”.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืื ื• ื™ื›ื•ืœื™ื ืœื”ื’ื“ื™ืจ ืื•ื‘ื™ื™ืงื˜ ื‘ืฉืœื•ืฉ ื“ืจื›ื™ื. ื–ึถื”:

  • ืงื•ื‘ืฅ dump/sql.
  • ื”ื“ืจืš ื”ืขื™ืงืจื™ืช ื”ื™ื ืœืฉื›ืคืœ ืืช ืกืคืจื™ื™ืช PGDATA. ื›ื›ืœืœ, ื–ื” ื ืœืงื— ืžืฉืจืช ื”ื’ื™ื‘ื•ื™. ืื ื™ืฉ ืœืš ื’ื™ื‘ื•ื™ื™ื ื‘ื™ื ืืจื™ื™ื ืจื’ื™ืœื™ื, ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ืฉื™ื‘ื•ื˜ื™ื ืžืฉื. ืื ื™ืฉ ืœืš ืขื ื ื™ื, ืžืฉืจื“ ืขื ืŸ ื›ืžื• ืืžื–ื•ืŸ ื•ื’ื•ื’ืœ ื™ืขืฉื” ื–ืืช ืขื‘ื•ืจืš. ื–ื•ื”ื™ ื”ื“ืจืš ื”ื—ืฉื•ื‘ื” ื‘ื™ื•ืชืจ ืœืฉื‘ื˜ ื™ื™ืฆื•ืจ ืืžื™ืชื™. ื›ืš ืื ื• ืžืชืคืชื—ื™ื.
  • ื•ื”ืฉื™ื˜ื” ื”ืื—ืจื•ื ื” ืžืชืื™ืžื” ืœืžื—ืงืจ ื›ืฉืจื•ืฆื™ื ืœื”ื‘ื™ืŸ ืื™ืš ืžืฉื”ื• ืขื•ื‘ื“ ื‘-Postgres. ื–ื” pgbench. ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ื‘ืืžืฆืขื•ืช pgbench. ื–ื• ืจืง ืืคืฉืจื•ืช ืื—ืช ืฉืœ "db-pgbench". ืชื’ื™ื“ ืœื• ื‘ืื™ื–ื” ืงื ื” ืžื™ื“ื”. ื•ื”ื›ืœ ื™ื•ื•ืฆืจ ื‘ืขื ืŸ, ื›ืืžื•ืจ.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื•ื˜ืขืŸ:

  • ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื‘ืฆืข ืืช ื”ื˜ืขื™ื ื” ื‘ืฉืจืฉื•ืจ SQL ืื—ื“. ื–ื• ื”ื“ืจืš ื”ื›ื™ ืคืจื™ืžื™ื˜ื™ื‘ื™ืช.
  • ื•ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื—ืงื•ืช ืืช ื”ืขื•ืžืก. ื•ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื—ืงื•ืช ืืช ื–ื” ืงื•ื“ื ื›ืœ ื‘ื“ืจืš ื”ื‘ืื”. ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืืกื•ืฃ ืืช ื›ืœ ื”ื™ื•ืžื ื™ื. ื•ื–ื” ื›ื•ืื‘. ืื ื™ ืืจืื” ืœืš ืœืžื”. ื•ื‘ืืžืฆืขื•ืช pgreplay ืื ื—ื ื• ืžืฉื—ืงื™ื, ื”ืžื•ื‘ื ื” ื‘ื ื ืกื™.
  • ืื• ืืคืฉืจื•ืช ืื—ืจืช. ืžื” ืฉื ืงืจื ืขื•ืžืก ืžืœืื›ื”, ืฉืื ื• ืขื•ืฉื™ื ื‘ืžืืžืฅ ืžืกื•ื™ื. ื‘ื ื™ืชื•ื— ื”ืขื•ืžืก ื”ื ื•ื›ื—ื™ ืฉืœื ื• ืขืœ ืžืขืจื›ืช ื”ืœื—ื™ืžื”, ืื ื• ืฉื•ืœืคื™ื ืืช ืงื‘ื•ืฆื•ืช ื”ื‘ืงืฉื•ืช ื”ืžื•ื‘ื™ืœื•ืช. ื•ื‘ืืžืฆืขื•ืช pgbench ื ื•ื›ืœ ืœื—ืงื•ืช ืืช ื”ืขื•ืžืก ื”ื–ื” ื‘ืžืขื‘ื“ื”.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

  • ืื• ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื‘ืฆืข ืื™ื–ืฉื”ื• SQL, ื›ืœื•ืžืจ ืื ื—ื ื• ื‘ื•ื“ืงื™ื ืกื•ื’ ืฉืœ ืžื™ื’ืจืฆื™ื”, ื™ื•ืฆืจื™ื ืฉื ืื™ื ื“ืงืก, ืžื‘ืฆืขื™ื ืฉื ANALAZE. ื•ืื ื—ื ื• ืžืกืชื›ืœื™ื ืขืœ ืžื” ืฉืงืจื” ืœืคื ื™ ื”ื•ื•ืืงื•ื ื•ืื—ืจื™ ื”ื•ื•ืืงื•ื. ื‘ืื•ืคืŸ ื›ืœืœื™, ื›ืœ SQL.
  • ืื• ืฉื ืฉื ื” ืคืจืžื˜ืจ ืื—ื“ ืื• ื™ื•ืชืจ ื‘ืชืฆื•ืจื”. ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื•ืžืจ ืœื ื• ืœื‘ื“ื•ืง, ืœืžืฉืœ, 100 ืขืจื›ื™ื ื‘ืืžื–ื•ืŸ ืขื‘ื•ืจ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ื”ื˜ืจื”-ื‘ื™ื™ื˜ ืฉืœื ื•. ื•ืชื•ืš ื›ืžื” ืฉืขื•ืช ืชื”ื™ื” ืœืš ื”ืชื•ืฆืื”. ื›ื›ืœืœ, ื™ื™ืงื— ืœืš ืžืกืคืจ ืฉืขื•ืช ืœืคืจื•ืก ืžืกื“ ื ืชื•ื ื™ื ืฉืœ ื˜ืจื”-ื‘ื™ื™ื˜. ืื‘ืœ ื™ืฉ ืชื™ืงื•ืŸ ื‘ืคื™ืชื•ื—, ื™ืฉ ืœื ื• ืกื“ืจื” ืืคืฉืจื™ืช, ื›ืœื•ืžืจ ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืื•ืคืŸ ืขืงื‘ื™ ื‘ืื•ืชื• pgdata ื‘ืื•ืชื• ืฉืจืช ื•ืœื‘ื“ื•ืง. Postgres ื™ื•ืคืขืœ ืžื—ื“ืฉ ื•ื”ืžื˜ืžื•ืŸ ื™ืื•ืคืก. ื•ืืชื” ื™ื›ื•ืœ ืœื”ืกื™ืข ืืช ื”ืขื•ืžืก.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

  • ืžื’ื™ืขื” ืกืคืจื™ื™ื” ืขื ื—ื‘ื•ืจื” ืฉืœ ืงื‘ืฆื™ื ืฉื•ื ื™ื, ื”ื—ืœ ืžืชืฆืœื•ืžื™ ืžืฆื‘ ืฉืœ pgstat***. ื•ื”ื“ื‘ืจ ื”ื›ื™ ืžืขื ื™ื™ืŸ ืฉื™ืฉ ื–ื” pg_stat_statements, pg_stat_kcacke. ืืœื• ืฉืชื™ ื”ืจื—ื‘ื•ืช ืฉืžื ืชื—ื•ืช ื‘ืงืฉื•ืช. ื•-pg_stat_bgwriter ืžื›ื™ืœ ืœื ืจืง ืกื˜ื˜ื™ืกื˜ื™ืงื” ืฉืœ pgwriter, ืืœื ื’ื ืขืœ ื”ืžื—ืกื•ื ื•ื›ื™ืฆื“ ื”-backends ืขืฆืžื ืžื—ืœื™ืคื™ื ื—ื•ืฆืฆื™ื ืžืœื•ื›ืœื›ื™ื. ื•ื›ืœ ื–ื” ืžืขื ื™ื™ืŸ ืœืจืื•ืช. ืœื“ื•ื’ืžื”, ื›ืืฉืจ ืื ื• ืžื’ื“ื™ืจื™ื shared_buffers, ืžืขื ื™ื™ืŸ ืžืื•ื“ ืœืจืื•ืช ื›ืžื” ื›ื•ืœื ื”ื—ืœื™ืคื•.
  • ื’ื ื™ื•ืžื ื™ Postgres ืžื’ื™ืขื™ื. ืฉื ื™ ื™ื•ืžื ื™ื - ื™ื•ืžืŸ ื”ื›ื ื” ื•ื™ื•ืžืŸ ื”ืฉืžืขื” ืœื˜ืขื™ื ื”.
  • ืชื›ื•ื ื” ื—ื“ืฉื” ื™ื—ืกื™ืช ื”ื™ื FlameGraphs.
  • ื›ืžื• ื›ืŸ, ืื ื”ืฉืชืžืฉืช ื‘ืืคืฉืจื•ื™ื•ืช pgreplay ืื• pgbench ืœื”ืคืขืœืช ื”ืขื•ืžืก, ื”ืคืœื˜ ืฉืœื”ื ื™ื”ื™ื” ืžืงื•ืจื™. ื•ืชืจืื” ื—ื‘ื™ื•ืŸ ื•-TPS. ืืคืฉืจ ื™ื”ื™ื” ืœื”ื‘ื™ืŸ ืื™ืš ื”ื ืจืื• ืืช ื–ื”.
  • ืžื™ื“ืข ืžืขืจื›ืช.
  • ื‘ื“ื™ืงื•ืช ืžืขื‘ื“ ื•-IO ื‘ืกื™ืกื™ื•ืช. ื–ื” ื™ื•ืชืจ ืขื‘ื•ืจ ืžื•ืคืข EC2 ื‘ืืžื–ื•ืŸ, ื›ืืฉืจ ืืชื” ืจื•ืฆื” ืœื”ืฉื™ืง 100 ืžื•ืคืขื™ื ื–ื”ื™ื ื‘ืฉืจืฉื•ืจ ื•ืœื”ืจื™ืฅ ืฉื 100 ืจื™ืฆื•ืช ืฉื•ื ื•ืช, ืื– ื™ื”ื™ื• ืœืš 10 ื ื™ืกื•ื™ื™ื. ื•ืืชื” ืฆืจื™ืš ืœื•ื•ื“ื ืฉืืชื” ืœื ื ืชืงืœ ื‘ืžื•ืคืข ืคื’ื•ื ืฉื›ื‘ืจ ืžื“ื•ื›ื ืขืœ ื™ื“ื™ ืžื™ืฉื”ื•. ืื—ืจื™ื ืคืขื™ืœื™ื ื‘ืจื›ื™ื‘ ื”ื—ื•ืžืจื” ื”ื–ื” ื•ื ืฉืืจ ืœืš ืžืฉืื‘ ืžื•ืขื˜. ืขื“ื™ืฃ ืœื”ืฉืœื™ืš ืชื•ืฆืื•ืช ื›ืืœื”. ื•ื‘ืขื–ืจืช sysbench ืฉืœ Alexey Kopytov, ืื ื—ื ื• ืขื•ืฉื™ื ื›ืžื” ื‘ื“ื™ืงื•ืช ืงืฆืจื•ืช ืฉื™ื’ื™ืขื• ื•ื ื™ืชืŸ ื™ื”ื™ื” ืœื”ืฉื•ื•ืช ืื•ืชืŸ ืขื ืื—ืจื•ืช, ื›ืœื•ืžืจ ืชื‘ื™ื ื• ืื™ืš ื”ืžืขื‘ื“ ืžืชื ื”ื’ ื•ืื™ืš ืžืชื ื”ื’ ื”-IO.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืžื”ื ื”ืงืฉื™ื™ื ื”ื˜ื›ื ื™ื™ื ื‘ื”ืชื‘ืกืก ืขืœ ื”ื“ื•ื’ืžื” ืฉืœ ื—ื‘ืจื•ืช ืฉื•ื ื•ืช?

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื ื ื™ื— ืฉืื ื• ืจื•ืฆื™ื ืœื—ื–ื•ืจ ืขืœ ื”ืขื•ืžืก ื”ืืžื™ืชื™ ื‘ืืžืฆืขื•ืช ื™ื•ืžื ื™ื. ื–ื” ืจืขื™ื•ืŸ ืžืฆื•ื™ืŸ ืื ื–ื” ื›ืชื•ื‘ ื‘-pgreplay ื‘ืงื•ื“ ืคืชื•ื—. ืื ื—ื ื• ืžืฉืชืžืฉื™ื ื‘ื–ื”. ืื‘ืœ ื›ื“ื™ ืฉื–ื” ื™ืขื‘ื•ื“ ื˜ื•ื‘, ืขืœื™ืš ืœืืคืฉืจ ืจื™ืฉื•ื ืฉืื™ืœืชื•ืช ืžืœื ืขื ืคืจืžื˜ืจื™ื ื•ืชื–ืžื•ืŸ.

ื™ืฉ ื›ืžื” ืกื™ื‘ื•ื›ื™ื ืขื ืžืฉืš ื”ื–ืžืŸ ื•ื—ื•ืชืžืช ื”ื–ืžืŸ. ื ืจื•ืงืŸ ืืช ื›ืœ ื”ืžื˜ื‘ื— ื”ื–ื”. ื”ืฉืืœื” ื”ืขื™ืงืจื™ืช ื”ื™ื ื”ืื ืืชื” ื™ื›ื•ืœ ืœื”ืจืฉื•ืช ื–ืืช ืœืขืฆืžืš ืื• ืœื?

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

https://gist.github.com/NikolayS/08d9b7b4845371d03e195a8d8df43408

ื”ื‘ืขื™ื” ื”ื™ื ืฉืื•ืœื™ ื–ื” ืœื ื–ืžื™ืŸ. ืงื•ื“ื ื›ืœ, ืขืœื™ืš ืœื”ื‘ื™ืŸ ืื™ื–ื” ื–ืจื ื™ื™ื›ืชื‘ ื‘ื™ื•ืžืŸ. ืื ื™ืฉ ืœืš pg_stat_statements, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืฉืื™ืœืชื” ื–ื• (ื”ืงื™ืฉื•ืจ ื™ื”ื™ื” ื–ืžื™ืŸ ื‘ืฉืงื•ืคื™ื•ืช) ื›ื“ื™ ืœื”ื‘ื™ืŸ ื‘ืขืจืš ื›ืžื” ื‘ืชื™ื ื™ื™ื›ืชื‘ื• ื‘ืฉื ื™ื™ื”.

ืื ื—ื ื• ืžืกืชื›ืœื™ื ืขืœ ืื•ืจืš ื”ื‘ืงืฉื”. ืื ื—ื ื• ืžื–ื ื™ื—ื™ื ืืช ื”ืขื•ื‘ื“ื” ืฉืื™ืŸ ืคืจืžื˜ืจื™ื, ืื‘ืœ ืื ื—ื ื• ื™ื•ื“ืขื™ื ืืช ืื•ืจืš ื”ื‘ืงืฉื” ื•ืื ื—ื ื• ื™ื•ื“ืขื™ื ื›ืžื” ืคืขืžื™ื ื‘ืฉื ื™ื™ื” ื”ื™ื ื‘ื•ืฆืขื”. ื›ืš ื ื•ื›ืœ ืœื”ืขืจื™ืš ื›ืžื” ื‘ืชื™ื ืœืฉื ื™ื™ื” ื‘ืขืจืš. ืื ื—ื ื• ืขืœื•ืœื™ื ืœื˜ืขื•ืช ืคื™ ืฉื ื™ื™ื, ืื‘ืœ ื‘ื”ื—ืœื˜ ื ื‘ื™ืŸ ืืช ื”ืกื“ืจ ื›ืš.

ืื ื• ื™ื›ื•ืœื™ื ืœืจืื•ืช ืฉ-802 ืคืขืžื™ื ื‘ืฉื ื™ื™ื” ื”ื‘ืงืฉื” ื”ื–ื• ืžื‘ื•ืฆืขืช. ื•ืื ื—ื ื• ืจื•ืื™ื ืฉ-bytes_per sec โ€“ 300 kB/s ื™ื™ื›ืชื‘ื• ืคืœื•ืก ืื• ืžื™ื ื•ืก. ื•ื›ื›ืœืœ, ืื ื• ื™ื›ื•ืœื™ื ืœื”ืจืฉื•ืช ืœืขืฆืžื ื• ื–ืจื™ืžื” ื›ื–ื•.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืื‘ืœ! ื”ืขื•ื‘ื“ื” ื”ื™ื ืฉื™ืฉ ืžืขืจื›ื•ืช ืจื™ืฉื•ื ืฉื•ื ื•ืช. ื•ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ืื ืฉื™ื ื”ื™ื ื‘ื“ืจืš ื›ืœืœ "syslog".

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื•ืื ื™ืฉ ืœืš syslog, ืื– ืื•ืœื™ ื™ืฉ ืœืš ืชืžื•ื ื” ื›ื–ื•. ื ื™ืงื— ืืช pgbench, ื ืคืขื™ืœ ืจื™ืฉื•ื ืฉืื™ืœืชื•ืช ื•ื ืจืื” ืžื” ืงื•ืจื”.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืœืœื ืจื™ืฉื•ื - ื–ื• ื”ืขืžื•ื“ื” ืžืฉืžืืœ. ืงื™ื‘ืœื ื• 161 TPS. ืขื syslog - ื–ื” ื‘ืื•ื‘ื•ื ื˜ื• 000 ื‘ืืžื–ื•ืŸ, ืื ื—ื ื• ืžืงื‘ืœื™ื 16.04 TPS. ื•ืื ื ืฉื ื” ืœืฉืชื™ ืฉื™ื˜ื•ืช ืจื™ืฉื•ื ืื—ืจื•ืช, ืื– ื”ืžืฆื‘ ื”ืจื‘ื” ื™ื•ืชืจ ื˜ื•ื‘. ื›ืœื•ืžืจ, ืฆื™ืคื™ื ื• ืฉื–ื” ื™ื™ืจื“, ืื‘ืœ ืœื ื‘ืื•ืชื” ืžื™ื“ื”.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื•ื‘-CentOS 7, ืฉื’ื journald ืžืฉืชืชืคืช ื‘ื•, ื”ืคื™ื›ืช ื™ื•ืžื ื™ื ืœืคื•ืจืžื˜ ื‘ื™ื ืืจื™ ืœื—ื™ืคื•ืฉ ืงืœ ื•ื›ื•', ืื– ื–ื” ืกื™ื•ื˜ ืฉื, ืื ื—ื ื• ื™ื•ืจื“ื™ื 44 ืคืขืžื™ื ื‘-TPS.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื•ืขื ื–ื” ื—ื™ื™ื ืื ืฉื™ื. ื•ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื‘ื—ื‘ืจื•ืช, ื‘ืขื™ืงืจ ื’ื“ื•ืœื•ืช, ืงืฉื” ืžืื•ื“ ืœืฉื ื•ืช ื–ืืช. ืื ืืชื” ื™ื›ื•ืœ ืœื”ืชืจื—ืง ืž-syslog, ื‘ื‘ืงืฉื” ืชืชืจื—ืง ืžืžื ื•.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

  • ื”ืขืจื›ืช IOPS ื•ื–ืจื™ืžืช ื›ืชื™ื‘ื”.
  • ื‘ื“ื•ืง ืืช ืžืขืจื›ืช ื”ืจื™ืฉื•ื ืฉืœืš.
  • ืื ื”ืขื•ืžืก ื”ื—ื–ื•ื™ ื’ื“ื•ืœ ืžื“ื™, ืฉืงื•ืœ ืœื‘ืฆืข ื“ื’ื™ืžื”.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื™ืฉ ืœื ื• pg_stat_statements. ื›ืคื™ ืฉืืžืจืชื™, ื–ื” ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืฉื. ื•ื ื•ื›ืœ ืœืงื—ืช ื•ืœืชืืจ ื›ืœ ืงื‘ื•ืฆืช ื‘ืงืฉื•ืช ื‘ืฆื•ืจื” ืžื™ื•ื—ื“ืช ื‘ืงื•ื‘ืฅ. ื•ืื– ื ื•ื›ืœ ืœื”ืฉืชืžืฉ ื‘ืชื›ื•ื ื” ื ื•ื—ื” ืžืื•ื“ ื‘-pgbench - ื–ื•ื”ื™ ื”ื™ื›ื•ืœืช ืœื”ื•ืกื™ืฃ ืžืกืคืจ ืงื‘ืฆื™ื ื‘ืืžืฆืขื•ืช ืืคืฉืจื•ืช "-f".

ื”ื•ื ืžื‘ื™ืŸ ื”ืจื‘ื” "-f". ื•ืืชื” ื™ื›ื•ืœ ืœื“ืขืช ื‘ืขื–ืจืช "@" ื‘ืกื•ืฃ ืื™ื–ื” ืฉื™ืชื•ืฃ ืฆืจื™ืš ืœื”ื™ื•ืช ืœื›ืœ ืงื•ื‘ืฅ. ื›ืœื•ืžืจ, ื ื™ืชืŸ ืœื•ืžืจ ืฉืขื•ืฉื™ื ื–ืืช ื‘-10% ืžื”ืžืงืจื™ื, ื•ื–ื” ื‘-20%. ื•ื–ื” ื™ืงืจื‘ ืื•ืชื ื• ืœืžื” ืฉืื ื—ื ื• ืจื•ืื™ื ื‘ื”ืคืงื”.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืื™ืš ื ื‘ื™ืŸ ืžื” ื™ืฉ ืœื ื• ื‘ื™ื™ืฆื•ืจ? ืื™ื–ื” ื ืชื— ื•ืื™ืš? ื–ื” ืงืฆืช ื‘ืฆื“. ื™ืฉ ืœื ื• ืขื•ื“ ืžื•ืฆืจ ืื—ื“ ืœืื—ืจ ื‘ื“ื™ืงื”. ื’ื ื‘ืกื™ืก ื‘ืงื•ื“ ืคืชื•ื—. ื•ืขื›ืฉื™ื• ืื ื—ื ื• ืžืคืชื—ื™ื ืื•ืชื• ื‘ืื•ืคืŸ ืคืขื™ืœ.

ื”ื•ื ื ื•ืœื“ ืžืกื™ื‘ื•ืช ืงืฆืช ืื—ืจื•ืช. ืžืกื™ื‘ื•ืช ืฉื”ื ื™ื˜ื•ืจ ืื™ื ื• ืžืกืคื™ืง. ื›ืœื•ืžืจ ืืชื” ื‘ื, ืžืกืชื›ืœ ืขืœ ื”ื‘ืกื™ืก, ืžืกืชื›ืœ ืขืœ ื”ื‘ืขื™ื•ืช ืฉืงื™ื™ืžื•ืช. ื•ื›ื›ืœืœ, ืืชื” ืขื•ืฉื” ื‘ื“ื™ืงืช_ื‘ืจื™ืื•ืช. ืื ืืชื” DBA ืžื ื•ืกื”, ืื– ืืชื” ืขื•ืฉื” health_check. ื‘ื“ืงื ื• ืืช ื”ืฉื™ืžื•ืฉ ื‘ืื™ื ื“ืงืกื™ื ื•ื›ื•'. ืื ื™ืฉ ืœืš OKmeter, ืื– ืžืขื•ืœื”. ื–ื” ื ื™ื˜ื•ืจ ืžื’ื ื™ื‘ ืขื‘ื•ืจ Postgres. OKmeter.io - ื‘ื‘ืงืฉื” ื”ืชืงืŸ ืื•ืชื•, ื”ื›ืœ ื ืขืฉื” ื˜ื•ื‘ ืžืื•ื“ ืฉื. ื–ื” ื‘ืชืฉืœื•ื.

ืื ืื™ืŸ ืœืš ืื—ื“, ืื– ื‘ื“ืจืš ื›ืœืœ ืื™ืŸ ืœืš ื”ืจื‘ื”. ื‘ื ื™ื˜ื•ืจ, ื™ืฉ ื‘ื“ืจืš ื›ืœืœ CPU, IO, ื•ืื– ืขื ื”ืกืชื™ื™ื’ื•ื™ื•ืช, ื•ื–ื” ื”ื›ืœ. ื•ืื ื—ื ื• ืฆืจื™ื›ื™ื ืขื•ื“. ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืจืื•ืช ืื™ืš ื”ื•ื•ืืงื•ื ื”ืื•ื˜ื•ืžื˜ื™ ืขื•ื‘ื“, ืื™ืš ื”ืžื—ืกื•ื ืขื•ื‘ื“, ื‘-io ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื”ืคืจื™ื“ ืืช ื”ืžื—ืกื•ื ืžื”-bgwriter ื•ืžื”ืงื ื“ื™ื ื”ืื—ื•ืจื™ื™ื ื•ื›ื•'.

ื”ื‘ืขื™ื” ื”ื™ื ืฉื›ืฉืืชื” ืขื•ื–ืจ ืœื—ื‘ืจื” ื’ื“ื•ืœื”, ื”ื™ื ืœื ื™ื›ื•ืœื” ืœื™ื™ืฉื ืžืฉื”ื• ื‘ืžื”ื™ืจื•ืช. ื”ื ืœื ื™ื›ื•ืœื™ื ืœืงื ื•ืช ื‘ืžื”ื™ืจื•ืช OKmeter. ืื•ืœื™ ื”ื ื™ืงื ื• ืืช ื–ื” ื‘ืขื•ื“ ืฉื™ืฉื” ื—ื•ื“ืฉื™ื. ื”ื ืœื ื™ื›ื•ืœื™ื ืœืกืคืง ื‘ืžื”ื™ืจื•ืช ื›ืžื” ื—ื‘ื™ืœื•ืช.

ื•ื”ื’ืขื ื• ืœืจืขื™ื•ืŸ ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ื›ืœื™ ืžื™ื•ื—ื“ ืฉืœื ื“ื•ืจืฉ ืฉื•ื ื”ืชืงื ื”, ื›ืœื•ืžืจ ืœื ืฆืจื™ืš ืœื”ืชืงื™ืŸ ืฉื•ื ื“ื‘ืจ ื‘ื™ื™ืฆื•ืจ. ื”ืชืงืŸ ืื•ืชื• ื‘ืžื—ืฉื‘ ื”ื ื™ื™ื“ ืฉืœืš, ืื• ื‘ืฉืจืช ืชืฆืคื™ืช ืžื”ืžืงื•ื ืฉื‘ื• ืชืคืขื™ืœ ืื•ืชื•. ื•ื”ื•ื ื™ื ืชื— ื”ืจื‘ื” ื“ื‘ืจื™ื: ืžืขืจื›ืช ื”ื”ืคืขืœื”, ืžืขืจื›ืช ื”ืงื‘ืฆื™ื ื•-Postgres ืขืฆืžื”, ื•ื™ื‘ืฆืข ื›ืžื” ืฉืื™ืœืชื•ืช ืงืœื•ืช ืฉื ื™ืชืŸ ืœื”ืจื™ืฅ ื™ืฉื™ืจื•ืช ืœื™ื™ืฆื•ืจ ื•ืฉื•ื ื“ื‘ืจ ืœื ื™ื™ื›ืฉืœ.

ืงืจืื ื• ืœื–ื” Postgres-checkup. ื‘ืžื•ื ื—ื™ื ืจืคื•ืื™ื™ื, ืžื“ื•ื‘ืจ ื‘ื‘ื“ื™ืงืช ื‘ืจื™ืื•ืช ืจื’ื™ืœื”. ืื ื–ื” ื ื•ืฉื ืœืจื›ื‘, ืื– ื–ื” ื›ืžื• ืชื—ื–ื•ืงื”. ืืชื” ืžื‘ืฆืข ืชื—ื–ื•ืงื” ืœืจื›ื‘ ืฉืœืš ื›ืœ ื—ืฆื™ ืฉื ื” ืื• ืฉื ื”, ืชืœื•ื™ ื‘ืžื•ืชื’. ื”ืื ืืชื” ืขื•ืฉื” ืชื—ื–ื•ืงื” ืœื‘ืกื™ืก ืฉืœืš? ื›ืœื•ืžืจ, ื”ืื ืืชื” ืขื•ืฉื” ืžื—ืงืจ ืžืขืžื™ืง ื‘ืื•ืคืŸ ืงื‘ื•ืข? ื–ื” ื—ื™ื™ื‘ ืœื”ื™ืขืฉื•ืช. ืื ืืชื” ืขื•ืฉื” ื’ื™ื‘ื•ื™ื™ื, ืื– ืชืขืฉื” ื‘ื“ื™ืงื”, ื–ื” ืœื ืคื—ื•ืช ื—ืฉื•ื‘.

ื•ื™ืฉ ืœื ื• ื›ืœื™ ื›ื–ื”. ื”ื•ื ื”ื—ืœ ืœื”ื•ืคื™ืข ื‘ืื•ืคืŸ ืคืขื™ืœ ืจืง ืœืคื ื™ ื›ืฉืœื•ืฉื” ื—ื•ื“ืฉื™ื. ื”ื•ื ืขื“ื™ื™ืŸ ืฆืขื™ืจ, ืื‘ืœ ื™ืฉ ืฉื ื”ืจื‘ื”.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืื™ืกื•ืฃ ืงื‘ื•ืฆื•ืช ื”ืฉืื™ืœืชื•ืช "ื”ืžืฉืคื™ืขื•ืช" ื‘ื™ื•ืชืจ - ื“ื•ื•ื— ืขืœ K003 ื‘-Postgres-checkup

ื•ื™ืฉ ืงื‘ื•ืฆืช ื“ื•ื—ื•ืช ืง' ืฉืœื•ืฉื” ื“ื•ื—ื•ืช ืขื“ ื›ื”. ื•ื™ืฉ ื“ื•ื— ื›ื–ื” K003. ื™ืฉ ืืช ื”ื—ืœืง ื”ืขืœื™ื•ืŸ ืž-pg_stat_statements, ืžืžื•ื™ืŸ ืœืคื™ total_time.

ื›ืืฉืจ ืื ื• ืžืžื™ื™ื ื™ื ืงื‘ื•ืฆื•ืช ื‘ืงืฉื•ืช ืœืคื™ total_time, ื‘ื—ืœืง ื”ืขืœื™ื•ืŸ ืื ื• ืจื•ืื™ื ืืช ื”ืงื‘ื•ืฆื” ืฉืžืขืžื™ืกื” ืืช ื”ืžืขืจื›ืช ืฉืœื ื• ื”ื›ื™ ื”ืจื‘ื”, ื›ืœื•ืžืจ ืฆื•ืจื›ืช ื™ื•ืชืจ ืžืฉืื‘ื™ื. ืžื“ื•ืข ืื ื™ ื ื•ืชืŸ ืฉื ืœืงื‘ื•ืฆื•ืช ืฉืื™ืœืชื•ืช? ื›ื™ ื–ืจืงื ื• ืืช ื”ืคืจืžื˜ืจื™ื. ืืœื• ื›ื‘ืจ ืœื ื‘ืงืฉื•ืช, ืืœื ืงื‘ื•ืฆื•ืช ืฉืœ ื‘ืงืฉื•ืช, ื›ืœื•ืžืจ ื”ืŸ ืžื•ืคืฉื˜ื•ืช.

ื•ืื ื ืขืฉื” ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืžืœืžืขืœื” ืœืžื˜ื”, ื ืงืœ ืขืœ ื”ืžืฉืื‘ื™ื ืฉืœื ื• ื•ื ื“ื—ื” ืืช ื”ืจื’ืข ืฉื‘ื• ื ืฆื˜ืจืš ืœืฉื“ืจื’. ื–ื•ื”ื™ ื“ืจืš ื˜ื•ื‘ื” ืžืื•ื“ ืœื—ืกื•ืš ื›ืกืฃ.

ืื•ืœื™ ื–ื• ืœื ื“ืจืš ื˜ื•ื‘ื” ื‘ืžื™ื•ื—ื“ ืœื˜ืคืœ ื‘ืžืฉืชืžืฉื™ื, ื›ื™ ืื•ืœื™ ืœื ื ืจืื” ืžืงืจื™ื ื ื“ื™ืจื™ื, ืื‘ืœ ืžืื•ื“ ืžืขืฆื‘ื ื™ื ืฉื‘ื”ื ืื“ื ื—ื™ื›ื” 15 ืฉื ื™ื•ืช. ื‘ืกืš ื”ื›ืœ, ื”ื ื›ืœ ื›ืš ื ื“ื™ืจื™ื ืฉืื ื—ื ื• ืœื ืจื•ืื™ื ืื•ืชื, ืื‘ืœ ืื ื—ื ื• ืขื•ืกืงื™ื ื‘ืžืฉืื‘ื™ื.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืžื” ืงืจื” ื‘ื˜ื‘ืœื” ื”ื–ื•? ืฆื™ืœืžื ื• ืฉืชื™ ืชืžื•ื ื•ืช. Postgres_checkup ื™ื™ืชืŸ ืœืš ื“ืœืชื ืขื‘ื•ืจ ื›ืœ ืžื“ื“: ื–ืžืŸ ื›ื•ืœืœ, ืฉื™ื—ื•ืช, ืฉื•ืจื•ืช, shared_blks_read ื•ื›ื•'. ื–ื”ื•, ื”ื“ืœืชื ื—ื•ืฉื‘ื”. ื”ื‘ืขื™ื” ื”ื’ื“ื•ืœื” ืขื pg_stat_statements ื”ื™ื ืฉื”ื•ื ืœื ื–ื•ื›ืจ ืžืชื™ ื”ื•ื ืื•ืคืก. ืื pg_stat_database ื–ื•ื›ืจ, ืื– pg_stat_statements ืœื ื–ื•ื›ืจ. ืืชื” ืจื•ืื” ืฉื™ืฉ ืžืกืคืจ ืฉืœ 1, ืื‘ืœ ืื ื—ื ื• ืœื ื™ื•ื“ืขื™ื ืžืื™ืคื” ืกืคืจื ื•.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื•ื”ื ื” ืื ื—ื ื• ื™ื•ื“ืขื™ื, ื”ื ื” ื™ืฉ ืœื ื• ืฉืชื™ ืชืžื•ื ื•ืช. ืื ื—ื ื• ื™ื•ื“ืขื™ื ืฉื”ื“ืœืชื ื‘ืžืงืจื” ื”ื–ื” ื”ื™ื™ืชื” 56 ืฉื ื™ื•ืช. ืคืขืจ ืงืฆืจ ืžืื•ื“. ืžืžื•ื™ืŸ ืœืคื™ total_time. ื•ืื– ื ื•ื›ืœ ืœื”ื‘ื“ื™ืœ, ื›ืœื•ืžืจ ืื ื• ืžื—ืœืงื™ื ืืช ื›ืœ ื”ืžื“ื“ื™ื ืœืคื™ ืžืฉืš ื”ื–ืžืŸ. ืื ื ื—ืœืง ื›ืœ ืžื“ื“ ืœืคื™ ืžืฉืš, ื™ื”ื™ื” ืœื ื• ืืช ืžืกืคืจ ื”ืฉื™ื—ื•ืช ื‘ืฉื ื™ื™ื”.

ื‘ืฉืœื‘ ื”ื‘ื, total_time per second ื”ื•ื ื”ืžื“ื“ ื”ืžื•ืขื“ืฃ ืขืœื™ื™. ื–ื” ื ืžื“ื“ ื‘ืฉื ื™ื•ืช, ืœืฉื ื™ื™ื”, ื›ืœื•ืžืจ ื›ืžื” ืฉื ื™ื•ืช ืœืงื— ืœืžืขืจื›ืช ืฉืœื ื• ืœื‘ืฆืข ืืช ืงื‘ื•ืฆืช ื”ื‘ืงืฉื•ืช ื”ื–ื• ื‘ืฉื ื™ื™ื”. ืื ืืชื” ืจื•ืื” ืฉื ื™ื•ืชืจ ืžืฉื ื™ื™ื” ื‘ืฉื ื™ื™ื”, ื–ื” ืื•ืžืจ ืฉื”ื™ื™ืช ืฆืจื™ืš ืœืชืช ื™ื•ืชืจ ืžืœื™ื‘ื” ืื—ืช. ื–ื” ืžื“ื“ ื˜ื•ื‘ ืžืื•ื“. ืืคืฉืจ ืœื”ื‘ื™ืŸ ืฉื”ื—ื‘ืจ ื”ื–ื”, ืœืžืฉืœ, ืฆืจื™ืš ืœืคื—ื•ืช ืฉืœื•ืฉ ืœื™ื‘ื•ืช.

ื–ื” ื”ื™ื“ืข ืฉืœื ื•, ืžืขื•ืœื ืœื ืจืื™ืชื™ ื“ื‘ืจ ื›ื–ื” ื‘ืฉื•ื ืžืงื•ื. ืฉื™ืžื• ืœื‘ - ื–ื” ื“ื‘ืจ ืžืื•ื“ ืคืฉื•ื˜ - ืฉื ื™ื™ื” ื‘ืฉื ื™ื™ื”. ืœืคืขืžื™ื, ื›ืืฉืจ ื”ืžืขื‘ื“ ืฉืœืš ื”ื•ื 100%, ืื– ื—ืฆื™ ืฉืขื” ื‘ืฉื ื™ื™ื”, ื›ืœื•ืžืจ, ื”ืงื“ืฉืช ื—ืฆื™ ืฉืขื” ืœืขืฉื•ืช ืจืง ื‘ืงืฉื•ืช ืืœื•.

ืœืื—ืจ ืžื›ืŸ ืื ื• ืจื•ืื™ื ืฉื•ืจื•ืช ื‘ืฉื ื™ื™ื”. ืื ื—ื ื• ื™ื•ื“ืขื™ื ื›ืžื” ืฉื•ืจื•ืช ื‘ืฉื ื™ื™ื” ื–ื” ื”ื—ื–ื™ืจ.

ื•ืื– ื™ืฉ ื’ื ื“ื‘ืจ ืžืขื ื™ื™ืŸ. ื›ืžื” shared_buffers ืื ื• ืงื•ืจืื™ื ื‘ืฉื ื™ื™ื” ืžืชื•ืš shared_buffers ืขืฆืžื. ื”ืœื”ื™ื˜ื™ื ื›ื‘ืจ ื”ื™ื• ืฉื, ื•ืœืงื—ื ื• ืืช ื”ืฉื•ืจื•ืช ืžื”ืžื˜ืžื•ืŸ ืฉืœ ืžืขืจื›ืช ื”ื”ืคืขืœื” ืื• ืžื”ื“ื™ืกืง. ื”ืืคืฉืจื•ืช ื”ืจืืฉื•ื ื” ื”ื™ื ืžื”ื™ืจื”, ื•ื”ืฉื ื™ื™ื” ืขืฉื•ื™ื” ืœื”ื™ื•ืช ืžื”ื™ืจื” ืื• ืœื, ื‘ื”ืชืื ืœืžืฆื‘.

ื•ื”ื“ืจืš ื”ืฉื ื™ื™ื” ืœื”ื‘ื“ื™ืœ ื”ื™ื ืœื—ืœืง ืืช ืžืกืคืจ ื”ื‘ืงืฉื•ืช ื‘ืงื‘ื•ืฆื” ื–ื•. ื‘ืขืžื•ื“ื” ื”ืฉื ื™ื™ื” ืชืžื™ื“ ืชื”ื™ื” ืœืš ืฉืื™ืœืชื” ืื—ืช ืžื—ื•ืœืงืช ืœื›ืœ ืฉืื™ืœืชื”. ื•ืื– ื–ื” ืžืขื ื™ื™ืŸ - ื›ืžื” ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื” ื”ื™ื• ื‘ื‘ืงืฉื” ื”ื–ื•. ืื ื—ื ื• ื™ื•ื“ืขื™ื ืื™ืš ื”ืฉืื™ืœืชื” ื”ื–ื• ืžืชื ื”ื’ืช ื‘ืžืžื•ืฆืข. ื ื“ืจืฉื• 101 ืžื™ืœื™ืฉื ื™ื•ืช ืœื›ืœ ื‘ืงืฉื”. ื–ื” ื”ืžื“ื“ ื”ืžืกื•ืจืชื™ ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื”ื‘ื™ืŸ.

ื›ืžื” ืฉื•ืจื•ืช ื”ื—ื–ื™ืจื” ื›ืœ ืฉืื™ืœืชื” ื‘ืžืžื•ืฆืข? ืื ื• ืจื•ืื™ื 8 ื”ืงื‘ื•ืฆื” ื”ื–ื• ื—ื•ื–ืจืช. ื‘ืžืžื•ืฆืข, ื›ืžื” ื ืœืงื— ืžื”ืžื˜ืžื•ืŸ ื•ื ืงืจื. ืื ื—ื ื• ืจื•ืื™ื ืฉื”ื›ืœ ืฉืžื•ืจ ื™ืคื”. ืœื”ื™ื˜ื™ื ืžื•ืฆืงื™ื ืœืงื‘ื•ืฆื” ื”ืจืืฉื•ื ื”.

ื•ื”ืžื—ืจื•ื–ืช ื”ืจื‘ื™ืขื™ืช ื‘ื›ืœ ืฉื•ืจื” ื”ื™ื ื›ืžื” ืื—ื•ื– ืžื”ืกืš ื”ื›ืœ. ื™ืฉ ืœื ื• ืฉื™ื—ื•ืช. ื ื ื™ื— 1. ื•ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ื‘ื™ืŸ ืื™ื–ื• ืชืจื•ืžื” ืœืงื‘ื•ืฆื” ื”ื–ื• ืชื•ืจืžืช. ืื ื• ืจื•ืื™ื ืฉื‘ืžืงืจื” ื–ื” ื”ืงื‘ื•ืฆื” ื”ืจืืฉื•ื ื” ืชื•ืจืžืช ืคื—ื•ืช ืž-000%. ื›ืœื•ืžืจ, ื–ื” ื›ืœ ื›ืš ืื™ื˜ื™ ืฉืื ื—ื ื• ืœื ืจื•ืื™ื ืืช ื–ื” ื‘ืชืžื•ื ื” ื”ื›ื•ืœืœืช. ื•ื”ืงื‘ื•ืฆื” ื”ืฉื ื™ื™ื” ื”ื™ื 000% ืขืœ ืฉื™ื—ื•ืช. ื›ืœื•ืžืจ, 0,01% ืžื›ืœืœ ื”ืฉื™ื—ื•ืช ื”ืŸ ื”ืงื‘ื•ืฆื” ื”ืฉื ื™ื™ื”.

ื’ื Total_time ืžืขื ื™ื™ืŸ. ื”ืฉืงืขื ื• 14% ืžื–ืžืŸ ื”ืขื‘ื•ื“ื” ื”ื›ื•ืœืœ ืฉืœื ื• ื‘ืงื‘ื•ืฆืช ื”ื‘ืงืฉื•ืช ื”ืจืืฉื•ื ื”. ื•ืœืฉื ื™ - 11% ื•ื›ื•'.

ืื ื™ ืœื ืื›ื ืก ืœืคืจื˜ื™ื, ืื‘ืœ ื™ืฉ ืฉื ื“ืงื•ื™ื•ืช. ืื ื• ืžืฆื™ื’ื™ื ืฉื’ื™ืื” ื‘ื—ืœืง ื”ืขืœื™ื•ืŸ, ืžื›ื™ื•ื•ืŸ ืฉื›ืืฉืจ ืื ื• ืžืฉื•ื•ื™ื, ืชืžื•ื ื•ืช ืžืฆื‘ ืขืฉื•ื™ื•ืช ืœืฆื•ืฃ, ื›ืœื•ืžืจ, ื—ืœืง ืžื”ื‘ืงืฉื•ืช ืขืœื•ืœื•ืช ืœื™ืคื•ืœ ื•ืœื ื™ื›ื•ืœื•ืช ืœื”ื™ื•ืช ื ื•ื›ื—ื•ืช ืขื•ื“ ื‘ืฉื ื™ื™ื”, ื‘ืขื•ื“ ืฉื—ืœืง ื—ื“ืฉื•ืช ืขืฉื•ื™ื•ืช ืœื”ื•ืคื™ืข. ื•ืฉื ืื ื• ืžื—ืฉื‘ื™ื ืืช ื”ืฉื’ื™ืื”. ืื ืืชื” ืจื•ืื” 0, ืื– ื–ื” ื˜ื•ื‘. ืื™ืŸ ืฉื’ื™ืื•ืช. ืื ืฉื™ืขื•ืจ ื”ืฉื’ื™ืื•ืช ื”ื•ื ืขื“ 20%, ื–ื” ื‘ืกื“ืจ.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืื—ืจ ื›ืš ื ื—ื–ื•ืจ ืœื ื•ืฉื ืฉืœื ื•. ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืขืฆื‘ ืืช ืขื•ืžืก ื”ืขื‘ื•ื“ื”. ืื ื—ื ื• ืœื•ืงื—ื™ื ืืช ื–ื” ืžืœืžืขืœื” ืœืžื˜ื” ื•ื”ื•ืœื›ื™ื ืขื“ ืฉื ื’ื™ืข ืœ-80% ืื• 90%. ื‘ื“ืจืš ื›ืœืœ ืžื“ื•ื‘ืจ ืขืœ 10-20 ืงื‘ื•ืฆื•ืช. ื•ืื ื—ื ื• ืขื•ืฉื™ื ืงื‘ืฆื™ื ืขื‘ื•ืจ pgbench. ืื ื—ื ื• ืžืฉืชืžืฉื™ื ื‘ืืงืจืื™ ืฉื. ืœืคืขืžื™ื ื–ื”, ืœืžืจื‘ื” ื”ืฆืขืจ, ืœื ืžืกืชื“ืจ. ื•ื‘-Postgres 12 ื™ื”ื™ื• ื”ื–ื“ืžื ื•ื™ื•ืช ื ื•ืกืคื•ืช ืœื”ืฉืชืžืฉ ื‘ื’ื™ืฉื” ื–ื•.

ื•ืื– ืื ื—ื ื• ืžืจื•ื•ื™ื—ื™ื 80-90% ื‘-total_time ื‘ื“ืจืš ื–ื•. ืžื” ืขืœื™ ืœืฉื™ื ืื—ืจื™ "@"? ืื ื—ื ื• ืžืกืชื›ืœื™ื ืขืœ ื”ืฉื™ื—ื•ืช, ืจื•ืื™ื ื›ืžื” ืขื ื™ื™ืŸ ื™ืฉ ื•ืžื‘ื™ื ื™ื ืฉืื ื—ื ื• ื—ื™ื™ื‘ื™ื ื›ืืŸ ื›ืœ ื›ืš ื”ืจื‘ื” ืจื™ื‘ื™ืช. ืžื”ืื—ื•ื–ื™ื ื”ืœืœื• ื ื•ื›ืœ ืœื”ื‘ื™ืŸ ื›ื™ืฆื“ ืœืื–ืŸ ื›ืœ ืื—ื“ ืžื”ืงื‘ืฆื™ื. ืื—ืจื™ ื–ื” ืื ื—ื ื• ืžืฉืชืžืฉื™ื ื‘-pgbench ื•ื”ื•ืœื›ื™ื ืœืขื‘ื•ื“ื”.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื™ืฉ ืœื ื• ื’ื K001 ื•-K002.

K001 ื”ื™ื ืžื—ืจื•ื–ืช ืื—ืช ื’ื“ื•ืœื” ืขื ืืจื‘ืข ืชืช-ืžื—ืจื•ื–ื•ืช. ื–ื” ืžืืคื™ื™ืŸ ืืช ื›ืœ ื”ืขื•ืžืก ืฉืœื ื•. ืจืื” ืขืžื•ื“ื” ืฉื ื™ื™ื” ื•ืฉื•ืจืช ืžืฉื ื” ืฉื ื™ื™ื”. ืื ื• ืจื•ืื™ื ืฉื‘ืขืจืš ืฉื ื™ื™ื” ื•ื—ืฆื™ ืœืฉื ื™ื™ื”, ื›ืœื•ืžืจ ืื ื™ืฉ ืฉืชื™ ืœื™ื‘ื•ืช, ืื– ื–ื” ื™ื”ื™ื” ื˜ื•ื‘. ืชื”ื™ื” ืงื™ื‘ื•ืœืช ืฉืœ ื›-75%. ื•ื–ื” ื™ืขื‘ื•ื“ ื›ื›ื”. ืื ื™ืฉ ืœื ื• 10 ืœื™ื‘ื•ืช, ืื– ื‘ื“ืจืš ื›ืœืœ ื ื”ื™ื” ืจื’ื•ืขื™ื. ื›ืš ื ื•ื›ืœ ืœื”ืขืจื™ืš ืžืฉืื‘ื™ื.

K002 ื–ื” ืžื” ืฉืื ื™ ืžื›ื ื” ืžื—ืœืงื•ืช ืฉืื™ืœืชื•ืช, ื›ืœื•ืžืจ SELECT, INSERT, UPDATE, DELETE. ื•ื‘ื ืคืจื“ SELECT FOR UPDATE, ื›ื™ ื–ื” ืžื ืขื•ืœ.

ื•ื›ืืŸ ื ื•ื›ืœ ืœื”ืกื™ืง ืฉ-SELECT ื”ื•ื ืงื•ืจืื™ื ืจื’ื™ืœื™ื - 82% ืžื›ืœืœ ื”ืฉื™ื—ื•ืช, ืืš ื‘ืžืงื‘ื™ืœ - 74% ื‘-total_time. ื›ืœื•ืžืจ, ื”ื ื ืงืจืื™ื ื”ืจื‘ื”, ืื‘ืœ ืฆื•ืจื›ื™ื ืคื—ื•ืช ืžืฉืื‘ื™ื.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื•ืื ื—ื ื• ื—ื•ื–ืจื™ื ืœืฉืืœื”: "ืื™ืš ื ื•ื›ืœ ืœื‘ื—ื•ืจ ืืช ื”-shared_buffers ื”ื ื›ื•ื ื™ื?" ืื ื™ ืžื‘ื—ื™ืŸ ืฉืจื•ื‘ ื”ืžื“ื“ื™ื ืžื‘ื•ืกืกื™ื ืขืœ ื”ืจืขื™ื•ืŸ - ื‘ื•ื ื ืจืื” ืžื” ืชื”ื™ื” ื”ืชืคื•ืงื”, ื›ืœื•ืžืจ ืžื” ืชื”ื™ื” ื”ืชืคื•ืงื”. ื–ื” ื ืžื“ื“ ื‘ื“ืจืš ื›ืœืœ ื‘-TPS ืื• QPS.

ื•ืื ื—ื ื• ืžื ืกื™ื ืœืกื—ื•ื˜ ื›ืžื” ืฉื™ื•ืชืจ ืขืกืงืื•ืช ื‘ืฉื ื™ื™ื” ืžื”ืžื›ื•ื ื™ืช ื‘ืืžืฆืขื•ืช ืคืจืžื˜ืจื™ ื›ื•ื•ื ื•ืŸ. ื”ื ื” ื‘ื“ื™ื•ืง 311 ืœืฉื ื™ื™ื” ืœื‘ื—ื™ืจื”.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืื‘ืœ ืืฃ ืื—ื“ ืœื ื ื•ืกืข ืœืขื‘ื•ื“ื” ื•ื—ื•ื–ืจ ื”ื‘ื™ืชื” ื‘ืžืœื•ื ื”ืžื”ื™ืจื•ืช. ื–ื” ื˜ื™ืคืฉื™. ืื•ืชื• ื“ื‘ืจ ืขื ืžืกื“ื™ ื ืชื•ื ื™ื. ืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื ืœื ืกื•ืข ื‘ืžืœื•ื ื”ืžื”ื™ืจื•ืช, ื•ืืฃ ืื—ื“ ืœื ืขื•ืฉื” ื–ืืช. ืืฃ ืื—ื“ ืœื ื—ื™ ื‘ื™ื™ืฆื•ืจ, ืฉื™ืฉ ืœื• 100% ืžืขื‘ื“. ืืžื ื, ืื•ืœื™ ืžื™ืฉื”ื• ื—ื™, ืื‘ืœ ื–ื” ืœื ื˜ื•ื‘.

ื”ืจืขื™ื•ืŸ ื”ื•ื ืฉื‘ื“ืจืš ื›ืœืœ ืื ื—ื ื• ื ื•ืกืขื™ื ื‘-20 ืื—ื•ื– ืžื”ืงื™ื‘ื•ืœืช, ืจืฆื•ื™ ืœื ื™ื•ืชืจ ืž-50%. ื•ืื ื—ื ื• ืžื ืกื™ื ืœื™ื™ืขืœ ืืช ื–ืžืŸ ื”ืชื’ื•ื‘ื” ืขื‘ื•ืจ ื”ืžืฉืชืžืฉื™ื ืฉืœื ื• ืžืขืœ ื”ื›ืœ. ื›ืœื•ืžืจ, ืขืœื™ื ื• ืœืกื•ื‘ื‘ ืืช ื”ื›ืคืชื•ืจื™ื ื›ืš ืฉื™ื”ื™ื” ืžื™ื ื™ืžื•ื ื—ื‘ื™ื•ืŸ ื‘ืžื”ื™ืจื•ืช ืฉืœ 20%, ื‘ืชื ืื™. ื–ื”ื• ืจืขื™ื•ืŸ ืฉืื ื• ืžื ืกื™ื ืœื”ืฉืชืžืฉ ื‘ื• ื’ื ื‘ื ื™ืกื•ื™ื™ื ืฉืœื ื•.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ื•ืœื‘ืกื•ืฃ, ื”ืžืœืฆื•ืช:

  • ื”ืงืคื“ ืœืขืฉื•ืช ืžืขื‘ื“ืช ืžืกื“ ื ืชื•ื ื™ื.
  • ืื ืืคืฉืจ, ืขืฉื• ื–ืืช ืœืคื™ ื“ืจื™ืฉื” ื›ืš ืฉื™ืชืคืชื— ืœื–ืžืŸ ืžื” - ืฉื—ืงื• ื•ื–ืจื•ืงื•. ืื ื™ืฉ ืœืš ืขื ื ื™ื, ืื– ื–ื” ืžื•ื‘ืŸ ืžืืœื™ื•, ื›ืœื•ืžืจ ื™ืฉ ืœืš ื”ืจื‘ื” ืขืžื™ื“ื”.
  • ื”ื™ื” ืกืงืจืŸ. ื•ืื ืžืฉื”ื• ืœื ื‘ืกื“ืจ, ืื– ื‘ื“ืงื• ืขื ื ื™ืกื•ื™ื™ื ืื™ืš ื”ื•ื ืžืชื ื”ื’. ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื ื ืกื™ ื›ื“ื™ ืœืืžืŸ ืืช ืขืฆืžืš ื›ื“ื™ ืœื‘ื“ื•ืง ืื™ืš ื”ื‘ืกื™ืก ืขื•ื‘ื“.
  • ื•ืฉืื•ืฃ ืœืžื™ื ื™ืžื•ื ื–ืžืŸ ืชื’ื•ื‘ื”.
  • ื•ืืœ ืชืคื—ื“ื• ืžืžืงื•ืจื•ืช Postgres. ื›ืืฉืจ ืืชื” ืขื•ื‘ื“ ืขื ืžืงื•ืจื•ืช, ืืชื” ื—ื™ื™ื‘ ืœื“ืขืช ืื ื’ืœื™ืช. ื™ืฉ ืฉื ื”ืจื‘ื” ื”ืขืจื•ืช, ื”ื›ืœ ืžื•ืกื‘ืจ ืฉื.
  • ื•ื‘ื“ื•ืง ืืช ืชืงื™ื ื•ืช ืžืกื“ ื”ื ืชื•ื ื™ื ื‘ืื•ืคืŸ ืงื‘ื•ืข, ืœืคื—ื•ืช ืคืขื ื‘ืฉืœื•ืฉื” ื—ื•ื“ืฉื™ื, ื‘ืื•ืคืŸ ื™ื“ื ื™, ืื• Postgres-checkup.

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืฉืืœื•ืช

ืชื•ื“ื” ืจื‘ื”! ื“ื‘ืจ ืžืื•ื“ ืžืขื ื™ื™ืŸ.

ืฉืชื™ ื—ืชื™ื›ื•ืช.

ื›ืŸ, ืฉื ื™ ื—ืœืงื™ื. ืจืง ืฉืœื ื›ืœ ื›ืš ื”ื‘ื ืชื™. ื›ืฉื ื ืกื™ ื•ืื ื™ ืขื•ื‘ื“ื™ื, ื”ืื ื ื•ื›ืœ ืœืฉื ื•ืช ืจืง ืคืจืžื˜ืจ ืื—ื“ ืื• ืงื‘ื•ืฆื” ืฉืœืžื”?

ื™ืฉ ืœื ื• ืคืจืžื˜ืจ ืชืฆื•ืจืช ื“ืœืชื. ืืชื” ื™ื›ื•ืœ ืœืคื ื•ืช ืœืฉื ื›ืžื” ืฉืืชื” ืจื•ืฆื” ื‘ื‘ืช ืื—ืช. ืื‘ืœ ืืชื” ืฆืจื™ืš ืœื”ื‘ื™ืŸ ืฉื›ืืฉืจ ืืชื” ืžืฉื ื” ื”ืจื‘ื” ื“ื‘ืจื™ื, ืืชื” ื™ื›ื•ืœ ืœื”ืกื™ืง ืืช ื”ืžืกืงื ื•ืช ื”ืœื ื ื›ื•ื ื•ืช.

ื›ืŸ. ืœืžื” ืฉืืœืชื™? ื›ื™ ืงืฉื” ืœืขืจื•ืš ื ื™ืกื•ื™ื™ื ื›ืฉื™ืฉ ืœืš ืจืง ืคืจืžื˜ืจ ืื—ื“. ืืชื” ืžื”ื“ืง ืืช ื–ื”, ืชืจืื” ืื™ืš ื–ื” ืขื•ื‘ื“. ื”ื•ืฆืืชื™ ืื•ืชื• ื”ื—ื•ืฆื”. ื•ืื– ืืชื” ืžืชื—ื™ืœ ืืช ื”ื‘ื.

ืืชื” ื™ื›ื•ืœ ืœื”ื“ืง ืื•ืชื• ื‘ืื•ืชื• ื–ืžืŸ, ืื‘ืœ ื–ื” ืชืœื•ื™ ื‘ืžืฆื‘, ื›ืžื•ื‘ืŸ. ืื‘ืœ ืขื“ื™ืฃ ืœื‘ื“ื•ืง ืจืขื™ื•ืŸ ืื—ื“. ื”ื™ื” ืœื ื• ืจืขื™ื•ืŸ ืืชืžื•ืœ. ื”ื™ื” ืœื ื• ืžืฆื‘ ืžืื•ื“ ืงืจื•ื‘. ื”ื™ื• ืฉืชื™ ื”ื’ื“ืจื•ืช. ื•ืœื ื”ืฆืœื—ื ื• ืœื”ื‘ื™ืŸ ืœืžื” ื™ืฉ ื”ื‘ื“ืœ ื’ื“ื•ืœ. ื•ืขืœื” ื”ืจืขื™ื•ืŸ ืฉืฆืจื™ืš ืœื”ืฉืชืžืฉ ื‘ื“ื™ื›ื•ื˜ื•ืžื™ื” ื›ื“ื™ ืœื”ื‘ื™ืŸ ื•ืœืžืฆื•ื ื‘ืื•ืคืŸ ืขืงื‘ื™ ืžื” ื”ื”ื‘ื“ืœ. ืืชื” ื™ื›ื•ืœ ืžื™ื“ ืœื”ืคื•ืš ื—ืฆื™ ืžื”ืคืจืžื˜ืจื™ื ื–ื”ื™ื, ื•ืื– ืจื‘ืข ื•ื›ื•' ื”ื›ืœ ื’ืžื™ืฉ.

ื•ื™ืฉ ืขื•ื“ ืฉืืœื” ืื—ืช. ื”ืคืจื•ื™ืงื˜ ืฆืขื™ืจ ื•ืžืชืคืชื—. ื”ืชื™ืขื•ื“ ื›ื‘ืจ ืžื•ื›ืŸ, ื”ืื ื™ืฉ ืชื™ืื•ืจ ืžืคื•ืจื˜?

ื™ืฆืจืชื™ ืฉื ืงื™ืฉื•ืจ ืกืคืฆื™ืคื™ืช ืœืชื™ืื•ืจ ื”ืคืจืžื˜ืจื™ื. ื–ื” ืฉื. ืื‘ืœ ื”ืจื‘ื” ื“ื‘ืจื™ื ืขื“ื™ื™ืŸ ืœื ืฉื. ืื ื™ ืžื—ืคืฉ ืื ืฉื™ื ื‘ืขืœื™ ื“ืขื•ืช ื“ื•ืžื•ืช. ื•ืื ื™ ืžื•ืฆื ืื•ืชื ื›ืฉืื ื™ ืžื•ืคื™ืข. ื–ื” ืžืื•ื“ ืžื’ื ื™ื‘. ืžื™ืฉื”ื• ื›ื‘ืจ ืขื•ื‘ื“ ืื™ืชื™, ืžื™ืฉื”ื• ืขื–ืจ ื•ืขืฉื” ืฉื ืžืฉื”ื•. ื•ืื ืืชื” ืžืขื•ื ื™ื™ืŸ ื‘ื ื•ืฉื ื–ื”, ืชืŸ ืžืฉื•ื‘ ืขืœ ืžื” ืฉื—ืกืจ.

ื‘ืจื’ืข ืฉื ื‘ื ื” ืืช ื”ืžืขื‘ื“ื”, ืื•ืœื™ ื™ื”ื™ื” ืžืฉื•ื‘. ื‘ื•ื ื ืจืื”. ืชื•ื“ื”!

ืฉืœื•ื! ืชื•ื“ื” ืขืœ ื”ื“ื™ื•ื•ื—! ืจืื™ืชื™ ืฉื™ืฉ ืชืžื™ื›ื” ื‘ืืžื–ื•ืŸ. ื”ืื ื™ืฉ ืชื•ื›ื ื™ื•ืช ืœืชืžื•ืš ื‘-GSP?

ืฉืืœื” ื˜ื•ื‘ื”. ื”ืชื—ืœื ื• ืœืขืฉื•ืช ืืช ื–ื”. ื•ื”ืงืคืื ื• ืืช ื–ื” ืœืขืช ืขืชื” ื›ื™ ืื ื—ื ื• ืจื•ืฆื™ื ืœื—ืกื•ืš ื›ืกืฃ. ื›ืœื•ืžืจ, ื™ืฉ ืชืžื™ื›ื” ื‘ืืžืฆืขื•ืช run on localhost. ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืžื•ืคืข ื‘ืขืฆืžืš ื•ืœืขื‘ื•ื“ ื‘ืื•ืคืŸ ืžืงื•ืžื™. ืื’ื‘, ื–ื” ืžื” ืฉืื ื—ื ื• ืขื•ืฉื™ื. ืื ื™ ืขื•ืฉื” ืืช ื–ื” ื‘-Getlab, ืฉื ื‘-GSP. ืื‘ืœ ืื ื—ื ื• ืขื“ื™ื™ืŸ ืœื ืจื•ืื™ื ืืช ื”ื˜ืขื ืœืขืฉื•ืช ืจืง ืชื–ืžื•ืจ ื›ื–ื”, ื›ื™ ืœื’ื•ื’ืœ ืื™ืŸ ืžืงื•ืžื•ืช ื–ื•ืœื™ื. ื™ืฉ ??? ืžืงืจื™ื, ืื‘ืœ ื™ืฉ ืœื”ื ืžื’ื‘ืœื•ืช. ืจืืฉื™ืช, ืชืžื™ื“ ื™ืฉ ืœื”ื ืจืง 70% ื”ื ื—ื” ื•ืื™ ืืคืฉืจ ืœืฉื—ืง ืขื ื”ืžื—ื™ืจ ืฉื. ื‘ืกืคื•ื˜ื™ื, ืื ื—ื ื• ืžืขืœื™ื ืืช ื”ืžื—ื™ืจ ื‘-5-10% ื›ื“ื™ ืœื”ืคื—ื™ืช ืืช ื”ืกื‘ื™ืจื•ืช ืฉืชื‘ืขื˜ื•. ื›ืœื•ืžืจ, ืืชื” ืฉื•ืžืจ ื›ืชืžื™ื, ืืš ื ื™ืชืŸ ืœืงื—ืช ืื•ืชื ืžืžืš ื‘ื›ืœ ืขืช. ืื ืชืฆื™ืข ืงืฆืช ื™ื•ืชืจ ื’ื‘ื•ื” ืžืžื” ืฉืžืฆื™ืขื™ื ืื—ืจื™ื, ืชื”ืจื’ื• ืื•ืชืš ืžืื•ื—ืจ ื™ื•ืชืจ. ืœื’ื•ื’ืœ ื™ืฉ ืคืจื˜ื™ื ืฉื•ื ื™ื ืœื—ืœื•ื˜ื™ืŸ. ื•ื™ืฉ ืขื•ื“ ืžื’ื‘ืœื” ื’ืจื•ืขื” ืžืื•ื“ - ื”ื ื—ื™ื™ื ืจืง 24 ืฉืขื•ืช. ื•ืœืคืขืžื™ื ืื ื—ื ื• ืจื•ืฆื™ื ืœื”ืคืขื™ืœ ื ื™ืกื•ื™ ื‘ืžืฉืš 5 ื™ืžื™ื. ืื‘ืœ ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ื–ืืช ื‘ื ืงื•ื“ื•ืช; ื›ืชืžื™ื ืœืคืขืžื™ื ื ืžืฉื›ื™ื ื—ื•ื“ืฉื™ื.

ืฉืœื•ื! ืชื•ื“ื” ืขืœ ื”ื“ื™ื•ื•ื—! ื”ื–ื›ืจืช ื‘ื“ื™ืงื”. ืื™ืš ืžื—ืฉื‘ื™ื ืฉื’ื™ืื•ืช stat_statements?

ืฉืืœื” ื˜ื•ื‘ื” ืžืื•ื“. ืื ื™ ื™ื›ื•ืœ ืœื”ืจืื•ืช ื•ืœืกืคืจ ืœืš ื‘ืคื™ืจื•ื˜ ืจื‘. ื‘ืงืฆืจื”, ืื ื• ืžืกืชื›ืœื™ื ื›ื™ืฆื“ ืกื˜ ืงื‘ื•ืฆื•ืช ื”ื‘ืงืฉื•ืช ืฆืฃ: ื›ืžื” ื ืคืœื• ื•ื›ืžื” ื—ื“ืฉื•ืช ื”ื•ืคื™ืขื•. ื•ืื– ืื ื—ื ื• ืžืกืชื›ืœื™ื ืขืœ ืฉื ื™ ืžื“ื“ื™ื: total_time ื•ืฉื™ื—ื•ืช, ืื– ื™ืฉ ืฉืชื™ ืฉื’ื™ืื•ืช. ื•ืื ื—ื ื• ืžืกืชื›ืœื™ื ืขืœ ื”ืชืจื•ืžื” ืฉืœ ื”ืงื‘ื•ืฆื•ืช ื”ืฆืคื•ืช. ื™ืฉ ืฉืชื™ ืชืชื™ ืงื‘ื•ืฆื•ืช: ืืœื” ืฉืขื–ื‘ื• ื•ืืœื” ืฉื”ื’ื™ืขื•. ื‘ื•ืื• ื ืจืื” ืžื” ื”ืชืจื•ืžื” ืฉืœื”ื ืœืชืžื•ื ื” ื”ื›ื•ืœืœืช.

ืืชื” ืœื ืžืคื—ื“ ืฉื”ื•ื ื™ืกืชื•ื‘ื‘ ืœืฉื ืคืขืžื™ื™ื ืื• ืฉืœื•ืฉ ื‘ืžื”ืœืš ื”ื–ืžืŸ ืฉื‘ื™ืŸ ื”ืชืžื•ื ื•ืช?

ื›ืœื•ืžืจ, ื”ื ื ืจืฉืžื• ืฉื•ื‘ ืื• ืžื”?

ืœื“ื•ื’ืžื, ื‘ืงืฉื” ื–ื• ื›ื‘ืจ ืงื“ืžื” ืคืขื ืื—ืช, ืื—ืจ ื›ืš ื‘ืื” ื•ืฉื•ื‘ ืงื“ืžื”, ืื—ืจ ื›ืš ื‘ืื” ืฉื•ื‘ ื•ืฉื•ื‘ ืงื“ืžื”. ื•ื—ืฉื‘ืช ืคื” ืžืฉื”ื•, ื•ืื™ืคื” ื›ืœ ื–ื”?

ืฉืืœื” ื˜ื•ื‘ื”, ื ืฆื˜ืจืš ืœื”ืกืชื›ืœ.

ืขืฉื™ืชื™ ื“ื‘ืจ ื“ื•ืžื”. ื–ื” ื”ื™ื” ื™ื•ืชืจ ืคืฉื•ื˜, ื›ืžื•ื‘ืŸ, ืขืฉื™ืชื™ ืืช ื–ื” ืœื‘ื“. ืื‘ืœ ื”ื™ื™ืชื™ ืฆืจื™ืš ืœืืคืก, ืœืืคืก stat_statements ื•ืœื”ื‘ื™ืŸ ื‘ื–ืžืŸ ืชืžื•ื ืช ื”ืžืฆื‘ ืฉื”ื™ื” ืคื—ื•ืช ืžืฉื‘ืจ ืžืกื•ื™ื, ืฉืขื“ื™ื™ืŸ ืœื ื”ื’ื™ืข ืœืชืงืจื” ืฉืœ ื›ืžื” stat_statements ื™ื›ื•ืœ ืœื”ืฆื˜ื‘ืจ ืฉื. ื•ื”ื”ื‘ื ื” ืฉืœื™ ื”ื™ื ืฉืกื‘ื™ืจ ืœื”ื ื™ื— ืฉืฉื•ื ื“ื‘ืจ ืœื ื ืขืงืจ.

ื›ืŸ ื›ืŸ.

ืื‘ืœ ืื ื™ ืœื ืžื‘ื™ืŸ ืื™ืš ืื—ืจืช ืœืขืฉื•ืช ืืช ื–ื” ื‘ืฆื•ืจื” ืžื”ื™ืžื ื”.

ืœืฆืขืจื™, ืื ื™ ืœื ื–ื•ื›ืจ ื‘ื“ื™ื•ืง ืื ืื ื—ื ื• ืžืฉืชืžืฉื™ื ื‘ื˜ืงืกื˜ ื”ืฉืื™ืœืชื” ืฉื ืื• ื‘-queryid ืขื pg_stat_statements ื•ืžืชืžืงื“ื™ื ื‘ื•. ืื ื ืชืžืงื“ ื‘-queryid, ืื– ื‘ืชื™ืื•ืจื™ื” ืื ื• ืžืฉื•ื•ื™ื ื“ื‘ืจื™ื ื“ื•ืžื™ื.

ืœื, ืืคืฉืจ ืœื”ื›ืจื™ื— ืื•ืชื• ืœืฆืืช ื›ืžื” ืคืขืžื™ื ื‘ื™ืŸ ืฆื™ืœื•ื ืœืชืžื•ื ื•ืช ื•ืœื‘ื•ื ืฉื•ื‘.

ืขื ืื•ืชื• ืชืขื•ื“ืช ื–ื”ื•ืช?

ื›ืŸ.

ืื ื—ื ื• ื ืœืžื“ ืืช ื–ื”. ืฉืืœื” ื˜ื•ื‘ื”. ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืœืžื•ื“ ืืช ื–ื”. ืื‘ืœ ืœืขืช ืขืชื”, ืžื” ืฉืื ื• ืจื•ืื™ื ื›ืชื•ื‘ 0...

ื–ื”, ื›ืžื•ื‘ืŸ, ืžืงืจื” ื ื“ื™ืจ, ืื‘ืœ ื”ื™ื™ืชื™ ื‘ื”ืœื ื›ืฉื’ื™ืœื™ืชื™ ืฉ-stat_statemetns ื™ื›ื•ืœื™ื ืœืขืงื•ืจ ืฉื.

ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ื”ืจื‘ื” ื“ื‘ืจื™ื ื‘-Pg_stat_statements. ื ืชืงืœื ื• ื‘ืขื•ื‘ื“ื” ืฉืื ื™ืฉ ืœืš track_utility = ืžื•ืคืขืœ, ืื– ื’ื ื”ืกื˜ื™ื ืฉืœืš ื ืžืฆืื™ื ื‘ืžืขืงื‘.

ื›ืŸ, ื›ืžื•ื‘ืŸ.

ื•ืื ื™ืฉ ืœืš Java hibernate, ืฉื”ื•ื ืืงืจืื™, ืื– ื˜ื‘ืœืช ื”-hash ืžืชื—ื™ืœื” ืœื”ื™ื•ืช ืžืžื•ืงืžืช ืฉื. ื•ื‘ืจื’ืข ืฉืืชื” ืžื›ื‘ื” ืืคืœื™ืงืฆื™ื” ืขืžื•ืกื” ืžืื•ื“, ืืชื” ืžื’ื™ืข ืœ-50-100 ืงื‘ื•ืฆื•ืช. ื•ื”ื›ืœ ืฉื ืคื—ื•ืช ืื• ื™ื•ืชืจ ื™ืฆื™ื‘. ืื—ืช ื”ื“ืจื›ื™ื ืœื”ื™ืœื—ื ื‘ื–ื” ื”ื™ื ืœื”ื’ื“ื™ืœ ืืช pg_stat_statements.max.

ื›ืŸ, ืื‘ืœ ืืชื” ืฆืจื™ืš ืœื“ืขืช ื›ืžื”. ื•ืื™ื›ืฉื”ื• ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืคืงื•ื— ืขืœื™ื• ืขื™ืŸ. ื–ื” ืžื” ืฉืื ื™ ืขื•ืฉื”. ื›ืœื•ืžืจ, ื™ืฉ ืœื™ pg_stat_statements.max. ื•ืื ื™ ืจื•ืื” ืฉื‘ื–ืžืŸ ื”ืฆื™ืœื•ื ืœื ื”ื’ืขืชื™ ืœ-70%. ื‘ืกื“ืจ, ืื– ืœื ืื™ื‘ื“ื ื• ื›ืœื•ื. ื‘ื•ืื• ื ืชืืคืก. ื•ืฉื•ื‘ ื—ื•ืกื›ื™ื. ืื ืชืžื•ื ืช ื”ืžืฆื‘ ื”ื‘ืื” ื”ื™ื ืคื—ื•ืช ืž-70, ืกื‘ื™ืจ ืœื”ื ื™ื— ืฉืœื ืื™ื‘ื“ืช ื›ืœื•ื ืฉื•ื‘.

ื›ืŸ. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื ื›ืขืช 5. ื•ื–ื” ืžืกืคื™ืง ืขื‘ื•ืจ ืื ืฉื™ื ืจื‘ื™ื.

ื‘ื“ืจืš ื›ืœืœ ื›ืŸ.

ื•ื™ื“ืื•:

ื .ื‘ ื‘ืฉืžื™, ืื•ืกื™ืฃ ืฉืื Postgres ืžื›ื™ืœ ื ืชื•ื ื™ื ืกื•ื“ื™ื™ื ื•ืœื ื ื™ืชืŸ ืœื›ืœื•ืœ ืื•ืชื ื‘ืกื‘ื™ื‘ืช ื”ื‘ื“ื™ืงื”, ืื– ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ PostgreSQL Anonymizer. ื”ืชื›ื ื™ืช ื”ื™ื ื›ื“ืœืงืžืŸ:

ื’ื™ืฉื” ืชืขืฉื™ื™ืชื™ืช ืœื›ื•ื•ื ื•ืŸ PostgreSQL: ื ื™ืกื•ื™ื™ื ื‘ื‘ืกื™ืกื™ ื ืชื•ื ื™ื." ื ื™ืงื•ืœืื™ ืกืžื•ืงื•ื•ืืœื•ื‘

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”