ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

ืชืžืœื•ืœ ื”ื“ื•"ื— ืฉืœ ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™ ืœืฉื ืช 2015 "ืฆืœื™ืœื” ืขืžื•ืงื” ืœืชื•ืš ืกื˜ื˜ื™ืกื˜ื™ืงื” ืคื ื™ืžื™ืช ืฉืœ PostgreSQL"

ื›ืชื‘ ื•ื™ืชื•ืจ ืฉืœ ื›ื•ืชื‘ ื”ื“ื•"ื—: ืื ื™ ืžืฆื™ื™ืŸ ืฉื“ื•ื— ื–ื” ื”ื•ื ืžื ื•ื‘ืžื‘ืจ 2015 - ื—ืœืคื• ื™ื•ืชืจ ืž-4 ืฉื ื™ื ื•ืขื‘ืจ ื”ืจื‘ื” ื–ืžืŸ. ื”ื’ืจืกื” 9.4 ื”ื ื“ื•ื ื” ื‘ื“ื•ื— ืื™ื ื” ื ืชืžื›ืช ืขื•ื“. ื‘ืžื”ืœืš 4 ื”ืฉื ื™ื ื”ืื—ืจื•ื ื•ืช ื™ืฆืื• 5 ืžื”ื“ื•ืจื•ืช ื—ื“ืฉื•ืช ื‘ื”ืŸ ื™ืฉ ื”ืจื‘ื” ื—ื™ื“ื•ืฉื™ื, ืฉื™ืคื•ืจื™ื ื•ืฉื™ื ื•ื™ื™ื ืœื’ื‘ื™ ืกื˜ื˜ื™ืกื˜ื™ืงื” ื•ื—ืœืง ืžื”ื—ื•ืžืจ ืžื™ื•ืฉืŸ ื•ืœื ืจืœื•ื•ื ื˜ื™. ืชื•ืš ื›ื“ื™ ืกืงื™ืจืช ื ื™ืกื™ืชื™ ืœืกืžืŸ ืืช ื”ืžืงื•ืžื•ืช ื”ืœืœื• ื›ื“ื™ ืœื ืœื”ื˜ืขื•ืช ืืช ื”ืงื•ืจื. ืœื ืฉื›ืชื‘ืชื™ ืืช ื”ืงื˜ืขื™ื ื”ืืœื”, ื™ืฉ ื”ืจื‘ื” ื›ืืœื” ื•ื”ืชื•ืฆืื” ืชื”ื™ื” ื“ื™ื•ื•ื— ืื—ืจ ืœื’ืžืจื™.

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


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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

ื•ื‘ื•ืื• ื ื“ื‘ืจ ืขืœ ืื™ื–ื” ืกื˜ื˜ื™ืกื˜ื™ืงื” ืœื‘ื—ื•ืจ ื›ื“ื™ ืœืคืชื•ืจ ื‘ืขื™ื•ืช.

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

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

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

ืื™ืœื• ื‘ืขื™ื•ืช ื™ืฉ ื‘ืกื˜ื˜ื™ืกื˜ื™ืงื”?

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ืื•ืžืจืช ืœื ื• ื›ืžื” ื“ื‘ืจื™ื. ื ื™ืชืŸ ืœื—ืœืง ืื•ืชื ืœืงื˜ื’ื•ืจื™ื•ืช.

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

