PostgreSQL рдкреНрд░рд╢реНрдирд╛рдВрдЪреЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдирд┐рд░реАрдХреНрд╖рдг. рднрд╛рдЧ рез - рдЕрд╣рд╡рд╛рд▓ рджреЗрдгреЗ

рдЕрднрд┐рдпрдВрддрд╛ - рд▓реЕрдЯрд┐рдирдордзреВрди рдЕрдиреБрд╡рд╛рджрд┐рдд - рдкреНрд░реЗрд░рд┐рдд.
рдЗрдВрдЬрд┐рдирд┐рдпрд░ рдХрд╛рд╣реАрд╣реА рдХрд░реВ рд╢рдХрддреЛ. (c) рдЖрд░. рдбрд┐рдЭреЗрд▓.
рдПрдкрд┐рдЧреНрд░рд╛рдлреНрд╕.
PostgreSQL рдкреНрд░рд╢реНрдирд╛рдВрдЪреЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдирд┐рд░реАрдХреНрд╖рдг. рднрд╛рдЧ рез - рдЕрд╣рд╡рд╛рд▓ рджреЗрдгреЗ
рдХрд┐рдВрд╡рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢рд╛рд╕рдХрд╛рд▓рд╛ рддреНрдпрд╛рдЪрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднреВрддрдХрд╛рд│ рдХрд╛ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдпрд╛рдмрджреНрджрд▓рдЪреА рдХрдерд╛.

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛

рд╕рд░реНрд╡ рдирд╛рд╡реЗ рдмрджрд▓рд▓реА рдЖрд╣реЗрдд. рдпреЛрдЧрд╛рдпреЛрдЧ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЖрд╣реЗрдд. рд╕рд╛рд╣рд┐рддреНрдп рдХреЗрд╡рд│ рд▓реЗрдЦрдХрд╛рдЪреНрдпрд╛ рд╡реИрдпрдХреНрддрд┐рдХ рдорддрд╛рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ.

рд╣рдореАрдВрдЪрд╛ рдЕрд╕реНрд╡реАрдХрд░рдг: рд▓реЗрдЦрд╛рдВрдЪреНрдпрд╛ рдирд┐рдпреЛрдЬрд┐рдд рдорд╛рд▓рд┐рдХреЗрдд рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ рд╕рд╛рд░рдгреНрдпрд╛ рдЖрдгрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕рдЪреЗ рддрдкрд╢реАрд▓рд╡рд╛рд░ рдЖрдгрд┐ рдЕрдЪреВрдХ рд╡рд░реНрдгрди рдирд╕реЗрд▓. рд╕рд╛рд╣рд┐рддреНрдп "рдЬрд╕реЗ рдЖрд╣реЗ рддрд╕реЗ" рд▓рдЧреЗрдЪ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА.
рдкреНрд░рдердо, рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рддреАрд▓ рд╕рд╛рдордЧреНрд░реАрдореБрд│реЗ,
рджреБрд╕рд░реЗ рдореНрд╣рдгрдЬреЗ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреНрд░рд╛рд╣рдХрд╛рдЪреНрдпрд╛ рдЙрддреНрдкрд╛рджрди рдмреЗрд╕рд╢реА рдЬрд╡рд│рдЪреНрдпрд╛ рд╕рдВрдмрдВрдзрд╛рдВрдореБрд│реЗ.
рдореНрд╣рдгреВрди, рд▓реЗрдЦрд╛рдВрдордзреНрдпреЗ рд╕рд░реНрд╡рд╛рдд рд╕рд╛рдорд╛рдиреНрдп рд╕реНрд╡рд░реВрдкрд╛рдд рдХреЗрд╡рд│ рдХрд▓реНрдкрдирд╛ рдЖрдгрд┐ рд╡рд░реНрдгрдиреЗ рдЕрд╕рддреАрд▓.
рдХрджрд╛рдЪрд┐рдд рднрд╡рд┐рд╖реНрдпрд╛рдд рд╕рд┐рд╕реНрдЯрдо GitHub рд╡рд░ рдкреЛрд╕реНрдЯ рдХреЗрд▓реНрдпрд╛рдЪреНрдпрд╛ рдкрд╛рддрд│реАрдкрд░реНрдпрдВрдд рд╡рд╛рдвреЗрд▓ рдХрд┐рдВрд╡рд╛ рдХрджрд╛рдЪрд┐рдд рдирд╛рд╣реА. рдХрд╛рд│ рджрд╛рдЦрд╡реЗрд▓.

рдХрдереЗрдЪреА рд╕реБрд░реБрд╡рд╛рдд - "рд╣реЗ рд╕рдЧрд│рдВ рдХрд╕рдВ рд╕реБрд░реВ рдЭрд╛рд▓рдВ рддреЗ рдЖрдард╡рддрдВрдп┬╗.
рдкрд░рд┐рдгрд╛рдореА рдХрд╛рдп рдЭрд╛рд▓реЗ, рд╕рд░реНрд╡рд╛рдд рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджрд╛рдд - тАЬPostgreSQL рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкрджреНрдзрддреАрдВрдкреИрдХреА рдПрдХ рдореНрд╣рдгреВрди рд╕рдВрд╢реНрд▓реЗрд╖рдг┬╗

рдорд▓рд╛ рд╣реЗ рд╕рд░реНрд╡ рдХрд╛ рд╣рд╡реЗ рдЖрд╣реЗ?

рдмрд░рдВ, рд╕рд░реНрд╡рдкреНрд░рдердо, рдирд┐рд╡реГрддреНрддреАрдЪреНрдпрд╛ рдЧреМрд░рд╡рд╢рд╛рд▓реА рджрд┐рд╡рд╕рд╛рдВрдЪреА рдЖрдард╡рдг рдХрд░реВрди, рд╡рд┐рд╕рд░реВ рдирдпреЗ рдореНрд╣рдгреВрди.
рджреБрд╕рд░реЗ рдореНрд╣рдгрдЬреЗ, рдЬреЗ рд▓рд┐рд╣рд┐рд▓реЗ рдЖрд╣реЗ рддреЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдгреЗ. рдХрд╛рд░рдг рдХрдзреАрдХрдзреА рдореА рдЧреЛрдВрдзрд│реВрди рдЬрд╛рдК рд▓рд╛рдЧрддреЛ рдЖрдгрд┐ рдХрд╛рд╣реА рднрд╛рдЧ рд╡рд┐рд╕рд░рддреЛ.

рдмрд░рдВ, рдЖрдгрд┐ рд╕рд░реНрд╡рд╛рдд рдорд╣рддреНрддреНрд╡рд╛рдЪреА рдЧреЛрд╖реНрдЯ рдЕрд╢реА рдЖрд╣реЗ рдХреА рддреЗ рдПрдЦрд╛рджреНрдпрд╛рд╕рд╛рдареА рдЙрдкрдпреБрдХреНрдд рдард░реВ рд╢рдХрддреЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рдЪрд╛рдХ рдкреБрдиреНрд╣рд╛ рд╢реЛрдзрдгреЗ рдЖрдгрд┐ рд░реЗрдХ рдЧреЛрд│рд╛ рди рдХрд░рдгреЗ рдЯрд╛рд│рдгреНрдпрд╛рд╕ рдорджрдд рдХрд░реВ рд╢рдХрддреЗ. рджреБрд╕рд▒реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдд, рддреБрдордЪреЗ рдХрд░реНрдо рд╕реБрдзрд╛рд░рд╛ (рдЦрд╛рдмреНрд░реЛрд╡реНрд╣рдЪреЗ рдирд╛рд╣реА). рдХрд╛рд░рдг рдпрд╛ рдЬрдЧрд╛рдд рд╕рд░реНрд╡рд╛рдд рдореМрд▓реНрдпрд╡рд╛рди рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ рдХрд▓реНрдкрдирд╛. рдореБрдЦреНрдп рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ рдХрд▓реНрдкрдирд╛ рд╢реЛрдзрдгреЗ. рдкрдг рдХрд▓реНрдкрдирд╛ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдЖрдгрдгреЗ рд╣рд╛ рдирд┐рд╡реНрд╡рд│ рддрд╛рдВрддреНрд░рд┐рдХ рдкреНрд░рд╢реНрди рдЖрд╣реЗ.

рдЪрд▓рд╛ рддрд░ рдордЧ, рд╣рд│реВрд╣рд│реВ рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛...

рд╕рдорд╕реНрдпреЗрдЪреЗ рд╕реВрддреНрд░реАрдХрд░рдг.

рдЙрдкрд▓рдмреНрдз:

PostgreSQL(10.5) рдбреЗрдЯрд╛рдмреЗрд╕, рдорд┐рд╢реНрд░рд┐рдд рд▓реЛрдб рдкреНрд░рдХрд╛рд░ (OLTP+DSS), рдордзреНрдпрдо-рдкреНрд░рдХрд╛рд╢ рд▓реЛрдб, AWS рдХреНрд▓рд╛рдЙрдбрдордзреНрдпреЗ рд╕реНрдерд┐рдд рдЖрд╣реЗ.
рдХреЛрдгрддреЗрд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдирд╛рд╣реА; рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд┐рдорд╛рди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рдорд╛рдирдХ AWS рд╕рд╛рдзрдирд╛рдВрдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рдкреНрд░рджрд╛рди рдХреЗрд▓реЗ рдЬрд╛рддреЗ.

рд╣реЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:

рдбреЗрдЯрд╛рдмреЗрд╕рдЪреНрдпрд╛ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдЖрдгрд┐ рд╕реНрдерд┐рддреАрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рд╛, рд╣реЗрд╡реА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд╡реЗрд░реА рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рд╣рд┐рддреА рд╢реЛрдзрд╛ рдЖрдгрд┐ рдорд┐рд│рд╡рд╛.

рдЙрдкрд╛рдп рдкрд░реНрдпрд╛рдпрд╛рдВрдЪрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп рдХрд┐рдВрд╡рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг

рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, рдЕрднрд┐рдпрдВрддреНрдпрд╛рд╕рд╛рдареА рдлрд╛рдпрджреЗ рдЖрдгрд┐ рддреЛрдЯреЗ рдпрд╛рдВрдЪреНрдпрд╛ рддреБрд▓рдирд╛рддреНрдордХ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкрд░реНрдпрд╛рдпрд╛рдВрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВрдпрд╛ рдЖрдгрд┐ рдХрд░реНрдордЪрд╛рд░реА рд╡реЗрд│рд╛рдкрддреНрд░рдХрд╛рдиреБрд╕рд╛рд░ рдЬреНрдпрд╛рдВрдирд╛ рддреНрдпрд╛рдЪрд╛ рд╣рдХреНрдХ рдЖрд╣реЗ рддреНрдпрд╛рдВрдирд╛ рдлрд╛рдпрджреНрдпрд╛рдВрд╕рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реВ рджреНрдпрд╛ рдЖрдгрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирд╛рдЪреЗ рдиреБрдХрд╕рд╛рди.

рдкрд░реНрдпрд╛рдп 1 - "рдорд╛рдЧрдгреАрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рдгреЗ"

