αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž“αŸƒαžŸαŸ†αžŽαž½αžš PostgreSQL αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1 - αž€αžΆαžšαžšαžΆαž™αž€αžΆαžšαžŽαŸ

αžœαž·αžŸαŸ’αžœαž€αžš - αž”αž€αž”αŸ’αžšαŸ‚αž–αžΈαž‘αžΆαžαžΆαŸ†αž„ - αž”αŸ†αž•αž»αžŸαž‚αŸ†αž“αž·αžαŸ”
αžœαž·αžŸαŸ’αžœαž€αžšαž’αžΆαž…αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž”αžΆαž“αŸ” (αž‚) R. Diesel αŸ”
Epigraphs αŸ”
αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž“αŸƒαžŸαŸ†αžŽαž½αžš PostgreSQL αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1 - αž€αžΆαžšαžšαžΆαž™αž€αžΆαžšαžŽαŸ
αž¬αžšαžΏαž„αžšαŸ‰αžΆαžœαž’αŸ†αž–αžΈαž˜αžΌαž›αž αŸαžαž»αžŠαŸ‚αž›αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž…αž„αž…αžΆαŸ†αž–αžΈαž’αžαžΈαžαž€αžΆαž›αž“αŸƒαž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹αŸ”

αž”αž»αž–αŸ’αžœαž€αžαžΆ

αžˆαŸ’αž˜αŸ„αŸ‡αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ” αž€αžΆαžšαž”αŸ’αžšαž€αž½αžαž‚αžΊαž…αŸƒαžŠαž“αŸ’αž™αŸ” αžŸαž˜αŸ’αž—αžΆαžšαŸˆαž‚αžΊαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αžΆαž‚αŸ†αž“αž·αžαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αž€αžΆαžšαž”αžŠαž·αžŸαŸαž’αž“αŸƒαž€αžΆαžšαž’αžΆαž“αžΆαŸ– αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸŠαŸαžšαžΈαž’αžαŸ’αžαž”αž‘αžŠαŸ‚αž›αž”αžΆαž“αž‚αŸ’αžšαŸ„αž„αž‘αž»αž€ αž“αžΉαž„αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž›αž˜αŸ’αž’αž·αž αž“αž·αž„αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αŸƒαžαžΆαžšαžΆαž„ αž“αž·αž„αžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαŸ‚αž›αž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ„αŸ‡αž‘αŸαŸ” αžŸαž˜αŸ’αž—αžΆαžšαŸˆαž˜αž·αž“αž’αžΆαž…αž”αŸ’αžšαžΎαž—αŸ’αž›αžΆαž˜αŸ— "AS IS" αž”αžΆαž“αž‘αŸαŸ”
αž‘αžΈαž˜αž½αž™αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž”αžšαž·αž˜αžΆαžŽαžŠαŸαž’αŸ†αž“αŸƒαžŸαž˜αŸ’αž—αžΆαžšαŸˆαŸ”
αž‘αžΈαž–αžΈαžš αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž—αžΆαž–αž˜αž»αžαžŸαŸ’αžšαž½αž…αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž•αž›αž·αžαž€αž˜αŸ’αž˜αžšαž”αžŸαŸ‹αž’αžαž·αžαž·αž‡αž“αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαŸ”
αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž˜αžΆαž“αžαŸ‚αž‚αŸ†αž“αž·αž αž“αž·αž„αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž‘αžΌαž‘αŸ…αž”αŸ†αž•αž»αžαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αŸ”
αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž“αŸ…αž–αŸαž›αž’αž“αžΆαž‚αžαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž“αžΉαž„αžšαžΈαž€αž…αž˜αŸ’αžšαžΎαž“αžŠαž›αŸ‹αž€αž˜αŸ’αžšαž·αžαž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž αŸ„αŸ‡αž“αŸ…αž›αžΎ GitHub αž¬αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αž˜αŸ‚αž“αž‘αŸαŸ” αž–αŸαž›αžœαŸαž›αžΆαž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αŸ”

αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž“αŸƒαžšαžΏαž„ -αžαžΎαž’αŸ’αž“αž€αž…αžΆαŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜"αŸ”
αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž”αžΆαž“αž€αžΎαžαž‘αžΎαž„αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž“αŸ…αž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž‘αžΌαž‘αŸ…αž”αŸ†αž•αž»αž - "αž€αžΆαžšαžŸαŸ†αž™αŸ„αž‚αž‡αžΆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž˜αž½αž™αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ‚αž›αž˜αŸ’αž’αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž PostgreSQLΒ»

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡?

αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαžŽαžΆαžŸαŸ‹, αž‡αžΆαžŠαŸ†αž”αžΌαž„, αžŠαžΎαž˜αŸ’αž”αžΈαž€αž»αŸ†αž±αŸ’αž™αž—αŸ’αž›αŸαž…αžαŸ’αž›αž½αž“αž’αŸ’αž“αž€, αž…αž„αž…αžΆαŸ†αžαŸ’αž„αŸƒαžŠαŸαžšαž»αž„αžšαžΏαž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αžΌαž›αž“αž·αžœαžαŸ’αžαž“αŸαŸ”
αž‘αžΈαž–αžΈαžš αžŠαžΎαž˜αŸ’αž”αžΈαžšαŸ€αž”αž…αŸ†αž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž“αžΌαžœαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž”αžΆαž“αžŸαžšαžŸαŸαžšαŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž›αž½αž“αžαŸ’αž‰αž»αŸ†αžšαž½αž…αž‘αŸ…αž αžΎαž™ αž–αŸαž›αžαŸ’αž›αŸ‡αžαŸ’αž‰αž»αŸ†αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž™αž›αŸ‹αž…αŸ’αžšαž›αŸ† αž αžΎαž™αž—αŸ’αž›αŸαž…αž•αŸ’αž“αŸ‚αž€αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αŸ”

αž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαžŽαžΆαžŸαŸ‹ αž αžΎαž™αžŸαŸ†αžαžΆαž“αŸ‹αž”αŸ†αž•αž»αž - αž—αŸ’αž›αžΆαž˜αŸ—αž“αŸ„αŸ‡ αžœαžΆαž’αžΆαž…αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹ αž“αž·αž„αž‡αž½αž™αž˜αž·αž“αž±αŸ’αž™αž”αž„αŸ’αž€αžΎαžαž€αž„αŸ‹αž‘αžΎαž„αžœαž·αž‰ αž“αž·αž„αž˜αž·αž“αž±αŸ’αž™αž”αŸ’αžšαž˜αžΌαž›αžαž»αž„αžšαž½αž…αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž–αžΆαž€αŸ’αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αž, αž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž€αž˜αŸ’αž˜αž•αž›αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ (αž˜αž·αž“αž˜αŸ‚αž“ Khabrovsky) αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž”αŸ†αž•αž»αžαž“αŸ…αž€αŸ’αž“αž»αž„αž–αž·αž—αž–αž›αŸ„αž€αž“αŸαŸ‡αž‚αžΊαž‚αŸ†αž“αž·αžαŸ” αžšαžΏαž„αž…αŸ†αž”αž„αž‚αžΊαžŸαŸ’αžœαŸ‚αž„αžšαž€αž‚αŸ†αž“αž·αžαŸ” αž αžΎαž™β€‹αž€αžΆαžšβ€‹αž”αž€β€‹αž”αŸ’αžšαŸ‚β€‹αž‚αŸ†αž“αž·αžβ€‹αž‘αŸ…β€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αž–αž·αžβ€‹αž‚αžΊβ€‹αž‡αžΆβ€‹αž”αž‰αŸ’αž αžΆβ€‹αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸβ€‹αžŸαž»αž‘αŸ’αž’αžŸαžΆαž’β€‹αžšαž½αž…β€‹αž‘αŸ…β€‹αž αžΎαž™αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŸαžΌαž˜αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž™αžΊαž αŸ— ...

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž”αž‰αŸ’αž αžΆαŸ”