ืžืงื•ืจื•ืช ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ืžื•ืฆื’ื™ื ื›ื“ืœืงืžืŸ:

  • ื‘ื–ื™ื›ืจื•ืŸ ืžืฉื•ืชืฃ (buffers shared) ื™ืฉ ืงื˜ืข ืœืื—ืกื•ืŸ ื ืชื•ื ื™ื ืกื˜ื˜ื™ื™ื, ื™ืฉื ื ื’ื ืื•ืชื ืžื•ื ื™ื ืฉืžื•ื’ื“ืœื™ื ื›ืœ ื”ื–ืžืŸ ื›ืืฉืจ ืžืชืจื—ืฉื™ื ืื™ืจื•ืขื™ื ืžืกื•ื™ืžื™ื, ืื• ืžืชืขื•ืจืจื™ื ืจื’ืขื™ื ืžืกื•ื™ืžื™ื ื‘ืคืขื•ืœืช ื‘ืกื™ืก ื”ื ืชื•ื ื™ื.
  • ื›ืœ ื”ืžื•ื ื™ื ื”ืœืœื• ืื™ื ื ื ื’ื™ืฉื™ื ืœืžืฉืชืžืฉ ื•ืืฃ ืื™ื ื ื ื’ื™ืฉื™ื ืœืžื ื”ืœ ื”ืžืขืจื›ืช. ืืœื• ื“ื‘ืจื™ื ื‘ืจืžื” ื ืžื•ื›ื”. ื›ื“ื™ ืœื’ืฉืช ืืœื™ื”ื, PostgreSQL ืžืกืคืงืช ืžืžืฉืง ื‘ืฆื•ืจื” ืฉืœ ืคื•ื ืงืฆื™ื•ืช SQL. ืื ื• ื™ื›ื•ืœื™ื ืœื‘ืฆืข ื–ืจื™ืงื•ืช ื ื‘ื—ืจื•ืช ื‘ืืžืฆืขื•ืช ื”ืคื•ื ืงืฆื™ื•ืช ื”ืœืœื• ื•ืœืงื‘ืœ ืื™ื–ืฉื”ื• ืžื“ื“ (ืื• ืงื‘ื•ืฆื” ืฉืœ ืžื“ื“ื™ื).
  • ืขื ื–ืืช, ื”ืฉื™ืžื•ืฉ ื‘ืคื•ื ืงืฆื™ื•ืช ืืœื• ืื™ื ื• ืชืžื™ื“ ื ื•ื—, ื•ืœื›ืŸ ื”ืคื•ื ืงืฆื™ื•ืช ื”ืŸ ื”ื‘ืกื™ืก ืœืชืฆื•ื’ื•ืช (VIEWs). ืืœื• ื˜ื‘ืœืื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื”ืžืกืคืงื•ืช ื ืชื•ื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื ืขืœ ืชืช-ืžืขืจื›ืช ืกืคืฆื™ืคื™ืช, ืื• ืขืœ ืกื˜ ืžืกื•ื™ื ืฉืœ ืื™ืจื•ืขื™ื ื‘ืžืกื“ ื”ื ืชื•ื ื™ื.
  • ืชืฆื•ื’ื•ืช ืžื•ื˜ืžืขื•ืช ืืœื• (VIEWS) ื”ืŸ ืžืžืฉืง ื”ืžืฉืชืžืฉ ื”ืขื™ืงืจื™ ืœืขื‘ื•ื“ื” ืขื ืกื˜ื˜ื™ืกื˜ื™ืงื”. ื”ื ื–ืžื™ื ื™ื ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ืœืœื ื”ื’ื“ืจื•ืช ื ื•ืกืคื•ืช, ืืชื” ื™ื›ื•ืœ ืžื™ื“ ืœื”ืฉืชืžืฉ ื‘ื”ื, ืœื”ืกืชื›ืœ ืขืœื™ื”ื ื•ืœืงื—ืช ืžื”ื ืžื™ื“ืข. ื•ืื– ื™ืฉ ืชืจื•ืžื•ืช. ื”ืชืจื•ืžื•ืช ื”ืŸ ืจืฉืžื™ื•ืช. ืืชื” ื™ื›ื•ืœ ืœื”ืชืงื™ืŸ ืืช ื—ื‘ื™ืœืช postgresql-contrib (ืœื“ื•ื’ืžื”, postgresql94-contrib), ืœื˜ืขื•ืŸ ืืช ื”ืžื•ื“ื•ืœ ื”ื ื“ืจืฉ ื‘ืชืฆื•ืจื”, ืœืฆื™ื™ืŸ ืคืจืžื˜ืจื™ื ืขื‘ื•ืจื•, ืœื”ืคืขื™ืœ ืžื—ื“ืฉ ืืช PostgreSQL ื•ืชื•ื›ืœ ืœื”ืฉืชืžืฉ ื‘ื•. (ื”ืขืจื”. ื‘ื”ืชืื ืœื”ืคืฆื”, ื‘ื’ืจืกืื•ืช ื”ืื—ืจื•ื ื•ืช ื—ื‘ื™ืœืช ื”ืชืจื•ืžื” ื”ื™ื ื—ืœืง ืžื”ื—ื‘ื™ืœื” ื”ืจืืฉื™ืช).
  • ื•ื™ืฉ ืชืจื•ืžื•ืช ืœื ืจืฉืžื™ื•ืช. ื”ื ืื™ื ื ื›ืœื•ืœื™ื ื‘ื”ืคืฆื” ื”ืกื˜ื ื“ืจื˜ื™ืช ืฉืœ PostgreSQL. ื™ืฉ ืœื”ืจื›ื™ื‘ ืื•ืชื ืื• ืœื”ืชืงื™ืŸ ืื•ืชื ื›ืกืคืจื™ื™ื”. ื”ืืคืฉืจื•ื™ื•ืช ื™ื›ื•ืœื•ืช ืœื”ื™ื•ืช ืฉื•ื ื•ืช ืžืื•ื“, ืชืœื•ื™ ื‘ืžื” ืฉื”ืžืคืชื— ืฉืœ ื”ืชืจื•ืžื” ื”ืœื ืจืฉืžื™ืช ื”ื–ื• ื”ื’ื™ืข.

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

ืขื ื–ืืช, ืื ื ื™ืงื— ืืช ื”ืชืžื•ื ื” ื”ืงื•ื“ืžืช ะšะฐะบ ั‚ั€ะฐั‚ะธั‚ัั ะฒั€ะตะผั ะฝะฐ PostgreSQL ื•ืชื•ืื ืœืจืฉื™ืžื” ื–ื•, ืื ื• ืžืงื‘ืœื™ื ืืช ื”ืชืžื•ื ื” ื”ื–ื•. ืื ื• ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ื›ืœ ืชืฆื•ื’ื” (VIEWs) ืื• ื‘ื›ืœ ืคื•ื ืงืฆื™ื” ืœืžื˜ืจื” ื–ื• ืื• ืื—ืจืช ื›ื“ื™ ืœืงื‘ืœ ืืช ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืžืชืื™ืžื” ื›ืืฉืจ PostgreSQL ืคื•ืขืœ. ื•ืื ื—ื ื• ื›ื‘ืจ ื™ื›ื•ืœื™ื ืœืงื‘ืœ ืงืฆืช ืžื™ื“ืข ืขืœ ืคืขื•ืœืช ืชืช-ื”ืžืขืจื›ืช.

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

select
sum(blks_hit)*100/sum(blks_hit+blks_read) as hit_ratio
from pg_stat_database;

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