рдЖрдореНрд╣реА рд╕рд░реНрд╡рдХрд╛рд╣реА рдЬрд╕реЗрдЪреНрдпрд╛ рддрд╕реЗ рд╕реЛрдбрддреЛ. рдЧреНрд░рд╛рд╣рдХрд╛рд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд┐рдВрд╡рд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛, рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдпрд╛рдордзреАрд▓ рдПрдЦрд╛рджреНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдмрджреНрджрд▓ рд╕рдорд╛рдзрд╛рдиреА рдирд╕рд▓реНрдпрд╛рд╕, рддреЛ рдбреАрдмреАрдП рдЕрднрд┐рдпрдВрддреНрдпрд╛рдВрдирд╛ рдИ-рдореЗрд▓рджреНрд╡рд╛рд░реЗ рдХрд┐рдВрд╡рд╛ рддрд┐рдХреАрдЯ рдЯреНрд░реЗрдордзреНрдпреЗ рдШрдЯрдирд╛ рддрдпрд╛рд░ рдХрд░реВрди рд╕реВрдЪрд┐рдд рдХрд░реЗрд▓.
рдЕрднрд┐рдпрдВрддрд╛, рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, рд╕рдорд╕реНрдпрд╛ рд╕рдордЬреВрди рдШреЗрдИрд▓, рдЙрдкрд╛рдп рдСрдлрд░ рдХрд░реЗрд▓ рдХрд┐рдВрд╡рд╛ рд╕рдорд╕реНрдпрд╛ рдмреЕрдХ рдмрд░реНрдирд░рд╡рд░ рдареЗрд╡реЗрд▓, рдЕрд╢реА рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рд╕рд░реНрд╡рдХрд╛рд╣реА рд╕реНрд╡рддрдГрдЪ рдирд┐рд░рд╛рдХрд░рдг рд╣реЛрдИрд▓ рдЖрдгрд┐ рддрд░реАрд╣реА, рд╕рд░реНрд╡рдХрд╛рд╣реА рд▓рд╡рдХрд░рдЪ рд╡рд┐рд╕рд░рд▓реЗ рдЬрд╛рдИрд▓.
рдЬрд┐рдВрдЬрд░рдмреНрд░реЗрдб рдЖрдгрд┐ рдбреЛрдирдЯреНрд╕, рдЬрдЦрдо рдЖрдгрд┐ рдЕрдбрдерд│реЗрдЬрд┐рдВрдЬрд░рдмреНрд░реЗрдб рдЖрдгрд┐ рдбреЛрдирдЯреНрд╕:
1. рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд╣реАрд╣реА рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА.
2. рд╕рдмрдм рдмрдирд╡рдгреНрдпрд╛рдЪреА рдЖрдгрд┐ рд╕реНрдХреНрд░реВ рдХрд░рдгреНрдпрд╛рдЪреА рд╕рдВрдзреА рдиреЗрд╣рдореАрдЪ рдЕрд╕рддреЗ.
3. рднрд░рдкреВрд░ рд╡реЗрд│ рдЬреЛ рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рд╡рд┐рд╡реЗрдХрдмреБрджреНрдзреАрдиреБрд╕рд╛рд░ рдЦрд░реНрдЪ рдХрд░реВ рд╢рдХрддрд╛.
рдЬрдЦрдо рдЖрдгрд┐ рдЕрдбрдерд│реЗ:
1. рдЙрд╢рд┐рд░рд╛ рдХрд╛ рд╣реЛрдИрдирд╛, рдЧреНрд░рд╛рд╣рдХ рдпрд╛ рдЬрдЧрд╛рддрд▓реНрдпрд╛ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдЪреНрдпрд╛ рдЖрдгрд┐ рд╕рд╛рд░реНрд╡рддреНрд░рд┐рдХ рдиреНрдпрд╛рдпрд╛рдЪреНрдпрд╛ рд╕рд╛рд░рд╛рдмрджреНрджрд▓ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрд▓ рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рдПрдХрджрд╛ рд╕реНрд╡рддрдГрд▓рд╛ рдкреНрд░рд╢реНрди рд╡рд┐рдЪрд╛рд░реЗрд▓ - рдореА рддреНрдпрд╛рдВрдирд╛ рдорд╛рдЭреЗ рдкреИрд╕реЗ рдХрд╛ рджреЗрдд рдЖрд╣реЗ? рдкрд░рд┐рдгрд╛рдо рдиреЗрд╣рдореА рд╕рд╛рд░рдЦрд╛рдЪ рдЕрд╕рддреЛ - рдЧреНрд░рд╛рд╣рдХ рдХрдзреА рдХрдВрдЯрд╛рд│рддреАрд▓ рдЖрдгрд┐ рдирд┐рд░реЛрдк рдШреЗрдИрд▓ рд╣рд╛ рдПрдХрдЪ рдкреНрд░рд╢реНрди рдЖрд╣реЗ. рдЖрдгрд┐ рдлреАрдбрд░ рд░рд┐рдХрд╛рдорд╛ рдЕрд╕реЗрд▓. рд╣реЗ рджреБрдГрдЦрджрд╛рдпрдХ рдЖрд╣реЗ.
2. рдЕрднрд┐рдпрдВрддрд╛ рд╡рд┐рдХрд╛рд╕ - рд╢реВрдиреНрдп.
3. рдХрд╛рдорд╛рдЪреЗ рдирд┐рдпреЛрдЬрди рдЖрдгрд┐ рд▓реЛрдбрд┐рдВрдЧрдордзреНрдпреЗ рдЕрдбрдЪрдгреА

рдкрд░реНрдпрд╛рдп реи- "рдЯрдВрдмреЛрд░реАрдиреЗ рдирд╛рдЪрдгреЗ, рд╡рд╛рдлрд╛рд│рдгреЗ рдЖрдгрд┐ рд╢реВрдЬ рдШрд╛рд▓рдгреЗ"