αž˜αžΆαž“αŸ–

PostgreSQL(10.5) αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž…αž˜αŸ’αžšαž»αŸ‡ (OLTP+DSS) αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž€αž˜αŸ’αžšαž·αžαž˜αž’αŸ’αž™αž˜αž‘αŸ…αžŸαŸ’αžšαžΆαž› αž”αž„αŸ’αž αŸ„αŸ‡αž€αŸ’αž“αž»αž„αž–αž–αž€ AWS αŸ”
αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αŸ αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž‡αžΆαž§αž”αž€αžšαžŽαŸ AWS αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαž·αž…αžαž½αž…αž”αŸ†αž•αž»αžαŸ”

αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž˜αž‘αžΆαžšαŸ–

αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž“αž·αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ αžŸαŸ’αžœαŸ‚αž„αžšαž€ αž“αž·αž„αž˜αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ†αž”αžΌαž„αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αžŸαŸ†αžŽαž½αžšαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αŸ’αž„αž“αŸ‹αŸ”

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžαŸ’αž›αžΈαŸ— αž¬αž€αžΆαžšαžœαž·αž—αžΆαž‚αž“αŸƒαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™

αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž…αžΌαžšαž™αžΎαž„αž–αŸ’αž™αžΆαž™αžΆαž˜αžœαž·αž—αžΆαž‚αž‡αž˜αŸ’αžšαžΎαžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž–αžΈαž…αŸ†αžŽαž»αž…αž“αŸƒαž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž“αŸƒαž€αžΆαžšαžœαž·αž—αžΆαž‚αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž“αŸƒαž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸ αž“αž·αž„αž”αž‰αŸ’αž αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαž·αžŸαŸ’αžœαž€αžš αž αžΎαž™αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžŠαŸ‚αž›αžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαž”αž»αž‚αŸ’αž‚αž›αž·αž€ αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸ αž“αž·αž„αž€αžΆαžšαžαžΆαžαž”αž„αŸ‹αŸ” αž“αŸƒαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αŸ”

αž‡αž˜αŸ’αžšαžΎαžŸαž‘αžΈ 1 - "αž’αŸ’αžœαžΎαž€αžΆαžšαžαžΆαž˜αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžš"

αž™αžΎαž„β€‹αž‘αž»αž€β€‹αž’αŸ’αžœαžΈβ€‹αž‚αŸ’αžšαž”αŸ‹β€‹αž™αŸ‰αžΆαž„β€‹αžŠαžΌαž…β€‹αžœαžΆβ€‹αžŠαŸ‚αžšαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αžαž·αžαž·αž‡αž“αž˜αž·αž“αž–αŸαž‰αž…αž·αžαŸ’αžαž“αžΉαž„αž’αŸ’αžœαžΈαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαž»αžαž—αžΆαž– αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž¬αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ„αŸ‡ αž‚αžΆαžαŸ‹αž“αžΉαž„αž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αžŠαž›αŸ‹αžœαž·αžŸαŸ’αžœαž€αžš DBA αžαžΆαž˜αžšαž™αŸˆαž’αŸŠαžΈαž˜αŸ‚αž› αž¬αžŠαŸ„αž™αž”αž„αŸ’αž€αžΎαžαž§αž”αŸ’αž”αžαŸ’αžαž·αž αŸαžαž»αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž’αž”αŸ‹αžŸαŸ†αž”αž»αžαŸ’αžšαŸ”
αžœαž·αžŸαŸ’αžœαž€αžš αž”αžΆαž“αž‘αž‘αž½αž›αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αž˜αž½αž™ αž“αžΉαž„αž™αž›αŸ‹αž–αžΈαž”αž‰αŸ’αž αžΆ αž•αŸ’αžαž›αŸ‹αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ αž¬αž”αž·αž‘αž”αžΆαŸ†αž„αž”αž‰αŸ’αž αžΆ αžŠαŸ„αž™αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž’αŸ’αžœαžΈαŸ—αž“αžΉαž„αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αž αžΎαž™αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž’αŸ’αžœαžΈαŸ—αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αŸ†αž—αŸ’αž›αŸαž…αž…αŸ„αž›αž€αŸ’αž“αž»αž„αž–αŸαž›αž†αžΆαž”αŸ‹αŸ—αž“αŸαŸ‡αŸ”
αž“αŸ†αžαŸ’αž‰αžΈ αž“αž·αž„αž“αŸ†αžŠαžΌαžŽαžΆαžαŸ‹ αžŸαŸ’αž“αžΆαž˜αž‡αžΆαŸ† αž“αž·αž„αžŸαŸ’αž“αžΆαž˜αž‡αžΆαŸ†αž“αŸ†αžαŸ’αž‰αžΈ αž“αž·αž„αž“αŸ†αžŠαžΌαžŽαžΆαžαŸ‹αŸ–
1. αž‚αŸ’αž˜αžΆαž“αž’αŸ’αžœαžΈαž”αž“αŸ’αžαŸ‚αž˜αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎ
2. αžαŸ‚αž„αžαŸ‚αž˜αžΆαž“αž±αž€αžΆαžŸαž…αŸαž‰αž€αŸ’αžšαŸ… αž“αž·αž„αž€αžαŸ’αžœαž€αŸ‹αŸ”
3. αž–αŸαž›αžœαŸαž›αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž…αŸ†αžŽαžΆαž™αžαžΆαž˜αž€αžΆαžšαžŸαŸ†αžšαŸαž…αž…αž·αžαŸ’αžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”
αžŸαŸ’αž“αžΆαž˜αž‡αžΆαŸ† αž“αž·αž„αžŸαŸ’αž“αžΆαž˜αž‡αžΆαŸ†αŸ–
1. αž˜αž·αž“αž™αžΌαžšαž˜αž·αž“αž†αžΆαž”αŸ‹ αž’αžαž·αžαž·αž‡αž“αž“αžΉαž„αž‚αž·αžαž’αŸ†αž–αžΈαžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž“αŸƒαž—αžΆαž–αž‡αžΆ αž“αž·αž„αž™αž»αžαŸ’αžαž·αž’αž˜αŸŒαžŸαž€αž›αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž·αž—αž–αž›αŸ„αž€αž“αŸαŸ‡ αž αžΎαž™αžŸαž½αžšαžαŸ’αž›αž½αž“αž―αž„αž˜αŸ’αžαž„αž‘αŸ€αžαž“αžΌαžœαžŸαŸ†αžŽαž½αžšαžαžΆ αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαžαŸ’αž‰αž»αŸ†αž”αž„αŸ‹αž”αŸ’αžšαžΆαž€αŸ‹αž±αŸ’αž™αž–αž½αž€αž‚αŸ? αž•αž›αžœαž·αž”αžΆαž€αž‚αžΊαžαŸ‚αž„αžαŸ‚αžŠαžΌαž…αž‚αŸ’αž“αžΆ - αžŸαŸ†αžŽαž½αžšαžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž‚αžΊαž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αžαž·αžαž·αž‡αž“αž’αž»αž‰αž‘αŸ’αžšαžΆαž“αŸ‹αž αžΎαž™αž‚αŸ’αžšαžœαžΈαž›αžΆαŸ” αž αžΎαž™αž§αž”αž€αžšαžŽαŸαž”αŸ†αž›αŸ‚αž„αž‚αžΊαž‘αž‘αŸαŸ” αžœαžΆβ€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αž€αŸ’αžšαŸ€αž˜αž€αŸ’αžšαŸ†αŸ”
2. αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžœαž·αžŸαŸ’αžœαž€αžšαž‚αžΊαžŸαžΌαž“αŸ’αž™αŸ”
3. αž—αžΆαž–αž›αŸ†αž”αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαž„αžΆαžšαžšαŸ€αž”αž…αŸ†αž•αŸ‚αž“αž€αžΆαžšαž“αž·αž„αž€αžΆαžšαž•αŸ’αž‘αž»αž€