ื–ื” ื‘ืจื•ืจ ื›ื›ืœ ืฉื™ืฉ ืœื ื• ื™ื•ืชืจ ื›ื ื™ืกื•ืช ืžื˜ืžื•ืŸ, ื›ืš ื™ื™ื˜ื‘. ืื ื• ืžื•ื“ื“ื™ื ืืช ื”ืžื“ื“ ื”ื–ื” ื‘ืื—ื•ื–ื™ื. ื•ืœื“ื•ื’ืžื”, ืื ื”ืื—ื•ื– ืฉืœื ื• ืžื”ืชืืžื•ืช ืฉืœ ื”ืžื˜ืžื•ืŸ ื”ืืœื” ื”ื•ื ื™ื•ืชืจ ืž-90%, ืื– ื–ื” ื˜ื•ื‘. ืื ื–ื” ื™ื•ืจื“ ืžืชื—ืช ืœ-90%, ื–ื” ืื•ืžืจ ืฉืื™ืŸ ืœื ื• ืžืกืคื™ืง ื–ื™ื›ืจื•ืŸ ื›ื“ื™ ืœื”ื—ื–ื™ืง ืืช ืจืืฉ ื”ื ืชื•ื ื™ื ื”ื—ื ื‘ื–ื™ื›ืจื•ืŸ. ื•ื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘ื ืชื•ื ื™ื ื”ืืœื”, PostgreSQL ื ืืœืฅ ืœื’ืฉืช ืœื“ื™ืกืง ื•ื–ื” ืื™ื˜ื™ ื™ื•ืชืจ ืžืืฉืจ ืื ื”ื ืชื•ื ื™ื ื”ื™ื• ื ืงืจืื™ื ืžื”ื–ื™ื›ืจื•ืŸ. ื•ืืชื” ืฆืจื™ืš ืœื—ืฉื•ื‘ ืขืœ ื”ื’ื“ืœืช ื”ื–ื™ื›ืจื•ืŸ: ืื• ื”ื’ื“ืœืช ืžืื’ืจื™ื ืžืฉื•ืชืคื™ื, ืื• ื”ื’ื“ืœืช ื–ื™ื›ืจื•ืŸ ื”ื—ื•ืžืจื” (RAM).

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

select
datname,
(xact_commit*100)/(xact_commit+xact_rollback) as c_ratio,
deadlocks, conflicts,
temp_file, pg_size_pretty(temp_bytes) as temp_size
from pg_stat_database;

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

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

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

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

ื’ื ืงื‘ืฆื™ื ื–ืžื ื™ื™ื (temp_files) ื’ืจื•ืขื™ื. ื›ืืฉืจ ืœื‘ืงืฉืช ืžืฉืชืžืฉ ืื™ืŸ ืžืกืคื™ืง ื–ื™ื›ืจื•ืŸ ื›ื“ื™ ืœื”ื›ื™ืœ ื ืชื•ื ื™ื ืชืคืขื•ืœื™ื™ื ื•ื–ืžื ื™ื™ื, ื”ื™ื ื™ื•ืฆืจืช ืงื•ื‘ืฅ ื‘ื“ื™ืกืง. ื•ื›ืœ ื”ืคืขื•ืœื•ืช ืฉื”ื•ื ื™ื›ื•ืœ ืœื‘ืฆืข ื‘ืžืื’ืจ ื–ืžื ื™ ื‘ื–ื™ื›ืจื•ืŸ ืžืชื—ื™ืœื•ืช ืœื”ืชื‘ืฆืข ื‘ื“ื™ืกืง. ื–ื” ืื™ื˜ื™. ื–ื” ืžื’ื“ื™ืœ ืืช ื–ืžืŸ ื‘ื™ืฆื•ืข ื”ืฉืื™ืœืชื”. ื•ื”ืœืงื•ื— ืฉืฉืœื— ื‘ืงืฉื” ืœ-PostgreSQL ื™ืงื‘ืœ ืชืฉื•ื‘ื” ืงืฆืช ืžืื•ื—ืจ ื™ื•ืชืจ. ืื ื›ืœ ื”ืคืขื•ืœื•ืช ื”ืœืœื• ืžื‘ื•ืฆืขื•ืช ื‘ื–ื™ื›ืจื•ืŸ, Postgres ื™ื’ื™ื‘ ื”ืจื‘ื” ื™ื•ืชืจ ืžื”ืจ ื•ื”ืœืงื•ื— ื™ืžืชื™ืŸ ืคื—ื•ืช.

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

Pg_stat_bgwriter - ืชืฆื•ื’ื” ื–ื• ืžืชืืจืช โ€‹โ€‹ืืช ืคืขื•ืœืชืŸ ืฉืœ ืฉืชื™ ืชืช-ืžืขืจื›ื•ืช ืจืงืข PostgreSQL: checkpointer ะธ background writer.

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

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

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

ื•ืื ื”ืกืชื›ืœืช ืขืœ ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” pg_stat_bgwriter ื•ืจืื™ืชื™ ืžื” ื™ืฉ ืœืš checkpoint_req ื’ื“ื•ืœ ื‘ื”ืจื‘ื” ืž-checkpoint_timed, ืื– ื–ื” ืจืข. ืœืžื” ืจืข? ื”ืžืฉืžืขื•ืช ื”ื™ื ืฉ-PostgreSQL ื ืžืฆื ื‘ืœื—ืฅ ืžืชืžื™ื“ ื›ืืฉืจ ื”ื•ื ืฆืจื™ืš ืœื›ืชื•ื‘ ื ืชื•ื ื™ื ืœื“ื™ืกืง. ืžื—ืกื•ื ืคืกืง ื–ืžืŸ ืคื—ื•ืช ืžืœื—ื™ืฅ ื•ืžืชื‘ืฆืข ื‘ื”ืชืื ืœืœื•ื— ื”ื–ืžื ื™ื ื”ืคื ื™ืžื™ ื•ืžืชืคืจืก ืขืœ ืคื ื™ ื–ืžืŸ. ืœ-PostgreSQL ื™ืฉ ืืช ื”ื™ื›ื•ืœืช ืœื”ืฉื”ื•ืช ืืช ื”ืขื‘ื•ื“ื” ื•ืœื ืœื”ืขืžื™ืก ืขืœ ืชืช-ืžืขืจื›ืช ื”ื“ื™ืกืง. ื–ื” ืฉื™ืžื•ืฉื™ ืขื‘ื•ืจ PostgreSQL. ื•ืฉืื™ืœืชื•ืช ืฉืžืชื‘ืฆืขื•ืช ื‘ืžื”ืœืš ื”ืžื—ืกื•ื ืœื ื™ื—ื•ื• ืœื—ืฅ ืžื”ืขื•ื‘ื“ื” ืฉืชืช-ืžืขืจื›ืช ื”ื“ื™ืกืง ืชืคื•ืกื”.