рдкрд░рд┐рдЪреНрдЫреЗрдж рез-рдЖрдореНрд╣рд╛рд▓рд╛ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдордЪреА рдЧрд░рдЬ рдХрд╛ рдЖрд╣реЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рд╡рд┐рдирдВрддреНрдпрд╛рдВрд╕рд╣ рд╕рд░реНрд╡рдХрд╛рд╣реА рдкреНрд░рд╛рдкреНрдд рд╣реЛрдИрд▓. рдЖрдореНрд╣реА рдбреЗрдЯрд╛ рдбрд┐рдХреНрд╢рдирд░реА рдЖрдгрд┐ рдбрд╛рдпрдиреЕрдорд┐рдХ рд╡реНрд╣реНрдпреВрд╕рд╛рдареА рд╕рд░реНрд╡ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдХреНрд╡реЗрд░реА рдЪрд╛рд▓рд╡рддреЛ, рд╕рд░реНрд╡ рдкреНрд░рдХрд╛рд░рдЪреЗ рдХрд╛рдЙрдВрдЯрд░ рдЪрд╛рд▓реВ рдХрд░рддреЛ, рд╕рд░реНрд╡рдХрд╛рд╣реА рдЯреЗрдмрд▓рдордзреНрдпреЗ рдареЗрд╡рддреЛ рдЖрдгрд┐ рд╡реЗрд│реЛрд╡реЗрд│реА рдпрд╛рджреНрдпрд╛ рдЖрдгрд┐ рд╕рд╛рд░рдгреНрдпрд╛рдВрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЛ. рдкрд░рд┐рдгрд╛рдореА, рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рд╕реБрдВрджрд░ рдЖрд▓реЗрдЦ, рддрдХреНрддреЗ, рдЕрд╣рд╡рд╛рд▓ рдЖрд╣реЗрдд рдХрд┐рдВрд╡рд╛ рдирд╛рд╣реАрдд. рдореБрдЦреНрдп рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ рдЕрдзрд┐рдХ, рдЕрдзрд┐рдХ рдЕрд╕рдгреЗ.
рдкрд░рд┐рдЪреНрдЫреЗрдж рез-рдЖрдореНрд╣реА рдХреНрд░рд┐рдпрд╛рдХрд▓рд╛рдк рддрдпрд╛рд░ рдХрд░рддреЛ рдЖрдгрд┐ рдпрд╛ рд╕рд░реНрд╡рд╛рдВрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реБрд░реВ рдХрд░рддреЛ.
рдкрд░рд┐рдЪреНрдЫреЗрдж рез-рдЖрдореНрд╣реА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рджрд╕реНрддрдРрд╡рдЬ рддрдпрд╛рд░ рдХрд░рдд рдЖрд╣реЛрдд, рдЖрдореНрд╣реА рдпрд╛ рджрд╕реНрддрдРрд╡рдЬрд╛рд▓рд╛ рдлрдХреНрдд рдореНрд╣рдгрддреЛ - "рдЖрдореНрд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╕рд╛ рд╕реЗрдЯ рдХрд░рд╛рд╡рд╛."
рдкрд░рд┐рдЪреНрдЫреЗрдж рез-рдЧреНрд░рд╛рд╣рдХ, рдЖрд▓реЗрдЦ рдЖрдгрд┐ рд╕рдВрдЦреНрдпрд╛рдВрдЪреЗ рд╣реЗ рд╕рд░реНрд╡ рд╡реИрднрд╡ рдкрд╛рд╣реВрди, рдмрд╛рд▓рд┐рд╢, рднреЛрд│реНрдпрд╛ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рдд рдЖрд╣реЗ - рдЖрддрд╛ рд╕рд░реНрд╡рдХрд╛рд╣реА рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рд▓рд╡рдХрд░рдЪ рдХрд╛рд░реНрдп рдХрд░реЗрд▓. рдЖрдгрд┐, рддреЛ рд╕рд╣рдЬрдкрдгреЗ рдЖрдгрд┐ рд╡реЗрджрдирд╛рд╣реАрдирдкрдгреЗ рддреНрдпрд╛рдЪреНрдпрд╛ рдЖрд░реНрдерд┐рдХ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдордзреНрдпреЗ рднрд╛рдЧ рдШреЗрддреЛ. рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирд╛рд▓рд╛рд╣реА рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЖрд╣реЗ рдХреА рдЖрдордЪреЗ рдЕрднрд┐рдпрдВрддреЗ рдЙрддреНрддрдо рдХрд╛рдо рдХрд░рддрд╛рдд. рдХрдорд╛рд▓ рд▓реЛрдб рд╣реЛрдд рдЖрд╣реЗ.
рдкрд░рд┐рдЪреНрдЫреЗрдж рез- рдЪрд░рдг 1 рдирд┐рдпрдорд┐рддрдкрдгреЗ рдкреБрдиреНрд╣рд╛ рдХрд░рд╛.
рдЬрд┐рдВрдЬрд░рдмреНрд░реЗрдб рдЖрдгрд┐ рдбреЛрдирдЯреНрд╕, рдЬрдЦрдо рдЖрдгрд┐ рдЕрдбрдерд│реЗрдЬрд┐рдВрдЬрд░рдмреНрд░реЗрдб рдЖрдгрд┐ рдбреЛрдирдЯреНрд╕:
1. рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЖрдгрд┐ рдЕрднрд┐рдпрдВрддреЗ рдпрд╛рдВрдЪреЗ рдЬреАрд╡рди рд╕реЛрдкреЗ, рдЕрдВрджрд╛рдЬ рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдЖрдгрд┐ рдХреНрд░рд┐рдпрд╛рдХрд▓рд╛рдкрд╛рдВрдиреА рднрд░рд▓реЗрд▓реЗ рдЕрд╕рддреЗ. рд╕рд░реНрд╡ рдХрд╛рд╣реА рдЧреБрдВрдЬрдд рдЖрд╣реЗ, рдкреНрд░рддреНрдпреЗрдХрдЬрдг рд╡реНрдпрд╕реНрдд рдЖрд╣реЗ.
2. рдЧреНрд░рд╛рд╣рдХрд╛рдЪреЗ рдЬреАрд╡рди рджреЗрдЦреАрд▓ рд╡рд╛рдИрдЯ рдирд╛рд╣реА - рддреНрдпрд╛рд▓рд╛ рдиреЗрд╣рдореА рдЦрд╛рддреНрд░реА рдЕрд╕рддреЗ рдХреА рддреНрдпрд╛рд▓рд╛ рдлрдХреНрдд рдереЛрдбрд╛ рдзреАрд░ рдзрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдЖрд╣реЗ рдЖрдгрд┐ рд╕рд░реНрд╡рдХрд╛рд╣реА рдХрд╛рд░реНрдп рдХрд░реЗрд▓. рд╣реЗ рдЪрд╛рдВрдЧрд▓реЗ рд╣реЛрдд рдирд╛рд╣реА, рдмрд░рдВ, рдЬрдЧ рдЕрдпреЛрдЧреНрдп рдЖрд╣реЗ, рдкреБрдврдЪреНрдпрд╛ рдЖрдпреБрд╖реНрдпрд╛рдд рддреБрдореНрд╣реА рднрд╛рдЧреНрдпрд╡рд╛рди рд╡реНрд╣рд╛рд▓.
рдЬрдЦрдо рдЖрдгрд┐ рдЕрдбрдерд│реЗ:
1. рд▓рд╡рдХрд░рдЪ рдХрд┐рдВрд╡рд╛ рдирдВрддрд░, рдПрдХ рд╕рдорд╛рди рд╕реЗрд╡рд╛ рджреЗрдгрд╛рд░рд╛ рдПрдХ рдЬрд▓рдж рдкреНрд░рджрд╛рддрд╛ рдЕрд╕реЗрд▓ рдЬреЛ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░реЗрд▓, рдкрд░рдВрддреБ рдереЛрдбреЗ рд╕реНрд╡рд╕реНрдд. рдЖрдгрд┐ рдЬрд░ рдирд┐рдХрд╛рд▓ рд╕рдорд╛рди рдЕрд╕реЗрд▓ рддрд░ рдЕрдзрд┐рдХ рдкреИрд╕реЗ рдХрд╛ рджреНрдпрд╛рд╡реЗ? рдЬреНрдпрд╛рдореБрд│реЗ рдлреАрдбрд░ рдкреБрдиреНрд╣рд╛ рдЧрд╛рдпрдм рд╣реЛрдИрд▓.
2. рд╣реЗ рдХрдВрдЯрд╛рд│рд╡рд╛рдгреЗ рдЖрд╣реЗ. рдХреЛрдгрддреАрд╣реА рдирд┐рд░рд░реНрдердХ рдХреНрд░рд┐рдпрд╛ рдХрд┐рддреА рдХрдВрдЯрд╛рд│рд╡рд╛рдгреА рдЕрд╕рддреЗ.
3. рдорд╛рдЧреАрд▓ рдЖрд╡реГрддреНрддреАрдкреНрд░рдорд╛рдгреЗ, рдХреЛрдгрддрд╛рд╣реА рд╡рд┐рдХрд╛рд╕ рдирд╛рд╣реА. рдкрд░рдВрддреБ рдЕрднрд┐рдпрдВрддреНрдпрд╛рд╕рд╛рдареА, рдирдХрд╛рд░рд╛рддреНрдордХ рдмрд╛рдЬреВ рдЕрд╢реА рдЖрд╣реЗ рдХреА, рдкрд╣рд┐рд▓реНрдпрд╛ рдкрд░реНрдпрд╛рдпрд╛рдЪреНрдпрд╛ рд╡рд┐рдкрд░реАрдд, рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рддрдд IBD рдирд┐рд░реНрдорд╛рдг рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЖрдгрд┐ рдпрд╛рд╕ рд╡реЗрд│ рд▓рд╛рдЧрддреЛ. рдЬреЛ рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ рдкреНрд░рд┐рдп рд╡реНрдпрдХреНрддреАрдЪреНрдпрд╛ рдлрд╛рдпрджреНрдпрд╛рд╕рд╛рдареА рдЦрд░реНрдЪ рдХрд░реВ рд╢рдХрддрд╛. рдХрд╛рд░рдг рддреБрдореНрд╣реА рд╕реНрд╡рддрдГрдЪреА рдХрд╛рд│рдЬреА рдШреЗрдК рд╢рдХрдд рдирд╛рд╣реА, рдХреЛрдгреАрд╣реА рддреБрдордЪреНрдпрд╛рдмрджреНрджрд▓ рдзрд┐рдХреНрдХрд╛рд░ рдХрд░рдд рдирд╛рд╣реА.

рдкрд░реНрдпрд╛рдп 3 - рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд╛рдпрдХрд▓рдЪрд╛ рд╢реЛрдз рд▓рд╛рд╡рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА, рддреБрдореНрд╣рд╛рд▓рд╛ рддреА рд╡рд┐рдХрдд рдШреЗрдКрди рдЪрд╛рд▓рд╡рд╛рдпрдЪреА рдЖрд╣реЗ.

рдЗрддрд░ рдХрдВрдкрдиреНрдпрд╛рдВрдЪреЗ рдЕрднрд┐рдпрдВрддреЗ рдмрд┐рдЕрд░рд╕реЛрдмрдд рдкрд┐рдЭреНрдЭрд╛ рдЦрд╛рддрд╛рдд (рдЕрд░реЗ, 90 рдЪреНрдпрд╛ рджрд╢рдХрд╛рддреАрд▓ рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧрдЪреЗ рд╡реИрднрд╡рд╛рдЪреЗ рджрд┐рд╡рд╕) рд╣реЗ рдХрд╛рд╣реА рдХрд╛рд░рдг рдирд╛рд╣реА. рдмрдирд╡рд▓реЗрд▓реНрдпрд╛, рдбреАрдмрдЧ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЖрдгрд┐ рдХрд╛рд░реНрдпрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдореЙрдирд┐рдЯрд░реАрдВрдЧ рд╕рд┐рд╕реНрдЯреАрдордЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрдпрд╛ рдЖрдгрд┐ рд╕рд╛рдорд╛рдиреНрдпрдд: рдлрд╛рдпрджреНрдпрд╛рд╕рд╛рдареА (рдХрдореАрддрдХрдореА рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдирд┐рд░реНрдорд╛рддреНрдпрд╛рдВрдирд╛).
рдЬрд┐рдВрдЬрд░рдмреНрд░реЗрдб рдЖрдгрд┐ рдбреЛрдирдЯреНрд╕, рдЬрдЦрдо рдЖрдгрд┐ рдЕрдбрдерд│реЗрдЬрд┐рдВрдЬрд░рдмреНрд░реЗрдб рдЖрдгрд┐ рдбреЛрдирдЯреНрд╕:
1. рдЖрдзреАрдЪ рд╢реЛрдзреВрди рдХрд╛рдврд▓реЗрд▓реНрдпрд╛ рдЧреЛрд╖реНрдЯреАрд╕рд╛рдареА рд╡реЗрд│ рд╡рд╛рдпрд╛ рдШрд╛рд▓рд╡рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА. рддреЗ рдШреНрдпрд╛ рдЖрдгрд┐ рд╡рд╛рдкрд░рд╛.
2. рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯреАрдо рдореВрд░реНрдЦрд╛рдВрдиреА рд▓рд┐рд╣рд┐рд▓реЗрд▓реНрдпрд╛ рдирд╕рддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛ рдирдХреНрдХреАрдЪ рдЙрдкрдпреБрдХреНрдд рдЕрд╕рддрд╛рдд.
3. рдХрд╛рд░реНрдпрд░рдд рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕рд╣рд╕рд╛ рдЙрдкрдпреБрдХреНрдд рдлрд┐рд▓реНрдЯрд░ рдХреЗрд▓реЗрд▓реА рдорд╛рд╣рд┐рддреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛рдд.
рдЬрдЦрдо рдЖрдгрд┐ рдЕрдбрдерд│реЗ:
1. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рддреАрд▓ рдЕрднрд┐рдпрдВрддрд╛ рд╣рд╛ рдЕрднрд┐рдпрдВрддрд╛ рдирд╕реВрди рдлрдХреНрдд рджреБрд╕рд▒реНрдпрд╛рдЪреНрдпрд╛ рдЙрддреНрдкрд╛рджрдирд╛рдЪрд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЖрд╣реЗ. рдХрд┐рдВрд╡рд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЖрд╣реЗ.
2. рдЧреНрд░рд╛рд╣рдХрд╛рд▓рд╛ рдЕрд╢реА рдПрдЦрд╛рджреА рд╡рд╕реНрддреВ рдЦрд░реЗрджреА рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдХреА рдЬреЗ рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рд╕рд╛рдВрдЧрд╛рдпрдЪреЗ рддрд░, рддреНрдпрд╛рд▓рд╛ рд╕рдордЬреВ рдЗрдЪреНрдЫрд┐рдд рдирд╛рд╣реА рдЖрдгрд┐ рдирд╕рд╛рд╡реЗ рдЖрдгрд┐ рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рд╡рд░реНрд╖рд╛рдЪреЗ рдмрдЬреЗрдЯ рдордВрдЬреВрд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдмрджрд▓рдгрд╛рд░ рдирд╛рд╣реА рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдкрдЯрд▓реА рдкрд╛рд╣рд┐рдЬреЗ. рдордЧ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реНрд╡рддрдВрддреНрд░ рд╕рдВрд╕рд╛рдзрди рд╡рд╛рдЯрдк рдХрд░рдгреЗ рдЖрдгрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд┐рд╕реНрдЯрдорд╕рд╛рдареА рддреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рддреНрдпрд╛. рдкреНрд░рдердо рддреБрдореНрд╣рд╛рд▓рд╛ рдкреИрд╕реЗ рджреНрдпрд╛рд╡реЗ рд▓рд╛рдЧрддреАрд▓, рдкреИрд╕реЗ рджреНрдпрд╛ рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рдкреИрд╕реЗ рджреНрдпрд╛. рдЖрдгрд┐ рдЧреНрд░рд╛рд╣рдХ рдХрдВрдЬреВрд╖ рдЖрд╣реЗ. рд╣рд╛ рдпрд╛ рдЬреАрд╡рдирд╛рдЪрд╛ рдЖрджрд░реНрд╢ рдЖрд╣реЗ.