αž‡αž˜αŸ’αžšαžΎαžŸαž‘αžΈ 2 - "αžšαžΆαŸ†αž‡αžΆαž˜αž½αž™ tambourines αž–αžΆαž€αŸ‹αž“αž·αž„αž–αžΆαž€αŸ‹αžŸαŸ’αž”αŸ‚αž€αž‡αžΎαž„"

αž€αžαžΆαžαžŽαŸ’αžŒ 1- αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ αž™αžΎαž„αž“αžΉαž„αž‘αž‘αž½αž›αžŸαŸ†αžŽαžΎαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αž™αžΎαž„αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ†αžŽαž½αžšαž‚αŸ’αžšαž”αŸ‹αž”αŸ’αžšαž—αŸαž‘αž‘αŸ…αž€αžΆαž“αŸ‹αžœαž…αž“αžΆαž“αž»αž€αŸ’αžšαž˜αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αžαžΆαž˜αžœαž“αŸ’αž αž”αžΎαž€αž”αž‰αŸ’αž‡αžšαž‚αŸ’αžšαž”αŸ‹αž”αŸ’αžšαž—αŸαž‘ αž“αžΆαŸ†αž™αž€αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„ αžœαž·αž—αžΆαž‚αž”αž‰αŸ’αž‡αžΈ αž“αž·αž„αžαžΆαžšαžΆαž„αžαžΆαž˜αž€αžΆαž›αž€αŸ†αžŽαžαŸ‹αŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž™αžΎαž„αž˜αžΆαž“αž€αŸ’αžšαžΆαž αŸ’αžœ αžαžΆαžšαžΆαž„ αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸ αžŠαŸαžŸαŸ’αžšαžŸαŸ‹αžŸαŸ’αž’αžΆαž αž¬αž˜αž·αž“αžŸαžΌαžœαž…αŸ’αž”αžΆαžŸαŸ‹αŸ” αžšαžΏαž„αžŸαŸ†αžαžΆαž“αŸ‹ - αž“αŸ„αŸ‡αž“αžΉαž„αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αŸ”
αž€αžαžΆαžαžŽαŸ’αžŒ 2αž”αž„αŸ’αž€αžΎαžαžŸαž€αž˜αŸ’αž˜αž—αžΆαž– - αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαžœαž·αž—αžΆαž‚αž“αŸƒαž’αŸ’αžœαžΈαŸ—αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αŸ”
αž€αžαžΆαžαžŽαŸ’αžŒ 3- αž™αžΎαž„αž€αŸ†αž–αž»αž„αžšαŸ€αž”αž…αŸ†αž―αž€αžŸαžΆαžšαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™ αž™αžΎαž„αž αŸ…αž―αž€αžŸαžΆαžšαž“αŸαŸ‡αžŠαŸ„αž™αžŸαžΆαž˜αž‰αŸ’αž‰ - "αžαžΎαž™αžΎαž„αž”αŸ†αž–αžΆαž€αŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ„αž™αžšαž”αŸ€αž”αžŽαžΆ" αŸ”
αž€αžαžΆαžαžŽαŸ’αžŒ 4- αž’αžαž·αžαž·αž‡αž“αžŠαŸ„αž™αž˜αžΎαž›αžƒαžΎαž‰αž—αžΆαž–αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αž“αŸƒαž€αŸ’αžšαžΆαž αŸ’αžœ αž“αž·αž„αžαž½αž›αŸαžαž“αŸαŸ‡ αžŸαŸ’αžαž·αžαž€αŸ’αž“αž»αž„αž—αžΆαž–αž‡αžΏαž‡αžΆαž€αŸ‹αžŠαŸαž†αŸ„αžαž›αŸ’αž„αž„αŸ‹αžšαž”αžŸαŸ‹αž€αžΌαž“αž€αŸ’αž˜αŸαž„ - αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αžœαžΈαŸ—αž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αž†αžΆαž”αŸ‹αŸ—αž“αŸαŸ‡αŸ” αž αžΎαž™ αž„αžΆαž™αžŸαŸ’αžšαž½αž› αž“αž·αž„αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαžˆαžΊαž…αžΆαž”αŸ‹ αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž‡αžΆαž˜αž½αž™αž’αž“αž’αžΆαž“αž αž·αžšαž‰αŸ’αž‰αžœαžαŸ’αžαž»αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ” αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αŸαž”αŸ’αžšαžΆαž€αžŠαžαžΆαžœαž·αžŸαŸ’αžœαž€αžšαžšαž”αžŸαŸ‹αž™αžΎαž„αž€αŸ†αž–αž»αž„αž’αŸ’αžœαžΎαž€αžΆαžšαž™αŸ‰αžΆαž„αž›αŸ†αž”αžΆαž€αŸ” αž€αžΆαžšαž•αŸ’αž‘αž»αž€αž’αžαž·αž”αžšαž˜αžΆαŸ”
αž€αžαžΆαžαžŽαŸ’αžŒ 5- αž’αŸ’αžœαžΎαž‡αŸ†αž αžΆαž“αž‘αžΈ 1 αž˜αŸ’αžαž„αž‘αŸ€αžαž‡αžΆαž‘αŸ€αž„αž‘αžΆαžαŸ‹αŸ”
αž“αŸ†αžαŸ’αž‰αžΈ αž“αž·αž„αž“αŸ†αžŠαžΌαžŽαžΆαžαŸ‹ αžŸαŸ’αž“αžΆαž˜αž‡αžΆαŸ† αž“αž·αž„αžŸαŸ’αž“αžΆαž˜αž‡αžΆαŸ†αž“αŸ†αžαŸ’αž‰αžΈ αž“αž·αž„αž“αŸ†αžŠαžΌαžŽαžΆαžαŸ‹αŸ–
1. αž‡αžΈαžœαž·αžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ αž“αž·αž„αžœαž·αžŸαŸ’αžœαž€αžšαž‚αžΊαžŸαžΆαž˜αž‰αŸ’αž‰ αž’αžΆαž…αž‘αžŸαŸ’αžŸαž“αŸαž‘αžΆαž™αž”αžΆαž“ αž“αž·αž„αž–αŸ„αžšαž–αŸαž‰αž‘αŸ…αžŠαŸ„αž™αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αŸ” αž’αŸ’αžœαžΈβ€‹αž‚αŸ’αžšαž”αŸ‹β€‹αž™αŸ‰αžΆαž„β€‹αž‚αžΊβ€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αž—αŸ’αž‰αžΆαž€αŸ‹β€‹αž•αŸ’αž’αžΎαž›β€‹αž’αŸ’αž“αž€β€‹αžšαžΆαž›αŸ‹β€‹αž‚αŸ’αž“αžΆβ€‹αž‚αžΊβ€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αžšαžœαž›αŸ‹β€‹αŸ”
2. αž‡αžΈαžœαž·αžαžšαž”αžŸαŸ‹αž’αžαž·αžαž·αž‡αž“αž€αŸαž˜αž·αž“αž’αžΆαž€αŸ’αžšαž€αŸ‹αžŠαŸ‚αžš - αž‚αžΆαžαŸ‹αžαŸ‚αž„αžαŸ‚αž”αŸ’αžšαžΆαž€αžŠαžαžΆαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž’αžαŸ‹αž’αŸ’αž˜αžαŸ‹αž”αž“αŸ’αžαž·αž… αž αžΎαž™αž’αŸ’αžœαžΈαŸ—αž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αžœαžΆαž˜αž·αž“αž€αžΆαž“αŸ‹αžαŸ‚αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž‘αŸ αž›αŸ’αž’ - αž–αž·αž—αž–αž›αŸ„αž€αž“αŸαŸ‡αž‚αžΊαž’αž™αž»αžαŸ’αžαž·αž’αž˜αŸŒαž€αŸ’αž“αž»αž„αž‡αžΈαžœαž·αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹ - αž’αŸ’αž“αž€αž“αžΉαž„αž˜αžΆαž“αžŸαŸ†αžŽαžΆαž„αŸ”
αžŸαŸ’αž“αžΆαž˜αž‡αžΆαŸ† αž“αž·αž„αžŸαŸ’αž“αžΆαž˜αž‡αžΆαŸ†αŸ–
1. αž˜αž·αž“αž™αžΌαžšαž˜αž·αž“αž†αžΆαž”αŸ‹ αž“αžΉαž„αž˜αžΆαž“αž’αŸ’αž“αž€αž•αŸ’αžαž›αŸ‹αžŸαŸαžœαžΆαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαžŠαŸαž†αŸ’αž›αžΆαžαžœαŸƒαžŠαŸ‚αž›αž“αžΉαž„αž’αŸ’αžœαžΎαžŠαžΌαž…αž‚αŸ’αž“αžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ„αž€αž‡αžΆαž„αž”αž“αŸ’αžαž·αž…αŸ” αž αžΎαž™β€‹αž”αŸ’αžšαžŸαž·αž“β€‹αž”αžΎβ€‹αž›αž‘αŸ’αž’αž•αž›β€‹αž‚αžΊβ€‹αžŠαžΌαž…β€‹αž‚αŸ’αž“αžΆ αž αŸαžαž»β€‹αž’αŸ’αžœαžΈβ€‹αž”αžΆαž“β€‹αž‡αžΆβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αž„αŸ‹β€‹αž”αž“αŸ’αžαŸ‚αž˜αŸ” αžŠαŸ‚αž›αž˜αŸ’αžαž„αž‘αŸ€αžαž“αžΉαž„αž“αžΆαŸ†αž‘αŸ…αžŠαž›αŸ‹αž€αžΆαžšαž”αžΆαžαŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹ feeder αŸ”
2. αžœαžΆαž‚αž½αžšαž±αŸ’αž™αž’αž»αž‰αŸ” αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžŠαŸαž˜αžΆαž“αž’αžαŸ’αžαž“αŸαž™αžαž·αž…αžαž½αž…αž‚αž½αžšαž±αŸ’αž™αž’αž»αž‰αž”αŸ‰αž»αžŽαŸ’αžŽαžΆαŸ”
3. αžŠαžΌαž…αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαŸ‚αž˜αž»αž“ - αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αŸαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαž·αžŸαŸ’αžœαž€αžš αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αž‚αžΊαžαžΆ αž˜αž·αž“αžŠαžΌαž…αž‡αž˜αŸ’αžšαžΎαžŸαž‘αžΈαž˜αž½αž™αž‘αŸ αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαž IDB αž‡αžΆαž“αž·αž…αŸ’αž…αŸ” αž αžΎαž™αžœαžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αŸαž›αžœαŸαž›αžΆαŸ” αžŠαŸ‚αž›αž’αžΆαž…αž…αŸ†αžŽαžΆαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‡αžΆαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžŠαž›αŸ‹αž˜αž“αž»αžŸαŸ’αžŸαž‡αžΆαž‘αžΈαžŸαŸ’αžšαž›αžΆαž‰αŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž–αŸ’αžšαŸ„αŸ‡β€‹αž’αŸ’αž“αž€β€‹αž˜αž·αž“β€‹αž’αžΆαž…β€‹αž˜αžΎαž›β€‹αžαŸ‚β€‹αžαŸ’αž›αž½αž“β€‹αž―αž„β€‹αž”αžΆαž“ αž’αŸ’αž“αž€β€‹αžšαžΆαž›αŸ‹β€‹αž‚αŸ’αž“αžΆβ€‹αžαŸ’αžœαž›αŸ‹β€‹αž–αžΈβ€‹αž’αŸ’αž“αž€αŸ”

