рдХреНрд▓рд╛рд╕рд┐рдХ рдкреНрд░рд╢реНрди рдЬреБрди рдПрдХ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд▓реЗ рдЖрдлреНрдиреЛ DBA рдорд╛ рд▓реНрдпрд╛рдЙрдБрджрдЫ рд╡рд╛ рд╡реНрдпрд╡рд╕рд╛рдп рдорд╛рд▓рд┐рдХрд▓реЗ PostgreSQL рд╕рд▓реНрд▓рд╛рд╣рдХрд╛рд░рд▓рд╛рдИ рд▓реНрдпрд╛рдЙрдБрдЫ рд▓рдЧрднрдЧ рд╕рдзреИрдВ рдЙрд╕реНрддреИ рд╕реБрдирд┐рдиреНрдЫ: "рдХрд┐рди рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдкреВрд░рд╛ рд╣реБрди рдпрддрд┐ рд▓рд╛рдореЛ рд╕рдордп рд▓рд╛рдЧреНрдЫ?"
рдХрд╛рд░рдгрд╣рд░реВрдХреЛ рдкрд░рдореНрдкрд░рд╛рдЧрдд рд╕реЗрдЯ:
- рдЕрд╕рдХреНрд╖рдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
рдЬрдм рддрдкрд╛рдЗрдБ рдХреЗрд╣рд┐ рджрд╢реМрдВ рд╣рдЬрд╛рд░ рд░реЗрдХрд░реНрдбрд╣рд░реВ рдорд╛ рдзреЗрд░реИ CTE рдорд╛ рд╕рд╛рдореЗрд▓ рд╣реБрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ - рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рддрдереНрдпрд╛рдЩреНрдХ
рдпрджрд┐ рддрд╛рд▓рд┐рдХрд╛рдорд╛ рддрдереНрдпрд╛рдЩреНрдХрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рддрд░рдг рдкрдЫрд┐рд▓реНрд▓реЛ рдкрдЯрдХ ANALYZE рджреНрд╡рд╛рд░рд╛ рд╕рдЩреНрдХрд▓рди рдЧрд░рд┐рдПрдХреЛ рднрдиреНрджрд╛ рдзреЗрд░реИ рдлрд░рдХ рдЫ рднрдиреЗ - рд╕реНрд░реЛрддрд╣рд░реВрдорд╛ "рдкреНрд▓рдЧ"
рд░ рддреНрдпрд╣рд╛рдБ рдЕрдм CPU рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдорд░реНрдкрд┐рдд рдХрдореНрдкреНрдпреБрдЯрд┐рдЩ рдкрд╛рд╡рд░ рдЫреИрди, рдореЗрдореЛрд░реАрдХреЛ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рд▓рдЧрд╛рддрд╛рд░ рдкрдореНрдк рднрдЗрд░рд╣реЗрдХреЛ рдЫ, рд╡рд╛ рдбрд┐рд╕реНрдХ рдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рд╕рдмреИ "рдЪрд╛рд╣рдирд╛рд╣рд░реВ" рд╕рдВрдЧ рд░рд╛рдЦреНрди рд╕рдХреНрджреИрдиред - рдЕрд╡рд░реБрджреНрдз рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдмрд╛рдЯ
рд░ рдпрджрд┐ рдмреНрд▓рдХрд┐рдЩрд╣рд░реВ рд╕рдорд╛рддреНрди рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрди рдзреЗрд░реИ рдЧрд╛рд╣реНрд░реЛ рдЫ рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореАрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рд╕рдмреИ рдХреБрд░рд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рд╢реНрди рдпреЛрдЬрдирд╛рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ
рддрд░, рдПрдЙрдЯреИ рдХрд╛рдЧрдЬрд╛рддрдорд╛ рднрдиреЗ рдЕрдиреБрд╕рд╛рд░,
"рдпреЛрдЬрдирд╛ рдмреБрдЭреНрдиреБ рдПрдЙрдЯрд╛ рдХрд▓рд╛ рд╣реЛ, рд░ рдпрд╕рд▓рд╛рдИ рдорд╛рд╕реНрдЯрд░ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рддреНрд░рд╛рдорд╛ рдЕрдиреБрднрд╡ рдЪрд╛рд╣рд┐рдиреНрдЫ..."
рддрд░ рдпрджрд┐ рддрдкрд╛рдЗрдБ рд╕рд╣реА рдЙрдкрдХрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ рддрдкрд╛рдЗрдБ рдпрд╕рд▓рд╛рдИ рдмрд┐рдирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ!
рдкреНрд░рд╢реНрди рдпреЛрдЬрдирд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдХрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ? рддреНрдпрд╕реНрддреИ рдХреЗрд╣реА рдХреБрд░рд╛:
Index Scan using pg_class_relname_nsp_index on pg_class (actual time=0.049..0.050 rows=1 loops=1)
Index Cond: (relname = $1)
Filter: (oid = $0)
Buffers: shared hit=4
InitPlan 1 (returns $0,$1)
-> Limit (actual time=0.019..0.020 rows=1 loops=1)
Buffers: shared hit=1
-> Seq Scan on pg_class pg_class_1 (actual time=0.015..0.015 rows=1 loops=1)
Filter: (relkind = 'r'::"char")
Rows Removed by Filter: 5
Buffers: shared hit=1
рд╡рд╛ рдпреЛ рдЬрд╕реНрддреИ:
"Append (cost=868.60..878.95 rows=2 width=233) (actual time=0.024..0.144 rows=2 loops=1)"
" Buffers: shared hit=3"
" CTE cl"
" -> Seq Scan on pg_class (cost=0.00..868.60 rows=9972 width=537) (actual time=0.016..0.042 rows=101 loops=1)"
" Buffers: shared hit=3"
" -> Limit (cost=0.00..0.10 rows=1 width=233) (actual time=0.023..0.024 rows=1 loops=1)"
" Buffers: shared hit=1"
" -> CTE Scan on cl (cost=0.00..997.20 rows=9972 width=233) (actual time=0.021..0.021 rows=1 loops=1)"
" Buffers: shared hit=1"
" -> Limit (cost=10.00..10.10 rows=1 width=233) (actual time=0.117..0.118 rows=1 loops=1)"
" Buffers: shared hit=2"
" -> CTE Scan on cl cl_1 (cost=0.00..997.20 rows=9972 width=233) (actual time=0.001..0.104 rows=101 loops=1)"
" Buffers: shared hit=2"
"Planning Time: 0.634 ms"
"Execution Time: 0.248 ms"
рддрд░ "рдкрд╛рдирд╛рдмрд╛рдЯ" рдкрд╛рдардорд╛ рдпреЛрдЬрдирд╛ рдкрдвреНрди рдзреЗрд░реИ рдЧрд╛рд╣реНрд░реЛ рд░ рдЕрд╕реНрдкрд╖реНрдЯ рдЫ:
- рдиреЛрдб рдорд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдЫ рдЙрдкрд╡реГрдХреНрд╖ рд╕реНрд░реЛрддрд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рдпреЛрдЧ
рддреНрдпреЛ рд╣реЛ, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдиреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рдХрддрд┐ рд╕рдордп рд▓рд╛рдЧреНрдпреЛ, рд╡рд╛ рддрд╛рд▓рд┐рдХрд╛рдХреЛ рдпреЛ рдкрдврд╛рдЗрд▓реЗ рдбрд┐рд╕реНрдХрдмрд╛рдЯ рдбрд╛рдЯрд╛ рд▓реНрдпрд╛рдПрдХреЛ рд╣реЛ рднрдиреЗрд░ рдмреБрдЭреНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдХреБрдиреИ рди рдХреБрдиреИ рд░реВрдкрдорд╛ рдПрдЙрдЯрд╛рд▓рд╛рдИ рдЕрд░реНрдХреЛрдмрд╛рдЯ рдШрдЯрд╛рдЙрдиреБрдкрд░реНрдЫред - рдиреЛрдб рд╕рдордп рдЖрд╡рд╢реНрдпрдХ рдЫ рд▓реВрдк рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрди
рд╣реЛ, рдШрдЯрд╛рдЙрдиреЗ рд╕рдмреИрднрдиреНрджрд╛ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдп рд╣реЛрдЗрди рдЬреБрди "рд╣реЗрдбрдорд╛" рдЧрд░рд┐рдиреБ рдкрд░реНрдЫ - рдЖрдЦрд┐рд░, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдордп рдиреЛрдбрдХреЛ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд▓рд╛рдЧрд┐ рдФрд╕рддрдХреЛ рд░реВрдкрдорд╛ рд╕рдВрдХреЗрдд рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ рддреНрдпрд╣рд╛рдБ рд╕рдпреМрдВ рд╣реБрди рд╕рдХреНрдЫред - рдареАрдХ рдЫ, рд░ рдпреЛ рд╕рдмреИ рдорд┐рд▓реЗрд░ рд╣рд╛рдореАрд▓рд╛рдИ рдореБрдЦреНрдп рдкреНрд░рд╢реНрдирдХреЛ рдЬрд╡рд╛рдл рджрд┐рдирдмрд╛рдЯ рд░реЛрдХреНрдЫ - рддреНрдпрд╕реИрд▓реЗ рдХреЛ "рд╕рдмреИрднрдиреНрджрд╛ рдХрдордЬреЛрд░ рд▓рд┐рдЩреНрдХ"?
рдЬрдм рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░рд╛ рд╕рдпреМрдВ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдпреЛ рд╕рдмреИ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдпреМрдВ, рд╣рд╛рдореАрд▓реЗ рдорд╣рд╕реБрд╕ рдЧрд░реНрдпреМрдВ рдХрд┐ рдмрд╛рд╣рд┐рд░рдмрд╛рдЯ рдпреЛ рдХреЗрд╣рд┐ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:
рд░ рдпрд╕рдХреЛ рдорддрд▓рдм рд╣рд╛рдореАрд▓рд╛рдИ рдЪрд╛рд╣рд┐рдиреНрдЫ ...
рдЙрдкрдХрд░рдг
рдпрд╕рдорд╛ рд╣рд╛рдореАрд▓реЗ рдпреЛрдЬрдирд╛ рд░ рдЕрдиреБрд░реЛрдз рдЕрдиреБрд╕рд╛рд░ "рдХрд╕рд▓рд╛рдИ рджреЛрд╖ рджрд┐рдиреЗ рд░ рдХреЗ рдЧрд░реНрдиреЗ" рдмреБрдЭреНрди рдорджреНрджрдд рдЧрд░реНрдиреЗ рд╕рдмреИ рдореБрдЦреНрдп рдореЗрдХрд╛рдирд┐рдХрд╣рд░реВ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдпреМрдВред рдареАрдХ рдЫ, рд░ рд╕рдореБрджрд╛рдпрд╕рдБрдЧ рдЖрдлреНрдиреЛ рдЕрдиреБрднрд╡рдХреЛ рдЕрдВрд╢ рд╕рд╛рдЭрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред
рднреЗрдЯреНрдиреБрд╣реЛрд╕реН рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН -
рдпреЛрдЬрдирд╛рд╣рд░реВрдХреЛ рджреГрд╢реНрдпрддрд╛
рдпреЛ рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рдпреЛрдЬрдирд╛ рдмреБрдЭреНрди рд╕рдЬрд┐рд▓реЛ рдЫ?
Seq Scan on pg_class (actual time=0.009..1.304 rows=6609 loops=1)
Buffers: shared hit=263
Planning Time: 0.108 ms
Execution Time: 1.800 ms
рд╡рд╛рд╕реНрддрд╡рдорд╛ рд╣реЛрдЗрдиред
рддрд░ рдпрд╕рд░реА, рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рдорд╛рдЬрдм рдореБрдЦреНрдп рд╕реВрдЪрдХрд╣рд░реВ рдЕрд▓рдЧ рд╣реБрдиреНрдЫрдиреН, рдпреЛ рдзреЗрд░реИ рд╕реНрдкрд╖реНрдЯ рд╣реБрдиреНрдЫ:
рддрд░ рдпреЛрдЬрдирд╛ рдердк рдЬрдЯрд┐рд▓ рдЫ рднрдиреЗ, рдЙрд╣рд╛рдБ рдЙрджреНрдзрд╛рд░ рдЧрд░реНрди рдЖрдЙрдиреБрд╣реБрдиреЗрдЫ piechart рд╕рдордп рд╡рд┐рддрд░рдг рдиреЛрдбреНрд╕ рджреНрд╡рд╛рд░рд╛:
рдареАрдХ рдЫ, рд╕рдмреИрднрдиреНрджрд╛ рдХрдард┐рди рд╡рд┐рдХрд▓реНрдкрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЙрд╣рд╛рдБ рдорджреНрджрдд рдЧрд░реНрди рд╣рддрд╛рд░рдорд╛ рд╣реБрдиреБрд╣реБрдиреНрдЫ рдкреНрд░рдЧрддрд┐ рдЪрд╛рд░реНрдЯ:
рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рдЧреИрд░-рддреБрдЪреНрдЫ рдЕрд╡рд╕реНрдерд╛рд╣рд░реВ рдЫрдиреН рдЬрдм рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдПрдХ рднрдиреНрджрд╛ рдмрдвреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬрд░рд╛ рд╣реБрди рд╕рдХреНрдЫ:
рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд╕реБрд░рд╛рдЧрд╣рд░реВ
рдард┐рдХ рдЫ, рдпрджрд┐ рдпреЛрдЬрдирд╛рдХреЛ рд╕рдореНрдкреВрд░реНрдг рд╕рдВрд░рдЪрдирд╛ рд░ рдпрд╕рдХрд╛ рдШрд╛рдЙ рдард╛рдЙрдБрд╣рд░реВ рдкрд╣рд┐рд▓реЗ рдиреИ рд░рд╛рдЦрд┐рдПрдХрд╛ рдЫрдиреН рд░ рджреЗрдЦрд┐рдиреЗ рдЫрдиреН рднрдиреЗ, рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд▓рд╛рдИ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдЧрд░реЗрд░ "рд░реВрд╕реА рднрд╛рд╖рд╛" рдорд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирдЧрд░реНрдиреЗ?
рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рджрд░реНрдЬрдиреМрдВ рдпрд╕реНрддрд╛ рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЯреЗрдореНрдкреНрд▓реЗрдЯрд╣рд░реВ рд╕рдЩреНрдХрд▓рди рдЧрд░рд┐рд╕рдХреЗрдХрд╛ рдЫреМрдВред
рд▓рд╛рдЗрди-рджреНрд╡рд╛рд░рд╛-рд▓рд╛рдЗрди рдХреНрд╡реЗрд░реА рдкреНрд░реЛрдлрд╛рдЗрд▓рд░
рдЕрдм, рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░рд┐рдПрдХреЛ рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдореВрд▓ рдкреНрд░рд╢реНрдирд▓рд╛рдИ рд╕реБрдкрд░рдЗрдореНрдкреЛрдЬ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХрдердирдорд╛ рдХрддрд┐ рд╕рдордп рдЦрд░реНрдЪ рднрдПрдХреЛ рдерд┐рдпреЛ рднрдиреЗрд░ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ - рдпреЛ рдЬрд╕реНрддреИ:
...рд╡рд╛ рдпреЛ рдЬрд╕реНрддреИ:
рдЕрдиреБрд░реЛрдзрдорд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрджреИ
рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрд░реЛрдз рдорд╛рддреНрд░ рд╣реЛрдЗрди, рддрд░ рд▓рдЧрдХреЛ DETAIL рд▓рд╛рдЗрдирдмрд╛рдЯ рдпрд╕рдХреЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдкрдирд┐ "рд╕рдВрд▓рдЧреНрди" рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рддрдкрд╛рдЗрдБ рдпрд╕рд▓рд╛рдИ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдордзреНрдпреЗ рдПрдХрдорд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:
- рдЕрдиреБрд░реЛрдзрдорд╛ рдореВрд▓реНрдп рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдирдХреЛ рд╕рд╛рде
рддрдкрд╛рдИрдВрдХреЛ рдЖрдзрд╛рд░ рд░ рдердк рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдЩрдорд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд▓рд╛рдЧрд┐SELECT 'const', 'param'::text;
- PREPARE/EXECUTE рдорд╛рд░реНрдлрдд рдореВрд▓реНрдп рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдирдХреЛ рд╕рд╛рде
рдЕрдиреБрд╕реВрдЪрдХрдХреЛ рдХрд╛рдо рдЕрдиреБрдХрд░рдг рдЧрд░реНрди, рдЬрдм рдкреНрдпрд╛рд░рд╛рдореЗрдЯреНрд░рд┐рдХ рднрд╛рдЧрд▓рд╛рдИ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ - рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╡рд┐рднрд╛рдЬрди рдЧрд░рд┐рдПрдХреЛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдорд╛ рдХрд╛рдо рдЧрд░реНрджрд╛DEALLOCATE ALL; PREPARE q(text) AS SELECT 'const', $1::text; EXECUTE q('param'::text);
рдпреЛрдЬрдирд╛рд╣рд░реВрдХреЛ рдЕрднрд┐рд▓реЗрдЦ
рдЯрд╛рдБрд╕реНрдиреБрд╣реЛрд╕реН, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд╕рд╣рдХрд░реНрдореАрд╣рд░реВрд╕рдБрдЧ рд╕рд╛рдЭреЗрджрд╛рд░реА рдЧрд░реНрдиреБрд╣реЛрд╕реН! рдпреЛрдЬрдирд╛рд╣рд░реВ рдЕрднрд┐рд▓реЗрдЦрдорд╛ рд░рд╣рдиреЗрдЫрдиреН рд░ рддрдкрд╛рдИрдВ рдкрдЫрд┐ рддрд┐рдиреАрд╣рд░реВрдорд╛ рдлрд░реНрдХрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:
рддрд░ рдпрджрд┐ рддрдкрд╛рдИрдВ рдЕрд░реВрд▓реЗ рддрдкрд╛рдИрдВрдХреЛ рдпреЛрдЬрдирд╛ рд╣реЗрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрди рднрдиреЗ, "рд╕рдВрдЧреНрд░рд╣рдорд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирдЧрд░реНрдиреБрд╣реЛрд╕реН" рдмрд╛рдХрд╕ рдЬрд╛рдБрдЪ рдЧрд░реНрди рдирдмрд┐рд░реНрд╕рдиреБрд╣реЛрд╕реНред
рдирд┐рдореНрди рд▓реЗрдЦрд╣рд░реВрдорд╛ рдо рдпреЛрдЬрдирд╛рдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрджрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХрдард┐рдирд╛рдЗ рд░ рдирд┐рд░реНрдгрдпрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫреБред
рд╕реНрд░реЛрдд: www.habr.com