рдХрд╛рдп рдХрд░рд╛рд╡реЗ - рдЪреЗрд░реНрдирд┐рд╢реЗрд╡реНрд╕реНрдХреА? рддреБрдордЪрд╛ рдкреНрд░рд╢реНрди рдЕрддрд┐рд╢рдп рд╕рдорд░реНрдкрдХ рдЖрд╣реЗ. (рд╕рд╣)

рдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд░рдгрд╛рдд рдЖрдгрд┐ рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд, рдЖрдкрдг рддреЗ рдереЛрдбреЗ рд╡реЗрдЧрд│реЗ рдХрд░реВ рд╢рдХрддрд╛ - рдЖрдкрд▓реА рд╕реНрд╡рддрдГрдЪреА рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╡реВрдпрд╛.
PostgreSQL рдкреНрд░рд╢реНрдирд╛рдВрдЪреЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдирд┐рд░реАрдХреНрд╖рдг. рднрд╛рдЧ рез - рдЕрд╣рд╡рд╛рд▓ рджреЗрдгреЗ
рдмрд░рдВ, рдкреНрд░рдгрд╛рд▓реА рдирд╛рд╣реА, рдЕрд░реНрдерд╛рддрдЪ, рд╢рдмреНрджрд╛рдЪреНрдпрд╛ рдкреВрд░реНрдг рдЕрд░реНрдерд╛рдиреЗ, рддреЗ рдЦреВрдк рдЬреЛрд░рд╛рдд рдЖрдгрд┐ рдЧрд░реНрд╡рд┐рд╖реНрда рдЖрд╣реЗ, рдкрд░рдВрддреБ рдХрд┐рдорд╛рди рдХрд╕реЗ рддрд░реА рддреБрдордЪреЗ рдХрд╛рд░реНрдп рд╕реЛрдкреЗ рдХрд░рд╛ рдЖрдгрд┐ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдШрдЯрдирд╛рдВрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдзрд┐рдХ рдорд╛рд╣рд┐рддреА рдЧреЛрд│рд╛ рдХрд░рд╛. рд╕реНрд╡рддрдГрд▓рд╛ рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рд╕рд╛рдкрдбреВ рдирдпреЗ рдореНрд╣рдгреВрди - "рддрд┐рдХрдбреЗ рдЬрд╛, рдорд▓рд╛ рдорд╛рд╣рд┐рдд рдирд╛рд╣реА рдХреБрдареЗ, рдХрд╛рд╣реАрддрд░реА рд╢реЛрдзрд╛, рдорд▓рд╛ рдХрд╛рдп рдорд╛рд╣рд┐рдд рдирд╛рд╣реА."

рдпрд╛ рдкрд░реНрдпрд╛рдпрд╛рдЪреЗ рдлрд╛рдпрджреЗ рдЖрдгрд┐ рддреЛрдЯреЗ рдХрд╛рдп рдЖрд╣реЗрдд:

рд╕рд╛рдзрдХ:
1. рд╣реЗ рдордиреЛрд░рдВрдЬрдХ рдЖрд╣реЗ. рдмрд░рдВ, рдХрд┐рдорд╛рди рд╣реЗ рд╕реНрдерд┐рд░ "рдбреЗрдЯрд╛рдлрд╛рдЗрд▓ рд╕рдВрдХреБрдЪрд┐рдд рдХрд░рдгреЗ, рдЯреЗрдмрд▓рд╕реНрдкреЗрд╕ рдмрджрд▓рдгреЗ рдЗ." рдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рдордиреЛрд░рдВрдЬрдХ рдЖрд╣реЗ.
2. рд╣реА рдирд╡реАрди рдХреМрд╢рд▓реНрдпреЗ рдЖрдгрд┐ рдирд╡реАрди рд╡рд┐рдХрд╛рд╕ рдЖрд╣реЗрдд. рдЬреЗ, рд▓рд╡рдХрд░рдЪ рдХрд┐рдВрд╡рд╛ рдирдВрддрд░, рддреБрдореНрд╣рд╛рд▓рд╛ рдпреЛрдЧреНрдп-рдпреЛрдЧреНрдп рдЬрд┐рдВрдЬрд░рдмреНрд░реЗрдб рдЖрдгрд┐ рдбреЛрдирдЯреНрд╕ рджреЗрдИрд▓.
рдмрд╛рдзрдХ
1. рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдо рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓. рдореЗрд╣рдирдд рдХрд░рд╛.
2. рддреБрдореНрд╣рд╛рд▓рд╛ рдирд┐рдпрдорд┐рддрдкрдгреЗ рд╕рд░реНрд╡ рдХреНрд░рд┐рдпрд╛рдХрд▓рд╛рдкрд╛рдВрдЪрд╛ рдЕрд░реНрде рдЖрдгрд┐ рд╕рдВрднрд╛рд╡рдирд╛ рд╕реНрдкрд╖реНрдЯ рдХрд░рд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрддреАрд▓.
3. рдХрд╛рд╣реАрддрд░реА рдмрд▓рд┐рджрд╛рди рджреНрдпрд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓, рдХрд╛рд░рдг рдЕрднрд┐рдпрдВрддреНрдпрд╛рд╕рд╛рдареА рдЙрдкрд▓рдмреНрдз рдПрдХрдореЗрд╡ рд╕рдВрд╕рд╛рдзрди - рд╡реЗрд│ - рд╡рд┐рд╢реНрд╡рд╛рджреНрд╡рд╛рд░реЗ рдорд░реНрдпрд╛рджрд┐рдд рдЖрд╣реЗ.
4. рд╕рд░реНрд╡рд╛рдд рд╡рд╛рдИрдЯ рдЖрдгрд┐ рд╕рд░реНрд╡рд╛рдд рдЕрдкреНрд░рд┐рдп рдЧреЛрд╖реНрдЯ - рдкрд░рд┐рдгрд╛рдо "рдЙрдВрджреАрд░ рдирд╛рд╣реА, рдмреЗрдбреВрдХ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдПрдХ рдЕрдЬреНрдЮрд╛рдд рдкреНрд░рд╛рдгреА" рд╕рд╛рд░рдЦрд╛ рдореВрд░реНрдЦрдкрдгрд╛ рдЕрд╕реВ рд╢рдХрддреЛ.

рдЬреЗ рдзреЛрдХрд╛ рдкрддреНрдХрд░рдд рдирд╛рд╣реАрдд рддреЗ рд╢реЕрдореНрдкреЗрди рдкреАрдд рдирд╛рд╣реАрдд.
рддрд░ - рдордЬрд╛ рд╕реБрд░реВ рд╣реЛрддреЗ.

рд╕рд╛рдорд╛рдиреНрдп рдХрд▓реНрдкрдирд╛ - рдпреЛрдЬрдирд╛рдмрджреНрдз