αž‡αž˜αŸ’αžšαžΎαžŸαž‘αžΈ 3- αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž”αž„αŸ’αž€αžΎαžαž€αž„αŸ‹αž‘αŸ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž‘αž·αž‰αžœαžΆαž˜αž€αž‡αž·αŸ‡αŸ”

αžœαž·αžŸαŸ’αžœαž€αžšαž˜αž€αž–αžΈαž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‰αŸ‰αžΆαŸ†αž—αžΈαž αŸ’αžŸαžΆαž‡αžΆαž˜αž½αž™αžŸαŸ’αžšαžΆαž”αŸ€αžšαžŠαŸ„αž™αž…αŸαžαž“αžΆ (ធូ αž–αŸαž›αžœαŸαž›αžΆαžŠαŸαžšαž»αž„αžšαžΏαž„αžšαž”αžŸαŸ‹αžŸαžΆαŸ†αž„αž–αŸαž‘αžΊαž”αŸŠαžΊαž‚αž€αŸ’αž“αž»αž„αž‘αžŸαžœαžαŸ’αžŸαžšαŸαž‘αžΈ 90)αŸ” αžαŸ„αŸ‡αž”αŸ’αžšαžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαž αž”αŸ†αž”αžΆαžαŸ‹αž€αŸ†αž αž»αžŸ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž αžΎαž™αž‡αžΆαž‘αžΌαž‘αŸ…αžœαžΆαž“αžΆαŸ†αž˜αž€αž“αžΌαžœαž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸ (αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ)αŸ”
αž“αŸ†αžαŸ’αž‰αžΈ αž“αž·αž„αž“αŸ†αžŠαžΌαžŽαžΆαžαŸ‹ αžŸαŸ’αž“αžΆαž˜αž‡αžΆαŸ† αž“αž·αž„αžŸαŸ’αž“αžΆαž˜αž‡αžΆαŸ†αž“αŸ†αžαŸ’αž‰αžΈ αž“αž·αž„αž“αŸ†αžŠαžΌαžŽαžΆαžαŸ‹αŸ–
1. αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αž‡αŸ‡αžαŸ’αž‡αžΆαž™αž–αŸαž›αžœαŸαž›αžΆαž”αž„αŸ’αž€αžΎαžαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžšαž½αž…αž αžΎαž™αŸ” αž™αž€αž αžΎαž™αž”αŸ’αžšαžΎαŸ”
2. αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαžŠαŸ„αž™αž˜αž“αž»αžŸαŸ’αžŸαž›αŸ’αž„αžΈαž›αŸ’αž„αžΎαž‘αŸ αž αžΎαž™αž–αž·αžαžŽαžΆαžŸαŸ‹αžœαžΆαž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαŸ”
3. αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαž„αžΆαžšαž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž•αŸ’αžαž›αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž…αž˜αŸ’αžšαŸ„αŸ‡αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαŸ”
αžŸαŸ’αž“αžΆαž˜αž‡αžΆαŸ† αž“αž·αž„αžŸαŸ’αž“αžΆαž˜αž‡αžΆαŸ†αŸ–
1. αžœαž·αžŸαŸ’αžœαž€αžšβ€‹αž€αŸ’αž“αž»αž„β€‹αž€αžšαžŽαžΈβ€‹αž“αŸαŸ‡β€‹αž˜αž·αž“β€‹αž˜αŸ‚αž“β€‹αž‡αžΆβ€‹αžœαž·αžŸαŸ’αžœαž€αžšβ€‹αž‘αŸβ€‹αž‚αžΊβ€‹αž‚αŸ’αžšαžΆαž“αŸ‹β€‹αžαŸ‚β€‹αž‡αžΆβ€‹αž’αŸ’αž“αž€β€‹αž”αŸ’αžšαžΎβ€‹αž”αŸ’αžšαžΆαžŸαŸ‹β€‹αž•αž›αž·αžβ€‹αž•αž›β€‹αžšαž”αžŸαŸ‹β€‹αž’αŸ’αž“αž€β€‹αžŠαž‘αŸƒβ€‹αž¬β€‹αž’αŸ’αž“αž€β€‹αž”αŸ’αžšαžΎβ€‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”
2. αž’αžαž·αžαž·αž‡αž“αžαŸ’αžšαžΌαžœαžαŸ‚αž‡αžΏαž‡αžΆαž€αŸ‹αž›αžΎαžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž‘αž·αž‰αžšαž”αžŸαŸ‹αžŠαŸ‚αž›αž‡αžΆαž‘αžΌαž‘αŸ…αž‚αžΆαžαŸ‹αž˜αž·αž“αž…αž„αŸ‹αž™αž›αŸ‹ αž αžΎαž™αž‚αžΆαžαŸ‹αž˜αž·αž“αž‚αž½αžš αž αžΎαž™αž‡αžΆαž‘αžΌαž‘αŸ…αžαžœαž·αž€αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž†αŸ’αž“αžΆαŸ†αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αž˜αŸαžαž αžΎαž™αž“αžΉαž„αž˜αž·αž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αŸ‚αž„αž…αŸ‚αž€αž’αž“αž’αžΆαž“αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ” αž‘αžΆαŸ†αž„αž“αŸ„αŸ‡αŸ” αžŠαŸ†αž”αžΌαž„αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž„αŸ‹αž”αŸ’αžšαžΆαž€αŸ‹ αž”αž„αŸ‹ αž αžΎαž™αž”αž„αŸ‹αž˜αŸ’αžαž„αž‘αŸ€αžαŸ” αž αžΎαž™αž’αžαž·αžαž·αž‡αž“αž‚αžΊαž›αŸ’αž„αž„αŸ‹ αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αž‘αžŠαŸ’αž‹αžΆαž“αž“αŸƒαž‡αžΈαžœαž·αžαž“αŸαŸ‡αŸ”

αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎ, Chernyshevsky? αžŸαŸ†αžŽαž½αžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‚αžΊαž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αžαŸ’αž›αžΆαŸ†αž„αžŽαžΆαžŸαŸ‹αŸ” (αž‡αžΆαž˜αž½αž™)

αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž–αž·αžŸαŸαžŸαž“αŸαŸ‡ αž“αž·αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αž’αŸ’αž“αž€αž’αžΆαž…αž’αŸ’αžœαžΎαžαž»αžŸαž‚αŸ’αž“αžΆαž”αž“αŸ’αžαž·αž…αž”αž“αŸ’αžαž½αž… - αžαŸ„αŸ‡αž”αž„αŸ’αž€αžΎαžαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”
αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž“αŸƒαžŸαŸ†αžŽαž½αžš PostgreSQL αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1 - αž€αžΆαžšαžšαžΆαž™αž€αžΆαžšαžŽαŸ
αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‘αŸ αž€αŸ’αž“αž»αž„αž“αŸαž™αž–αŸαž‰αž›αŸαž‰αž“αŸƒαž–αžΆαž€αŸ’αž™ αž“αŸαŸ‡αž‚αžΊαžαŸ’αž›αžΆαŸ†αž„αž–αŸαž€ αž“αž·αž„αž‚αž½αžšαž±αŸ’αž™αž‚αŸ„αžšαž– αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αž€αŸαž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž›αž½αž“αž’αŸ’αž“αž€ αž“αž·αž„αž”αŸ’αžšαž˜αžΌαž›αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž§αž”αŸ’αž”αžαŸ’αžαž·αž αŸαžαž»αž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαŸ” αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž€αž»αŸ†β€‹αž±αŸ’αž™β€‹αžƒαžΎαž‰β€‹αžαŸ’αž›αž½αž“β€‹αž―αž„β€‹αžŸαŸ’αžαž·αžβ€‹αž€αŸ’αž“αž»αž„β€‹αžŸαŸ’αžαžΆαž“αž—αžΆαž–β€‹αž˜αž½αž™ - "αž‘αŸ…β€‹αž‘αžΈαž“αŸ„αŸ‡ αžαŸ’αž‰αž»αŸ†β€‹αž˜αž·αž“β€‹αžŠαžΉαž„β€‹αž€αž“αŸ’αž›αŸ‚αž„β€‹αžŽαžΆ αžšαž€β€‹αžƒαžΎαž‰β€‹αž“αŸ„αŸ‡ αžαŸ’αž‰αž»αŸ†β€‹αž˜αž·αž“β€‹αžŠαžΉαž„β€‹αž’αŸ’αžœαžΈβ€‹αž‘αŸ"αŸ”

αžαžΎαž’αŸ’αžœαžΈαž‘αŸ…αž‡αžΆαž‚αž»αžŽαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž“αž·αž„αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·αž“αŸƒαž‡αž˜αŸ’αžšαžΎαžŸαž“αŸαŸ‡:

αž”αŸ’αžšαž»αžŸ:
1. αžœαžΆαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαŸ” αž™αŸ‰αžΆαž„β€‹αž αŸ„αž…β€‹αžŽαžΆαžŸαŸ‹β€‹αž€αŸβ€‹αž‚αž½αžšβ€‹αž±αŸ’αž™β€‹αž…αžΆαž”αŸ‹β€‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸβ€‹αž‡αžΆαž„β€‹ "αž”αž„αŸ’αžšαž½αž‰β€‹αž―αž€αžŸαžΆαžšβ€‹αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž€αŸ‚αž”αŸ’αžšαŸ‚β€‹αž…αž“αŸ’αž›αŸ„αŸ‡β€‹αžαžΆαžšαžΆαž„αŸ”
2. αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž‡αŸ†αž“αžΆαž‰αžαŸ’αž˜αžΈ αž“αž·αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžαŸ’αž˜αžΈαŸ” αžŠαŸ‚αž›αž“αŸ…αž–αŸαž›αž’αž“αžΆαž‚αžαž˜αž·αž“αž™αžΌαžšαž˜αž·αž“αž†αžΆαž”αŸ‹αž“αžΉαž„αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž“αŸ†αž”αŸ‰αŸαž„αžαŸ’αž‰αžΈαž“αž·αž„αž“αŸ†αžŠαžΌαžŽαžΆαžαŸ‹αžŠαŸ‚αž›αžŸαž˜αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αŸ”
αž‚αž»αžŽαžœαž·αž”αžαŸ’αžαž·:
1. αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž€αžΆαžšαŸ” αž’αŸ’αžœαžΎαž€αžΆαžšαž…αŸ’αžšαžΎαž“αŸ”
2. αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž–αž“αŸ’αž™αž›αŸ‹αž±αŸ’αž™αž”αžΆαž“αž‘αŸ€αž„αž‘αžΆαžαŸ‹αž“αžΌαžœαž’αžαŸ’αžαž“αŸαž™ αž“αž·αž„αž‘αžŸαŸ’αžŸαž“αŸˆαž“αŸƒαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”
3. αž’αŸ’αžœαžΈαž˜αž½αž™αž“αžΉαž„αžαŸ’αžšαžΌαžœαž›αŸ‡αž”αž„αŸ‹αž–αŸ’αžšαŸ„αŸ‡αž’αž“αž’αžΆαž“αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαž·αžŸαŸ’αžœαž€αžš - αž–αŸαž›αžœαŸαž›αžΆ - αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αžŸαž€αž›αŸ”
4. αž’αžΆαž€αŸ’αžšαž€αŸ‹αž”αŸ†αž•αž»αžαž“αž·αž„αž˜αž·αž“αžŸαž”αŸ’αž”αžΆαž™αž…αž·αžαŸ’αžαž”αŸ†αž•αž»αžαŸ” - αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αžŸαŸ†αžšαžΆαž˜αžŠαžΌαž…αž‡αžΆ "αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž€αžŽαŸ’αžŠαž»αžš αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž€αž„αŸ’αž€αŸ‚αž” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαžŸαžαŸ’αžœαžαžΌαž…αžŠαŸ‚αž›αž˜αž·αž“αžŸαŸ’αž‚αžΆαž›αŸ‹" αž’αžΆαž…αž“αžΉαž„αž”αŸ’αžšαŸ‚αž‡αžΆαž…αŸαž‰αŸ”

