рдЗрдиреНрдЬрд┐рдирд┐рдпрд░ - рд▓реНрдпрд╛рдЯрд┐рдирдмрд╛рдЯ рдЕрдиреБрд╡рд╛рджрд┐рдд - рдкреНрд░реЗрд░рд┐рддред
рдЗрдиреНрдЬрд┐рдирд┐рдпрд░рд▓реЗ рдЬреЗ рдкрдирд┐ рдЧрд░реНрди рд╕рдХреНрдЫред (c) рдЖрд░ рдбрд┐рдЬреЗрд▓
рдПрдкрд┐рдЧреНрд░рд╛рдлрд╣рд░реВред
рд╡рд╛ рдбрд╛рдЯрд╛рдмреЗрд╕ рдкреНрд░рдмрдиреНрдзрдХрд▓реЗ рдЖрдлреНрдиреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рд╡рд┐рдЧрддрд▓рд╛рдИ рдХрд┐рди рд╕рдореНрдЭрдиреБ рдкрд░реНрдЫ рднрдиреНрдиреЗ рдмрд╛рд░реЗрдорд╛ рдПрдЙрдЯрд╛ рдХрдерд╛ред
Foreword
рд╕рдмреИрдХреЛ рдирд╛рдо рдкрд░рд┐рд╡рд░реНрддрди рднрдПрдХреЛ рдЫред рд╕рдВрдпреЛрдЧрд╣рд░реВ рдЕрдирд┐рдпрдорд┐рдд рдЫрдиреНред рд╕рд╛рдордЧреНрд░реА рд▓реЗрдЦрдХрдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд┐рдЪрд╛рд░ рдорд╛рддреНрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрджрдЫред
рд╡рд╛рд░реЗрдиреНрдЯреА рдХреЛ рдЕрд╕реНрд╡реАрдХрд░рдг: рд▓реЗрдЦрд╣рд░реВрдХреЛ рдпреЛрдЬрдирд╛рдмрджреНрдз рд╢реГрдЩреНрдЦрд▓рд╛рд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХрд╛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рд░ рд▓рд┐рдкрд┐рд╣рд░реВрдХреЛ рд╡рд┐рд╕реНрддреГрдд рд░ рд╕рд╣реА рд╡рд┐рд╡рд░рдг рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджреИрдиред рд╕рд╛рдордЧреНрд░реА рддреБрд░реБрдиреНрддреИ "рдЬрд╕реНрддреИ рдЫ" рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрдиред
рдкрд╣рд┐рд▓реЛ, рд╕рд╛рдордЧреНрд░реА рдХреЛ рдареВрд▓реЛ рдорд╛рддреНрд░рд╛ рдХреЛ рдХрд╛рд░рдг,
рджреЛрд╕реНрд░реЛ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреНрд░рд╛рд╣рдХрдХреЛ рдЙрддреНрдкрд╛рджрди рдЖрдзрд╛рд░рд╕рдБрдЧ рдирдЬрд┐рдХрдХреЛ рд╕рдореНрдмрдиреНрдзрдХреЛ рдХрд╛рд░рдгред
рддрд╕рд░реНрде, рд▓реЗрдЦрд╣рд░реВрдорд╛ рдХреЗрд╡рд▓ рд╡рд┐рдЪрд╛рд░рд╣рд░реВ рд░ рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдорд╛рддреНрд░ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреЗрдЫрдиреНред
рд╣реБрдирд╕рдХреНрдЫ рднрд╡рд┐рд╖реНрдпрдорд╛ рдкреНрд░рдгрд╛рд▓реА GitHub рдорд╛ рдкреЛрд╖реНрдЯ рд╣реБрдиреЗ рд╕реНрддрд░рдорд╛ рдмрдвреНрдиреЗрдЫ, рд╡рд╛ рд╣реБрди рд╕рдХреНрдЫред рд╕рдордпрд▓реЗ рджреЗрдЦрд╛рдЙрдиреЗрдЫред
рдХрдерд╛рдХреЛ рд╢реБрд░реБрд╡рд╛рдд - "
рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛ рдХреЗ рднрдпреЛ, рд╕рдмреИрднрдиреНрджрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕рд░реНрддрд╣рд░реВрдорд╛ - "
рдорд▓рд╛рдИ рдпреЛ рд╕рдмреИ рдХрд┐рди рдЪрд╛рд╣рд┐рдиреНрдЫ?
рдареАрдХ рдЫ, рдкрд╣рд┐рд▓реЗ, рддрд╛рдХрд┐ рдмрд┐рд░реНрд╕рдиреБ рд╣реБрдБрджреИрди, рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрддрд┐рдХреЛ рдЧреМрд░рд╡рд╢рд╛рд▓реА рджрд┐рдирд╣рд░реВ рд╕рдореНрдЭрдБрджреИред
рджреЛрд╕реНрд░реЛ, рдХреЗ рд▓реЗрдЦрд┐рдПрдХреЛ рдерд┐рдпреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрдиред рдХрд┐рдирднрдиреЗ рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рдо рдЕрд▓рдорд▓рдорд╛ рдкрд░реНрди рдерд╛рд▓реНрдЫреБ рд░ рдХреЗрд╣рд┐ рднрд╛рдЧрд╣рд░реВ рдмрд┐рд░реНрд╕рдиреНрдЫреБред
рдареАрдХ рдЫ, рд░ рд╕рдмреИрднрдиреНрджрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдХреБрд░рд╛, рд╕рд╛рдпрдж рдпреЛ рдХрд╕реИрдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧреА рд╣реБрдиреЗрдЫ рд░ рд╡реНрд╣реАрд▓ рдкреБрди: рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдЧрд░реНрди рд░ рд░реЗрдХ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрди рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫред рдЕрд░реНрдХреЛ рд╢рдмреНрджрдорд╛, рдЖрдлреНрдиреЛ рдХрд░реНрдо рд╕реБрдзрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдЦрдмреНрд░реЛрднрдХреЛ рд╣реЛрдЗрди)ред рдХрд┐рдирднрдиреЗ рдпреЛ рд╕рдВрд╕рд╛рд░рдорд╛ рд╕рдмреИрднрдиреНрджрд╛ рдореВрд▓реНрдпрд╡рд╛рди рдЪреАрдЬ рд╡рд┐рдЪрд╛рд░ рд╣реЛред рдореБрдЦреНрдп рдХреБрд░рд╛ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдЦреЛрдЬреНрди рдЫред рддрд░ рд╡рд┐рдЪрд╛рд░рд▓рд╛рдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рдорд╛ рдкрд░рд┐рдгрдд рдЧрд░реНрдиреБ рд╡рд┐рд╢реБрджреНрдз рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рдкреНрд░рд╢реНрди рд╣реЛред
рддреНрдпрд╕реЛрднрдП, рдмрд┐рд╕реНрддрд╛рд░реИ рд╕реБрд░реБ рдЧрд░реМрдВ ...
рд╕рдорд╕реНрдпрд╛рдХреЛ рд╕реВрддреНрд░реАрдХрд░рдгред
рдЙрдкрд▓рдмреНрдз:
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? рддрдкрд╛рдИрдХреЛ рдкреНрд░рд╢реНрди рдзреЗрд░реИ рд╕рд╛рдиреНрджрд░реНрднрд┐рдХ рдЫред (рд╕рд╛рде)
рдпреЛ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдорд╛, рддрдкрд╛рдИрдВ рдпрд╕рд▓рд╛рдИ рдЕрд▓рд┐ рдлрд░рдХ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ - рдЖрдлреНрдиреИ рдЕрдиреБрдЧрдорди рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдФрдВред
рдареАрдХ рдЫ, рдкреНрд░рдгрд╛рд▓реА рд╣реЛрдЗрди, рдкрдХреНрдХреИ рдкрдирд┐, рд╢рдмреНрджрдХреЛ рдкреВрд░реНрдг рдЕрд░реНрдердорд╛, рддреНрдпреЛ рдзреЗрд░реИ рдЪрд░реНрдХреЛ рд░ рдЕрднрд┐рдорд╛рдирдкреВрд░реНрдг рдЫ, рддрд░ рдХрдореНрддрд┐рдорд╛ рдХреБрдиреИ рди рдХреБрдиреИ рд░реВрдкрдорд╛ рддрдкрд╛рдИрдВрдХреЛ рдХрд╛рд░реНрдпрд▓рд╛рдИ рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН рд░ рдкреНрд░рджрд░реНрд╢рди рдШрдЯрдирд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдердк рдЬрд╛рдирдХрд╛рд░реА рд╕рдЩреНрдХрд▓рди рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдЖрдлреВрд▓рд╛рдИ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдорд╛ рдирдкрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ - "рддреНрдпрд╣рд╛рдБ рдЬрд╛рдиреБрд╣реЛрд╕реН, рдорд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫреИрди рдХрд╣рд╛рдБ, рдХреЗрд╣рд┐ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреБрд╣реЛрд╕реН, рдорд▓рд╛рдИ рдХреЗ рдерд╛рд╣рд╛ рдЫреИрдиред"
рдпреЛ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд▓рд╛рдн рд░ рд╡рд┐рдкрдХреНрд╖ рдХреЗ рд╣реЛ:
рдкреНрд░реЛ:
1. рдпреЛ рд░реЛрдЪрдХ рдЫред рдард┐рдХ рдЫ, рдХрдореНрддрд┐рдорд╛ рдпреЛ рд╕реНрдерд┐рд░ "рдбреЗрдЯрд╛рдлрд╛рдЗрд▓ рд╕рдВрдХреБрдЪрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЯреЗрдмрд▓рд╕реНрдкреЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЗрддреНрдпрд╛рджрд┐" рднрдиреНрджрд╛ рдмрдвреА рд░реЛрдЪрдХ рдЫред
2. рдпреА рдирдпрд╛рдБ рд╕реАрдк рд░ рдирдпрд╛рдБ рд╡рд┐рдХрд╛рд╕ рд╣реБрдиреНред рдЬреБрди, рдврд┐рд▓реЛ рд╡рд╛ рдЪрд╛рдБрдбреЛ, рддрдкрд╛рдИрдВрд▓рд╛рдИ рд░рд╛рдореНрд░реЛ-рдпреЛрдЧреНрдп рдЬрд┐рдВрдЬрд░рдмреНрд░реЗрдб рд░ рдбреЛрдирдЯреНрд╕ рджрд┐рдиреЗрдЫред
Cons:
1. рддрдкрд╛рдИрдВрд▓реЗ рдХрд╛рдо рдЧрд░реНрдиреБрдкрд░реНрдиреЗрдЫред рдорд┐рд╣рд┐рдиреЗрдд рдЧрд░реНрдиреБред
2. рддрдкрд╛рдИрдВрд▓реЗ рдирд┐рдпрдорд┐рдд рд░реВрдкрдорд╛ рд╕рдмреИ рдЧрддрд┐рд╡рд┐рдзрд┐рд╣рд░реВрдХреЛ рдЕрд░реНрде рд░ рд╕рдореНрднрд╛рд╡рдирд╛рд╣рд░реВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрдиреБрдкрд░реНрдиреЗрдЫред
3. рдХреЗрд╣рд┐ рддреНрдпрд╛рдЧ рдЧрд░реНрдиреБрдкрд░реНрдиреЗрдЫ, рдХрд┐рдирдХрд┐ рдПрдХ рдЗрдиреНрдЬрд┐рдирд┐рдпрд░рдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрд▓рдмреНрдз рд╕реНрд░реЛрдд - рд╕рдордп - рдмреНрд░рд╣реНрдорд╛рдгреНрдб рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рдЫред
4. рд╕рдмреИрднрдиреНрджрд╛ рдЦрд░рд╛рдм рд░ рд╕рдмреИрднрдиреНрджрд╛ рдЕрдкреНрд░рд┐рдп рдХреБрд░рд╛ - рдкрд░рд┐рдгрд╛рдо "рдореБрд╕рд╛ рд╣реЛрдЗрди, рднреНрдпрд╛рдЧреБрддрд╛ рд╣реЛрдЗрди, рддрд░ рдПрдХ рдЕрдЬреНрдЮрд╛рдд рдЬрдирд╛рд╡рд░" рдЬрд╕реНрддреЛ рдмрдХрд╡рд╛рд╕ рд╣реБрди рд╕рдХреНрдЫред
рдЬреЛрдЦрд┐рдо рдирд▓рд┐рдиреЗрд╣рд░реВрд▓реЗ рд╢реИрдореНрдкреЗрди рдкрд┐рдЙрдБрджреИрдирдиреНред
рддреНрдпрд╕реИрд▓реЗ - рдордЬрд╛ рд╕реБрд░реБ рд╣реБрдиреНрдЫред
рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ - рдпреЛрдЬрдирд╛рдмрджреНрдз
(рд▓реЗрдЦрдмрд╛рдЯ рд▓рд┐рдЗрдПрдХреЛ рджреГрд╖реНрдЯрд╛рдиреНрдд ┬л
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:
- рдорд╛рдирдХ PostgreSQL рд╡рд┐рд╕реНрддрд╛рд░ "pg_stat_statements" рд▓рдХреНрд╖реНрдп рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рд╕реНрдерд╛рдкрд┐рдд рдЫред
- рдЕрдиреБрдЧрдорди рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛, рд╣рд╛рдореА рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдЪрд░рдгрдорд╛ pg_stat_statements рдЗрддрд┐рд╣рд╛рд╕ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рд░ рднрд╡рд┐рд╖реНрдпрдорд╛ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗрдЯрдЕрдк рдЧрд░реНрди рд░ рдЕрдиреБрдЧрдорди рдЧрд░реНрди рд╕реЗрд╡рд╛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдХреЛ рд╕реЗрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВред
- рдЕрдиреБрдЧрдорди рд╣реЛрд╕реНрдЯрдорд╛, рд╣рд╛рдореА рдЯрд┐рдХрдЯ рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдШрдЯрдирд╛рд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдмреНрдпрд╛рд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрдХреЛ рд╕реЗрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВред
рд╕реЗрд╡рд╛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ
рдкрд╣рд┐рд▓реЛ, рдПрдХ рдпреЛрдЬрдирд╛рдмрджреНрдз рд╕рд░рд▓реАрдХреГрдд ERD, рдЕрдиреНрддрдорд╛ рдХреЗ рднрдпреЛ:
рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдгрдЕрдиреНрддрдмрд┐рдиреНрджреБ - рд╣реЛрд╕реНрдЯ, рдЙрджрд╛рд╣рд░рдгрдХреЛ рдЬрдбрд╛рдирдХреЛ рдмрд┐рдиреНрджреБ
рдбреЗрдЯрд╛рдмреЗрд╕ - рдбрд╛рдЯрд╛рдмреЗрд╕ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ
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 рд░реЗрдХрд░реНрдб рдЧрд░реНрдЫреМрдВ рднрдиреЗ, рд╣рд╛рдореАрд▓реЗ рдЫреБрдЯреНрдЯреИ рдХреНрд╡реЗрд░реАрдХреЛ рд▓рд╛рдЧрд┐ рдЗрддрд┐рд╣рд╛рд╕ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫреМрдВ (рд╕реНрдерд╛рди рдмрдЪрдд рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдЫреБрдЯреНрдЯреИ рдХреНрд╡реЗрд░реАрдХрд╛ рд▓рд╛рдЧрд┐ рд░рд┐рдкреЛрд░реНрдЯрд╣рд░реВ рд╣рдЯрд╛рдЗрдПрдХреЛ рдЫ)ред
рддреНрдпрд╕реЛрднрдП, рдХреНрд╡реЗрд░реА рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрдирдорд╛ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдбреЗрдЯрд╛ рдЙрдкрд▓рдмреНрдз рдЫ рд░ рд╕рдЩреНрдХрд▓рди рдЧрд░рд┐рдПрдХреЛ рдЫред
рдкрд╣рд┐рд▓реЛ рдЪрд░рдгрдХреЛ "рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рддрдереНрдпрд╛рдЩреНрдХ рд╕рдЩреНрдХрд▓рди" рд╕рдореНрдкрдиреНрди рднрдПрдХреЛ рдЫред
рддрдкрд╛рдИрдВ рджреЛрд╕реНрд░реЛ рдЪрд░рдгрдорд╛ рдЬрд╛рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ - "рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗрдЯрдЕрдк"ред
рддрд░ рддреНрдпреЛ рдПрдХрджрдо рднрд┐рдиреНрди рдХрдерд╛ рд╣реЛред
рдлреЗрд░рд┐ рдЬрд╛рд░реА рд░рд╛рдЦреМрдВрд▓рд╛тАж
рд╕реНрд░реЛрдд: www.habr.com