PostgreSQL рдкреНрд░рд╢реНрдирд╛рдВрдЪреЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдирд┐рд░реАрдХреНрд╖рдг. рднрд╛рдЧ рез - рдЕрд╣рд╡рд╛рд▓ рджреЗрдгреЗ
(рд▓реЗрдЦрд╛рддреВрди рдШреЗрддрд▓реЗрд▓реЗ рдЪрд┐рддреНрд░ ┬лPostgreSQL рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкрджреНрдзрддреАрдВрдкреИрдХреА рдПрдХ рдореНрд╣рдгреВрди рд╕рдВрд╢реНрд▓реЗрд╖рдг")

рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгрдГ

  • рд▓рдХреНрд╖реНрдп рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдорд╛рдирдХ PostgreSQL рд╡рд┐рд╕реНрддрд╛рд░ тАЬpg_stat_statementsтАЭ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓рд╛ рдЖрд╣реЗ.
  • рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ, рдЖрдореНрд╣реА рд╕реБрд░реБрд╡рд╛рддреАрдЪреНрдпрд╛ рдЯрдкреНрдкреНрдпрд╛рд╡рд░ pg_stat_statements рдЗрддрд┐рд╣рд╛рд╕ рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рднрд╡рд┐рд╖реНрдпрд╛рдд рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реЗрд╡рд╛ рд╕рд╛рд░рдгреНрдпрд╛рдВрдЪрд╛ рдПрдХ рд╕рдВрдЪ рддрдпрд╛рд░ рдХрд░рддреЛ.
  • рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╣реЛрд╕реНрдЯрд╡рд░, рдЖрдореНрд╣реА рдмреЕрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪрд╛ рдПрдХ рд╕рдВрдЪ рддрдпрд╛рд░ рдХрд░рддреЛ, рдЬреНрдпрд╛рдд рддрд┐рдХреАрдЯ рдкреНрд░рдгрд╛рд▓реАрдордзреНрдпреЗ рдШрдЯрдирд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ.

рд╕реЗрд╡рд╛ рд╕рд╛рд░рдгреНрдпрд╛

рдкреНрд░рдердо, рдПрдХ рдпреЛрдЬрдирд╛рдмрджреНрдз рд╕рд░рд▓реАрдХреГрдд ERD, рд╢реЗрд╡рдЯреА рдХрд╛рдп рдЭрд╛рд▓реЗ:
PostgreSQL рдкреНрд░рд╢реНрдирд╛рдВрдЪреЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдирд┐рд░реАрдХреНрд╖рдг. рднрд╛рдЧ рез - рдЕрд╣рд╡рд╛рд▓ рджреЗрдгреЗ
рд╕рд╛рд░рдгреНрдпрд╛рдВрдЪреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд░реНрдгрдирдЕрдВрддреНрдпрдмрд┐рдВрджреВ - рд╣реЛрд╕реНрдЯ, рдЙрджрд╛рд╣рд░рдгрд╛рд╢реА рдЬреЛрдбрдгреАрдЪрд╛ рдмрд┐рдВрджреВ
рдбреЗрдЯрд╛рдмреЗрд╕ - рдбреЗрдЯрд╛рдмреЗрд╕ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕
pg_stat_history - рд▓рдХреНрд╖реНрдп рдбреЗрдЯрд╛рдмреЗрд╕рдЪреНрдпрд╛ pg_stat_statements рджреГрд╢реНрдпрд╛рдЪреЗ рддрд╛рддреНрдкреБрд░рддреЗ рд╕реНрдиреЕрдкрд╢реЙрдЯ рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд╕рд╛рд░рдгреА
metric_glossary - рдХрд╛рдордЧрд┐рд░реА рдореЗрдЯреНрд░рд┐рдХреНрд╕рдЪрд╛ рд╢рдмреНрджрдХреЛрд╢
metric_config - рд╡реИрдпрдХреНрддрд┐рдХ рдореЗрдЯреНрд░рд┐рдХреНрд╕рдЪреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди
рдореЗрдЯреНрд░рд┐рдХ тАФ рдирд┐рд░реАрдХреНрд╖рдг рдХреЗрд▓реЗ рдЬрд╛рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд┐рдирдВрддреАрд╕рд╛рдареА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЗрдЯреНрд░рд┐рдХ
metric_alert_history - рдХрд╛рдордЧрд┐рд░реА рдЪреЗрддрд╛рд╡рдгреА рдЗрддрд┐рд╣рд╛рд╕
log_query тАФ AWS рд╡рд░реВрди рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ PostgreSQL рд▓реЙрдЧ рдлрд╛рдЗрд▓рдордзреВрди рд╡рд┐рд╢реНрд▓реЗрд╖рд┐рдд рд░реЗрдХреЙрд░реНрдб рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реЗрд╡рд╛ рд╕рд╛рд░рдгреА
рдмреЗрд╕рд▓рд╛рдЗрди тАФ рдЖрдзрд╛рд░ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рдХрд╛рд▓рд╛рд╡рдзреАрдЪреЗ рдорд╛рдкрджрдВрдб
рдЪреЗрдХрдкреЙрдИрдВрдЯ тАФ рдбреЗрдЯрд╛рдмреЗрд╕рдЪреА рд╕реНрдерд┐рддреА рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рдореЗрдЯреНрд░рд┐рдХреНрд╕рдЪреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди
checkpoint_alert_history - рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрд░реЛрдЧреНрдп рддрдкрд╛рд╕рдгреА рдореЗрдЯреНрд░рд┐рдХреНрд╕рдЪрд╛ рдЪреЗрддрд╛рд╡рдгреА рдЗрддрд┐рд╣рд╛рд╕
pg_stat_db_queries - рд╕рдХреНрд░рд┐рдп рд╡рд┐рдирдВрддреНрдпрд╛рдВрдЪреА рд╕реЗрд╡рд╛ рд╕рд╛рд░рдгреА
activity_log тАФ рдХреНрд░рд┐рдпрд╛рдХрд▓рд╛рдк рд▓реЙрдЧ рд╕реЗрд╡рд╛ рд╕рд╛рд░рдгреА
рдЯреНрд░реЕрдк_рдСрдЗрдб тАФ рдЯреНрд░реЕрдк рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЯреЗрдмрд▓

рд╕реНрдЯреЗрдЬ 1 - рдХрд╛рдордЧрд┐рд░реАрдмрджреНрджрд▓ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдорд╛рд╣рд┐рддреА рдЧреЛрд│рд╛ рдХрд░рд╛ рдЖрдгрд┐ рдЕрд╣рд╡рд╛рд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рд╛

рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдорд╛рд╣рд┐рддреА рд╕рд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд╛рд░рдгреА рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ pg_stat_history
pg_stat_history рд╕рд╛рд░рдгреА рд░рдЪрдирд╛

                                          рд╕рд╛рд░рдгреА "public.pg_stat_history" рд╕реНрддрдВрдн | рдкреНрд░рдХрд╛рд░ | рд╕реБрдзрд╛рд░рдХ-------------------------------------------------- --------------------------------------------------------- рдЖрдпрдбреА | рдкреВрд░реНрдгрд╛рдВрдХ | рд╢реВрдиреНрдп рдбреАрдлреЙрд▓реНрдЯ рдиреЗрдХреНрд╕реНрдЯрд╡реНрд╣рд▓ рдирд╛рд╣реА('pg_stat_history_id_seq'::regclass) рд╕реНрдиреЕрдкрд╢реЙрдЯ_рдЯрд╛рдЗрдорд╕реНрдЯреЕрдореНрдк | рдЯрд╛рдЗрдо рдЭреЛрдирд╢рд┐рд╡рд╛рдп рдЯрд╛рдЗрдорд╕реНрдЯреЕрдореНрдк | рдбреЗрдЯрд╛рдмреЗрд╕_рдЖрдпрдбреА | рдкреВрд░реНрдгрд╛рдВрдХ | dbid | oid | userid | oid | queryid | bigint | рдХреНрд╡реЗрд░реА | рдордЬрдХреВрд░ | рдХреЙрд▓ | bigint | рдПрдХреВрдг_рд╡реЗрд│ | рджреБрд╣реЗрд░реА рдЕрдЪреВрдХрддрд╛ | min_time | рджреБрд╣реЗрд░реА рдЕрдЪреВрдХрддрд╛ | рдХрдорд╛рд▓_рд╡реЗрд│ | рджреБрд╣реЗрд░реА рдЕрдЪреВрдХрддрд╛ | mean_time | рджреБрд╣реЗрд░реА рдЕрдЪреВрдХрддрд╛ | stddev_time | рджреБрд╣реЗрд░реА рдЕрдЪреВрдХрддрд╛ | рдкрдВрдХреНрддреА | bigint | shared_blks_hit | bigint | shared_blks_read | bigint | shared_blks_dirtied | bigint | shared_blks_written | bigint | local_blks_hit | bigint | local_blks_read | bigint | local_blks_dirtied | bigint | local_blks_written | bigint | temp_blks_read | bigint | temp_blks_written | bigint | blk_read_time | рджреБрд╣реЗрд░реА рдЕрдЪреВрдХрддрд╛ | blk_write_time | рджреБрд╣реЗрд░реА рдЕрдЪреВрдХрддрд╛ | рдмреЗрд╕рд▓рд╛рдЗрди_рдЖрдпрдбреА | рдкреВрд░реНрдгрд╛рдВрдХ | рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛: "pg_stat_history_pkey" PRIMARY KEY, btree (id) "database_idx" btree (database_id) "queryid_idx" btree (queryid) "snapshot_timestamp_idx" btree (snapshot_timestamp) "рд╡рд┐рджреЗрд╢реА-рдХреА: IG_KDASEKY_FORN_KADASTRAINT" id) рд╕рдВрджрд░реНрдн рдбреЗрдЯрд╛рдмреЗрд╕ (id ) рдбрд┐рд▓реАрдЯ рдХреЕрд╕реНрдХреЗрдбрд╡рд░

рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, рд╕рд╛рд░рдгреА рдлрдХреНрдд рдПрдХрддреНрд░рд┐рдд рджреГрд╢реНрдп рдбреЗрдЯрд╛ рдЖрд╣реЗ pg_stat_statements рд▓рдХреНрд╖реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдордзреНрдпреЗ.

рд╣реЗ рдЯреЗрдмрд▓ рд╡рд╛рдкрд░рдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ

pg_stat_history рдкреНрд░рддреНрдпреЗрдХ рддрд╛рд╕рд╛рд╕рд╛рдареА рдХреНрд╡реЗрд░реА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреА рд╕рдВрдЪрд┐рдд рдЖрдХрдбреЗрд╡рд╛рд░реА рджрд░реНрд╢рд╡реЗрд▓. рдкреНрд░рддреНрдпреЗрдХ рддрд╛рд╕рд╛рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, рдЯреЗрдмрд▓ рднрд░рд▓реНрдпрд╛рдирдВрддрд░, рдЖрдХрдбреЗрд╡рд╛рд░реА pg_stat_statements рд╕рд╣ рд░реАрд╕реЗрдЯ рдХрд░рд╛ pg_stat_statements_reset().
рдЯреАрдк: 1 рд╕реЗрдХрдВрджрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдХрд╛рд▓рд╛рд╡рдзреАрдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд╛рд▓рд╛рд╡рдзреАрд╕рд╣ рдХреНрд╡реЗрд░реАрд╕рд╛рдареА рдЖрдХрдбреЗрд╡рд╛рд░реА рдЧреЛрд│рд╛ рдХреЗрд▓реА рдЬрд╛рддреЗ.
pg_stat_history рд╕рд╛рд░рдгреА рднрд░рдд рдЖрд╣реЗ

--pg_stat_history.sql
CREATE OR REPLACE FUNCTION pg_stat_history( ) RETURNS boolean AS $$
DECLARE
  endpoint_rec record ;
  database_rec record ;
  pg_stat_snapshot record ;
  current_snapshot_timestamp timestamp without time zone;
BEGIN
  current_snapshot_timestamp = date_trunc('minute',now());  
  
  FOR endpoint_rec IN SELECT * FROM endpoint 
  LOOP
    FOR database_rec IN SELECT * FROM database WHERE endpoint_id = endpoint_rec.id 
	  LOOP
	    
		RAISE NOTICE 'NEW SHAPSHOT IS CREATING';
		
		--Connect to the target DB	  
	    EXECUTE 'SELECT dblink_connect(''LINK1'',''host='||endpoint_rec.host||' dbname='||database_rec.name||' user=USER password=PASSWORD '')';
 
        RAISE NOTICE 'host % and dbname % ',endpoint_rec.host,database_rec.name;
		RAISE NOTICE 'Creating snapshot of pg_stat_statements for database %',database_rec.name;
		
		SELECT 
	      *
		INTO 
		  pg_stat_snapshot
	    FROM dblink('LINK1',
	      'SELECT 
	       dbid , SUM(calls),SUM(total_time),SUM(rows) ,SUM(shared_blks_hit) ,SUM(shared_blks_read) ,SUM(shared_blks_dirtied) ,SUM(shared_blks_written) , 
           SUM(local_blks_hit) , SUM(local_blks_read) , SUM(local_blks_dirtied) , SUM(local_blks_written) , SUM(temp_blks_read) , SUM(temp_blks_written) , SUM(blk_read_time) , SUM(blk_write_time)
	       FROM pg_stat_statements WHERE dbid=(SELECT oid from pg_database where datname=current_database() ) 
		   GROUP BY dbid
  	      '
	               )
	      AS t
	       ( dbid oid , calls bigint , 
  	         total_time double precision , 
	         rows bigint , shared_blks_hit bigint , shared_blks_read bigint ,shared_blks_dirtied bigint ,shared_blks_written	 bigint ,
             local_blks_hit	 bigint ,local_blks_read bigint , local_blks_dirtied bigint ,local_blks_written bigint ,
             temp_blks_read	 bigint ,temp_blks_written bigint ,
             blk_read_time double precision , blk_write_time double precision	  
	       );
		 
		INSERT INTO pg_stat_history
          ( 
		    snapshot_timestamp  ,database_id  ,
			dbid , calls  ,total_time ,
            rows ,shared_blks_hit  ,shared_blks_read  ,shared_blks_dirtied  ,shared_blks_written ,local_blks_hit , 	 	
            local_blks_read,local_blks_dirtied,local_blks_written,temp_blks_read,temp_blks_written, 	
            blk_read_time, blk_write_time 
		  )		  
	    VALUES
	      (
	       current_snapshot_timestamp ,
		   database_rec.id ,
	       pg_stat_snapshot.dbid ,pg_stat_snapshot.calls,
	       pg_stat_snapshot.total_time,
	       pg_stat_snapshot.rows ,pg_stat_snapshot.shared_blks_hit ,pg_stat_snapshot.shared_blks_read ,pg_stat_snapshot.shared_blks_dirtied ,pg_stat_snapshot.shared_blks_written , 
           pg_stat_snapshot.local_blks_hit , pg_stat_snapshot.local_blks_read , pg_stat_snapshot.local_blks_dirtied , pg_stat_snapshot.local_blks_written , 
	       pg_stat_snapshot.temp_blks_read , pg_stat_snapshot.temp_blks_written , pg_stat_snapshot.blk_read_time , pg_stat_snapshot.blk_write_time 	   
	      );		   
		  
        RAISE NOTICE 'Creating snapshot of pg_stat_statements for queries with min_time more than 1000ms';
	
        FOR pg_stat_snapshot IN
          --All queries with max_time greater than 1000 ms
	      SELECT 
	        *
	      FROM dblink('LINK1',
	        'SELECT 
	         dbid , userid ,queryid,query,calls,total_time,min_time ,max_time,mean_time, stddev_time ,rows ,shared_blks_hit ,
			 shared_blks_read ,shared_blks_dirtied ,shared_blks_written , 
             local_blks_hit , local_blks_read , local_blks_dirtied , 
			 local_blks_written , temp_blks_read , temp_blks_written , blk_read_time , 
			 blk_write_time
	         FROM pg_stat_statements 
			 WHERE dbid=(SELECT oid from pg_database where datname=current_database() AND min_time >= 1000 ) 
  	        '

	                  )
	        AS t
	         ( dbid oid , userid oid , queryid bigint ,query text , calls bigint , 
  	           total_time double precision ,min_time double precision	 ,max_time double precision	 , mean_time double precision	 ,  stddev_time double precision	 , 
	           rows bigint , shared_blks_hit bigint , shared_blks_read bigint ,shared_blks_dirtied bigint ,shared_blks_written	 bigint ,
               local_blks_hit	 bigint ,local_blks_read bigint , local_blks_dirtied bigint ,local_blks_written bigint ,
               temp_blks_read	 bigint ,temp_blks_written bigint ,
               blk_read_time double precision , blk_write_time double precision	  
	         )
	    LOOP
		  INSERT INTO pg_stat_history
          ( 
		    snapshot_timestamp  ,database_id  ,
			dbid ,userid  , queryid  , query  , calls  ,total_time ,min_time ,max_time ,mean_time ,stddev_time ,
            rows ,shared_blks_hit  ,shared_blks_read  ,shared_blks_dirtied  ,shared_blks_written ,local_blks_hit , 	 	
            local_blks_read,local_blks_dirtied,local_blks_written,temp_blks_read,temp_blks_written, 	
            blk_read_time, blk_write_time 
		  )		  
	      VALUES
	      (
	       current_snapshot_timestamp ,
		   database_rec.id ,
	       pg_stat_snapshot.dbid ,pg_stat_snapshot.userid ,pg_stat_snapshot.queryid,pg_stat_snapshot.query,pg_stat_snapshot.calls,
	       pg_stat_snapshot.total_time,pg_stat_snapshot.min_time ,pg_stat_snapshot.max_time,pg_stat_snapshot.mean_time, pg_stat_snapshot.stddev_time ,
	       pg_stat_snapshot.rows ,pg_stat_snapshot.shared_blks_hit ,pg_stat_snapshot.shared_blks_read ,pg_stat_snapshot.shared_blks_dirtied ,pg_stat_snapshot.shared_blks_written , 
           pg_stat_snapshot.local_blks_hit , pg_stat_snapshot.local_blks_read , pg_stat_snapshot.local_blks_dirtied , pg_stat_snapshot.local_blks_written , 
	       pg_stat_snapshot.temp_blks_read , pg_stat_snapshot.temp_blks_written , pg_stat_snapshot.blk_read_time , pg_stat_snapshot.blk_write_time 	   
	      );
		  
        END LOOP;

        PERFORM dblink_disconnect('LINK1');  
				
	  END LOOP ;--FOR database_rec IN SELECT * FROM database WHERE endpoint_id = endpoint_rec.id 
    
  END LOOP;

RETURN TRUE;  
END
$$ LANGUAGE plpgsql;

рдкрд░рд┐рдгрд╛рдореА, рдЯреЗрдмрд▓рдордзреНрдпреЗ рдХрд╛рд╣реА рдХрд╛рд▓рд╛рд╡рдзреАрдирдВрддрд░ pg_stat_history рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдЯреЗрдмрд▓ рд╕рд╛рдордЧреНрд░реАрдЪреНрдпрд╛ рд╕реНрдиреЕрдкрд╢реЙрдЯреНрд╕рдЪрд╛ рд╕рдВрдЪ рдЕрд╕реЗрд▓ pg_stat_statements рд▓рдХреНрд╖реНрдп рдбреЗрдЯрд╛рдмреЗрд╕.

рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдЕрд╣рд╡рд╛рд▓ рджреЗрдд рдЖрд╣реЗ

рд╕рд╛рдзреНрдпрд╛ рдкреНрд░рд╢реНрдирд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди, рдЖрдкрдг рдмрд░реЗрдЪ рдЙрдкрдпреБрдХреНрдд рдЖрдгрд┐ рдордиреЛрд░рдВрдЬрдХ рдЕрд╣рд╡рд╛рд▓ рдорд┐рд│рд╡реВ рд╢рдХрддрд╛.

рджрд┐рд▓реЗрд▓реНрдпрд╛ рдХрд╛рд▓рд╛рд╡рдзреАрд╕рд╛рдареА рдПрдХрддреНрд░рд┐рдд рдбреЗрдЯрд╛

рдЪреМрдХрд╢реА

SELECT 
  database_id , 
  SUM(calls) AS calls ,SUM(total_time)  AS total_time ,
  SUM(rows) AS rows , SUM(shared_blks_hit)  AS shared_blks_hit,
  SUM(shared_blks_read) AS shared_blks_read ,
  SUM(shared_blks_dirtied) AS shared_blks_dirtied,
  SUM(shared_blks_written) AS shared_blks_written , 
  SUM(local_blks_hit) AS local_blks_hit , 
  SUM(local_blks_read) AS local_blks_read , 
  SUM(local_blks_dirtied) AS local_blks_dirtied , 
  SUM(local_blks_written)  AS local_blks_written,
  SUM(temp_blks_read) AS temp_blks_read, 
  SUM(temp_blks_written) temp_blks_written , 
  SUM(blk_read_time) AS blk_read_time , 
  SUM(blk_write_time) AS blk_write_time
FROM 
  pg_stat_history
WHERE 
  queryid IS NULL AND
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
GROUP BY database_id ;

рдбреАрдмреА рд╡реЗрд│

to_char(рдордзреНрдпрд╛рдВрддрд░ '1 рдорд┐рд▓реАрд╕реЗрдХрдВрдж' * pg_total_stat_history_rec.total_time, 'HH24:MI:SS.MS')

I/O рд╡реЗрд│

to_char(рдордзреНрдпрд╛рдВрддрд░ '1 рдорд┐рд▓реАрд╕реЗрдХрдВрдж' * ( pg_total_stat_history_rec.blk_read_time + pg_total_stat_history_rec.blk_write_time ), 'HH24:MI:SS.MS')

Total_time рдиреБрд╕рд╛рд░ TOP10 SQL

рдЪреМрдХрд╢реА

SELECT 
  queryid , 
  SUM(calls) AS calls ,
  SUM(total_time)  AS total_time  	
FROM 
  pg_stat_history
WHERE 
  queryid IS NOT NULL AND 
  database_id = DATABASE_ID AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT 
GROUP BY queryid 
ORDER BY 3 DESC 
LIMIT 10
-------------------------------------------------- ----------------------------------- | рдПрдХреВрдг рдПрдХреНрдЭрд┐рдХреНрдпреБрд╢рди рд╡реЗрд│реЗрдиреБрд╕рд╛рд░ рдЯреЙрдк10 SQL | #| queryid| рдХреЙрд▓реНрд╕| рдХреЙрд▓реНрд╕ %| total_time (ms) | dbtime % +---------+------------+------------+------------+ ------ ----------------------------- +------------ | 1| реореирезренремрежреирелрел| 821760255| .2|00001:00:03( 23.141 ms.)| рел.рекреи | 203141.681| рекрезрелреиремреирекрейрепреж| 5.42| .2|4152624390:2:00001( 00 рдорд┐рд╕реЗ.)| рел.резрен | рей| резрекреорекрекрелрекрекренрез| 03| .13.929|193929.215:5.17:3( 1484454471 ms.)| 4 | 00001| 00| 02| .09.129|129129.057:3.44:4( 655729273 ms.)| рей.реирел | рел| реирекремрежрейрезреорекремрез| 1| .00000|00:02:01.869( 121869.981 ms.)| 3.25 | рем| 5| 2460318461| .1|00000:00:01( 33.113 ms.)| .93113.835 | рен| 2.48| 6| .2194493487|4:00001:00( 00 ms.)| .17.377 | рео| 17377.868| 46| .7|1053044345:1:00000( 00 ms.)| .00

рдПрдХреВрдг I/O рд╡реЗрд│реЗрдиреБрд╕рд╛рд░ TOP10 SQL

рдЪреМрдХрд╢реА

SELECT 
  queryid , 
  SUM(calls) AS calls ,
  SUM(blk_read_time + blk_write_time)  AS io_time
FROM 
  pg_stat_history
WHERE 
  queryid IS NOT NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
GROUP BY  queryid 
ORDER BY 3 DESC 
LIMIT 10
-------------------------------------------------- -------------------------------------------------- | рдПрдХреВрдг I/O рд╡реЗрд│реЗрдиреБрд╕рд╛рд░ рдЯреЙрдк10 SQL | #| queryid| рдХреЙрд▓реНрд╕| рдХреЙрд▓реНрд╕ %| I/O рд╡реЗрд│ (ms)|db I/O рд╡реЗрд│ % +------+------------+----------+------ ----------------------------------------------------------------- ------ -- | 1| рекрезрелреиремреирекрейрепреж| 4152624390| .2|00001:00:08( 31.616 ms.)| 511616.592 | 31.06| реореирезренремрежреирелрел| 2| .821760255|2:00001:00( 08 ms.)| 27.099 | рей| 507099.036| 30.78| .3|655729273:1:00000( 00 ms.)| 05 | 02.209| реирекремрежрейрезреорекремрез| 302209.137| .18.35|4:2460318461:1( 00000 ms.)| 00 | рел| резрекреорекрекрелрекрекренрез| 04| .05.981|245981.117:14.93:5( 1484454471 рдорд┐рд╕реЗ.)| реи.рейрео | рем| 4| 00001| .00|00:39.144:39144.221( 2.38 рдорд┐рд╕реЗ.)| 6 | рен| 2194493487| 4| .00001|00:00:18.182( 18182.816 ms.)| рез.режрез | рео| 1.10| 7| .1053044345|1:00000:00( 00 рдорд┐рд╕реЗ.)| .16.611

рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреНрдпрд╛ рдХрдорд╛рд▓ рд╡реЗрд│реЗрдиреБрд╕рд╛рд░ TOP10 SQL

рдЪреМрдХрд╢реА

SELECT 
  id AS snapshotid , 
  queryid , 
  snapshot_timestamp ,  
  max_time 
FROM 
  pg_stat_history 
WHERE 
  queryid IS NOT NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
ORDER BY 4 DESC 
LIMIT 10

-------------------------------------------------- ------------------------------------------------------------------ | рдХрдорд╛рд▓ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╡реЗрд│реЗрдиреБрд╕рд╛рд░ рдЯреЙрдк10 SQL | #| рд╕реНрдиреЕрдкрд╢реЙрдЯ| рд╕реНрдиреЕрдкрд╢реЙрдЯрдЖрдпрдбреА| queryid| max_time (ms) +------+------+------------+--------- --+----------------------------------------- | 1| 05.04.2019/01/03 4169:655729273| рекрезремреп| 00| 02:01.869:121869.981( 2 ms.) | 04.04.2019| 17/00/4153 821760255:00| рекрезрелрей| реореирезренремрежреирелрел| 01:41.570:101570.841( 3 ms.) | рей| 04.04.2019/16/00 4146:821760255| рекрезрекрем| реореирезренремрежреирелрел| 00:01:41.570( 101570.841 ms.) | 4| 04.04.2019/16/00 4144:4152624390| рекрезрекрек| рекрезрелреиремреирекрейрепреж| 00:01:36.964(96964.607 ms.) | рел| 5/04.04.2019/17 00:4151| рекрезрелрез| рекрезрелреиремреирекрейрепреж| 4152624390:00:01(36.964 ms.) | рем| 96964.607/6/05.04.2019 10:00| рекрезреорео| резрекреорекрекрелрекрекренрез| 4188:1484454471:00( 01 ms.) | рен| 33.452/93452.150/7 04.04.2019:17| рекрезрелреж| реирекремрежрейрезреорекремрез| 00:4150:2460318461(00 ms.) | рео| 01/33.113/93113.835 8:04.04.2019| рекрезрекреж| резрекреорекрекрелрекрекренрез| 15:00:4140( 1484454471 ms.) | реп| 00/00/11.892 11892.302:9| рекрезрекрел| резрекреорекрекрелрекрекренрез| 04.04.2019:16:00( 4145 ms.) | 1484454471| 00/00/11.892 11892.302:10| рекрезрелреи| резрекреорекрекрелрекрекренрез| 04.04.2019:17:00 (4152 ms.)

рд╕рд╛рдорд╛рдпрд┐рдХ рдмрдлрд░ рджреНрд╡рд╛рд░реЗ TOP10 SQL рд╡рд╛рдЪрди/рд▓реЗрдЦрди

рдЪреМрдХрд╢реА

SELECT 
  id AS snapshotid , 
  queryid ,
  snapshot_timestamp , 
  shared_blks_read , 
  shared_blks_written 
FROM 
  pg_stat_history
WHERE 
  queryid IS NOT NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND
  ( shared_blks_read > 0 OR shared_blks_written > 0 )
ORDER BY 4 DESC  , 5 DESC 
LIMIT 10
-------------------------------------------------- ------------------------------------------------------------------ | рд╕рд╛рдорд╛рдпрд┐рдХ рдмрдлрд░ рджреНрд╡рд╛рд░реЗ TOP10 SQL рд░реАрдб/рд░рд╛рдЗрдЯ | #| рд╕реНрдиреЕрдкрд╢реЙрдЯ| рд╕реНрдиреЕрдкрд╢реЙрдЯрдЖрдпрдбреА| queryid| рд╢реЗрдЕрд░ рдХреЗрд▓реЗрд▓реЗ рдмреНрд▓реЙрдХреНрд╕ рд╡рд╛рдЪрд▓реЗ рд╕рд╛рдорд╛рдпрд┐рдХ рдХреЗрд▓реЗрд▓реЗ рдмреНрд▓реЙрдХреНрд╕ рд▓рд┐рд╣рд┐рддрд╛рдд +------------------------------------- +--------- ------------------------- +---------------------- | 1| 04.04.2019/17/00 4153:821760255| рекрезрелрей| реореирезренремрежреирелрел| ренрепренрейрежрео| 797308 | 0| 2/04.04.2019/16 00:4146| рекрезрекрем| реореирезренремрежреирелрел| ренрепренрейрежрео| 821760255 | рей| 797308/0/3 05.04.2019:01| рекрезремреп| 03| ренрепренрезрелрео| 4169 | 655729273| 797158/0/4 04.04.2019:16| рекрезрекрек| рекрезрелреиремреирекрейрепреж| ренрелремрелрезрек| 00 | рел| 4144/4152624390/756514 0:5| рекрезрелрез| рекрезрелреиремреирекрейрепреж| ренрелремрелрезрек| 04.04.2019 | рем| 17/00/4151 4152624390:756514| рекрезрелреж| реирекремрежрейрезреорекремрез| ренрейрекрезрезрен| 0 | рен| 6/04.04.2019/17 00:4150| рекрезрелрел| 2460318461| релреирепренрей| 734117 | рео| 0/7/04.04.2019 17:00| рекрезремрео| 4155| релреиреорезрео| 3644780286 | реп| 52973/0/8 05.04.2019:01| рекрезрекрез| 03| релреиреорезрей| 4168 | 1053044345| 52818/0/9 04.04.2019:15| рекрезрекрен| 00| релреиреорезрей| 4141 -------------------------------------------------- --------------------------------------------------------

рдХрдорд╛рд▓ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╡реЗрд│реЗрдиреБрд╕рд╛рд░ рд╡рд┐рдирдВрддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╡рд┐рддрд░рдгрд╛рдЪрд╛ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо

рдЪреМрдХрд╢реНрдпрд╛

SELECT  
  MIN(max_time) AS hist_min  , 
  MAX(max_time) AS hist_max , 
  (( MAX(max_time) - MIN(min_time) ) / hist_columns ) as hist_width
FROM 
  pg_stat_history 
WHERE 
  queryid IS NOT NULL AND
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT ;

SELECT 
  SUM(calls) AS calls
FROM 
  pg_stat_history 
WHERE 
  queryid IS NOT NULL AND
  database_id =DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND 
  ( max_time >= hist_current_min AND  max_time < hist_current_max ) ;
|------------------------------------------------ ---------------------------------------------------------------------------------- | MAX_TIME рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо | рдПрдХреВрдг рдХреЙрд▓: 33851920 | MIN TIME: 00:00:01.063 | рдХрдорд╛рд▓ рд╡реЗрд│: 00:02:01.869 ------------------------------------------ ------------------------------------------------------------------ | рдХрд┐рдорд╛рди рдХрд╛рд▓рд╛рд╡рдзреА| рдХрдорд╛рд▓ рдХрд╛рд▓рд╛рд╡рдзреА| рдХреЙрд▓ +---------------------------------- ---------------------+------------ | 00:00:01.063( 1063.830 ms.) | 00:00:13.144( 13144.445 ms.) | 9 | 00:00:13.144( 13144.445 ms.) | 00:00:25.225( 25225.060 ms.) | 0 | 00:00:25.225( 25225.060 ms.) | 00:00:37.305( 37305.675 ms.) | 0 | 00:00:37.305( 37305.675 ms.) | 00:00:49.386( 49386.290 ms.) | 0 | 00:00:49.386( 49386.290 ms.) | 00:01:01.466( 61466.906 ms.) | 0 | 00:01:01.466( 61466.906 ms.) | 00:01:13.547( 73547.521 ms.) | 0 | 00:01:13.547( 73547.521 ms.) | 00:01:25.628( 85628.136 ms.) | 0 | 00:01:25.628( 85628.136 ms.) | 00:01:37.708( 97708.751 ms.) | 4 | 00:01:37.708( 97708.751 ms.) | 00:01:49.789( 109789.366 ms.) | 2 | 00:01:49.789( 109789.366 ms.) | 00:02:01.869( 121869.981 ms.) | 0

рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдж рдХреНрд╡реЗрд░реАрдиреБрд╕рд╛рд░ TOP10 рд╕реНрдиреЕрдкрд╢реЙрдЯ

рдЪреМрдХрд╢реНрдпрд╛

--pg_qps.sql
--Calculate Query Per Second 
CREATE OR REPLACE FUNCTION pg_qps( pg_stat_history_id integer ) RETURNS double precision AS $$
DECLARE
 pg_stat_history_rec record ;
 prev_pg_stat_history_id integer ;
 prev_pg_stat_history_rec record;
 total_seconds double precision ;
 result double precision;
BEGIN 
  result = 0 ;
  
  SELECT *
  INTO pg_stat_history_rec
  FROM 
    pg_stat_history
  WHERE id = pg_stat_history_id ;

  IF pg_stat_history_rec.snapshot_timestamp IS NULL 
  THEN
    RAISE EXCEPTION 'ERROR - Not found pg_stat_history for id = %',pg_stat_history_id;
  END IF ;  
  
 --RAISE NOTICE 'pg_stat_history_id = % , snapshot_timestamp = %', pg_stat_history_id , 
 pg_stat_history_rec.snapshot_timestamp ;
  
  SELECT 
    MAX(id)   
  INTO
    prev_pg_stat_history_id
  FROM
    pg_stat_history
  WHERE 
    database_id = pg_stat_history_rec.database_id AND
	queryid IS NULL AND
	id < pg_stat_history_rec.id ;

  IF prev_pg_stat_history_id IS NULL 
  THEN
    RAISE NOTICE 'Not found previous pg_stat_history shapshot for id = %',pg_stat_history_id;
	RETURN NULL ;
  END IF;
  
  SELECT *
  INTO prev_pg_stat_history_rec
  FROM 
    pg_stat_history
  WHERE id = prev_pg_stat_history_id ;
  
  --RAISE NOTICE 'prev_pg_stat_history_id = % , prev_snapshot_timestamp = %', prev_pg_stat_history_id , prev_pg_stat_history_rec.snapshot_timestamp ;    

  total_seconds = extract(epoch from ( pg_stat_history_rec.snapshot_timestamp - prev_pg_stat_history_rec.snapshot_timestamp ));
  
  --RAISE NOTICE 'total_seconds = % ', total_seconds ;    
  
  --RAISE NOTICE 'calls = % ', pg_stat_history_rec.calls ;      
  
  IF total_seconds > 0 
  THEN
    result = pg_stat_history_rec.calls / total_seconds ;
  ELSE
   result = 0 ; 
  END IF;
   
 RETURN result ;
END
$$ LANGUAGE plpgsql;


SELECT 
  id , 
  snapshot_timestamp ,
  calls , 	
  total_time , 
  ( select pg_qps( id )) AS QPS ,
  blk_read_time ,
  blk_write_time
FROM 
  pg_stat_history
WHERE 
  queryid IS NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND
  ( select pg_qps( id )) IS NOT NULL 