αž’αŸ’αž“αž€αžŽαžΆαž˜αž·αž“αž”αŸ’αžšαžαž»αž™αž’αŸ’αžœαžΈαž˜αž½αž™αž˜αž·αž“αž•αžΉαž€αžŸαŸ’αžšαžΆαžŸαŸ†αž”αŸ‰αžΆαž‰αŸ”
αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž€αžΆαžšαžŸαž”αŸ’αž”αžΆαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αŸ”

αž‚αŸ†αž“αž·αžαž‘αžΌαž‘αŸ… - αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸ

αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž“αŸƒαžŸαŸ†αžŽαž½αžš PostgreSQL αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1 - αž€αžΆαžšαžšαžΆαž™αž€αžΆαžšαžŽαŸ
(αžšαžΌαž”αž—αžΆαž–αžŠαž€αžŸαŸ’αžšαž„αŸ‹αž…αŸαž‰αž–αžΈαž’αžαŸ’αžαž”αž‘ Β«αž€αžΆαžšαžŸαŸ†αž™αŸ„αž‚αž‡αžΆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž˜αž½αž™αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ‚αž›αž˜αŸ’αž’αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž PostgreSQL")

αž€αžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αŸ–

  • αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‚αŸ„αž›αžŠαŸ…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž‡αžΆαž˜αž½αž™αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜ PostgreSQL αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš β€œpg_stat_statements” αŸ”
  • αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαžŸαŸ†αžŽαž»αŸ†αžαžΆαžšαžΆαž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž”αŸ’αžšαžœαžαŸ’αžαž· pg_stat_statements αž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŠαŸ†αž”αžΌαž„ αž“αž·αž„αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αŸ‰αŸ‚αžαŸ’αžš αž“αž·αž„αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž“αžΆαž–αŸαž›αž’αž“αžΆαž‚αžαŸ”
  • αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαžŸαŸ†αžŽαž»αŸ†αž“αŸƒαžŸαŸ’αž‚αŸ’αžšαžΈαž” bash αžšαž½αž˜αž‘αžΆαŸ†αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαž§αž”αŸ’αž”αžαŸ’αžαž·αž αŸαžαž»αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŸαŸ†αž”αž»αžαŸ’αžšαŸ”

αžαžΆαžšαžΆαž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜

αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™ ERD αžŠαŸ‚αž›αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžŸαžΆαž˜αž‰αŸ’αž‰αžαžΆαž˜αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸ αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž”αžΆαž“αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹αŸ–
αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž“αŸƒαžŸαŸ†αžŽαž½αžš PostgreSQL αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1 - αž€αžΆαžšαžšαžΆαž™αž€αžΆαžšαžŽαŸ
αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαžŸαž„αŸ’αžαŸαž”αž“αŸƒαžαžΆαžšαžΆαž„αž…αž»αž„ - αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“, αž…αŸ†αžŽαž»αž…αžαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž§αž‘αžΆαž αžšαžŽαŸ
αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ - αž‡αž˜αŸ’αžšαžΎαžŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™
pg_stat_history - αžαžΆαžšαžΆαž„αž”αŸ’αžšαžœαžαŸ’αžαž·αžŸαžΆαžŸαŸ’αžšαŸ’αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžšαžΌαž”αžαžαž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž“αŸƒαž‘αž·αžŠαŸ’αž‹αž—αžΆαž– pg_stat_statements αž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‚αŸ„αž›αžŠαŸ…
metric_αžŸαž‘αŸ’αž‘αžΆαž“αž»αž€αŸ’αžšαž˜ - αžœαž…αž“αžΆαž“αž»αž€αŸ’αžšαž˜αž“αŸƒαžŸαžΌαž…αž“αžΆαž€αžšαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž
metric_config - αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αŸ‰αŸ‚αžαŸ’αžšαž”αž»αž‚αŸ’αž‚αž›
αž€αžΆαž› - αž˜αŸ‰αŸ‚αžαŸ’αžšαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ†αžŽαžΎαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™
metric_alert_history - αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“αž’αŸ†αž–αžΈαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž
log_query - αžαžΆαžšαžΆαž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžŠαŸ‚αž›αž”αžΆαž“αž‰αŸ‚αž€αž…αŸαž‰αž–αžΈαž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αž αŸαžαž» PostgreSQL αžŠαŸ‚αž›αž”αžΆαž“αž‘αžΆαž‰αž™αž€αž–αžΈ AWS
αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ - αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸƒαžšαž™αŸˆαž–αŸαž›αžŠαŸ‚αž›αž”αŸ’αžšαžΎαž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“
αž”αŸ‰αž»αžŸαŸ’αžαž·αŸαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ - αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αŸ‰αŸ‚αžαŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™
checkpoint_alert_history - αž”αŸ’αžšαžœαžαŸ’αžαž·αž–αŸ’αžšαž˜αžΆαž“αž“αŸƒαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αŸ‰αŸ‚αžαŸ’αžš
pg_stat_db_queries - αžαžΆαžšαžΆαž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž“αŸƒαžŸαŸ†αžŽαžΎαžŸαž€αž˜αŸ’αž˜
αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»β€‹αžŸαž€αž˜αŸ’αž˜αž—αžΆαž– - αžαžΆαžšαžΆαž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–
trap_oid - αžαžΆαžšαžΆαž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž’αž“αŸ’αž‘αžΆαž€αŸ‹

αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž‘αžΈ 1 - αž”αŸ’αžšαž˜αžΌαž›αžŸαŸ’αžαž·αžαž·αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž“αž·αž„αž‘αž‘αž½αž›αž”αžΆαž“αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸ

αžαžΆαžšαžΆαž„αž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž–αŸαžαŸŒαž˜αžΆαž“αžŸαŸ’αžαž·αžαž·αŸ” pg_stat_history
αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαžΆαžšαžΆαž„ pg_stat_history

                                          αžαžΆαžšαžΆαž„ "public.pg_stat_history" αž‡αž½αžš | αž”αŸ’αžšαž—αŸαž‘ | αž’αŸ’αž“αž€αž€αŸ‚αž”αŸ’αžšαŸ‚ --------------------+-------------------------+---- -------------------------------- id | αž…αŸ†αž“αž½αž“αž‚αžαŸ‹ | αž˜αž·αž“αž˜αŸ‚αž“ null default nextval('pg_stat_history_id_seq'::regclass) snapshot_timestamp | αžαŸ’αžšαžΆαž–αŸαž›αžœαŸαž›αžΆαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αžαŸ†αž”αž“αŸ‹αž–αŸαž›αžœαŸαž›αžΆ | database_id | αž…αŸ†αž“αž½αž“αž‚αžαŸ‹ | dbid | ធ៊ីដ | userid | ធ៊ីដ | αžŸαŸ†αžŽαž½αžš | αž’αŸ† | αžŸαŸ†αžŽαž½αžš | αž’αžαŸ’αžαž”αž‘ | αž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαŸαž–αŸ’αž‘ | αž’αŸ† | αž–αŸαž›αžœαŸαž›αžΆαžŸαžšαž»αž” | αž—αžΆαž–αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž‘αŸ’αžœαŸαžŠαž„ | min_time | αž—αžΆαž–αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž‘αŸ’αžœαŸαžŠαž„ | max_time | αž—αžΆαž–αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž‘αŸ’αžœαŸαžŠαž„ | mean_time | αž—αžΆαž–αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž‘αŸ’αžœαŸαžŠαž„ | stddev_time | αž—αžΆαž–αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž‘αŸ’αžœαŸαžŠαž„ | αž‡αž½αžš | αž’αŸ† | 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_សរសេរ | αž’αŸ† | 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_base"KeyData" ) αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž™αŸ„αž„(id ) αž“αŸ…αž›αžΎαž€αžΆαžšαž›αž»αž” 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 ;