ื•ื›ื“ื™ ืœื”ืชืื™ื ืืช ื”ืžื—ืกื•ื ื™ืฉ ืฉืœื•ืฉื” ืคืจืžื˜ืจื™ื:

  • ัheckpoint_segments.

  • ัheckpoint_timeout.

  • ัheckpoint_competion_target.

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

ะ’ะฝะธะผะฐะฝะธะต: ื”ื’ืจืกื” 9.4 ื”ื ื“ื•ื ื” ื‘ื“ื•ื— ืื™ื ื” ืจืœื•ื•ื ื˜ื™ืช ืขื•ื“. ื‘ื’ืจืกืื•ืช ืžื•ื“ืจื ื™ื•ืช ืฉืœ PostgreSQL ื”ืคืจืžื˜ืจ checkpoint_segments ืžื•ื—ืœืคื™ื ื‘ืคืจืžื˜ืจื™ื min_wal_size ะธ max_wal_size.

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

ื‘ืฉื‘ื™ืœ ืžื” ื–ื” ืขื•ื“ ื ื—ื•ืฅ? ื–ื” ืžืกืคืง ืืช ื”ืฆื•ืจืš ื‘ื“ืคื™ื ืจื™ืงื™ื ื‘ืžืื’ืจื™ื ืžืฉื•ืชืคื™ื ืื ื”ื ื ื“ืจืฉื™ื ืคืชืื•ื (ื‘ื›ืžื•ื™ื•ืช ื’ื“ื•ืœื•ืช ื•ืžื™ื“) ื›ื“ื™ ืœื”ื›ื™ืœ ื ืชื•ื ื™ื. ื ื ื™ื— ืฉื ื•ืฆืจ ืžืฆื‘ ืฉื‘ื• ื ื“ืจืฉื• ื“ืคื™ื ืจื™ืงื™ื ืœื”ืฉืœืžืช ื‘ืงืฉื” ื•ื”ื ื›ื‘ืจ ื”ื™ื• ื‘ืžืื’ืจื™ื ื”ืžืฉื•ืชืคื™ื. Postgresive backend ื”ื•ื ืคืฉื•ื˜ ืžืจื™ื ืื•ืชื ื•ืžืฉืชืžืฉ ื‘ื”ื, ื”ื•ื ืœื ืฆืจื™ืš ืœื ืงื•ืช ืฉื•ื ื“ื‘ืจ ื‘ืขืฆืžื•. ืื‘ืœ ืื ืคืชืื•ื ืื™ืŸ ื“ืคื™ื ื›ืืœื”, ื”ืงืฆื” ื”ืื—ื•ืจื™ ืžืฉื”ื” ืืช ื”ืขื‘ื•ื“ื” ื•ืžืชื—ื™ืœ ืœื—ืคืฉ ื“ืคื™ื ื›ื“ื™ ืœื–ืจื•ืง ืื•ืชื ืœื“ื™ืกืง ื•ืœืงื—ืช ืื•ืชื ืœืฆืจื›ื™ื• ืฉืœื• - ืžื” ืฉืžืฉืคื™ืข ืœืจืขื” ืขืœ ื–ืžืŸ ื”ื‘ืงืฉื” ืฉื‘ื•ืฆืขื” ื›ืขืช. ืื ืืชื” ืจื•ืื” ืฉื™ืฉ ืœืš ืคืจืžื˜ืจ maxwritten_clean ื’ื“ื•ืœ, ื–ื” ืื•ืžืจ ืฉื›ื•ืชื‘ ื”ืจืงืข ืœื ืขื•ืฉื” ืืช ื”ืขื‘ื•ื“ื” ืฉืœื• ื•ืืชื” ืฆืจื™ืš ืœื”ื’ื“ื™ืœ ืืช ื”ืคืจืžื˜ืจื™ื bgwriter_lru_maxpages, ื›ื“ื™ ืฉื™ื•ื›ืœ ืœืขืฉื•ืช ื™ื•ืชืจ ืขื‘ื•ื“ื” ื‘ืžื—ื–ื•ืจ ืื—ื“, ื ืงื” ืขื•ื“ ื“ืคื™ื.

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

ะ’ะฝะธะผะฐะฝะธะต: _ื”ื˜ืงืกื˜ ื”ื‘ื ืžืชืืจ ืืช ื”ืชืฆื•ื’ื•ืช ื”ืกื˜ื˜ื™ืกื˜ื™ื•ืช ื”ืงืฉื•ืจื•ืช ืœืฉื›ืคื•ืœ. ืจื•ื‘ ืฉืžื•ืช ื”ืชืฆื•ื’ื” ื•ื”ืคื•ื ืงืฆื™ื•ืช ืฉื•ื ื• ื‘-Postgres 10. ื”ืžื”ื•ืช ืฉืœ ืฉื™ื ื•ื™ ื”ืฉื ื”ื™ื™ืชื” ืœื”ื—ืœื™ืฃ xlog ืขืœ wal ะธ location ืขืœ lsn ื‘ืฉืžื•ืช ืคื•ื ืงืฆื™ื•ืช/ืชืฆื•ื’ื” ื•ื›ื•'. ื“ื•ื’ืžื” ืžื™ื•ื—ื“ืช, ืคื•ื ืงืฆื™ื” pg_xlog_location_diff() ืฉื•ื ื” ืฉื ืœ pg_wal_lsn_diff()._

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

