PostgreSQL рдкреНрд░рд╢реНрдирд╣рд░реВрдХреЛ рдкреНрд░рджрд░реНрд╢рди рдирд┐рдЧрд░рд╛рдиреАред рднрд╛рдЧ рез - рд░рд┐рдкреЛрд░реНрдЯрд┐рдЩ

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

Foreword

рд╕рдмреИрдХреЛ рдирд╛рдо рдкрд░рд┐рд╡рд░реНрддрди рднрдПрдХреЛ рдЫред рд╕рдВрдпреЛрдЧрд╣рд░реВ рдЕрдирд┐рдпрдорд┐рдд рдЫрдиреНред рд╕рд╛рдордЧреНрд░реА рд▓реЗрдЦрдХрдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд┐рдЪрд╛рд░ рдорд╛рддреНрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрджрдЫред

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

рдХрдерд╛рдХреЛ рд╢реБрд░реБрд╡рд╛рдд - "рдпрд╛рдж рдЫ рдпреЛ рд╕рдмреИ рдХрд╕рд░реА рд╕реБрд░реБ рднрдпреЛ"ред
рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛ рдХреЗ рднрдпреЛ, рд╕рдмреИрднрдиреНрджрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕рд░реНрддрд╣рд░реВрдорд╛ - "PostgreSQL рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рд╕реБрдзрд╛рд░ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдПрдХ рд╡рд┐рдзрд┐рдХреЛ рд░реВрдкрдорд╛ рд╕рдВрд╢реНрд▓реЗрд╖рдг┬╗

рдорд▓рд╛рдИ рдпреЛ рд╕рдмреИ рдХрд┐рди рдЪрд╛рд╣рд┐рдиреНрдЫ?

рдареАрдХ рдЫ, рдкрд╣рд┐рд▓реЗ, рддрд╛рдХрд┐ рдмрд┐рд░реНрд╕рдиреБ рд╣реБрдБрджреИрди, рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрддрд┐рдХреЛ рдЧреМрд░рд╡рд╢рд╛рд▓реА рджрд┐рдирд╣рд░реВ рд╕рдореНрдЭрдБрджреИред
рджреЛрд╕реНрд░реЛ, рдХреЗ рд▓реЗрдЦрд┐рдПрдХреЛ рдерд┐рдпреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрдиред рдХрд┐рдирднрдиреЗ рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рдо рдЕрд▓рдорд▓рдорд╛ рдкрд░реНрди рдерд╛рд▓реНрдЫреБ рд░ рдХреЗрд╣рд┐ рднрд╛рдЧрд╣рд░реВ рдмрд┐рд░реНрд╕рдиреНрдЫреБред

рдареАрдХ рдЫ, рд░ рд╕рдмреИрднрдиреНрджрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдХреБрд░рд╛, рд╕рд╛рдпрдж рдпреЛ рдХрд╕реИрдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧреА рд╣реБрдиреЗрдЫ рд░ рд╡реНрд╣реАрд▓ рдкреБрди: рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдЧрд░реНрди рд░ рд░реЗрдХ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрди рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫред рдЕрд░реНрдХреЛ рд╢рдмреНрджрдорд╛, рдЖрдлреНрдиреЛ рдХрд░реНрдо рд╕реБрдзрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдЦрдмреНрд░реЛрднрдХреЛ рд╣реЛрдЗрди)ред рдХрд┐рдирднрдиреЗ рдпреЛ рд╕рдВрд╕рд╛рд░рдорд╛ рд╕рдмреИрднрдиреНрджрд╛ рдореВрд▓реНрдпрд╡рд╛рди рдЪреАрдЬ рд╡рд┐рдЪрд╛рд░ рд╣реЛред рдореБрдЦреНрдп рдХреБрд░рд╛ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдЦреЛрдЬреНрди рдЫред рддрд░ рд╡рд┐рдЪрд╛рд░рд▓рд╛рдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рдорд╛ рдкрд░рд┐рдгрдд рдЧрд░реНрдиреБ рд╡рд┐рд╢реБрджреНрдз рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рдкреНрд░рд╢реНрди рд╣реЛред

рддреНрдпрд╕реЛрднрдП, рдмрд┐рд╕реНрддрд╛рд░реИ рд╕реБрд░реБ рдЧрд░реМрдВ ...