D.B. αž–αŸαž›αžœαŸαž›αžΆ

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 តអម total_time

αžŸαŸ†αžŽαžΎ

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 αžŠαŸ„αž™αž–αŸαž›αžœαŸαž›αžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžŸαžšαž»αž” | #| αžŸαŸ†αžŽαž½αžš | αž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαŸαž–αŸ’αž‘ | αž αŸ… %| αž–αŸαž›αžœαŸαž›αžΆαžŸαžšαž»αž” (ms) | dbtime % ++----+-----------+-----------+----------+-------- -----------------+---------- | ៑| 1| ្| .821760255|2:00001:00(03 ms.)| αŸ₯.ៀ្ | ្| 23.141| ្| .203141.681|5.42:2:4152624390(2 ms.)| αŸ₯.៑៧ | ៣| 00001| ៀ| .00|03:13.929:193929.215(5.17 ms.)| ៣.ៀៀ | ៀ| ៦αŸ₯αŸ₯៧្៩្៧៣| ៑| .3|1484454471:4:00001(00 ms.)| ៣.្αŸ₯ | αŸ₯| 02| ៑| .09.129|129129.057:3.44:4( 655729273 ms.)| 1 | ៦| 00000| ៀ| .00|02:01.869:121869.981(3.25 ms.)| .5 | ៧| 2460318461| ៑| .1|00000:00:01(33.113 ms.)| .៑៦ | ៨| ៣៦ៀៀ៧៨០្៨៦| ៑| .93113.835|2.48:6:2194493487(4 ms.)| .០៣

TOP10 SQL αžαžΆαž˜αž–αŸαž›αžœαŸαž›αžΆ I/O αžŸαžšαž»αž”

αžŸαŸ†αžŽαžΎ

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
---------------------------------------------------------------- --------------------------------------- | TOP10 SQL αžŠαŸ„αž™ TOTAL I/O TIME | #| αžŸαŸ†αžŽαž½αžš | αž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαŸαž–αŸ’αž‘ | αž αŸ… %| αž–αŸαž›αžœαŸαž›αžΆ I/O (ms)|db I/O time % ++----+----------+----------+-------- ----------+--------------------------------+---------- --| ៑| 1| ្| .4152624390|2:00001:00(08 ms.)| ៣៑ αž˜αž·αžαž»αž“αžΆ | ្| 31.616| ្| .511616.592|31.06:2:821760255(2 ms.)| ៣០.៧៨ | ៣| ៦αŸ₯αŸ₯៧្៩្៧៣| ៑| .00001|00:08:27.099( 507099.036 ms.)| 30.78 | ៀ| 3| ៑| .655729273|1:00000:00(05 ms.)| ៑ៀ.៩៣ | αŸ₯| 02.209| ៀ| .302209.137|18.35:4:2460318461(1 ms.)| 00000 | ៦| 00| ៀ| .04|05.981:245981.117:14.93(5 ms.)| ៑.៑០ | ៧| 1484454471| ៑| .4|00001:00:00(39.144 ms.)| 39144.221 | ៨| ៣៦ៀៀ៧៨០្៨៦| ៑| .2.38|6:2194493487:4(00001 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 αžŠαŸ„αž™αž–αŸαž›αžœαŸαž›αžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž’αžαž·αž”αžšαž˜αžΆ | #| αžšαžΌαž”αžαž | snapshotID| αžŸαŸ†αžŽαž½αžš | max_time (ms) +----+--------------------+-----------------+-------- ---------------------------------------------------- | ៑| ០ៀ/០αŸ₯/្០៑៩ αž˜αŸ‰αŸ„αž„ ០៑:០៣| ៀ៑៦៩| ៦αŸ₯αŸ₯៧្៩្៧៣| 1:05.04.2019:01(03 ms.) | ្| 4169/655729273/00 02:01.869| ៀ៑αŸ₯៣| 121869.981| 2:04.04.2019:17(00 ms.) | ៣| 4153/821760255/00 01:41.570| ៀ៑ៀ៦| 101570.841| 3:04.04.2019:16(00 ms.) | ៀ| 4146/821760255/00 01:41.570| ៀ៑ៀៀ| 101570.841| 4:04.04.2019:16( 00 ms.) | αŸ₯| 4144/4152624390/00 01:36.964| ៀ៑αŸ₯៑| 96964.607| 5:04.04.2019:17( 00 ms.) | ៦| 4151/4152624390/00 01:36.964 | ៀ៑៨៨| 96964.607| 6:05.04.2019:10( 00 ms.) | ៧| 4188/1484454471/00 01:33.452| ៀ៑αŸ₯០| 93452.150| 7:04.04.2019:17( 00 ms.) | ៨| 4150/2460318461/00 01:33.113| 93113.835| 8| 04.04.2019:15:00(4140 ms.) | ៩| 1484454471/00/00 11.892:11892.302| ៀ៑ៀαŸ₯| 9| 04.04.2019:16:00(4145 ms.) | ៑០| 1484454471/00/00 11.892:11892.302| ៀ៑αŸ₯្| 10| 04.04.2019:17:00(4152 ms.)

TOP10 SQL αžŠαŸ„αž™ SHARED buffer read/write

αžŸαŸ†αžŽαžΎ

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 αžŠαŸ„αž™αž€αžΆαžšαž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€ buffer αž’αžΆαž“/សរសេរ | #| αžšαžΌαž”αžαž | snapshotID| αžŸαŸ†αžŽαž½αžš | αž”αŸ’αž›αž»αž€αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€ αž’αžΆαž“| αž”αŸ’αž›αž»αž€αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αžŸαžšαžŸαŸαžš ----+------------------+-----------------+---------- ------------------------+--------------------- | ៑| 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 ------------------------------------------------ ------------------------------------------------