ัะบะพะปัŒะบะพ ะทะฐะฟะธัะฐะฝะพ xlog ะฒ ะฑะฐะนั‚ะฐั…
$ select
pg_xlog_location_diff(pg_current_xlog_location(),'0/00000000');
ะปะฐะณ ั€ะตะฟะปะธะบะฐั†ะธะธ ะฒ ะฑะฐะนั‚ะฐั…
$ select
client_addr,
pg_xlog_location_diff(pg_current_xlog_location(), replay_location)
from pg_stat_replication;
ะปะฐะณ ั€ะตะฟะปะธะบะฐั†ะธะธ ะฒ ัะตะบัƒะฝะดะฐั…
$ select
extract(epoch from now() - pg_last_xact_replay_timestamp());

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

ื™ืฉ ืฉืœื•ืฉ ืกื™ื‘ื•ืช ืœืคื™ื’ื•ืจ:

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

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

ื”ืขืจื”: _ื‘ืžืงื•ื pg_xlog_locationื”ืคื•ื ืงืฆื™ื” diff() ื™ื›ื•ืœื” ืœื”ืฉืชืžืฉ ื‘ืื•ืคืจื˜ื•ืจ ื”ื—ื™ืกื•ืจ ื•ืœื”ื—ืกื™ืจ ืžื™ืงื•ื ืื—ื“ ืžืื—ืจ. ื ื•ึนื—ึท.

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

select
relname,
pg_size_pretty(pg_relation_size(relname::regclass)) as size,
seq_scan, seq_tup_read,
seq_scan / seq_tup_read as seq_tup_avg
from pg_stat_user_tables
where seq_tup_read > 0 order by 3,4 desc limit 5;

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

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

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

select
relname,
pg_size_pretty(pg_total_relation_size(relname::regclass)) as
full_size,
pg_size_pretty(pg_relation_size(relname::regclass)) as
table_size,
pg_size_pretty(pg_total_relation_size(relname::regclass) -
pg_relation_size(relname::regclass)) as index_size
from pg_stat_user_tables
order by pg_total_relation_size(relname::regclass) desc limit 10;

ื ื™ืชืŸ ืœืงื‘ืœ ื’ื“ืœื™ ื˜ื‘ืœื” ื’ื ื‘ืืžืฆืขื•ืช ื˜ื‘ืœื” ื–ื• ื•ื‘ืืžืฆืขื•ืช ืคื•ื ืงืฆื™ื•ืช ื ื•ืกืคื•ืช pg_total_relation_size(), pg_relation_size().

ื‘ืื•ืคืŸ ื›ืœืœื™, ื™ืฉ ืžื˜ื-ืคืงื•ื“ื•ืช dt ะธ di, ืฉื‘ื• ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘-PSQL ื•ื’ื ืœื”ืฆื™ื’ ืืช ื”ื’ื“ืœื™ื ืฉืœ ื˜ื‘ืœืื•ืช ื•ืื™ื ื“ืงืกื™ื.

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

select
s.relname,
pg_size_pretty(pg_relation_size(relid)),
coalesce(n_tup_ins,0) + 2 * coalesce(n_tup_upd,0) -
coalesce(n_tup_hot_upd,0) + coalesce(n_tup_del,0) AS total_writes,
(coalesce(n_tup_hot_upd,0)::float * 100 / (case when n_tup_upd > 0
then n_tup_upd else 1 end)::float)::numeric(10,2) AS hot_rate,
(select v[1] FROM regexp_matches(reloptions::text,E'fillfactor=(\d+)') as
r(v) limit 1) AS fillfactor
from pg_stat_all_tables s
join pg_class c ON c.oid=relid
order by total_writes desc limit 50;

ื•ื‘ืฉืœ ื”ืขื™ืฆื•ื‘ ื”ื—ื“ืฉ ืฉืœื•, UPDATE ื”ื™ื ืคืขื•ืœื” ื‘ืขืœืช ืžืฉืงืœ ื›ื‘ื“. ืื‘ืœ ืืคืฉืจ ืœื”ืงืœ ืขืœื™ื”ื. ืœืื›ื•ืœ hot updates. ื”ื ื”ื•ืคื™ืขื• ื‘ื’ืจืกืช PostgreSQL 8.3. ื•ืžื” ื–ื”? ื–ื”ื• ืขื“ื›ื•ืŸ ืงืœ ืฉืื™ื ื• ื’ื•ืจื ืœืื™ื ื“ืงืกื™ื ืœื”ื™ื‘ื ื•ืช ืžื—ื“ืฉ. ื›ืœื•ืžืจ, ืขื“ื›ื ื• ืืช ื”ืจืฉื•ืžื”, ืื‘ืœ ืจืง ื”ืจืฉื•ืžื” ื‘ืขืžื•ื“ (ืฉืฉื™ื™ื›ืช ืœื˜ื‘ืœื”) ืขื•ื“ื›ื ื”, ื•ื”ืื™ื ื“ืงืกื™ื ืขื“ื™ื™ืŸ ืžืฆื‘ื™ืขื™ื ืขืœ ืื•ืชื” ืจืฉื•ืžื” ื‘ืขืžื•ื“. ื™ืฉ ืงืฆืช ื”ื™ื’ื™ื•ืŸ ืชืคืขื•ืœื™ ืžืขื ื™ื™ืŸ: ื›ืฉืžื’ื™ืข ื•ืืงื•ื, ื”ื•ื ื™ื•ืฆืจ ืืช ื”ืฉืจืฉืจืื•ืช ื”ืืœื” hot ื‘ื•ื ื” ืžื—ื“ืฉ ื•ื”ื›ืœ ืžืžืฉื™ืš ืœืขื‘ื•ื“ ืœืœื ืขื“ื›ื•ืŸ ืื™ื ื“ืงืกื™ื, ื•ื”ื›ืœ ืงื•ืจื” ืขื ืคื—ื•ืช ื‘ื–ื‘ื•ื– ืžืฉืื‘ื™ื.

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

ALTER TABLE table_name SET (fillfactor = 70);

ืื™ืš ืœื”ื’ื‘ื™ืจ ื ืคื— hot updateืื•? ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ fillfactor. ื”ื•ื ืงื•ื‘ืข ืืช ื’ื•ื“ืœ ื”ืฉื˜ื— ื”ืคื ื•ื™ ื”ืฉืžื•ืจ ื‘ืขืช ืžื™ืœื•ื™ ืขืžื•ื“ ื‘ื˜ื‘ืœื” ื‘ืืžืฆืขื•ืช INSERTs. ื›ืืฉืจ ืžื•ืกื™ืคื™ื ืชื•ืกืคื•ืช ืœื˜ื‘ืœื”, ื”ื ืžืžืœืื™ื ืœื—ืœื•ื˜ื™ืŸ ืืช ื”ื“ืฃ ื•ืื™ื ื ืžืฉืื™ืจื™ื ืžืงื•ื ืจื™ืง. ืœืื—ืจ ืžื›ืŸ ืขืžื•ื“ ื—ื“ืฉ ืžืกื•ืžืŸ. ื”ื ืชื•ื ื™ื ืžืžื•ืœืื™ื ืฉื•ื‘. ื•ื–ื•ื”ื™ ื”ืชื ื”ื’ื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ, fillfactor = 100%.

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

select c.relname,
current_setting('autovacuum_vacuum_threshold') as av_base_thresh,
current_setting('autovacuum_vacuum_scale_factor') as av_scale_factor,
(current_setting('autovacuum_vacuum_threshold')::int +
(current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples))
as av_thresh,
s.n_dead_tup
from pg_stat_user_tables s join pg_class c ON s.relname = c.relname
where s.n_dead_tup > (current_setting('autovacuum_vacuum_threshold')::int
+ (current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples));

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

ื”ืขืจื”: _ื”ื—ืœ ืž-Postgres 10, ื”ืžืฆื‘ ืขื ืžืขืงื‘ Vatovac ื”ืฉืชืคืจ ืžืื•ื“ - ืชืฆื•ื’ืช pg_stat_progress ื”ื•ืคื™ืขื”ื•ืืงื•ื, ืžื” ืฉืžืคืฉื˜ ืžืฉืžืขื•ืชื™ืช ืืช ื ื•ืฉื ื”ื ื™ื˜ื•ืจ ืขืœ ืฉื•ืื‘ ื”ืจื›ื‘.

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

ื•ืื™ืš ืžื—ืฉื‘ื™ื ืืช ื”ืกืฃ ื”ื–ื”? ื–ื”ื• ืื—ื•ื– ืžืื•ื“ ืกืคืฆื™ืคื™ ืžืžืกืคืจ ื”ืฉื•ืจื•ืช ื”ื›ื•ืœืœ ื‘ื˜ื‘ืœื”. ื™ืฉ ืคืจืžื˜ืจ autovacuum_vacuum_scale_factor. ื–ื” ืงื•ื‘ืข ืืช ื”ืื—ื•ื–. ื ื ื™ื— 10% + ื™ืฉื ื• ืกืฃ ื‘ืกื™ืกื™ ื ื•ืกืฃ ืฉืœ 50 ืฉื•ืจื•ืช. ื•ืžื” ืงื•ืจื”? ื›ืืฉืจ ื™ืฉ ืœื ื• ื™ื•ืชืจ ืฉื•ืจื•ืช ืžืชื•ืช ืž-"10% + 50" ืžื›ืœ ื”ืฉื•ืจื•ืช ื‘ื˜ื‘ืœื”, ืื– ืื ื—ื ื• ืžืขื‘ื™ืจื™ื ืืช ื”ื˜ื‘ืœื” ืœ-autovacuum.

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

select c.relname,
current_setting('autovacuum_vacuum_threshold') as av_base_thresh,
current_setting('autovacuum_vacuum_scale_factor') as av_scale_factor,
(current_setting('autovacuum_vacuum_threshold')::int +
(current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples))
as av_thresh,
s.n_dead_tup
from pg_stat_user_tables s join pg_class c ON s.relname = c.relname
where s.n_dead_tup > (current_setting('autovacuum_vacuum_threshold')::int
+ (current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples));

ืขื ื–ืืช, ื™ืฉ ื ืงื•ื“ื” ืื—ืช. ืกืคื™ื ื‘ืกื™ืกื™ื™ื ืœืคืจืžื˜ืจื™ื av_base_thresh ะธ av_scale_factor ื ื™ืชืŸ ืœื”ืงืฆื•ืช ื‘ื ืคืจื“. ื•ื‘ื”ืชืื ืœื›ืš, ื”ืกืฃ ืœื ื™ื”ื™ื” ื’ืœื•ื‘ืœื™, ืืœื ืื™ื ื“ื™ื‘ื™ื“ื•ืืœื™ ืœืฉื•ืœื—ืŸ. ืœื›ืŸ, ื›ื“ื™ ืœื—ืฉื‘, ืืชื” ืฆืจื™ืš ืœื”ืฉืชืžืฉ ื‘ื˜ืจื™ืงื™ื ื•ื˜ืจื™ืงื™ื. ื•ืื ืืชื” ืžืขื•ื ื™ื™ืŸ, ืื– ืืชื” ื™ื›ื•ืœ ืœื”ืกืชื›ืœ ืขืœ ื”ื ื™ืกื™ื•ืŸ ืฉืœ ื”ืงื•ืœื’ื•ืช ืฉืœื ื• ืž-Avito (ื”ืงื™ืฉื•ืจ ื‘ืฉืงื•ืคื™ืช ืœื ื—ื•ืงื™ ื•ืขื•ื“ื›ืŸ ื‘ื˜ืงืกื˜).

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

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

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

ืฉื ื™ ืงื™ืฉื•ืจื™ื:

https://github.com/dataegret/pg-utils/blob/master/sql/low_used_indexes.sql

http://www.databasesoup.com/2014/05/new-finding-unused-indexes-query.html

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