рд╕рдорд╕реНрдпрд╛рдХреЛ рд╕реВрддреНрд░реАрдХрд░рдгред

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

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

рдЖрд╡рд╢реНрдпрдХ рдЫ:

рдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рд░ рд╕реНрдерд┐рддрд┐ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрдиреБрд╣реЛрд╕реН, рднрд╛рд░реА рдбрд╛рдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдирд╣рд░реВ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрди рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреБрд╣реЛрд╕реН рд░ рдЫред

рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд▓реНрдкрд╣рд░реВрдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп рд╡рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг

рд╕реБрд░реБрдорд╛, рдИрдиреНрдЬрд┐рдирд┐рдпрд░рдХрд╛ рд▓рд╛рдЧрд┐ рдлрд╛рдЗрджрд╛ рд░ рдмреЗрдлрд╛рдЗрджрд╛рд╣рд░реВрдХреЛ рддреБрд▓рдирд╛рддреНрдордХ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдХреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдмрд╛рдЯ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреЗ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВ, рд░ рдХрд░реНрдордЪрд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ рдЕрдиреБрд╕рд╛рд░ рдпрд╕рдХрд╛ рд╣рдХрджрд╛рд░рд╣рд░реВрд▓рд╛рдИ рдлрд╛рдЗрджрд╛рд╣рд░реВ рд░ рд╕рдореНрдЭреМрддрд╛ рдЧрд░реНрди рджрд┐рдиреБрд╣реЛрд╕реНред рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдХреЛ рдШрд╛рдЯрд╛ред

рд╡рд┐рдХрд▓реНрдк 1 - "рдорд╛рдЧрдорд╛ рдХрд╛рдо рдЧрд░реНрджреИ"

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

рд╡рд┐рдХрд▓реНрдк реи- "рдЦреИрдБрдЬрд░реАрдХреЛ рд╕рд╛рдердорд╛ рдирд╛рдЪреНрдиреЗ, рдмрд╛рдл рдЧрд░реНрдиреЗ рд░ рдЬреБрддреНрддрд╛ рд▓рдЧрд╛рдПрд░"

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

рд╡рд┐рдХрд▓реНрдк 3 - рддрдкрд╛рдИрд▓реЗ рд╕рд╛рдЗрдХрд▓ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрди, рддрдкрд╛рдИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдХрд┐рдиреЗрд░ рд╕рд╡рд╛рд░реА рдЧрд░реНрдиреБ рдкрд░реНрдЫред

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

рдХреЗ рдЧрд░реНрдиреЗ - Chernyshevsky? рддрдкрд╛рдИрдХреЛ рдкреНрд░рд╢реНрди рдзреЗрд░реИ рд╕рд╛рдиреНрджрд░реНрднрд┐рдХ рдЫред (рд╕рд╛рде)

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

рдпреЛ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд▓рд╛рдн рд░ рд╡рд┐рдкрдХреНрд╖ рдХреЗ рд╣реЛ:

рдкреНрд░реЛ:
1. рдпреЛ рд░реЛрдЪрдХ рдЫред рдард┐рдХ рдЫ, рдХрдореНрддрд┐рдорд╛ рдпреЛ рд╕реНрдерд┐рд░ "рдбреЗрдЯрд╛рдлрд╛рдЗрд▓ рд╕рдВрдХреБрдЪрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЯреЗрдмрд▓рд╕реНрдкреЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЗрддреНрдпрд╛рджрд┐" рднрдиреНрджрд╛ рдмрдвреА рд░реЛрдЪрдХ рдЫред
2. рдпреА рдирдпрд╛рдБ рд╕реАрдк рд░ рдирдпрд╛рдБ рд╡рд┐рдХрд╛рд╕ рд╣реБрдиреНред рдЬреБрди, рдврд┐рд▓реЛ рд╡рд╛ рдЪрд╛рдБрдбреЛ, рддрдкрд╛рдИрдВрд▓рд╛рдИ рд░рд╛рдореНрд░реЛ-рдпреЛрдЧреНрдп рдЬрд┐рдВрдЬрд░рдмреНрд░реЗрдб рд░ рдбреЛрдирдЯреНрд╕ рджрд┐рдиреЗрдЫред
Cons:
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 - рдЧрддрд┐рд╡рд┐рдзрд┐ рд▓рдЧ рд╕реЗрд╡рд╛ рддрд╛рд▓рд┐рдХрд╛
trap_oid - рдЬрд╛рд▓ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╕реЗрд╡рд╛ рддрд╛рд▓рд┐рдХрд╛