αž’αŸŠαžΈαžŸαŸ’αžαžΌαž€αŸ’αžšαžΆαž˜αž“αŸƒαž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αžŸαŸ†αžŽαž½αžšαžŠαŸ„αž™αž–αŸαž›αžœαŸαž›αžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž’αžαž·αž”αžšαž˜αžΆ

αžŸαŸ†αžŽαžΎ

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 HISTOGRAM | αž€αžΆαžšαž αŸ…αžŸαžšαž»αž”αŸ– 33851920 | MIN TIME : 00:00:01.063 | MAX TIME : 00:02:01.869 --------------------------------------------- ---------------------------- | αžšαž™αŸˆαž–αŸαž›αž’αž”αŸ’αž”αž”αžšαž˜αžΆ| αžšαž™αŸˆαž–αŸαž›αž’αžαž·αž”αžšαž˜αžΆ| αž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαŸαž–αŸ’αž‘ ---------------------------------------------------- ---------------------+---------- | 00:00:01.063(1063.830 ms.) | 00:00:13.144(13144.445 ms.) | ៩ | 9:00:00(13.144 ms.) | 13144.445:00:00(25.225 ms.) | 25225.060 | 0:00:00(25.225 ms.) | 25225.060:00:00(37.305 ms.) | 37305.675 | 0:00:00(37.305 ms.) | 37305.675:00:00(49.386 ms.) | 49386.290 | 0:00:00(49.386 ms.) | 49386.290:00:01( 01.466 ms.) | 61466.906 | 0:00:01( 01.466 ms.) | 61466.906:00:01(13.547 ms.) | 73547.521 | 0:00:01(13.547 ms.) | 73547.521:00:01(25.628 ms.) | 85628.136 | 0:00:01(25.628 ms.) | 85628.136:00:01(37.708 ms.) | ៀ | 97708.751:4:00(01 ms.) | 37.708:97708.751:00(01 ms.) | ្ | 49.789:109789.366:2(00 ms.) | 01:49.789:109789.366(00 ms.) | 02

αžšαžΌαž”αžαž 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
|---------------------------------------------------------------- ---------------------------------------- | αžšαžΌαž”αžαž TOP10 αžŠαŸ‚αž›αž”αž‰αŸ’αž‡αžΆαžŠαŸ„αž™αž›αŸαž QueryPerSeconds --------------------------------------------- ---------------------------------------------------------- --------------------------------------------- | #| αžšαžΌαž”αžαž | snapshotID| αž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαŸαž–αŸ’αž‘ | dbtime αžŸαžšαž»αž”| QPS | αž–αŸαž›αžœαŸαž›αžΆ I/O | αž–αŸαž›αžœαŸαž›αžΆ I/O % +-----+------------------+-----------------+-------- ----+-------------------------------------+---------- ------------------------------------+----------- | ៑| ០ៀ/០ៀ/្០៑៩ αž˜αŸ‰αŸ„αž„ ្០:០ៀ| ៀ៑៦៑| 1| 04.04.2019:20:04( 4161 ms.)| ៑αŸ₯៧៣.៣៩៦| 5758631:00:06(30.513 ms.)| .៣៧៦ | ្| 390513.926/1573.396/00 00:01.470| ៀ៑ៀ៩| 1470.110| 376:2:04.04.2019(17 ms.)| 00| 4149:3529197:00(11 ms.)| 48.830 | ៣| 708830.618/980.332/00 12:47.834| ៀ៑ៀ៣| ៣αŸ₯្αŸ₯៣៦០| 767834.052:108.324:3( 04.04.2019 ms.)| 16| 00:4143:3525360( 00 ms.)| 10 | ៀ| ០ៀ/០ៀ/្០៑៩ ្៑:០៣| ៀ៑៦៣| ្៧៨៑αŸ₯៣៦| 13.492:613492.351:979.267(00 ms.)| 08| 41.396:521396.555:84.988(4 ms.)| .៑៣ៀ | αŸ₯| ០ៀ/០ៀ/្០៑៩ αž˜αŸ‰αŸ„αž„ ៑៩:០៣| ៀ៑αŸ₯៩| ្៨៩០៣៦្| 04.04.2019:21:03(4163 ms.)| 2781536| 00:03:06.470(186470.979 ms.)| .785.745 | ៦| 00/00/00.249 249.865:134| ៀ៑៣៧| 5| 04.04.2019:19:03(4159 ms.)| ៦៦αŸ₯.៩្ៀ| 2890362:00:03(16.784 ms.)| .196784.755 | ៧| 776.979/00/00 01.441:1441.386| ៀ៑៣៩| 732| 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.)| .០្ៀ | ៩| ០ៀ/០αŸ₯/្០៑៩ αž˜αŸ‰αŸ„αž„ ០៑:០៣| ៀ៑៦៧| ៀ៣៨៧៑៩៑| 00:04:51.435(291435.010 ms.)| ៦០៩.៣៣្| 665.116:00:00( 12.025 ms.)| 12025.895 | ៑០| ០ៀ/០ៀ/្០៑៩ αž˜αŸ‰αŸ„αž„ ៑៨:០៑| ៀ៑αŸ₯៧| ៑៑ៀαŸ₯αŸ₯៩៦| 4.126:8:04.04.2019(13 ms.)| 00| 4135:2373043:00(04 ms.)| ៑.៦៦៦

αž”αŸ’αžšαžœαžαŸ’αžαž·αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž˜αŸ‰αŸ„αž„αž‡αžΆαž˜αž½αž™ QueryPerSeconds αž“αž·αž„ I/O Time

αžŸαŸ†αžŽαžΎ

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

αž›αž‘αŸ’αž’αž•αž›

αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αžŠαŸ„αž™αž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αžŸαžΆαž˜αž‰αŸ’αž‰αžŸαž˜αžšαž˜αŸ’αž™ αž’αŸ’αž“αž€αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž‡αžΆαž…αŸ’αžšαžΎαž“αž’αŸ†αž–αžΈαž”αž“αŸ’αž‘αž»αž€αž€αžΆαžšαž„αžΆαžš αž“αž·αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ”

αž…αŸ†αžŽαžΆαŸ†αŸ–αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž‡αž½αžŸαž‡αž»αž›αžŸαŸ†αžŽαž½αžšαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ†αžŽαž½αžšαž“αŸ„αŸ‡ αž™αžΎαž„αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž”αŸ’αžšαžœαžαŸ’αžαž·αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ†αžŽαžΎαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž˜αž½αž™ (αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž“αŸ’αžŸαŸ†αž‘αŸ†αž αŸ† αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ†αžŽαžΎαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αž…αŸ„αž›)αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαŸ’αžαž·αžαž·αžŸαŸ’αžαžΈαž–αžΈαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžŸαŸ†αžŽαž½αžšαž’αžΆαž…αžšαž€αž”αžΆαž“ αž“αž·αž„αž”αŸ’αžšαž˜αžΌαž›αž”αžΆαž“αŸ”
αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŠαŸ†αž”αžΌαž„ "αž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαŸ’αžαž·αžαž·" αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αž”αž“αŸ’αžαž‘αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž‘αžΈαž–αžΈαžš - "αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αŸ‰αŸ‚αžαŸ’αžšαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž" αŸ”
αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž“αŸƒαžŸαŸ†αžŽαž½αžš PostgreSQL αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1 - αž€αžΆαžšαžšαžΆαž™αž€αžΆαžšαžŽαŸ

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ„αŸ‡αž‡αžΆαžšαžΏαž„αžαž»αžŸαž‚αŸ’αž“αžΆαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αŸ”

αž“αŸ…β€‹αž˜αžΆαž“β€‹αž‡αžΆβ€‹αž”αž“αŸ’αžβ€‹αž‘αŸ€αžβ€¦

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