рдЗрдВрдЬреАрдирд┐рдпрд░ - рд▓реИрдЯрд┐рди рд╕реЗ рдЕрдиреБрд╡рд╛рджрд┐рдд - рдкреНрд░реЗрд░рд┐рддред
рдПрдХ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ. (рд╕реА) рдЖрд░. рдбреАрдЬрд▓.
рдкреБрд░рд╛рд▓реЗрдЦред

рдпрд╛ рдПрдХ рдХрд╣рд╛рдиреА рдХрд┐ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢рд╛рд╕рдХ рдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрддреАрдд рдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред
рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рд╕рд╛рд░реЗ рдирд╛рдо рдмрджрд▓ рджрд┐рдП рдЧрдП рд╣реИрдВ. рдорд┐рд▓рд╛рди рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реИрдВ. рд╕рд╛рдордЧреНрд░реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓реЗрдЦрдХ рдХреА рдирд┐рдЬреА рд░рд╛рдп рд╣реИред
рд╡рд╛рд░рдВрдЯрд┐рдпреЛрдВ рдХрд╛ рдЕрд╕реНрд╡реАрдХрд░рдг: рд▓реЗрдЦреЛрдВ рдХреА рдирд┐рдпреЛрдЬрд┐рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдФрд░ рд▓рд┐рдкрд┐рдпреЛрдВ рдХрд╛ рдХреЛрдИ рд╡рд┐рд╕реНрддреГрдд рдФрд░ рд╕рдЯреАрдХ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХрд╛ рддреБрд░рдВрдд "рдЬреИрд╕рд╛ рд╣реИ" рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рд╛рдордЧреНрд░реА рдХреА рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЗ рдХрд╛рд░рдг,
рджреВрд╕рд░реЗ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдЙрддреНрдкрд╛рджрди рдЖрдзрд╛рд░ рдХреЗ рд╕рд╛рде рддреАрдХреНрд╖реНрдгрддрд╛ рдХреЗ рдХрд╛рд░рдгред
рдЗрд╕рд▓рд┐рдП, рд▓реЗрдЦреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдФрд░ рд╡рд┐рд╡рд░рдг рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо GitHub рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд╕реНрддрд░ рддрдХ рдмрдврд╝ рдЬрд╛рдП, рдпрд╛ рд╢рд╛рдпрдж рдирд╣реАрдВред рд╕рдордп рджрд┐рдЦрд╛рдПрдЧрд╛ред
рдХрд╣рд╛рдиреА рдХреА рд╢реБрд░реБрдЖрдд-'.
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХреНрдпрд╛ рд╣реБрдЖ, рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ - "┬╗
рдореБрдЭреЗ рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ рдЪрд╛рд╣рд┐рдП?
рдареАрдХ рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрддрд┐ рдХреЗ рдЧреМрд░рд╡рд╢рд╛рд▓реА рджрд┐рдиреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реБрдП, рдЕрдкрдиреЗ рдЖрдк рдХреЛ рди рднреВрд▓реЗрдВред
рджреВрд╕рд░реЗ, рдЬреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдЙрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА, рдореИрдВ рдХрднреА-рдХрднреА рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рд▓рдЧрддрд╛ рд╣реВрдВ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реВрдВред
рдЦреИрд░, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд - рдЕрдЪрд╛рдирдХ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкрд╣рд┐рдпреЗ рдХреЛ рджреЛрдмрд╛рд░рд╛ рди рдмрдирд╛рдиреЗ рдФрд░ рд░реЗрдХ рдЗрдХрдЯреНрдард╛ рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЕрдкрдиреЗ рдХрд░реНрдо рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВ (рдЦрдмрд░реЛрд╡рд╕реНрдХреА рдирд╣реАрдВ)ред рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдореВрд▓реНрдпрд╡рд╛рди рдЪреАрдЬрд╝ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВред рдореБрдЦреНрдп рдмрд╛рдд рдПрдХ рд╡рд┐рдЪрд╛рд░ рдЦреЛрдЬрдирд╛ рд╣реИред рдФрд░ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╡рд┐рд╢реБрджреНрдз рддрдХрдиреАрдХреА рдореБрджреНрджрд╛ рд╣реИред
рддреЛ рдЪрд▓рд┐рдП рдзреАрд░реЗ-рдзреАрд░реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ...
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдирд┐рд░реВрдкрдг.
рдЙрдкрд▓рдмреНрдз:
PostgreSQL(10.5), рдорд┐рд╢реНрд░рд┐рдд рднрд╛рд░ (OLTP+DSS), рдордзреНрдпрдо рд╕реЗ рд╣рд▓реНрдХрд╛ рднрд╛рд░, AWS рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдХреЛрдИ рдбреЗрдЯрд╛рдмреЗрд╕ рдирд┐рдЧрд░рд╛рдиреА рдирд╣реАрдВ рд╣реИ, рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЛ рдиреНрдпреВрдирддрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдорд╛рдирдХ AWS рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВ, рднрд╛рд░реА рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдвреВрдВрдвреЗрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп рдпрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЗ рд▓рд┐рдП рд▓рд╛рднреЛрдВ рдФрд░ рдкрд░реЗрд╢рд╛рдирд┐рдпреЛрдВ рдХреЗ рддреБрд▓рдирд╛рддреНрдордХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдФрд░ рдЬрд┐рдиреНрд╣реЗрдВ рдХрд░реНрдордЪрд╛рд░реА рд╕реВрдЪреА рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд╛рдн рдФрд░ рд╣рд╛рдирд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рджреЗрдВред
рд╡рд┐рдХрд▓реНрдк 1 - "рдорд╛рдБрдЧ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛"
рд╣рдо рд╕рдм рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рд╡рд╣ рд╣реИред рдпрджрд┐ рдЧреНрд░рд╛рд╣рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп, рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡рд╣ рдбреАрдмреАрдП рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЛ рдИ-рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдпрд╛ рдЯрд┐рдХрдЯ рдмреЙрдХреНрд╕ рдореЗрдВ рдПрдХ рдШрдЯрдирд╛ рдмрдирд╛рдХрд░ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ред
рдПрдХ рдЗрдВрдЬреАрдирд┐рдпрд░, рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордЭреЗрдЧрд╛, рд╕рдорд╛рдзрд╛рди рдкреЗрд╢ рдХрд░реЗрдЧрд╛, рдпрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЯрд╛рд▓ рджреЗрдЧрд╛, рдпрд╣ рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рд╕рдм рдХреБрдЫ рдЕрдкрдиреЗ рдЖрдк рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╡реИрд╕реЗ рднреА, рд╕рдм рдХреБрдЫ рдЬрд▓реНрдж рд╣реА рднреБрд▓рд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЬрд┐рдВрдЬрд░рдмреНрд░реЗрдб рдФрд░ рдбреЛрдирдЯреНрд╕, рдЪреЛрдЯ рдФрд░ рдЙрднрд╛рд░рдЬрд┐рдВрдЬрд░рдмреНрд░реЗрдб рдФрд░ рдбреЛрдирдЯреНрд╕:
1. рдХрд░рдиреЗ рдХреЛ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд╣реАрдВ
2. рд╣рдореЗрд╢рд╛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдФрд░ рдЧрдВрджрд╛ рд╣реЛрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рддрд╛ рд╣реИред
3. рдмрд╣реБрдд рд╕рд╛ рд╕рдордп рдЬреЛ рдЖрдк рд╕реНрд╡рдпрдВ рдкрд░ рд╡реНрдпрддреАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЪреЛрдЯ рдФрд░ рдЙрднрд╛рд░:
1. рджреЗрд░-рд╕рдмреЗрд░, рдЧреНрд░рд╛рд╣рдХ рдЗрд╕ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рд╕рд╛рд░ рдФрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдиреНрдпрд╛рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдЧрд╛ рдФрд░ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдЦреБрдж рд╕реЗ рд╕рд╡рд╛рд▓ рдкреВрдЫреЗрдЧрд╛ - рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдкреИрд╕реЗ рдХреНрдпреЛрдВ рджреЗ рд░рд╣рд╛ рд╣реВрдВ? рдкрд░рд┐рдгрд╛рдо рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рд╣реЛрддрд╛ рд╣реИ - рдПрдХрдорд╛рддреНрд░ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдХрдм рдКрдм рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрд▓рд╡рд┐рджрд╛ рдХрд╣ рджреЗрддрд╛ рд╣реИред рдФрд░ рдлреАрдбрд░ рдЦрд╛рд▓реА рд╣реИ. рдпрд╣ рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИред
2. рдПрдХ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╢реВрдиреНрдп рд╣реЛрддрд╛ рд╣реИ.
3. рдХрд╛рд░реНрдп рд╢реЗрдбреНрдпреВрд▓ рдХрд░рдиреЗ рдФрд░ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдЗрдпрд╛рдБ
рд╡рд┐рдХрд▓реНрдк 2 - "рдбрдл рдХреЗ рд╕рд╛рде рдиреГрддреНрдп рдХрд░реЗрдВ, рдЬреВрддреЗ рдкрд╣рдиреЗрдВ рдФрд░ рдкрд╣рдиреЗрдВ"
рдкрд░рд┐рдЪреНрдЫреЗрдж 1-рд╣рдореЗрдВ рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рд╣рдо рд╕рднреА рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рд╣рдо рдбреЗрдЯрд╛ рд╢рдмреНрджрдХреЛрд╢ рдФрд░ рдЧрддрд┐рд╢реАрд▓ рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдХреНрд╡реЗрд░реАрдЬрд╝ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВ, рд╕рдордп-рд╕рдордп рдкрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдФрд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реБрдВрджрд░ рдпрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдЧреНрд░рд╛рдлрд╝, рддрд╛рд▓рд┐рдХрд╛рдПрдБ, рд░рд┐рдкреЛрд░реНрдЯреЗрдВ рдирд╣реАрдВ рд╣реИрдВред рдореБрдЦреНрдп рдмрд╛рдд - рд╡рд╣ рдЕрдзрд┐рдХ, рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛.
рдкрд░рд┐рдЪреНрдЫреЗрдж 2-рдЧрддрд┐рд╡рд┐рдзрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ-рдЗрд╕ рд╕рдмрдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЪрд▓рд╛рдПрдБред
рдкрд░рд┐рдЪреНрдЫреЗрдж 3-рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рддреИрдпрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ - "рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдХреИрд╕реЗ рд╕реБрд╕рдЬреНрдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред"
рдкрд░рд┐рдЪреНрдЫреЗрдж 4- рдЧреНрд░рд╛рд╣рдХ, рдЧреНрд░рд╛рдлрд╝ рдФрд░ рдЖрдВрдХрдбрд╝реЛрдВ рдХреА рдпрд╣ рд╕рд╛рд░реА рднрд╡реНрдпрддрд╛ рджреЗрдЦрдХрд░, рдПрдХ рдмрдЪрдХрд╛рдиреЗ рднреЛрд▓реЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдореЗрдВ рд╣реИ - рдЕрдм рд╕рдм рдХреБрдЫ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЬрд▓реНрдж рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдФрд░, рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рджрд░реНрдж рд░рд╣рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЕрдкрдиреЗ рд╡рд┐рддреНрддреАрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдкреНрд░рдмрдВрдзрди рдХреЛ рднреА рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЕрдзрд┐рдХрддрдо рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ.
рдкрд░рд┐рдЪреНрдЫреЗрдж 5- рдЪрд░рдг 1 рдХреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рджреЛрд╣рд░рд╛рдПрдБред
рдЬрд┐рдВрдЬрд░рдмреНрд░реЗрдб рдФрд░ рдбреЛрдирдЯреНрд╕, рдЪреЛрдЯ рдФрд░ рдЙрднрд╛рд░рдЬрд┐рдВрдЬрд░рдмреНрд░реЗрдб рдФрд░ рдбреЛрдирдЯреНрд╕:
1. рдкреНрд░рдмрдВрдзрдХреЛрдВ рдФрд░ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХрд╛ рдЬреАрд╡рди рд╕рд░рд▓, рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдирд┐рдд рдФрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реЗ рднрд░рд╛ рд╣реЛрддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдЧреБрд▓рдЬрд╛рд░ рд╣реИ, рд╣рд░ рдХреЛрдИ рд╡реНрдпрд╕реНрдд рд╣реИред
2. рдЧреНрд░рд╛рд╣рдХ рдХрд╛ рдЬреАрд╡рди рднреА рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ - рдЙрд╕реЗ рд╣рдореЗрд╢рд╛ рдпрдХреАрди рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рдзреИрд░реНрдп рд░рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдареАрдХ рд╣реИ, рдареАрдХ рд╣реИ - рдпрд╣ рджреБрдирд┐рдпрд╛ рдЕрдиреБрдЪрд┐рдд рд╣реИ, рдЕрдЧрд▓реЗ рдЬреАрд╡рди рдореЗрдВ - рдЖрдк рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реЛрдВрдЧреЗред
рдЪреЛрдЯ рдФрд░ рдЙрднрд╛рд░:
1. рджреЗрд░-рд╕рдмреЗрд░, рдРрд╕реА рд╣реА рд╕реЗрд╡рд╛ рдХрд╛ рдПрдХ рд╣реЛрд╢рд┐рдпрд╛рд░ рдкреНрд░рджрд╛рддрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╡рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рд╕рд╕реНрддрд╛ред рдФрд░ рдпрджрд┐ рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реИ, рддреЛ рдЕрдзрд┐рдХ рднреБрдЧрддрд╛рди рдХреНрдпреЛрдВ рдХрд░реЗрдВред рдЬрд┐рд╕рд╕реЗ рдлрд┐рд░ рд╕реЗ рдлреАрдбрд░ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
2. рдпрд╣ рдЙрдмрд╛рдК рд╣реИ. рдХреЛрдИ рднреА рдЫреЛрдЯреА рд╕рд╛рд░реНрдердХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд┐рддрдиреА рдЙрдмрд╛рдК рд╣реИред
3. рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддрд░рд╣ - рдХреЛрдИ рд╡рд┐рдХрд╛рд╕ рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдПрдХ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЗ рд▓рд┐рдП рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐, рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдПрдХ рдЖрдИрдбреАрдмреА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдФрд░ рдЗрд╕рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ. рдЬрд┐рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░рд┐рдпрдЬрди рдХреА рднрд▓рд╛рдИ рдХреЗ рд▓рд┐рдП рдЦрд░реНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЕрдкрдирд╛ рдЦреНрдпрд╛рд▓ рдирд╣реАрдВ рд░рдЦ рд╕рдХрддреЗ, рд╣рд░ рдХреЛрдИ рдЖрдкрдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИред
рд╡рд┐рдХрд▓реНрдк 3-рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕реЗ рдЦрд░реАрджрдиреЗ рдФрд░ рдЗрд╕рдХреА рд╕рд╡рд╛рд░реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдиреНрдп рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЗ рдЗрдВрдЬреАрдирд┐рдпрд░ рдЬрд╛рдирдмреВрдЭрдХрд░ рдмреАрдпрд░ рдХреЗ рд╕рд╛рде рдкрд┐рдЬрд╝реНрдЬрд╝рд╛ рдЦрд╛рддреЗ рд╣реИрдВ (рдУрд╣, 90 рдХреЗ рджрд╢рдХ рдореЗрдВ рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдХрд╛ рдЧреМрд░рд╡рд╢рд╛рд▓реА рд╕рдордп)ред рдЖрдЗрдП рдЙрди рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ, рдбрд┐рдмрдЧ рдХреА рдЧрдИ рд╣реИрдВ рдФрд░ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИрдВ, рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдХрд╣реЗрдВ рддреЛ, рд╡реЗ рд▓рд╛рдн рд▓рд╛рддреА рд╣реИрдВ (рдареАрдХ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЙрдирдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП)ред
рдЬрд┐рдВрдЬрд░рдмреНрд░реЗрдб рдФрд░ рдбреЛрдирдЯреНрд╕, рдЪреЛрдЯ рдФрд░ рдЙрднрд╛рд░рдЬрд┐рдВрдЬрд░рдмреНрд░реЗрдб рдФрд░ рдбреЛрдирдЯреНрд╕:
1. рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЛ рдФрд░ рдкреНрд░рдпреЛрдЧ рдХрд░реЛ.
2. рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореВрд░реНрдЦреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡реЗ рдЙрдкрдпреЛрдЧреА рд╣реИрдВред
3. рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓рд┐рдпрд╛рдБ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧреА рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред
рдЪреЛрдЯ рдФрд░ рдЙрднрд╛рд░:
1. рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрдВрдЬреАрдирд┐рдпрд░, рдЗрдВрдЬреАрдирд┐рдпрд░ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рд┐рд░реНрдл рдХрд┐рд╕реА рдФрд░ рдХреЗ рдЙрддреНрдкрд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИред
2. рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдХреБрдЫ рдРрд╕реА рдЪреАрдЬрд╝ рдЦрд░реАрджрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рд╡рд╣ рдЖрдо рддреМрд░ рдкрд░ рд╕рдордЭрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рд╡рд░реНрд╖ рдХреЗ рд▓рд┐рдП рдмрдЬрдЯ рд╕реНрд╡реАрдХреГрдд рд╣реЛ рдЪреБрдХрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рд╕рдВрд╕рд╛рдзрди рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ, рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡реЗред рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХрдВрдЬреВрд╕ рд╣реИ. рдпрд╣реА рдЗрд╕ рдЬреАрд╡рди рдХрд╛ рдЖрджрд░реНрд╢ рд╣реИ.
рдХреНрдпрд╛ рдХрд░реЗрдВ, рдЪреЗрд░реНрдирд╢реЗрд╡реНрд╕реНрдХреА? рдЖрдкрдХрд╛ рдкреНрд░рд╢реНрди рдмрд╣реБрдд рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ. (рд╕рд╛рде)
рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЖрдЗрдП рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдПрдВред

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

(рд▓реЗрдЦ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдЪрд┐рддреНрд░рдг ┬л")
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:
- рд▓рдХреНрд╖реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдорд╛рдирдХ PostgreSQL рдПрдХреНрд╕рдЯреЗрдВрд╢рди "pg_stat_statements" рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ, рд╣рдо рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ pg_stat_statements рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред
- рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╣реЛрд╕реНрдЯ рдкрд░, рд╣рдо рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЯрд┐рдХрдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдШрдЯрдирд╛рдПрдВ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рд╕реЗрд╡рд╛ рддрд╛рд▓рд┐рдХрд╛рдПрдБ
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдк рд╕реЗ рд╕рд░рд▓реАрдХреГрдд рдИрдЖрд░рдбреА, рдЕрдВрдд рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖ:

рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдгрд╕рдорд╛рдкрди рдмрд┐рдВрджреБ - рд╣реЛрд╕реНрдЯ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБ
рдбреЗрдЯрд╛рдмреЗрд╕ - рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд┐рдХрд▓реНрдк
pg_stat_рдЗрддрд┐рд╣рд╛рд╕ - рд▓рдХреНрд╖реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ pg_stat_statements рджреГрд╢реНрдп рдХреЗ рдЕрд╕реНрдерд╛рдпреА рд╕реНрдиреИрдкрд╢реЙрдЯ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рддрд╛рд▓рд┐рдХрд╛
рдореАрдЯреНрд░рд┐рдХ_рд╢рдмреНрджрд╛рд╡рд▓реА - рдкреНрд░рджрд░реНрд╢рди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рд╢рдмреНрджрдХреЛрд╢
metric_config - рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕
рдореАрдЯреНрд░рд┐рдХ - рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореАрдЯреНрд░рд┐рдХ рдЬрд┐рд╕рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ
рдореЗрдЯреНрд░рд┐рдХ_рдЕрд▓рд░реНрдЯ_рдЗрддрд┐рд╣рд╛рд╕ - рдкреНрд░рджрд░реНрд╢рди рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕
рд▓реЙрдЧ_рдХреНрд╡реЗрд░реА - AWS рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ PostgreSQL рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдб рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рддрд╛рд▓рд┐рдХрд╛
рдЖрдзрд╛рд░рднреВрдд - рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдордп рдЕрд╡рдзрд┐ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░
рдЬрд╛рдВрдЪ рдХреА рдЪреМрдХреА - рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕
рдЪреЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ_рдЕрд▓рд░реНрдЯ_рдЗрддрд┐рд╣рд╛рд╕ - рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдерд┐рддрд┐ рдЬрд╛рдВрдЪ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЪреЗрддрд╛рд╡рдиреА рдЗрддрд┐рд╣рд╛рд╕
pg_stat_db_queries - рд╕рдХреНрд░рд┐рдп рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕реЗрд╡рд╛ рддрд╛рд▓рд┐рдХрд╛
рдЧрддрд┐рд╡рд┐рдзрд┐ рд▓реЙрдЧ - рдЧрддрд┐рд╡рд┐рдзрд┐ рд▓реЙрдЧ рд╕реЗрд╡рд╛ рддрд╛рд▓рд┐рдХрд╛
рдЯреНрд░реИрдк_реЙрдЗрдб - рдЯреНрд░реИрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрд╡рд╛ рддрд╛рд▓рд┐рдХрд╛
рдЪрд░рдг 1 - рдкреНрд░рджрд░реНрд╢рди рдЖрдБрдХрдбрд╝реЗ рдПрдХрддреНрд░ рдХрд░реЗрдВ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред pg_stat_рдЗрддрд┐рд╣рд╛рд╕
pg_stat_history рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛
рддрд╛рд▓рд┐рдХрд╛ "public.pg_stat_history" рдХреЙрд▓рдо | рдкреНрд░рдХрд╛рд░ | рд╕рдВрд╢реЛрдзрдХ ------------------+--------------------------------+---------------------------------------------------------------- рдЖрдИрдбреА | рдкреВрд░реНрдгрд╛рдВрдХ | рд╢реВрдиреНрдп рдирд╣реАрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдЧрд▓рд╛рд╡рд▓('pg_stat_history_id_seq'::regclass) рд╕реНрдиреИрдкрд╢реЙрдЯ_рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк | рдЯрд╛рдЗрдордЬрд╝реЛрди рдХреЗ рдмрд┐рдирд╛ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк | рдбреЗрдЯрд╛рдмреЗрд╕_рдЖрдИрдбреА | рдкреВрд░реНрдгрд╛рдВрдХ | рдбреАрдмреАрдЖрдИрдбреА тАЛтАЛ| рдУрдЗрдб | рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА | рдУрдЗрдб | рдХреНрд╡реЗрд░реАрдЖрдИрдбреА тАЛтАЛ| рдмрд┐рдЧрд┐рдВрдЯ | рдкреНрд░рд╢реНрди | рдкрд╛рда | рдХреЙрд▓ | рдмрд┐рдЧрд┐рдВрдЯ | рдХреБрд▓_рд╕рдордп | рджреЛрд╣рд░реА рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ | рдорд┐рдирдЯ_рд╕рдордп | рджреЛрд╣рд░реА рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ | рдЕрдзрд┐рдХрддрдо_рд╕рдордп | рджреЛрд╣рд░реА рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ | рдорд╛рдзреНрдп_рд╕рдордп | рджреЛрд╣рд░реА рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ | stddev_time | рджреЛрд╣рд░реА рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ | рдкрдВрдХреНрддрд┐рдпрд╛рдБ | рдмрд┐рдЧрд┐рдВрдЯ | рд╢реЗрдпрд░реНрдб_рдмреНрд▓рдХреНрд╕_рд╣рд┐рдЯ | рдмрд┐рдЧрд┐рдВрдЯ | share_blks_read | рдмрд┐рдЧрд┐рдВрдЯ | share_blks_dirtied | рдмрд┐рдЧрд┐рдВрдЯ | рд╕рд╛рдЭрд╛_рдмреНрд▓рдХреНрд╕_рд▓рд┐рдЦрд┐рдд | рдмрд┐рдЧрд┐рдВрдЯ | рд▓реЛрдХрд▓_рдмреНрд▓рдХреНрд╕_рд╣рд┐рдЯ | рдмрд┐рдЧрд┐рдВрдЯ | local_blks_read | рдмрд┐рдЧрд┐рдВрдЯ | local_blks_dirtied | рдмрд┐рдЧрд┐рдВрдЯ | рд╕реНрдерд╛рдиреАрдп_рдмреНрд▓рдХреНрд╕_рд▓рд┐рдЦрд┐рдд | рдмрд┐рдЧрд┐рдВрдЯ | temp_blks_read | рдмрд┐рдЧрд┐рдВрдЯ | temp_blks_рд▓рд┐рдЦрд┐рдд | рдмрд┐рдЧрд┐рдВрдЯ | blk_read_time | рджреЛрд╣рд░реА рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ | blk_write_time | рджреЛрд╣рд░реА рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ | рдмреЗрд╕рд▓рд╛рдЗрди_рдЖрдИрдбреА | рдкреВрд░реНрдгрд╛рдВрдХ | рд╕реВрдЪрдХрд╛рдВрдХ: "pg_stat_history_pkey" рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА, Btree (id) "Database_idx" BTREE (DATABASE_ID) "Queryid_idx" BTREE (QUERYID) "SNAPSHOT_TIMESTAMP_IDX" BTREE (SNAPSHOTRE (SNAPSH _timestamp) рд╡рд┐рджреЗрд╢реА-рдХреБрдВрдЬреА рдмрд╛рдзрд╛рдПрдВ: "рдбреЗрдЯрд╛рдмреЗрд╕_id_fk" рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА (рдбреЗрдЯрд╛рдмреЗрд╕_рдЖрдИрдбреА) рдбрд┐рд▓реАрдЯ рдХреИрд╕реНрдХреЗрдб рдкрд░ рд╕рдВрджрд░реНрдн рдбреЗрдЯрд╛рдмреЗрд╕ (рдЖрдИрдбреА)редрдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рд▓рд┐рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдЪрдпреА рджреГрд╢реНрдп рдбреЗрдЯрд╛ рд╣реИ pg_stat_statements рд▓рдХреНрд╖реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ.
рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ.
pg_stat_рдЗрддрд┐рд╣рд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдВрдЪрд┐рдд рдЖрдВрдХрдбрд╝реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдШрдВрдЯреЗ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рддрд╛рд▓рд┐рдХрд╛ рднрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдБрдХрдбрд╝реЗ 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_рдЗрддрд┐рд╣рд╛рд╕ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕реНрдиреИрдкрд╢реЙрдЯ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрдЧрд╛ pg_stat_statements рд▓рдХреНрд╖реНрдп рдбреЗрдЯрд╛рдмреЗрд╕.
рдЕрд╕рд▓ рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ
рд╕рд░рд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдХрд╛рдлреА рдЙрдкрдпреЛрдЧреА рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд┐рд╕реА рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордпрд╛рд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХрддреНрд░рд┐рдд рдбреЗрдЯрд╛
рдЬрд╛рдВрдЪ
SELECT
database_id ,
SUM(calls) AS calls ,SUM(total_time) AS total_time ,
SUM(rows) AS rows , SUM(shared_blks_hit) AS shared_blks_hit,
SUM(shared_blks_read) AS shared_blks_read ,
SUM(shared_blks_dirtied) AS shared_blks_dirtied,
SUM(shared_blks_written) AS shared_blks_written ,
SUM(local_blks_hit) AS local_blks_hit ,
SUM(local_blks_read) AS local_blks_read ,
SUM(local_blks_dirtied) AS local_blks_dirtied ,
SUM(local_blks_written) AS local_blks_written,
SUM(temp_blks_read) AS temp_blks_read,
SUM(temp_blks_written) temp_blks_written ,
SUM(blk_read_time) AS blk_read_time ,
SUM(blk_write_time) AS blk_write_time
FROM
pg_stat_history
WHERE
queryid IS NULL AND
database_id = DATABASE_ID AND
snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
GROUP BY database_id ;рдбреА.рдмреА. рд╕рдордп
to_char(рдЕрдВрддрд░рд╛рд▓ '1 рдорд┐рд▓реАрд╕реЗрдХрдВрдб' * pg_total_stat_history_rec.total_time, 'HH24:MI:SS.MS')
I/O рд╕рдордп
to_char(рдЕрдВрддрд░рд╛рд▓ '1 рдорд┐рд▓реАрд╕реЗрдХрдВрдб' * (pg_total_stat_history_rec.blk_read_time + pg_total_stat_history_rec.blk_write_time ), 'HH24:MI:SS.MS')
рдХреБрд▓ рд╕рдордп рдХреЗ рдЕрдиреБрд╕рд╛рд░ TOP10 SQL
рдЬрд╛рдВрдЪ
SELECT
queryid ,
SUM(calls) AS calls ,
SUM(total_time) AS total_time
FROM
pg_stat_history
WHERE
queryid IS NOT NULL AND
database_id = DATABASE_ID AND
snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
GROUP BY queryid
ORDER BY 3 DESC
LIMIT 10---------------------------------------------------------------------------------- | рдХреБрд▓ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЯреЙрдк10 рдПрд╕рдХреНрдпреВрдПрд▓ | #| рдХреНрд╡реЗрд░реА рдЖрдИрдбреА| рдХреЙрд▓| рдХреЙрд▓ %| рдХреБрд▓_рд╕рдордп (рдПрдордПрд╕) | dbtime %+----+-----------+-----------+-----------+------------------------------------+---------- | 1| 821760255| 2| .00001|00:03:23.141(203141.681 рдПрдордПрд╕)| 5.42 | 2| 4152624390| 2| .00001|00:03:13.929( 193929.215 рдПрдордПрд╕)| 5.17 | 3| 1484454471| 4| .00001|00:02:09.129( 129129.057 рдПрдордПрд╕)| 3.44 | 4| 655729273| 1| .00000|00:02:01.869(121869.981 рдПрдордПрд╕)| 3.25 | 5| 2460318461| 1| .00000|00:01:33.113(93113.835 рдПрдордПрд╕)| 2.48 | 6| 2194493487| 4| .00001|00:00:17.377(17377.868 рдПрдордПрд╕)| .46 | 7| 1053044345| 1| .00000|00:00:06.156( 6156.352 рдПрдордПрд╕)| .16 | 8| 3644780286| 1| .00000|00:00:01.063(1063.830 рдПрдордПрд╕)| .03
рдХреБрд▓ 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 | #| рдХреНрд╡реЗрд░реА рдЖрдИрдбреА| рдХреЙрд▓| рдХреЙрд▓ %| I/O рд╕рдордп (ms)|db I/O рд╕рдордп % +----+-----------+-----------+--------+--------------------------------+---------------- | 1| 4152624390| 2| .00001|00:08:31.616(511616.592 рдПрдордПрд╕)| 31.06 рдЬреВрди | 2| 821760255| 2| .00001|00:08:27.099( 507099.036 рдПрдордПрд╕)| 30.78 | 3| 655729273| 1| .00000|00:05:02.209( 302209.137 рдПрдордПрд╕)| 18.35 | 4| 2460318461| 1| .00000|00:04:05.981(245981.117 рдПрдордПрд╕)| 14.93 | 5| 1484454471| 4| .00001|00:00:39.144(39144.221 рдПрдордПрд╕)| 2.38 | 6| 2194493487| 4| .00001|00:00:18.182(18182.816 рдПрдордПрд╕)| 1.10 | 7| 1053044345| 1| .00000|00:00:16.611(16611.722 рдПрдордПрд╕)| 1.01 | 8| 3644780286| 1| .00000|00:00:00.436( 436.205 рдПрдордПрд╕)| .03
рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЕрдзрд┐рдХрддрдо рд╕рдордп рдХреЗ рдЕрдиреБрд╕рд╛рд░ TOP10 SQL
рдЬрд╛рдВрдЪ
SELECT
id AS snapshotid ,
queryid ,
snapshot_timestamp ,
max_time
FROM
pg_stat_history
WHERE
queryid IS NOT NULL AND
database_id = DATABASE_ID AND
snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
ORDER BY 4 DESC
LIMIT 10-------------------------------------------------------------------------------------------------- | рдЕрдзрд┐рдХрддрдо рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЯреЙрдк10 рдПрд╕рдХреНрдпреВрдПрд▓ | #| рд╕реНрдиреИрдкрд╢реЙрдЯ| рд╕реНрдиреИрдкрд╢реЙрдЯрдЖрдИрдбреА| рдХреНрд╡реЗрд░реА рдЖрдИрдбреА| рдЕрдзрд┐рдХрддрдо рд╕рдордп (рдПрдордПрд╕) 1| 05.04.2019/01/03 4169:655729273| 00| 02| 01.869:121869.981:2(04.04.2019 рдПрдордПрд╕) | 17| 00/4153/821760255 00:01| 41.570| 101570.841| 3:04.04.2019:16(00 рдПрдордПрд╕) | 4146| 821760255/00/01 41.570:101570.841| 4| 04.04.2019| 16:00:4144(4152624390 рдПрдордПрд╕) | 00| 01/36.964/96964.607 5:04.04.2019| 17| 00| 4151:4152624390:00(01 рдПрдордПрд╕) | 36.964| 96964.607/6/05.04.2019 10:00| 4188| 1484454471| 00:01:33.452(93452.150 рдПрдордПрд╕) | 7| 04.04.2019/17/00 4150:2460318461 | 00| 01| 33.113:93113.835:8(04.04.2019 рдПрдордПрд╕) | 15| 00/4140/1484454471 00:00| 11.892| 11892.302| 9:04.04.2019:16(00 рдПрдордПрд╕) | 4145| 1484454471/00/00 11.892:11892.302| 10| 04.04.2019| 17:00:4152(1484454471 рдПрдордПрд╕) | 00| 00/11.892/11892.302 XNUMX:XNUMX| XNUMX| XNUMX| XNUMX:XNUMX:XNUMX(XNUMX рдПрдордПрд╕) | XNUMX| XNUMX/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX:XNUMX:XNUMX(XNUMX рдПрдордПрд╕)
рд╕рд╛рдЭрд╛ рдмрдлрд╝рд░ рджреНрд╡рд╛рд░рд╛ 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 рдкрдврд╝реЗрдВ/рд▓рд┐рдЦреЗрдВ | #| рд╕реНрдиреИрдкрд╢реЙрдЯ| рд╕реНрдиреИрдкрд╢реЙрдЯрдЖрдИрдбреА| рдХреНрд╡реЗрд░реА рдЖрдИрдбреА| рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдмреНрд▓реЙрдХ рдкрдврд╝реЗрдВ| рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдмреНрд▓реЙрдХ рд▓рд┐рдЦреЗрдВ +----+---+---+---+---+---+----+----+----+----+----+---- 1| 04.04.2019/17/00 4153:821760255| 797308| 0| 2| 04.04.2019 | 16| 00/4146/821760255 797308:0| 3| 05.04.2019| 01| 03 | 4169| 655729273/797158/0 4:04.04.2019| 16| 00| 4144| 4152624390 | 756514| 0/5/04.04.2019 17:00| 4151| 4152624390| 756514| 0 | 6| 04.04.2019/17/00 4150:2460318461| 734117| 0| 7| 04.04.2019 | 17| 00/4155/3644780286 52973:0| 8| 05.04.2019| 01| 03 | 4168| 1053044345/52818/0 9:04.04.2019| 15| 00| 4141| 2194493487 | 52813| 0/10/04.04.2019 16:00| 4147| 2194493487| 52813| 0 | XNUMX| XNUMX/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX| XNUMX | XNUMX| XNUMX/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX| XNUMX --------------------------------------------------------------------------------------------------
рдЕрдзрд┐рдХрддрдо рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрд╡реЗрд░реА рд╡рд┐рддрд░рдг рдХрд╛ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо
рдЕрдиреБрд░реЛрдз
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 | рдиреНрдпреВрдирддрдо рд╕рдордп: 00:00:01.063 | рдЕрдзрд┐рдХрддрдо рд╕рдордп : 00:02:01.869 ---------------------------------------------------------------------------------- | рдиреНрдпреВрдирддрдо рдЕрд╡рдзрд┐| рдЕрдзрд┐рдХрддрдо рдЕрд╡рдзрд┐| рдХреЙрд▓ +------------------------------------------------+--------------------------------+------- | 00:00:01.063(1063.830 рдПрдордПрд╕) | 00:00:13.144(13144.445 рдПрдордПрд╕) | 9 | 00:00:13.144(13144.445 рдПрдордПрд╕) | 00:00:25.225(25225.060 рдПрдордПрд╕) | 0 | 00:00:25.225(25225.060 рдПрдордПрд╕) | 00:00:37.305(37305.675 рдПрдордПрд╕) | 0 | 00:00:37.305(37305.675 рдПрдордПрд╕) | 00:00:49.386(49386.290 рдПрдордПрд╕) | 0 | 00:00:49.386(49386.290 рдПрдордПрд╕) | 00:01:01.466(61466.906 рдПрдордПрд╕) | 0 | 00:01:01.466(61466.906 рдПрдордПрд╕) | 00:01:13.547(73547.521 рдПрдордПрд╕) | 0 | 00:01:13.547(73547.521 рдПрдордПрд╕) | 00:01:25.628(85628.136 рдПрдордПрд╕) | 0 | 00:01:25.628(85628.136 рдПрдордПрд╕) | 00:01:37.708(97708.751 рдПрдордПрд╕) | 4 | 00:01:37.708(97708.751 рдПрдордПрд╕) | 00:01:49.789(109789.366 рдПрдордПрд╕) | 2 | 00:01:49.789(109789.366 рдПрдордПрд╕) | 00:02:01.869(121869.981 рдПрдордПрд╕) | 0
рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХреНрд╡реЗрд░реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ TOP10 рд╕реНрдиреИрдкрд╢реЙрдЯ
рдЕрдиреБрд░реЛрдз
--pg_qps.sql
--Calculate Query Per Second
CREATE OR REPLACE FUNCTION pg_qps( pg_stat_history_id integer ) RETURNS double precision AS $$
DECLARE
pg_stat_history_rec record ;
prev_pg_stat_history_id integer ;
prev_pg_stat_history_rec record;
total_seconds double precision ;
result double precision;
BEGIN
result = 0 ;
SELECT *
INTO pg_stat_history_rec
FROM
pg_stat_history
WHERE id = pg_stat_history_id ;
IF pg_stat_history_rec.snapshot_timestamp IS NULL
THEN
RAISE EXCEPTION 'ERROR - Not found pg_stat_history for id = %',pg_stat_history_id;
END IF ;
--RAISE NOTICE 'pg_stat_history_id = % , snapshot_timestamp = %', pg_stat_history_id ,
pg_stat_history_rec.snapshot_timestamp ;
SELECT
MAX(id)
INTO
prev_pg_stat_history_id
FROM
pg_stat_history
WHERE
database_id = pg_stat_history_rec.database_id AND
queryid IS NULL AND
id < pg_stat_history_rec.id ;
IF prev_pg_stat_history_id IS NULL
THEN
RAISE NOTICE 'Not found previous pg_stat_history shapshot for id = %',pg_stat_history_id;
RETURN NULL ;
END IF;
SELECT *
INTO prev_pg_stat_history_rec
FROM
pg_stat_history
WHERE id = prev_pg_stat_history_id ;
--RAISE NOTICE 'prev_pg_stat_history_id = % , prev_snapshot_timestamp = %', prev_pg_stat_history_id , prev_pg_stat_history_rec.snapshot_timestamp ;
total_seconds = extract(epoch from ( pg_stat_history_rec.snapshot_timestamp - prev_pg_stat_history_rec.snapshot_timestamp ));
--RAISE NOTICE 'total_seconds = % ', total_seconds ;
--RAISE NOTICE 'calls = % ', pg_stat_history_rec.calls ;
IF total_seconds > 0
THEN
result = pg_stat_history_rec.calls / total_seconds ;
ELSE
result = 0 ;
END IF;
RETURN result ;
END
$$ LANGUAGE plpgsql;
SELECT
id ,
snapshot_timestamp ,
calls ,
total_time ,
( select pg_qps( id )) AS QPS ,
blk_read_time ,
blk_write_time
FROM
pg_stat_history
WHERE
queryid IS NULL AND
database_id = DATABASE_ID AND
snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND
( select pg_qps( id )) IS NOT NULL
ORDER BY 5 DESC
LIMIT 10
|---------------------------------------------------------------------------------------------------------------- | QueryPerSeconds рдирдВрдмрд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдСрд░реНрдбрд░ рдХрд┐рдП рдЧрдП TOP10 рд╕реНрдиреИрдкрд╢реЙрдЯ ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | #| рд╕реНрдиреИрдкрд╢реЙрдЯ| рд╕реНрдиреИрдкрд╢реЙрдЯрдЖрдИрдбреА| рдХреЙрд▓| рдХреБрд▓ dbtime| рдХреНрдпреВрдкреАрдПрд╕ | I/O рд╕рдордп | I/O рд╕рдордп % +-----+------------------+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----- 1| 04.04.2019/20/04 4161:5758631| 00| 06| 30.513:390513.926:1573.396(00 рдПрдордПрд╕)| 00| 01.470:1470.110:376(2 рдПрдордПрд╕)| .04.04.2019 | 17| 00/4149/3529197 00:11| 48.830| 708830.618| 980.332:00:12(47.834 рдПрдордПрд╕)| 767834.052| 108.324:3:04.04.2019(16 рдПрдордПрд╕)| 00 | 4143| 3525360/00/10 13.492:613492.351| 979.267| 00| 08:41.396:521396.555(84.988 рдПрдордПрд╕)| 4| 04.04.2019:21:03(4163 рдПрдордПрд╕)| 2781536 | 00| 03/06.470/186470.979 785.745:00| 00| 00.249| 249.865:134:5(04.04.2019 рдПрдордПрд╕)| 19| 03:4159:2890362(00 рдПрдордПрд╕)| .03 | 16.784| 196784.755/776.979/00 00:01.441| 1441.386| 732| 6:04.04.2019:14(00 рдПрдордПрд╕)| 4137| 2397326:00:04(43.033 рдПрдордПрд╕)| .283033.854 | 665.924| 00/00/00.024 24.505:009 | 7| 04.04.2019| 15:00:4139(2394416 рдПрдордПрд╕)| 00| 04:51.435:291435.010(665.116 рдПрдордПрд╕)| .00 | 00| 12.025/12025.895/4.126 8:04.04.2019| 13| 00| 4135:2373043:00(04 рдПрдордПрд╕)| 26.791| 266791.988:659.179:00(00 рдПрдордПрд╕)| 00.064 | 64.261| 024/9/05.04.2019 01:03 | 4167| 4387191| 00:06:51.380(411380.293 рдПрдордПрд╕)| 609.332| 00:05:18.847(318847.407 рдПрдордПрд╕)| .77.507 | 10| 04.04.2019/18/01 4157:1145596| 00| 01| 19.217:79217.372:313.004(00 рдПрдордПрд╕)| 00| 01.319:1319.676:1.666(XNUMX рдПрдордПрд╕)| XNUMX | XNUMX| XNUMX/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX:XNUMX:XNUMX(XNUMX рдПрдордПрд╕)| XNUMX| XNUMX:XNUMX:XNUMX(XNUMX рдПрдордПрд╕)| XNUMX
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
рд╕рдВрдкреВрд░реНрдг
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд╛рдлреА рд╕рд░рд▓ рддрд░реАрдХреЛрдВ рд╕реЗ, рдЖрдк рдХрд╛рд░реНрдпрднрд╛рд░ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Primechenie:рдпрджрд┐ рдЖрдк рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ queryid рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдЗрддрд┐рд╣рд╛рд╕ рдорд┐рд▓реЗрдЧрд╛ (рд╕реНрдерд╛рди рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЛрд░реНрдЯ рдЫреЛрдбрд╝ рджреА рдЬрд╛рддреА рд╣реИ)ред
рдЗрд╕рд▓рд┐рдП, рдХреНрд╡реЗрд░реА рдкреНрд░рджрд░реНрд╢рди рдкрд░ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдбреЗрдЯрд╛ рдЙрдкрд▓рдмреНрдз рдФрд░ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкрд╣рд▓рд╛ рдЪрд░рдг "рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдбреЗрдЯрд╛ рдХрд╛ рд╕рдВрдЧреНрд░рд╣" рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдЖрдк рджреВрд╕рд░реЗ рдЪрд░рдг рдкрд░ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ - "рдкреНрд░рджрд░реНрд╢рди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛"ред

рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдФрд░ рдХрд╣рд╛рдиреА рд╣реИред
рдХреЛ рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ ...
рд╕реНрд░реЛрдд: www.habr.com