ื”ืงื™ืฉื•ืจ ื”ืฉื ื™ ื”ื•ื ื‘ืงืฉื” ืžืขื ื™ื™ื ืช ืœืžื“ื™. ื™ืฉ ืฉื ื”ื™ื’ื™ื•ืŸ ืžืื•ื“ ืœื ื˜ืจื™ื•ื•ื™ืืœื™. ืื ื™ ืžืžืœื™ืฅ ืขืœ ื–ื” ืœืขื™ื•ืŸ.

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

ืžื” ืขื•ื“ ื›ื“ืื™ ืœืกื›ื ื‘ืืžืฆืขื•ืช ืžื“ื“ื™ื?

  • ืื™ื ื“ืงืกื™ื ืฉืื™ื ื ื‘ืฉื™ืžื•ืฉ ื”ื ื’ืจื•ืขื™ื.

  • ื”ื ืชื•ืคืกื™ื ืžืงื•ื.

  • ื”ืื˜ ืืช ืคืขื•ืœื•ืช ื”ืขื“ื›ื•ืŸ.

  • ืขื‘ื•ื“ื” ื ื•ืกืคืช ืขื‘ื•ืจ ื”ืฉื•ืื‘.

ืื ื ืกื™ืจ ืื™ื ื“ืงืกื™ื ืฉืื™ื ื ื‘ืฉื™ืžื•ืฉ, ืจืง ื ืฉืคืจ ืืช ืžืกื“ ื”ื ืชื•ื ื™ื.

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

ื”ืžืฆื’ืช ื”ื‘ืื” ื”ื™ื pg_stat_activity. ื–ื”ื• ืื ืœื•ื’ื™ ืฉืœ ื”ืฉื™ืจื•ืช ps, ืจืง ื‘-PostgreSQL. ืื psืื– ืืชื” ืžืกืชื›ืœ ืขืœ ื”ืชื”ืœื™ื›ื™ื ื‘ืžืขืจื›ืช ื”ื”ืคืขืœื” pg_stat_activity ื–ื” ื™ืจืื” ืœืš ืืช ื”ืคืขื™ืœื•ืช ื‘ืชื•ืš PostgreSQL.

ืื™ืœื• ื“ื‘ืจื™ื ืฉื™ืžื•ืฉื™ื™ื ื ื•ื›ืœ ืœืงื—ืช ืžืฉื?

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

select
count(*)*100/(select current_setting('max_connections')::int)
from pg_stat_activity;

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

select
client_addr, usename, datname, count(*)
from pg_stat_activity group by 1,2,3 order by 4 desc;

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

select
client_addr, usename, datname,
clock_timestamp() - xact_start as xact_age,
clock_timestamp() - query_start as query_age,
query
from pg_stat_activity order by xact_start, query_start;

ืฉื™ืžื• ืœื‘: ื‘ืขื–ืจืช ื‘ืงืฉื” ื–ื• ื ื•ื›ืœ ืœื–ื”ื•ืช ืฉืื™ืœืชื•ืช ื•ืขืกืงืื•ืช ืืจื•ื›ื•ืช. ืื ื• ืžืฉืชืžืฉื™ื ื‘ืคื•ื ืงืฆื™ื” clock_timestamp() ืœืงื‘ื™ืขืช ื–ืžืŸ ืคืขื•ืœื”. ืฉืื™ืœืชื•ืช ืืจื•ื›ื•ืช ืฉืžืฆืื ื•, ื ื•ื›ืœ ืœื–ื›ื•ืจ ืื•ืชืŸ, ืœืžืœื ืื•ืชืŸ explain, ืชืกืชื›ืœ ืขืœ ื”ืชื•ื›ื ื™ื•ืช ื•ืื™ื›ืฉื”ื• ื‘ืฆืข ืื•ืคื˜ื™ืžื™ื–ืฆื™ื”. ืื ื—ื ื• ืžืคื™ืœื™ื ืืช ื”ื‘ืงืฉื•ืช ื”ืืจื•ื›ื•ืช ื”ื ื•ื›ื—ื™ื•ืช ื•ืžืžืฉื™ื›ื™ื ื”ืœืื” ื‘ื—ื™ื™ื ื•.

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