рдЪрд░рдг 1 - рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрдирдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЬрд╛рдирдХрд╛рд░реА рд╕рдЩреНрдХрд▓рди рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рд░рд┐рдкреЛрд░реНрдЯрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН

рддрдереНрдпрд╛рдЩреНрдХреАрдп рдЬрд╛рдирдХрд╛рд░реА рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ pg_stat_history
pg_stat_history рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛

                                          рддрд╛рд▓рд┐рдХрд╛ "public.pg_stat_history" рд╕реНрддрдореНрдн | рдкреНрд░рдХрд╛рд░ | рдкрд░рд┐рдорд╛рд░реНрдЬрдХрд╣рд░реВ---------+-------------------------------------- --------------------------------------------------------- рдЖрдИрдбреА | рдкреВрд░реНрдгрд╛рдВрдХ | рд╢реВрдиреНрдп рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд nextval('pg_stat_history_id_seq'::regclass) snapshot_timestamp | рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдмрд┐рдирд╛ рдЯрд╛рдЗрдорд╕реНрдЯреНрдпрд╛рдореНрдк | database_id | рдкреВрд░реНрдгрд╛рдВрдХ | dbid | oid | userid | oid | queryid | bigint | рдкреНрд░рд╢реНрди | рдкрд╛рда | рдХрд▓ | bigint | рдХреБрд▓_рд╕рдордп | рдбрдмрд▓ рд╕рдЯреАрдХ | min_time | рдбрдмрд▓ рд╕рдЯреАрдХ | рдЕрдзрд┐рдХрддрдо_рд╕рдордп | рдбрдмрд▓ рд╕рдЯреАрдХ | mean_time | рдбрдмрд▓ рд╕рдЯреАрдХ | stddev_time | рдбрдмрд▓ рд╕рдЯреАрдХ | рдкрдЩреНрдХреНрддрд┐рд╣рд░реВ | bigint | share_blks_hit | bigint | share_blks_read | bigint | share_blks_dirtied | bigint | share_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 | рдбрдмрд▓ рд╕рдЯреАрдХ | baseline_id | рдкреВрд░реНрдгрд╛рдВрдХ | рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛: "pg_stat_history_pkey" PRIMARY KEY, btree (id) "database_idx" btree (database_id) "queryid_idx" btree (queryid) "snapshot_timestamp_idx" btree (snapshot_timestamp) "Foreign-key: Etabase_KYFRED_KDASEKEY" рд╡рд┐рджреЗрд╢реА рдХреБрдЮреНрдЬреА рдЖрдИрдбреА) рд╕рдиреНрджрд░реНрдн рдбрд╛рдЯрд╛рдмреЗрд╕ (рдЖрдИрдбреА ) DELETE CASCADE рдорд╛

рддрдкрд╛рдИрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рддрд╛рд▓рд┐рдХрд╛ рдХреЗрд╡рд▓ рд╕рдВрдЪрдпреА рджреГрд╢реНрдп рдбреЗрдЯрд╛ рд╣реЛ 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 ;

DB рд╕рдордп

to_char(рдЕрдиреНрддрд░рд╛рд▓ 'рез рдорд┐рд▓рд┐рд╕реЗрдХреЗрдиреНрдб' * pg_total_stat_history_rec.total_time, 'HH1:MI:SS.MS')

I/O рд╕рдордп