ORDER BY 5 DESC 
LIMIT 10
|------------------------------------------------ ---------------------------------------------------------------------------------- | QueryPerSeconds рдХреНрд░рдорд╛рдВрдХрд╛рдВрджреНрд╡рд╛рд░реЗ рдХреНрд░рдордмрджреНрдз рдХреЗрд▓реЗрд▓реЗ TOP10 рд╕реНрдиреЕрдкрд╢реЙрдЯ ------------------------------------------------------ -------------------------------------------------- -------------------------------------------------- | #| рд╕реНрдиреЕрдкрд╢реЙрдЯ| рд╕реНрдиреЕрдкрд╢реЙрдЯрдЖрдпрдбреА| рдХреЙрд▓реНрд╕| рдПрдХреВрдг dbtime| QPS| I/O рд╡реЗрд│| I/O рд╡реЗрд│ % +------+-------------------+------------+------ ------------------------------------------- ---------------------------- +------------ | 1| 04.04.2019/20/04 4161:5758631| рекрезремрез| релренрелреоремрейрез| 00:06:30.513( 390513.926 ms.)| резрелренрей.рейрепрем| 1573.396:00:00( 01.470 ms.)| .1470.110 | 376| 2/04.04.2019/17 00:4149| рекрезрекреп| 3529197| 00:11:48.830( 708830.618 ms.)| 980.332| 00:12:47.834( 767834.052 ms.)| 108.324 | рей| 3/04.04.2019/16 00:4143| рекрезрекрей| 3525360| 00:10:13.492( 613492.351 ms.)| репренреп.реиремрен | 979.267:00:08(41.396 ms.)| реорек.репреорео | 521396.555| 84.988/4/04.04.2019 21:03| рекрезремрей| реиренреорезрелрейрем| 4163:2781536:00( 03 ms.)| ренреорел.ренрекрел| 06.470:186470.979:785.745( 00 ms.)| .00 | рел| 00.249 249.865:134| рекрезрелреп| реиреорепрежрейремреи| 5:04.04.2019:19( 03 ms.)| ренренрем.репренреп| 4159:2890362:00( 03 ms.)| .16.784 | рем| 196784.755/776.979/00 00:01.441| рекрезрейрен| реирейрепренрейреирем| 1441.386:732:6( 04.04.2019 ms.)| ремремрел.репреирек| 14:00:4137(2397326 ms.)| .режрежреп | рен| 00/04/43.033 283033.854:665.924| рекрезрейреп| реирейрепрекрекрезрем| 00:00:00.024( 24.505 ms.)| ремремрел.резрезрем| 009:7:04.04.2019( 15 ms.)| рек.резреирем | рео| 00 4139:2394416| рекрезрейрел| реирейренрейрежрекрей| 00:04:51.435( 291435.010 ms.)| ремрелреп.резренреп| 665.116:00:00( 12.025 ms.)| .12025.895 | реп| 4.126/8/04.04.2019 13:00| рекрезремрен| рекрейреоренрезрепрез| 4135:2373043:00( 04 ms.)| ремрежреп.рейрейреи| 26.791:266791.988:659.179( 00 ms.)| 00 | 00.064| 64.261/024/9 05.04.2019:01| рекрезрелрен| резрезрекрелрелрепрем| 03:4167:4387191( 00 ms.)| рейрезрей.режрежрек| 06:51.380:411380.293( 609.332 ms.)| рез.ремремрем

QueryPerSeconds рдЖрдгрд┐ I/O рд╡реЗрд│реЗрд╕рд╣ рдкреНрд░рддрд┐ рддрд╛рд╕ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдЗрддрд┐рд╣рд╛рд╕

рдЪреМрдХрд╢реА

SELECT 
  id , 
  snapshot_timestamp ,
  calls , 	
  total_time , 
  ( select pg_qps( id )) AS QPS ,
  blk_read_time ,
  blk_write_time
FROM 
  pg_stat_history
WHERE 
  queryid IS NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
ORDER BY 2
|-----------------------------------------------------------------------------------------------
| HOURLY EXECUTION HISTORY  WITH QueryPerSeconds and I/O Time
-----------------------------------------------------------------------------------------------------------------------------------------------
| QUERY PER SECOND HISTORY
|    #|          snapshot| snapshotID|      calls|                      total dbtime|        QPS|                          I/O time| I/O time %
+-----+------------------+-----------+-----------+----------------------------------+-----------+----------------------------------+-----------
|    1|  04.04.2019 11:00|       4131|       3747|  00:00:00.835(       835.374 ms.)|      1.041|  00:00:00.000(          .000 ms.)|       .000
|    2|  04.04.2019 12:00|       4133|    1002722|  00:01:52.419(    112419.376 ms.)|    278.534|  00:00:00.149(       149.105 ms.)|       .133
|    3|  04.04.2019 13:00|       4135|    2373043|  00:04:26.791(    266791.988 ms.)|    659.179|  00:00:00.064(        64.261 ms.)|       .024
|    4|  04.04.2019 14:00|       4137|    2397326|  00:04:43.033(    283033.854 ms.)|    665.924|  00:00:00.024(        24.505 ms.)|       .009
|    5|  04.04.2019 15:00|       4139|    2394416|  00:04:51.435(    291435.010 ms.)|    665.116|  00:00:12.025(     12025.895 ms.)|      4.126
|    6|  04.04.2019 16:00|       4143|    3525360|  00:10:13.492(    613492.351 ms.)|    979.267|  00:08:41.396(    521396.555 ms.)|     84.988
|    7|  04.04.2019 17:00|       4149|    3529197|  00:11:48.830(    708830.618 ms.)|    980.332|  00:12:47.834(    767834.052 ms.)|    108.324
|    8|  04.04.2019 18:01|       4157|    1145596|  00:01:19.217(     79217.372 ms.)|    313.004|  00:00:01.319(      1319.676 ms.)|      1.666
|    9|  04.04.2019 19:03|       4159|    2890362|  00:03:16.784(    196784.755 ms.)|    776.979|  00:00:01.441(      1441.386 ms.)|       .732
|   10|  04.04.2019 20:04|       4161|    5758631|  00:06:30.513(    390513.926 ms.)|   1573.396|  00:00:01.470(      1470.110 ms.)|       .376
|   11|  04.04.2019 21:03|       4163|    2781536|  00:03:06.470(    186470.979 ms.)|    785.745|  00:00:00.249(       249.865 ms.)|       .134
|   12|  04.04.2019 23:03|       4165|    1443155|  00:01:34.467(     94467.539 ms.)|    200.438|  00:00:00.015(        15.287 ms.)|       .016
|   13|  05.04.2019 01:03|       4167|    4387191|  00:06:51.380(    411380.293 ms.)|    609.332|  00:05:18.847(    318847.407 ms.)|     77.507
|   14|  05.04.2019 02:03|       4171|     189852|  00:00:10.989(     10989.899 ms.)|     52.737|  00:00:00.539(       539.110 ms.)|      4.906
|   15|  05.04.2019 03:01|       4173|       3627|  00:00:00.103(       103.000 ms.)|      1.042|  00:00:00.004(         4.131 ms.)|      4.010
|   16|  05.04.2019 04:00|       4175|       3627|  00:00:00.085(        85.235 ms.)|      1.025|  00:00:00.003(         3.811 ms.)|      4.471
|   17|  05.04.2019 05:00|       4177|       3747|  00:00:00.849(       849.454 ms.)|      1.041|  00:00:00.006(         6.124 ms.)|       .721
|   18|  05.04.2019 06:00|       4179|       3747|  00:00:00.849(       849.561 ms.)|      1.041|  00:00:00.000(          .051 ms.)|       .006
|   19|  05.04.2019 07:00|       4181|       3747|  00:00:00.839(       839.416 ms.)|      1.041|  00:00:00.000(          .062 ms.)|       .007
|   20|  05.04.2019 08:00|       4183|       3747|  00:00:00.846(       846.382 ms.)|      1.041|  00:00:00.000(          .007 ms.)|       .001
|   21|  05.04.2019 09:00|       4185|       3747|  00:00:00.855(       855.426 ms.)|      1.041|  00:00:00.000(          .065 ms.)|       .008
|   22|  05.04.2019 10:00|       4187|       3797|  00:01:40.150(    100150.165 ms.)|      1.055|  00:00:21.845(     21845.217 ms.)|     21.812

рд╕рд░реНрд╡ SQL-рдирд┐рд╡рдбрдХрд╛рдВрдЪрд╛ рдордЬрдХреВрд░

рдЪреМрдХрд╢реА

SELECT 
  queryid , 
  query 
FROM 
  pg_stat_history
WHERE 
  queryid IS NOT NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
GROUP BY queryid , query

рдкрд░рд┐рдгрд╛рдо

рдЬрд╕реЗ рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, рдЕрдЧрджреА рд╕реЛрдкреНрдпрд╛ рдорд╛рдзреНрдпрдорд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди, рддреБрдореНрд╣реА рдбреЗрдЯрд╛рдмреЗрд╕рдЪреНрдпрд╛ рд╡рд░реНрдХрд▓реЛрдб рдЖрдгрд┐ рд╕реНрдерд┐рддреАрдмрджреНрджрд▓ рдмрд░реАрдЪ рдЙрдкрдпреБрдХреНрдд рдорд╛рд╣рд┐рддреА рдорд┐рд│рд╡реВ рд╢рдХрддрд╛.

рдЯреАрдк:рдЬрд░ рдЖрдореНрд╣реА рдХреНрд╡реЗрд░реАрдордзреНрдпреЗ queryid рд░реЗрдХреЙрд░реНрдб рдХреЗрд▓рд╛, рддрд░ рдЖрдореНрд╣рд╛рд▓рд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдХреНрд╡реЗрд░реАрд╕рд╛рдареА рдЗрддрд┐рд╣рд╛рд╕ рдорд┐рд│реЗрд▓ (рдЬрд╛рдЧрд╛ рд╡рд╛рдЪрд╡рдгреНрдпрд╛рд╕рд╛рдареА, рд╡реЗрдЧрд│реНрдпрд╛ рдХреНрд╡реЗрд░реАрд╕рд╛рдареА рдЕрд╣рд╡рд╛рд▓ рд╡рдЧрд│рдгреНрдпрд╛рдд рдЖрд▓реЗ рдЖрд╣реЗрдд).

рдореНрд╣рдгреВрди, рдХреНрд╡реЗрд░реА рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рдирд╛рд╡рд░реАрд▓ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдбреЗрдЯрд╛ рдЙрдкрд▓рдмреНрдз рдЖрдгрд┐ рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ.
рдкрд╣рд┐рд▓рд╛ рдЯрдкреНрдкрд╛ "рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдбреЗрдЯрд╛ рд╕рдВрдХрд▓рди" рдкреВрд░реНрдг рдЭрд╛рд▓рд╛ рдЖрд╣реЗ.

рддреБрдореНрд╣реА рджреБрд╕рд▒реНрдпрд╛ рдЯрдкреНрдкреНрдпрд╛рд╡рд░ рдЬрд╛рдК рд╢рдХрддрд╛ - "рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗрдЯ рдХрд░рдгреЗ".
PostgreSQL рдкреНрд░рд╢реНрдирд╛рдВрдЪреЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдирд┐рд░реАрдХреНрд╖рдг. рднрд╛рдЧ рез - рдЕрд╣рд╡рд╛рд▓ рджреЗрдгреЗ

рдкрдг рддреА рдкреВрд░реНрдгрдкрдгреЗ рд╡реЗрдЧрд│реА рдХрдерд╛ рдЖрд╣реЗ.

рдкреБрдвреЗ рдЪрд╛рд▓реВтАж

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