select * from pg_stat_activity where state in
('idle in transaction', 'idle in transaction (aborted)';

ืขืกืงืื•ืช ื’ืจื•ืขื•ืช ื”ืŸ ืขืกืงืื•ืช ื‘ืžืฆื‘ ืกืจืง ื‘ื˜ืจื ื–ืงืฆื™ื” ื•ื‘ืžืฆื‘ ืกืจืง ื‘ื˜ืจื ื–ืงืฆื™ื” (ื‘ื•ื˜ืœื”).

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

select * from pg_stat_activity where state in
('idle in transaction', 'idle in transaction (aborted)';

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

ืื ืืชื” ืจื•ืื” ืฉื™ืฉ ืœืš ื™ื•ืชืจ ืž-5-10-20 ืžื”ื ื‘ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœืš, ืื– ืืชื” ืฆืจื™ืš ืœื“ืื•ื’ ื•ืœื”ืชื—ื™ืœ ืœืขืฉื•ืช ืื™ืชื ืžืฉื”ื•.

ื›ืืŸ ืื ื• ืžืฉืชืžืฉื™ื ื’ื ืœื–ืžืŸ ื”ื—ื™ืฉื•ื‘ clock_timestamp(). ืื ื• ืžืฆืœืžื™ื ืขืกืงืื•ืช ื•ืžื™ื™ืขืœื™ื ืืช ื”ืืคืœื™ืงืฆื™ื”.

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

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

ะ’ะฝะธะผะฐะฝะธะต: _ื”ื—ืœ ืžืฉื“ื” Postgres ื’ืจืกื” 9.6 waiting ื”ื•ืกืจ ื•ื‘ืžืงื•ื ื–ืืช ื ื•ืกืคื• ืฉื ื™ ืฉื“ื•ืช ืื™ื ืคื•ืจืžื˜ื™ื‘ื™ื™ื ื ื•ืกืคื™ื wait_event_type ะธ wait_event._

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

https://github.com/lesovsky/uber-scripts/blob/master/postgresql/sql/c4_06_show_locked_queries.sql

https://github.com/lesovsky/uber-scripts/blob/master/postgresql/sql/show_locked_queries_95.sql

https://github.com/lesovsky/uber-scripts/blob/master/postgresql/sql/show_locked_queries_96.sql

http://big-elephants.com/2013-09/exploring-query-locks-in-postgres/

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

ื•ื”ืงื™ืฉื•ืจ ื”ืจืืฉื•ืŸ ื”ื•ื ื˜ืงืกื˜ ื”ื‘ืงืฉื” ืขืฆืžื•. ื–ื” ื“ื™ ืืจื•ืš.

ื•ื”ืงื™ืฉื•ืจ ื”ืฉื ื™ ื”ื•ื ืžืืžืจ ืขืœ ืžื ืขื•ืœื™ื. ื–ื” ืฉื™ืžื•ืฉื™ ืœืงืจื™ืื”, ื–ื” ืžืื•ื“ ืžืขื ื™ื™ืŸ.

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

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

Cั€ะตะดะฝะตะต ะฒั€ะตะผั ะทะฐะฟั€ะพัะฐ ะฒ ะผะธะปะธัะตะบัƒะฝะดะฐั…
$ select (sum(total_time) / sum(calls))::numeric(6,3)
from pg_stat_statements;

ะกะฐะผั‹ะต ะฐะบั‚ะธะฒะฝะพ ะฟะธัˆัƒั‰ะธะต (ะฒ shared_buffers) ะทะฐะฟั€ะพัั‹
$ select query, shared_blks_dirtied
from pg_stat_statements
where shared_blks_dirtied > 0 order by 2 desc;

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

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

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

https://github.com/dataegret/pg-utils/blob/master/sql/global_reports/query_stat_total.sql

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

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

ื”ืžื•ื“ื•ืœ ื”ื‘ื - pg_stat_kcache. ื–ื” ื’ื ืžืฉืชืžืฉ ื‘ืฉื™ื—ืช ืžืขืจื›ืช getrusage(). ื•ื”ื•ื ืžื‘ืฆืข ืื•ืชื• ืœืคื ื™ ื•ืื—ืจื™ ื‘ื™ืฆื•ืข ื”ื‘ืงืฉื”. ื•ื‘ื ืชื•ื ื™ื ื”ืกื˜ื˜ื™ืกื˜ื™ื™ื ื”ืžืชืงื‘ืœื™ื, ื–ื” ืžืืคืฉืจ ืœื ื• ืœื”ืขืจื™ืš ื›ืžื” ื”ื‘ืงืฉื” ืฉืœื ื• ื”ื•ืฆื™ืื” ืขืœ ืงืœื˜/ืคืœื˜ ืฉืœ ื“ื™ืกืง, ื›ืœื•ืžืจ, ืคื•ืขืœืช ืขื ืžืขืจื›ืช ื”ืงื‘ืฆื™ื ื•ืžืกืชื›ืœืช ืขืœ ื”ืฉื™ืžื•ืฉ ื‘ืžืขื‘ื“. ืขื ื–ืืช, ื”ืžื•ื“ื•ืœ ืฆืขื™ืจ (ืฉื™ืขื•ืœ) ื•ื‘ืฉื‘ื™ืœ ืคืขื•ืœืชื• ื”ื•ื ื“ื•ืจืฉ PostgreSQL 9.4 ื•-pg_stat_statements, ืื•ืชื ื”ื–ื›ืจืชื™ ืงื•ื“ื.

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

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

  • ื”ืฉื™ืžื•ืฉ ื‘ืกื˜ื˜ื™ืกื˜ื™ืงื” ืื™ื ื• ืงืฉื”, ื–ื” ืจืง SQL ืจื’ื™ืœ. ืืกืคืช ืืช ื”ื‘ืงืฉื”, ืœื™ืงื˜ืช ืื•ืชื”, ืฉืœื—ืช ืื•ืชื”, ื”ืกืชื›ืœืช ื‘ื”.

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

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

ืฆืœื•ืœ ืขืžื•ืง ืœืชื•ืš ื”ืกื˜ื˜ื™ืกื˜ื™ืงื” ื”ืคื ื™ืžื™ืช ืฉืœ PostgreSQL. ืืœื›ืกื™ื™ ืœืกื•ื‘ืกืงื™

ืชื–ื›ื•ืจ

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

ืžื—ื‘ืจ ื›ืชื•ื‘ ื™ื•ืชืจ
https://dataegret.com/news-blog (ืื ื’ืœื™ืช)

ืืกืคืŸ ื”ืกื˜ื˜ื™ืกื˜ื™ืงื”
https://www.postgresql.org/docs/current/monitoring-stats.html

ืคื•ื ืงืฆื™ื•ืช ื ื™ื”ื•ืœ ืžืขืจื›ืช
https://www.postgresql.org/docs/current/functions-admin.html

ืžื•ื“ื•ืœื™ ืชืจื•ืžื”
https://www.postgresql.org/docs/current/pgstatstatements.html
https://www.postgresql.org/docs/current/pgstattuple.html
https://www.postgresql.org/docs/current/pgbuffercache.html
https://github.com/klando/pgfincore
https://github.com/dalibo/pg_stat_kcache

SQL utils ื•ื“ื•ื’ืžืื•ืช ืฉืœ ืงื•ื“ sql
https://github.com/dataegret/pg-utils

ืชื•ื“ื” ืœื›ื•ืœื›ื ืขืœ ืชืฉื•ืžืช ื”ืœื‘!

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

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