to_char(рдЕрдиреНрддрд░рд╛рд▓ 'рез рдорд┐рд▓рд┐рд╕реЗрдХреЗрдиреНрдб' * ( pg_total_stat_history_rec.blk_read_time + pg_total_stat_history_rec.blk_write_time ), 'HH1: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
-------------------------------------------------- ----------------------------------- | рдХреБрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдордп рджреНрд╡рд╛рд░рд╛ TOP10 SQL | #| queryid | рдХрд▓ | рдХрд▓ % | рдХреБрд▓_рд╕рдордп (ms) | dbtime % +---------++------------+------------+------------+ ------ ------------------------------ +------------ | рез| реореирезренремрежреирелрел| реи| .1|821760255:2:00001( 00 ms.)| рел.рекреи | реи| рекрезрелреиремреирекрейрепреж| реи| .режрежрежрежрез|режреж:режрей:резрей.репреиреп(резрепрейрепреиреп.реирезрел рдорд┐рд╕реЗред)| рел.резрен | рей| резрекреорекрекрелрекрекренрез| рек| .режрежрежрежрез|режреж:режреи:режреп.резреиреп(резреирепрезреиреп.режрелрен рдорд┐рд╕реЗред)| рей.рекрек | рек| 03 | рез| .23.141|203141.681:5.42:2( 4152624390 ms рей.реирел | рел| реирекремрежрейрезреорекремрез| рез| .2|00001:00:03(13.929 msред)| реи.рекрео | рем| 193929.215 | рек| .5.17|3:1484454471:4(00001 msред)| рекрем | рен| резрежрелрейрежрекрекрейрекрел| рез| .00|02:09.129:129129.057( 3.44 msред) .4 | рео| рейремрекрекренреорежреиреорем| рез| .655729273|1:00000:00( 02 msред) режрей

рдХреБрд▓ 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 рд╕рдордп рджреНрд╡рд╛рд░рд╛ TOP10 SQL | #| queryid | рдХрд▓ | рдХрд▓ % | I/O рд╕рдордп (ms)|db I/O рд╕рдордп % +------+------------+----------+------ ------------------------- +------------------------- --------- | рез| рекрезрелреиремреирекрейрепреж| реи| .1|4152624390:2:00001( 00 msред)| рейрез.режрем | реи| реореирезренремрежреирелрел| реи| .08|31.616:511616.592:31.06( 2 msред)| рейреж.ренрео | рей| 821760255 | рез| .2|00001:00:08( 27.099 ms резрео.рейрел | рек| реирекремрежрейрезреорекремрез| рез| .507099.036|30.78:3:655729273( 1 ms резрек.репрей | рел| резрекреорекрекрелрекрекренрез| рек| .00000|00:05:02.209(302209.137 msред)| реи.рейрео | рем| 18.35 | рек| .4|2460318461:1:00000(00 msред)| рез.резреж | рен | резрежрелрейрежрекрекрейрекрел| рез| .04|05.981:245981.117:14.93( 5 ms рез.режрез | рео| рейремрекрекренреорежреиреорем| рез| .1484454471|4:00001:00(00 ms.)| режрей

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

------------------------------------------------------------------ -------------------------------------------------- | рдЕрдзрд┐рдХрддрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдордп рджреНрд╡рд╛рд░рд╛ TOP10 SQL | #| рд╕реНрдиреНрдпрд╛рдкрд╕рдЯ | рд╕реНрдиреНрдпрд╛рдкрд╕рдЯрдЖрдИрдбреА| queryid | рдЕрдзрд┐рдХрддрдо_рд╕рдордп (ms) +------+------+------------+--------- --+--------------------------------------------------- | рез| режрек/режрел/реирежрезреп режрез:режрей | рекрезремреп | 1 | режреж:режреи:режрез.реоремреп (резреирезреоремреп.репреорез рдорд┐рд╕реЗред) | реи| 05.04.2019/01/03 4169:655729273 | рекрезрелрей | реореирезренремрежреирелрел| 00:02:01.869 (121869.981 msред) | рей| режрек/режрек/реирежрезреп резрем:режреж| рекрезрекрем | реореирезренремрежреирелрел| 2:04.04.2019:17 (00 msред) | рек| режрек/режрек/реирежрезреп резрем:режреж| рекрезрекрек| рекрезрелреиремреирекрейрепреж| 4153:821760255:00(01 msред) | рел| 41.570/101570.841/3 04.04.2019:16 | рекрезрелрез | рекрезрелреиремреирекрейрепреж| 00:4146:821760255(00 msред) | рем| 01/41.570/101570.841 4:04.04.2019 | рекрезреорео | резрекреорекрекрелрекрекренрез| 16:00:4144 (4152624390 msред) | рен| 00/01/36.964 96964.607:5 | рекрезрелреж| реирекремрежрейрезреорекремрез| 04.04.2019:17:00(4151 msред) | рео| режрек/режрек/реирежрезреп резрел:режреж | рекрезрекреж | резрекреорекрекрелрекрекренрез| 4152624390:00:01 (36.964 msред) | реп| режрек/режрек/реирежрезреп резрем:режреж| рекрезрекрел | резрекреорекрекрелрекрекренрез| 96964.607:6:05.04.2019 (10 msред) | резреж| 00/4188/1484454471 00:01 | рекрезрелреи | резрекреорекрекрелрекрекренрез| 33.452:93452.150:7 (04.04.2019 msред)

SHARED рдмрдлрд░ рджреНрд╡рд╛рд░рд╛ 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 | релреиреорезрей | реж -------------------------------------------------- --------------------------------------------------------

рдЕрдзрд┐рдХрддрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдордп рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рд╡рд┐рддрд░рдг рдХреЛ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо

рдЕрдиреБрд░реЛрдзрд╣рд░реВ

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 msред) | реж | 00:01.063:1063.830 (00 msред) | 00:13.144:13144.445 (9 msред) | реж | 00:00:13.144 (13144.445 msред) | 00:00:25.225( 25225.060 msред) | реж | 0:00:00( 25.225 msред) | 25225.060:00:00 ( 37.305 msред) | реж | 37305.675:0:00 ( 00 msред) | 37.305:37305.675:00 (00 msред) | реж | 49.386:49386.290:0 (00 msред) | 00:49.386:49386.290( 00 msред) | реж | 01:01.466:61466.906( 0 msред) | 00:01:01.466 (61466.906 msред) | рек | 00:01:13.547 (73547.521 msред) | 0:00:01 (13.547 msред) | реи | 73547.521:00:01 (25.628 msред) | режреж:режреи:режрез.реоремреп (резреирезреоремреп.репреорез рдорд┐рд╕реЗред) | реж

рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдиреНрдб рдХреНрд╡реЗрд░реА рджреНрд╡рд╛рд░рд╛ 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 msред)| резрелренрей.рейрепрем | 4161:5758631:00(06 msред)| рейренрем | реи| 30.513/390513.926/1573.396 00:00 | рекрезрекреп | 01.470 | 1470.110:376:2( 04.04.2019 msред)| 17 | 00:4149:3529197( 00 msред)| 11 | рей| режрек/режрек/реирежрезреп резрем:режреж| рекрезрекрей | 48.830| 708830.618:980.332:00( 12 msред)| репренреп.реиремрен | 47.834:767834.052:108.324(3 msред)| реорек.репреорео | рек| режрек/режрек/реирежрезреп реирез:режрей | рекрезремрей | реиренреорезрелрейрем| 04.04.2019:16:00( 4143 msред)| ренреорел.ренрекрел | 3525360:00:10 (13.492 msред) | резрейрек | рел| 613492.351 979.267:00 | рекрезрелреп | реиреорепрежрейремреи| 08:41.396:521396.555 (84.988 msред)| ренренрем.репренреп | 4:04.04.2019:21 (03 msред)| ренрейреи | рем| 4163/2781536/00 03:06.470 | рекрезрейрен | реирейрепренрейреирем| 186470.979:785.745:00(00 msред)| ремремрел.репреирек | 00.249:249.865:134(5 ms.) | .режрежреп | рен| режрек/режрек/реирежрезреп резрел:режреж | рекрезрейреп | реирейрепрекрекрезрем| 04.04.2019:19:03( 4159 msред)| ремремрел.резрезрем| 2890362:00:03(16.784 msред)| рек.резреирем | рео| 196784.755 776.979:00 | рекрезрейрел | реирейренрейрежрекрей| 00:01.441:1441.386( 732 msред)| ремрелреп.резренреп | режреж:режреж:режреж.режремрек(ремрек.реиремрез рдорд┐рд╕реЗред) | режреирек | реп| режрек/режрел/реирежрезреп режрез:режрей | рекрезремрен | рекрейреоренрезрепрез | 6:04.04.2019:14( 00 msред)| ремрежреп.рейрейреи | 4137:2397326:00(04 msред)| 43.033 | резреж| 283033.854/665.924/00 00:00.024 | рекрезрелрен | резрезрекрелрелрепрем| 24.505:009:7( 04.04.2019 msред)| рейрезрей.режрежрек | 15:00:4139( 2394416 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди