αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αž”αŸ’αžšαžαž·αž…αžΆαžšαž·αž€αž“αŸƒαžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαž†αŸ’αž“αžΆαŸ† 2015 αžŠαŸ„αž™ Alexey Lesovsky "αž‡αŸ’αžšαž˜αž»αž‡αž‘αžΉαž€αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL"

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

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


αž›αŸαž„αžœαžΈαžŠαŸαž’αžΌ

αž’αžšαž»αžŽαžŸαž½αžŸαŸ’αžαžΈ αžαŸ’αž‰αž»αŸ†αžˆαŸ’αž˜αŸ„αŸ‡ αž’αžΆαž‘αž·αž…αŸ” αžŠαžΌαž…αžŠαŸ‚αž› Ilya αž”αžΆαž“αž“αž·αž™αžΆαž™αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαžŸαŸ’αžαž·αžαž· PostgreSQL αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

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

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

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

αž αžΎαž™αž“αžΉαž„αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž§αž”αž€αžšαžŽαŸαž‘αŸ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž˜αž·αž“αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž•αž›αž·αžαž•αž›αž˜αž½αž™αž‡αžΆαž˜αž½αž™αž•αž›αž·αžαž•αž›αž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αŸαŸ” αž“αžΉαž„αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž•αŸ’αžŸαžΆαž™αž–αžΆαžŽαž·αž‡αŸ’αž‡αž€αž˜αŸ’αž˜αž‘αŸαŸ” αž…αžΌαžšβ€‹αž‘αž˜αŸ’αž›αžΆαž€αŸ‹β€‹αž“αŸαŸ‡β€‹αž…αž»αŸ‡αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

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

αž αžΎαž™αž™αžΎαž„αž“αžΉαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαžŸαŸ’αžαž·αžαž·αž˜αž½αž™αžŽαžΆαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž› PostgreSQL αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αŸ…αž›αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž˜αžΎαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž“αŸ„αŸ‡αž™αžΎαž„αž“αžΉαž„αžƒαžΎαž‰ "αž”αŸ’αžšαž’αž”αŸ‹αžαŸ’αž˜αŸ…"αŸ” αž™αžΎαž„αž“αžΉαž„αžƒαžΎαž‰αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž˜αž½αž™ αž αžΎαž™αžαžΆαž˜αžˆαŸ’αž˜αŸ„αŸ‡ αž™αžΎαž„αž’αžΆαž…αžŸαŸ’αžšαž˜αŸƒαž˜αžΎαž›αžαžΆαžαžΎαž–αž½αž€αž‚αŸαž€αŸ†αž–αž»αž„αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž“αŸ…αž‘αžΈαž“αŸ„αŸ‡ αžαžΎαž–αž½αž€αž‚αŸαž€αŸ†αž–αž»αž„αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΆαž˜αž–αž·αž αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αŸ’αžšαž’αž”αŸ‹αžαŸ’αž˜αŸ…αž˜αž½αž™ αž™αžΎαž„αž˜αž·αž“αž’αžΆαž…αž˜αžΎαž›αžαžΆαž„αž€αŸ’αž“αž»αž„αž”αžΆαž“αž‘αŸαŸ”

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

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

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

αžαžΎβ€‹αž™αžΎαž„β€‹αž˜αžΆαž“β€‹αž’αŸ’αžœαžΈβ€‹αžαŸ’αž›αŸ‡β€‹αž‡αžΆαž˜αž½αž™β€‹αž“αžΉαž„β€‹αž€αž·αž…αŸ’αž…αž€αžΆαžšβ€‹αž•αŸ’αž‘αŸƒβ€‹αžαžΆαž„β€‹αž€αŸ’αžšαŸ„αž™ αž“αž·αž„β€‹αžŠαŸ†αžŽαžΎαžšβ€‹αž€αžΆαžšβ€‹αž•αŸ’αž‘αŸƒβ€‹αžαžΆαž„β€‹αž€αŸ’αžšαŸ„αž™? αž™αžΎαž„β€‹αž˜αžΆαž“β€‹αžŠαŸ†αžŽαžΎαžšβ€‹αž€αžΆαžšβ€‹αž‡αžΆβ€‹αž…αŸ’αžšαžΎαž“β€‹αžŠαŸ‚αž›β€‹αžšαž€αŸ’αžŸαžΆβ€‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“β€‹αž‘αž·αž“αŸ’αž“αž“αŸαž™β€‹αž±αŸ’αž™β€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αž€αŸ’αž“αž»αž„β€‹αžšαž”αŸ€αž”β€‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšβ€‹αž’αž˜αŸ’αž˜αžαžΆαŸ” αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž€αŸαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαž•αž„αžŠαŸ‚αžšαŸ– αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊαž‡αžΆ autovacuum, checkpointer, processes related to replication, background writer. αžαŸ’αž‰αž»αŸ†β€‹αž“αžΉαž„β€‹αž”αŸ‰αŸ‡β€‹αž›αžΎβ€‹αž–αž½αž€αž‚αŸβ€‹αž˜αŸ’αž“αžΆαž€αŸ‹αŸ—β€‹αžŠαžΌαž…β€‹αžŠαŸ‚αž›β€‹αžαŸ’αž‰αž»αŸ†β€‹αžšαžΆαž™αž€αžΆαžšαžŽαŸαŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αžαžΎαžŸαŸ’αžαž·αžαž·αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž’αŸ’αžœαžΈαžαŸ’αž›αŸ‡?

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

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

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αžŸαŸ’αžαž·αžαž·αž”αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αž“αžΌαžœαžšαžΏαž„αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” αž–αž½αž€αž‚αŸαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ‚αž„αž…αŸ‚αž€αž‡αžΆαž”αŸ’αžšαž—αŸαž‘αŸ”

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αž”αŸ’αžšαž—αž–αž“αŸƒαžŸαŸ’αžαž·αžαž·αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜:

  • αž“αŸ…αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€ (shared buffers) αž˜αžΆαž“αž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαžΆαž€αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‹αž·αžαž·αžœαž“αŸ’αžαž“αŸ…αž‘αžΈαž“αŸ„αŸ‡ αž€αŸαž˜αžΆαž“αžšαžΆαž”αŸ‹αž‘αžΆαŸ†αž„αž“αŸ„αŸ‡αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαž“αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž€αžΎαžαž‘αžΎαž„ αž¬αž–αŸαž›αžαŸ’αž›αŸ‡αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸƒαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ”
  • αž”αž‰αŸ’αž‡αžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αž˜αž·αž“αž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αŸ αž αžΎαž™αž€αŸαž˜αž·αž“αž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαŸ‚αžšαŸ” αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžœαžαŸ’αžαž»αž€αž˜αŸ’αžšαž·αžαž‘αžΆαž”αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΌαž›αž”αŸ’αžšαžΎαž–αž½αž€αžœαžΆ PostgreSQL αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž“αŸƒαž˜αž»αžαž„αžΆαžš SQL αŸ” αž™αžΎαž„β€‹αž’αžΆαž…β€‹αž’αŸ’αžœαžΎαž€αžΆαžšβ€‹αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸβ€‹αžŠαŸ„αž™β€‹αž”αŸ’αžšαžΎβ€‹αž˜αž»αžαž„αžΆαžšβ€‹αž‘αžΆαŸ†αž„αž“αŸαŸ‡ αž αžΎαž™β€‹αž‘αž‘αž½αž›β€‹αž”αžΆαž“β€‹αž”αŸ’αžšαž—αŸαž‘β€‹αž˜αŸ‰αŸ‚αžαŸ’αžšβ€‹αž˜αž½αž™β€‹αž…αŸ†αž“αž½αž“ (αž¬β€‹αžŸαŸ†αžŽαž»αŸ†β€‹αž˜αŸ‰αŸ‚αžαŸ’αžš)αŸ”
  • αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžœαžΆαž˜αž·αž“αžαŸ‚αž„αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ’αžšαžΎαž˜αž»αžαž„αžΆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‘αŸ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž˜αž»αžαž„αžΆαžšαž‚αžΊαž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‘αž·αžŠαŸ’αž‹αž—αžΆαž– (VIEWs)αŸ” αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžαžΆαžšαžΆαž„αž“αž·αž˜αŸ’αž˜αž·αžαžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αžŸαŸ’αžαž·αžαž·αž“αŸ…αž›αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž„αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™ αž¬αž“αŸ…αž›αžΎαžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ”
  • αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™ (VIEWs) αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαžŸαŸ†αžαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžŸαŸ’αžαž·αžαž·αŸ” αž–αž½αž€αžœαžΆαž’αžΆαž…αž”αŸ’αžšαžΎαž”αžΆαž“αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž”αž“αŸ’αžαŸ‚αž˜ αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαžœαžΆαž—αŸ’αž›αžΆαž˜αŸ— αž˜αžΎαž› αž™αž€αž–αŸαžαŸŒαž˜αžΆαž“αž–αžΈαž‘αžΈαž“αŸ„αŸ‡αŸ” αž αžΎαž™αž€αŸαž˜αžΆαž“αž€αžΆαžšαžšαž½αž˜αž…αŸ†αžŽαŸ‚αž€αž•αž„αžŠαŸ‚αžšαŸ” αž€αžΆαžšαž…αžΌαž›αžšαž½αž˜αž…αŸ†αžŽαŸ‚αž€αž‡αžΆαž•αŸ’αž›αžΌαžœαž€αžΆαžšαŸ” αž’αŸ’αž“αž€αž’αžΆαž…αžŠαŸ†αž‘αžΎαž„αž€αž‰αŸ’αž…αž”αŸ‹ postgresql-contrib (αž§αž‘αžΆαž αžšαžŽαŸ postgresql94-contrib) αž•αŸ’αž‘αž»αž€αž˜αŸ‰αžΌαžŒαž»αž›αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžΆ αž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜ PostgreSQL αž αžΎαž™αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαžœαžΆαž”αžΆαž“αŸ” (αž…αŸ†αžŽαžΆαŸ†αŸ” αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™ αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαŸ‚αžαŸ’αž˜αžΈαŸ—αž“αŸƒαž€αžΆαžšαžšαž½αž˜αž…αŸ†αžŽαŸ‚αž€ αž€αž‰αŸ’αž…αž”αŸ‹αž‚αžΊαž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαž€αž‰αŸ’αž…αž”αŸ‹αž…αž˜αŸ’αž”αž„).
  • αž αžΎαž™αž˜αžΆαž“αž€αžΆαžšαžšαž½αž˜αž…αŸ†αžŽαŸ‚αž€αž€αŸ’αžšαŸ…αž•αŸ’αž›αžΌαžœαž€αžΆαžšαŸ” αž–αž½αž€αž‚αŸαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‚αžαŸ‹αž•αŸ’αž‚αž„αŸ‹αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™ PostgreSQL αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž‘αŸαŸ” αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαžαŸ‚αž…αž„αž€αŸ’αžšαž„ αž¬αžŠαŸ†αž‘αžΎαž„αž‡αžΆαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αŸ” αž‡αž˜αŸ’αžšαžΎαžŸαž’αžΆαž…αž˜αžΆαž“αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžαŸ’αž›αžΆαŸ†αž„ αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž“αŸƒαž€αžΆαžšαžšαž½αž˜αž…αŸ†αžŽαŸ‚αž€αž€αŸ’αžšαŸ…αž•αŸ’αž›αžΌαžœαž€αžΆαžšαž“αŸαŸ‡αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αžŸαŸ’αž›αžΆαž™αž“αŸαŸ‡αž”αž„αŸ’αž αžΆαž‰αž–αžΈαž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ„αŸ‡ (VIEWs) αž“αž·αž„αž˜αž»αžαž„αžΆαžšαž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ PostgreSQL 9.4αŸ” αžŠαžΌαž…αžŠαŸ‚αž›αž™αžΎαž„αžƒαžΎαž‰αž˜αžΆαž“αž–αž½αž€αž‚αŸαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” αž αžΎαž™αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŽαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž™αž›αŸ‹αž…αŸ’αžšαž›αŸ† αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž‡αž½αž”αž”αŸ’αžšαž‘αŸ‡αžœαžΆαž‡αžΆαž›αžΎαž€αžŠαŸ†αž”αžΌαž„αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž™αž€αžšαžΌαž”αž—αžΆαž–αž˜αž»αž“αŸ” Как тратится врСмя Π½Π° PostgreSQL αž αžΎαž™αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž”αž‰αŸ’αž‡αžΈαž“αŸαŸ‡ αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αžšαžΌαž”αž—αžΆαž–αž“αŸαŸ‡αŸ” αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž“αžΈαž˜αž½αž™αŸ— (VIEWs) αž¬αž˜αž»αžαž„αžΆαžšαž“αžΈαž˜αž½αž™αŸ— αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ„αž›αž”αŸ†αžŽαž„αž˜αž½αž™ αž¬αž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“αžŸαŸ’αžαž·αžαž·αžŸαž˜αžŸαŸ’αžšαž”αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž˜αžΆαž“ PostgreSQL αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž αžΎαž™αž™αžΎαž„αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž˜αž½αž™αž…αŸ†αž“αž½αž“αžšαž½αž…αž αžΎαž™αž’αŸ†αž–αžΈαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž„αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

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

αžαžΎαž™αžΎαž„αž’αžΆαž…αž™αž€αž’αŸ’αžœαžΈαž–αžΈαž‘αžΈαž“αŸ„αŸ‡? αž…αžΌαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αžαŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

select
sum(blks_hit)*100/sum(blks_hit+blks_read) as hit_ratio
from pg_stat_database;

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

αžœαžΆαž…αŸ’αž”αžΆαžŸαŸ‹αžŽαžΆαžŸαŸ‹αž“αŸ„αŸ‡αŸ” αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž™αžΎαž„αž˜αžΆαž“ αž“αŸ„αŸ‡αž€αžΆαž“αŸ‹αžαŸ‚αž”αŸ’αžšαžŸαžΎαžš. αž™αžΎαž„αžœαžΆαž™αžαž˜αŸ’αž›αŸƒαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸαŸ‡αž‡αžΆαž—αžΆαž‚αžšαž™αŸ” αž αžΎαž™αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž˜αžΆαž“αž—αžΆαž‚αžšαž™αž“αŸƒαžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž…αŸ’αžšαžΎαž“αž‡αžΆαž„ 90% αž“αŸ„αŸ‡αž‡αžΆαž€αžΆαžšαž›αŸ’αž’αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž’αŸ’αž›αžΆαž€αŸ‹αž…αž»αŸ‡αž€αŸ’αžšαŸ„αž˜ 90% αž“αŸ„αŸ‡αž™αžΎαž„αž˜αž·αž“αž˜αžΆαž“αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž€αŸ’αž”αžΆαž›αž€αŸ’αžαŸ…αž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αŸ„αŸ‡αž‘αŸαŸ” αž αžΎαž™αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸαŸ‡ PostgreSQL αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αžαŸ†αž±αŸ’αž™αž…αžΌαž›αž”αŸ’αžšαžΎαžαžΆαžŸ αž αžΎαž™αž“αŸαŸ‡αž‚αžΊαž™αžΊαžαž‡αžΆαž„αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αžΆαž“αž–αžΈαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αŸ” αž αžΎαž™αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž‚αž·αžαž’αŸ†αž–αžΈαž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αŸ– αž”αž„αŸ’αž€αžΎαž“αžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€ αž¬αž”αž„αŸ’αž€αžΎαž“αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ‚αž€ (RAM)αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

select
datname,
(xact_commit*100)/(xact_commit+xact_rollback) as c_ratio,
deadlocks, conflicts,
temp_file, pg_size_pretty(temp_bytes) as temp_size
from pg_stat_database;

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

αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎαžŸαŸ†αžŽαžΎαž“αŸαŸ‡αŸ” SQL αž“αŸαŸ‡αž‚αžΊαžŸαžΆαž˜αž‰αŸ’αž‰αžŽαžΆαžŸαŸ‹αŸ” αž αžΎαž™αž™αžΎαž„αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸαŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž›αž½αž“αž™αžΎαž„αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αž αžΎαž™αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžαž˜αŸ’αž›αŸƒαž€αž˜αŸ’αžšαž·αžαŸ” αž™αžΎαž„αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αžŸαž˜αžΆαž˜αžΆαžαŸ’αžšαž“αŸƒαž€αžΆαžšαžŸαž“αŸ’αž™αžΆ αž“αž·αž„αž€αžΆαžšαžœαž·αž›αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αŸ” Commits αž‚αžΊαž‡αžΆαž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž‡αŸ„αž‚αž‡αŸαž™αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ” Rollbacks αž‚αžΊαž‡αžΆ rollback αž–αŸ„αž›αž‚αžΊ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž”αžΆαž“αž’αŸ’αžœαžΎαž€αžΆαžšαž„αžΆαžšαž˜αž½αž™αž…αŸ†αž“αž½αž“ αž’αŸ’αžœαžΎαž±αŸ’αž™αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αžΆαž“αž—αžΆαž–αžαžΉαž„αžαŸ‚αž„ αž–αž·αž…αžΆαžšαžŽαžΆαž’αŸ’αžœαžΈαž˜αž½αž™ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αž”αžΆαž“αž€αžΎαžαž‘αžΎαž„ αž αžΎαž™αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αž…αŸ„αž›αŸ” i.e. αž…αŸ†αž“αž½αž“ rollbacks αž€αžΎαž“αž‘αžΎαž„αž₯αžαžˆαž”αŸ‹αžˆαžšαž‚αžΊαž’αžΆαž€αŸ’αžšαž€αŸ‹αŸ” αž αžΎαž™β€‹αž’αŸ’αž“αž€β€‹αž‚αž½αžšβ€‹αž‡αŸ€αžŸβ€‹αžœαžΆαž„β€‹αžœαžΆβ€‹αžŠαŸ„αž™β€‹αžšαž”αŸ€αž”β€‹αžŽαžΆ αž αžΎαž™β€‹αž€αŸ‚β€‹αž€αžΌαžŠβ€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž€αž»αŸ†β€‹αž±αŸ’αž™β€‹αžšαžΏαž„β€‹αž“αŸαŸ‡β€‹αž€αžΎαžβ€‹αž‘αžΎαž„αŸ”

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

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

αž―αž€αžŸαžΆαžšαž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“ (temp_files) αž€αŸαž˜αž·αž“αž›αŸ’αž’αžŠαŸ‚αžšαŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžŸαŸ†αžŽαžΎαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž˜αž·αž“αž˜αžΆαž“αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ†αž–αŸαž‰αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“ αžœαžΆαž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžšαž“αŸ…αž›αžΎαžαžΆαžŸαŸ” αž αžΎαž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž‚αžΆαžαŸ‹αž’αžΆαž…αž’αž“αž»αžœαžαŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžαž· αž‚αžΆαžαŸ‹αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αž“αž»αžœαžαŸ’αžαžšαž½αž…αž αžΎαž™αž“αŸ…αž›αžΎαžαžΆαžŸαŸ” αžœαžΆαž™αžΊαžαŸ” αžœαžΆαž”αž„αŸ’αž€αžΎαž“αž–αŸαž›αžœαŸαž›αžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ†αžŽαž½αžšαŸ” αž αžΎαž™αž’αžαž·αžαž·αž‡αž“αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž‰αžΎαžŸαŸ†αžŽαžΎαž‘αŸ… PostgreSQL αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž”αž“αŸ’αžαž·αž…αž€αŸ’αžšαŸ„αž™αž˜αž€αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžαž· αž“αŸ„αŸ‡ Postgres αž“αžΉαž„αž†αŸ’αž›αžΎαž™αžαž”αž€αžΆαž“αŸ‹αžαŸ‚αž›αžΏαž“ αž αžΎαž™αž’αžαž·αžαž·αž‡αž“αž“αžΉαž„αžšαž„αŸ‹αž…αžΆαŸ†αžαž·αž…αž‡αžΆαž„αž˜αž»αž“αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

pg_stat_bgwriter - αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž“αŸαŸ‡αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž„ PostgreSQL αž–αžΈαžšαŸ– checkpointer ΠΈ background writer.

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

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

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

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

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

αž αžΎαž™αž˜αžΆαž“αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž…αŸ†αž“αž½αž“αž”αžΈαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ‚αžαž˜αŸ’αžšαžΌαžœαž…αŸ†αžŽαž»αž…αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™:

  • сheckpoint_segments.

  • сheckpoint_timeout.

  • сheckpoint_competion_target.

αž–αž½αž€αž‚αŸαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸƒαž…αŸ†αžŽαž»αž…αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž˜αž·αž“αžšαžŸαŸ‹αž“αŸ…αž›αžΎαž–αž½αž€αž‚αŸαž‘αŸαŸ” αž₯αž‘αŸ’αž’αž·αž–αž›αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž‚αžΊαž‡αžΆαž”αž‰αŸ’αž αžΆαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αŸ”

αž–αŸ’αžšαž˜αžΆαž“: αž€αŸ†αžŽαŸ‚ 9.4 αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž…αžΆαžšαžŽαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαž‚αžΊαž›αŸ‚αž„αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž‘αŸ€αžαž αžΎαž™αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαŸ‚αž‘αŸ†αž“αžΎαž”αž“αŸƒ PostgreSQL αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš checkpoint_segments αž‡αŸ†αž“αž½αžŸαžŠαŸ„αž™αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš min_wal_size ΠΈ max_wal_size.

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž„αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‚αžΊαž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž•αŸ’αž‘αŸƒαžαžΆαž„αž€αŸ’αžšαŸ„αž™ βˆ’ background writer. αžαžΎβ€‹αž‚αžΆαžαŸ‹β€‹αž€αŸ†αž–αž»αž„β€‹αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈ? αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž₯αžαžˆαž”αŸ‹αžˆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αž‚αŸ’αž˜αžΆαž“αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹αŸ” αžœαžΆαžŸαŸ’αž€αŸ‚αž“αž‘αŸ†αž–αŸαžšαž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€ αž αžΎαž™αž›αž»αž”αž‘αŸ†αž–αŸαžšαž€αžαŸ’αžœαž€αŸ‹αžŠαŸ‚αž›αžœαžΆαžšαž€αžƒαžΎαž‰αž‘αŸ…αžαžΆαžŸαŸ” αžαžΆαž˜αžšαž”αŸ€αž”αž“αŸαŸ‡ αžœαžΆαž‡αž½αž™αž±αŸ’αž™αž’αŸ’αž“αž€αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž’αŸ’αžœαžΎαž€αžΆαžšαžαž·αž…αž‡αžΆαž„αž˜αž»αž“αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αŸ”

αžαžΎαž‚αžΆαžαŸ‹αžαŸ’αžšαžΌαžœαž€αžΆαžšαž’αŸ’αžœαžΈαž‘αŸ€αž? αžœαžΆαž•αŸ’αžαž›αŸ‹αž“αžΌαžœαžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‘αŸ†αž–αŸαžšαžŸαŸ’αž’αžΆαžαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž˜αž‘αžΆαžšαž—αŸ’αž›αžΆαž˜αŸ— (αž€αŸ’αž“αž»αž„αž”αžšαž·αž˜αžΆαžŽαž…αŸ’αžšαžΎαž“ αž“αž·αž„αž—αŸ’αž›αžΆαž˜αŸ—) αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž§αž”αž˜αžΆαžαžΆαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž˜αž½αž™αž”αžΆαž“αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžŸαŸ†αžŽαžΎαž‘αžΆαž˜αž‘αžΆαžšαž‘αŸ†αž–αŸαžšαžŸαŸ’αž’αžΆαž αž αžΎαž™αž–αž½αž€αžœαžΆαžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αžšαž½αž…αž αžΎαž™αŸ” Postgres backend αž‚αžΆαžαŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž™αž€αžœαžΆαž‘αŸ…αž”αŸ’αžšαžΎ αž αžΎαž™αž‚αžΆαžαŸ‹αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαž˜αŸ’αž’αžΆαžαž’αŸ’αžœαžΈαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αž‘αŸαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž—αŸ’αž›αžΆαž˜αŸ—αž“αŸ„αŸ‡αž˜αž·αž“αž˜αžΆαž“αž‘αŸ†αž–αŸαžšαž”αŸ‚αž”αž“αŸαŸ‡αž‘αŸ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž™αž•αŸ’αž’αžΆαž€ αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸ’αžœαŸ‚αž„αžšαž€αž‘αŸ†αž–αŸαžšαžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž…αŸ„αž‰αž–αž½αž€αžœαžΆαž‘αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžŸ αž αžΎαž™αž™αž€αžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αžœαžΆ αžŠαŸ‚αž›αž‡αŸ‡αž₯αž‘αŸ’αž’αž·αž–αž›αž’αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αžŠαž›αŸ‹αž–αŸαž›αžœαŸαž›αžΆαž“αŸƒαžŸαŸ†αžŽαžΎαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžƒαžΎαž‰αžαžΆαž’αŸ’αž“αž€αž˜αžΆαž“αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš maxwritten_clean αž’αŸ† αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆαž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž•αŸ’αž‘αŸƒαžαžΆαž„αž€αŸ’αžšαŸ„αž™αž˜αž·αž“αž’αŸ’αžœαžΎαž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αžœαžΆαž‘αŸ αž αžΎαž™αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαž“αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš bgwriter_lru_maxpagesαžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž‚αžΆαžαŸ‹β€‹αž’αžΆαž…β€‹αž’αŸ’αžœαžΎβ€‹αž€αžΆαžšαž„αžΆαžšβ€‹αž”αžΆαž“β€‹αž…αŸ’αžšαžΎαž“β€‹αž€αŸ’αž“αž»αž„β€‹αž˜αž½αž™β€‹αžœαžŠαŸ’αž αž‡αž˜αŸ’αžšαŸ‡β€‹αž‘αŸ†αž–αŸαžšβ€‹αž”αž“αŸ’αžαŸ‚αž˜β€‹αž‘αŸ€αžαŸ”

αž αžΎαž™αžŸαžΌαž…αž“αžΆαž€αžšαžŠαŸαž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž˜αž½αž™αž‘αŸ€αžαž‚αžΊ buffers_backend_fsync. αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž™αž˜αž·αž“αž’αŸ’αžœαžΎ fsync αž‘αŸαž–αŸ’αžšαŸ„αŸ‡αžœαžΆαž™αžΊαžαŸ” αž–αž½αž€αž‚αŸαž†αŸ’αž›αž„αž€αžΆαžαŸ‹ fsync αž‘αžΎαž„ IO stack checkpointer αŸ” αž§αž”αž€αžšαžŽαŸαž–αž·αž“αž·αžαŸ’αž™αž˜αžΆαž“αž‡αž½αžšαžšαž”αžŸαŸ‹αžœαžΆ αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš fsync αž‡αžΆαž‘αŸ€αž„αž‘αžΆαžαŸ‹ αž“αž·αž„αž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž‘αŸ†αž–αŸαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž‡αžΆαž˜αž½αž™αž―αž€αžŸαžΆαžšαž“αŸ…αž›αžΎαžαžΆαžŸαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‡αž½αžš checkpointer αž’αŸ† αž“αž·αž„αž–αŸαž‰ αž“αŸ„αŸ‡ backend αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αžαŸ†αž±αŸ’αž™αž’αŸ’αžœαžΎ fsync αžαŸ’αž›αž½αž“αžœαžΆ αž αžΎαž™αžœαžΆαž“αžΉαž„αž”αž“αŸ’αžαž™ backendαž–αŸ„αž›αž‚αžΊ αž’αžαž·αžαž·αž‡αž“αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž™αžΊαžαž‡αžΆαž„αžœαžΆαž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžƒαžΎαž‰αžαžΆαž’αŸ’αž“αž€αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž“αŸαŸ‡αž’αŸ†αž‡αžΆαž„αžŸαžΌαž“αŸ’αž™ αž“αŸ„αŸ‡αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αž‰αŸ’αž αžΆαžšαž½αž…αž‘αŸ…αž αžΎαž™ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αž›αžΎαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž”αžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαžšαžŸαŸαžšαž•αŸ’αž‘αŸƒαžαžΆαž„αž€αŸ’αžšαŸ„αž™ αž“αž·αž„αžœαžΆαž™αžαž˜αŸ’αž›αŸƒαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž„αžšαž”αžŸαŸ‹αžŒαžΈαžŸαž•αž„αžŠαŸ‚αžšαŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αž–αŸ’αžšαž˜αžΆαž“: _αž’αžαŸ’αžαž”αž‘αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αžŸαŸ’αžαž·αžαž·αžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž€αžΆαžšαž…αž˜αŸ’αž›αž„αŸ” αžˆαŸ’αž˜αŸ„αŸ‡αž‘αž·αžŠαŸ’αž‹αž—αžΆαž– αž“αž·αž„αž˜αž»αžαž„αžΆαžšαž—αžΆαž‚αž…αŸ’αžšαžΎαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžαžΌαžšαžˆαŸ’αž˜αŸ„αŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„ Postgres 10αŸ” αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž“αŸƒαž€αžΆαžšαž”αŸ’αžαžΌαžšαžˆαŸ’αž˜αŸ„αŸ‡αž‚αžΊαžαŸ’αžšαžΌαžœαž‡αŸ†αž“αž½αžŸ xlog αž“αŸ…αž›αžΎ wal ΠΈ location αž“αŸ…αž›αžΎ lsn αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αž»αžαž„αžΆαžš/αž˜αžΎαž›αžˆαŸ’αž˜αŸ„αŸ‡αŸ”αž›αŸ” αž§αž‘αžΆαž αžšαžŽαŸαž–αž·αžŸαŸαžŸ αž˜αž»αžαž„αžΆαžš pg_xlog_location_diff() αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžαžΌαžšαžˆαŸ’αž˜αŸ„αŸ‡αž‘αŸ…αž‡αžΆ pg_wal_lsn_diff()._

αž™αžΎαž„αž€αŸαž˜αžΆαž“αž…αŸ’αžšαžΎαž“αž“αŸ…αž‘αžΈαž“αŸαŸ‡αžŠαŸ‚αžšαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžαŸ‚αž’αžΆαžαž»αžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž‘αžΈαžαžΆαŸ†αž„αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αžƒαžΎαž‰αžαžΆαžαž˜αŸ’αž›αŸƒαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŸαŸ’αž˜αžΎαž‚αŸ’αž“αžΆ αž“αŸ„αŸ‡αž‡αžΆαž€αžΆαžšαž›αŸ’αž’ αž αžΎαž™αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž˜αž·αž“αž™αžΊαžαž™αŸ‰αžΆαžœαž“αŸ…αž–αžΈαž€αŸ’αžšαŸ„αž™αž˜αŸαž“αŸ„αŸ‡αž‘αŸαŸ”

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

сколько записано xlog Π² Π±Π°ΠΉΡ‚Π°Ρ…
$ select
pg_xlog_location_diff(pg_current_xlog_location(),'0/00000000');
Π»Π°Π³ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² Π±Π°ΠΉΡ‚Π°Ρ…
$ select
client_addr,
pg_xlog_location_diff(pg_current_xlog_location(), replay_location)
from pg_stat_replication;
Π»Π°Π³ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² сСкундах
$ select
extract(epoch from now() - pg_last_xact_replay_timestamp());

αž”αžΎβ€‹αžšαžΏαž„β€‹αž‘αžΆαŸ†αž„β€‹αž“αŸαŸ‡β€‹αžαž»αžŸβ€‹αž‚αŸ’αž“αžΆ αž“αŸ„αŸ‡β€‹αž€αŸβ€‹αž˜αžΆαž“β€‹αž—αžΆαž–β€‹αž™αžΊαžαž™αŸ‰αžΆαžœβ€‹αžαŸ’αž›αŸ‡β€‹αžŠαŸ‚αžšαŸ” Lag αž‚αžΊαž‡αžΆαž—αžΆαž–αž™αžΊαžαž™αŸ‰αžΆαžœαž“αŸƒαž€αžΆαžšαž…αž˜αŸ’αž›αž„αž–αžΈαž˜αŸ αž–αŸ„αž›αž‚αžΊαž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž»αžŸαž‚αŸ’αž“αžΆαžšαžœαžΆαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ”

αž˜αžΆαž“αž αŸαžαž»αž•αž›αž”αžΈαž™αŸ‰αžΆαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αŸ–

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

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

αž…αŸ†αžŽαžΆαŸ†: αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™ pg_xlog_locationαž˜αž»αžαž„αžΆαžš diff() αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαžŸαž‰αŸ’αž‰αžΆαž”αŸ’αžšαž˜αžΆαžŽαžœαž·αž’αžΈαžŠαž€ αž“αž·αž„αžŠαž€αž‘αžΈαžαžΆαŸ†αž„αž˜αž½αž™αž–αžΈαž‘αžΈαžαžΆαŸ†αž„αž˜αž½αž™αž‘αŸ€αžαŸ” αž˜αžΆαž“β€‹αž•αžΆβ€‹αžŸαž»αžαž—αžΆαž–αŸ”

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

pg_stat_all_tables αž‚αžΊαž‡αžΆαž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αžŠαŸαž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αžœαžΆαž”αž„αŸ’αž αžΆαž‰αžŸαŸ’αžαž·αžαž·αž“αŸ…αž›αžΎαžαžΆαžšαžΆαž„αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž˜αžΆαž“αžαžΆαžšαžΆαž„αž“αŸ…αž€αŸ’αž“αž»αž„ database αž˜αžΆαž“αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžαŸ’αž›αŸ‡αž‡αžΆαž˜αž½αž™αžœαžΆ αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžαŸ’αž›αŸ‡αž™αžΎαž„αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž“αŸαŸ‡αž–αžΈαž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž“αŸαŸ‡αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

select
relname,
pg_size_pretty(pg_relation_size(relname::regclass)) as size,
seq_scan, seq_tup_read,
seq_scan / seq_tup_read as seq_tup_avg
from pg_stat_user_tables
where seq_tup_read > 0 order by 3,4 desc limit 5;

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

αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž˜αžΆαž“αž˜αŸ‰αŸ‚αžαŸ’αžšαž‘αžΈαž–αžΈαžš - seq_tup_read αŸ” αž“αŸαŸ‡β€‹αž‡αžΆβ€‹αž…αŸ†αž“αž½αž“β€‹αž‡αž½αžšβ€‹αžŠαŸαž€β€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αžαŸ’αžšαž‘αž”αŸ‹β€‹αž˜αž€β€‹αž–αžΈβ€‹αž€αžΆαžšβ€‹αžŸαŸ’αž€αŸαž“β€‹αžαžΆαž˜β€‹αž›αŸ†αžŠαžΆαž”αŸ‹β€‹αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž…αŸ†αž“αž½αž“αž˜αž’αŸ’αž™αž˜αž›αžΎαžŸαž–αžΈ 1, 000, 10, 000 αž“αŸ„αŸ‡αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŸαžΌαž…αž“αžΆαž€αžšαžšαž½αž…αž αžΎαž™αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαžαž›αž·αž”αž·αž€αŸ’αžšαž˜αž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαž˜αž½αž™ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž‚αžΊαžαžΆαž˜αž›αž·αž”αž·αž€αŸ’αžšαž˜ αž¬αžœαžΆαž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αžŸαŸ†αžŽαž½αžšαžŠαŸ‚αž›αž”αŸ’αžšαžΎαž€αžΆαžšαžŸαŸ’αž€αŸαž“αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αžŠαžΌαž…αŸ’αž“αŸαŸ‡αŸ” αž“αŸαŸ‡αž˜αž·αž“αž€αžΎαžαž‘αžΎαž„αž‘αŸαŸ”

αž§αž‘αžΆαž αžšαžŽαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž˜αž½αž™ - αž…αžΌαžšαž“αž·αž™αžΆαž™αžαžΆαžŸαŸ†αžŽαžΎαž˜αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“ OFFSET αž’αŸ†αž“αž·αž„ LIMIT αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžœαžΆαŸ” αž§αž‘αžΆαž αžšαžŽαŸ 100 αž‡αž½αžšαž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαŸ’αž€αŸαž“ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡ 000 αž‡αž½αžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž™αž€ αž αžΎαž™αž‡αž½αžšαžŠαŸ‚αž›αž”αžΆαž“αžŸαŸ’αž€αŸαž“αž–αžΈαž˜αž»αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ„αŸ‡αž…αŸ„αž›αŸ” αž“αŸαŸ‡β€‹αž€αŸβ€‹αž‡αžΆβ€‹αž€αžšαžŽαžΈβ€‹αž’αžΆαž€αŸ’αžšαž€αŸ‹β€‹αžŠαŸ‚αžšαŸ” αž αžΎαž™αžŸαŸ†αžŽαžΎαž”αŸ‚αž”αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαžαŸ‚αž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžŸαžΎαžšαŸ” αž αžΎαž™αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŸαŸ†αžŽαž½αžš SQL αžŠαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž˜αž½αž™αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αžœαžΆ αž“αž·αž„αžœαžΆαž™αžαž˜αŸ’αž›αŸƒαž›αŸαžαžŠαŸ‚αž›αž‘αž‘αž½αž›αž”αžΆαž“αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

select
relname,
pg_size_pretty(pg_total_relation_size(relname::regclass)) as
full_size,
pg_size_pretty(pg_relation_size(relname::regclass)) as
table_size,
pg_size_pretty(pg_total_relation_size(relname::regclass) -
pg_relation_size(relname::regclass)) as index_size
from pg_stat_user_tables
order by pg_total_relation_size(relname::regclass) desc limit 10;

αž‘αŸ†αž αŸ†αžαžΆαžšαžΆαž„αž€αŸαž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αžŠαŸ„αž™αž”αŸ’αžšαžΎαžαžΆαžšαžΆαž„αž“αŸαŸ‡ αž“αž·αž„αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αž»αžαž„αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜ pg_total_relation_size(), pg_relation_size().

αž‡αžΆαž‘αžΌαž‘αŸ…αž˜αžΆαž“αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž˜αŸαžαžΆ dt ΠΈ diαžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„ PSQL αž“αž·αž„αž˜αžΎαž›αž‘αŸ†αž αŸ†αžαžΆαžšαžΆαž„ αž“αž·αž„αž›αž·αž”αž·αž€αŸ’αžšαž˜αž•αž„αžŠαŸ‚αžšαŸ”

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αžŸαžšαžŸαŸαžšαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αŸ” αžαžΎαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž‚αžΊαž‡αžΆαž’αŸ’αžœαžΈ? αžαŸ„αŸ‡αž˜αžΎαž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš UPDATE - αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž‡αž½αžšαž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αŸ” αžαžΆαž˜αž–αž·αžαž€αžΆαžšαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž‚αžΊαž‡αžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž–αžΈαžš (αž¬αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž…αŸ’αžšαžΎαž“) αŸ” αžœαžΆβ€‹αž€αŸ†αž–αž»αž„β€‹αž”αž‰αŸ’αž…αžΌαž›β€‹αž€αŸ†αžŽαŸ‚β€‹αž‡αž½αžšβ€‹αžŠαŸαž€β€‹αžαŸ’αž˜αžΈ αž“αž·αž„β€‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹β€‹αž€αŸ†αžŽαŸ‚β€‹αž‡αž½αžšβ€‹αžŠαŸαž€β€‹αž…αžΆαžŸαŸ‹β€‹αžαžΆβ€‹αž›αŸ‚αž„β€‹αž”αŸ’αžšαžΎβ€‹αž αžΎαž™αŸ” αž€αŸ’αžšαŸ„αž™αž˜αž€ autovacuum αž“αžΉαž„αž˜αž€ αž αžΎαž™αžŸαž˜αŸ’αž’αžΆαžαž”αž“αŸ’αž‘αžΆαžαŸ‹αžŠαŸ‚αž›αž›αŸ‚αž„αž”αŸ’αžšαžΎαž‘αžΆαŸ†αž„αž“αŸαŸ‡ αž αžΎαž™αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž€αž“αŸ’αž›αŸ‚αž„αž“αŸαŸ‡αžαžΆαž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžΎαž‘αžΎαž„αžœαž·αž‰αŸ”

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

select
s.relname,
pg_size_pretty(pg_relation_size(relid)),
coalesce(n_tup_ins,0) + 2 * coalesce(n_tup_upd,0) -
coalesce(n_tup_hot_upd,0) + coalesce(n_tup_del,0) AS total_writes,
(coalesce(n_tup_hot_upd,0)::float * 100 / (case when n_tup_upd > 0
then n_tup_upd else 1 end)::float)::numeric(10,2) AS hot_rate,
(select v[1] FROM regexp_matches(reloptions::text,E'fillfactor=(\d+)') as
r(v) limit 1) AS fillfactor
from pg_stat_all_tables s
join pg_class c ON c.oid=relid
order by total_writes desc limit 50;

αž αžΎαž™αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αžΆαžšαžšαž…αž“αžΆαžšαž”αžŸαŸ‹αžœαžΆ UPDATE αž‚αžΊαž‡αžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αž˜αŸ’αž„αž“αŸ‹αž’αŸ’αž„αž“αŸ‹αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž–αž½αž€αž‚αŸαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αŸ” αž”αžšαž·αž—αŸ„αž‚ hot updates. αž–αž½αž€αž‚αŸαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαŸ’αž›αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„ PostgreSQL αž€αŸ†αžŽαŸ‚ 8.3 αŸ” αž αžΎαž™αž“αŸαŸ‡αž‡αžΆαž’αŸ’αžœαžΈ? αž“αŸαŸ‡β€‹αž‚αžΊβ€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αž’αžΆαž”αŸ‹αžŠαŸαžβ€‹αž‘αž˜αŸ’αž„αž“αŸ‹β€‹αžŸαŸ’αžšαžΆαž›β€‹αžŠαŸ‚αž›β€‹αž˜αž·αž“β€‹αž”αžŽαŸ’αžαžΆαž›β€‹αž±αŸ’αž™β€‹αž›αž·αž”αž·αž€αŸ’αžšαž˜β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αž„αŸ’αž€αžΎαžβ€‹αž‘αžΎαž„β€‹αžœαž·αž‰αŸ” αž“αŸ„αŸ‡αž‚αžΊαž™αžΎαž„αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΆαž“αžαŸ‚αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž‘αŸ†αž–αŸαžš (αžŠαŸ‚αž›αž‡αžΆαž€αž˜αŸ’αž˜αžŸαž·αž‘αŸ’αž’αž·αžšαž”αžŸαŸ‹αžαžΆαžšαžΆαž„) αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž– αž αžΎαž™αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž“αŸ…αžαŸ‚αž…αž„αŸ’αž’αž»αž›αž‘αŸ…αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžŠαžŠαŸ‚αž›αž“αŸ…αž€αŸ’αž“αž»αž„αž‘αŸ†αž–αŸαžšαŸ” αž˜αžΆαž“αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž”αž“αŸ’αžαž·αž…αž“αŸƒαž€αžΆαžšαž„αžΆαžšαž“αŸαŸ‡ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαžαŸ’αžœαŸ‡αž…αž“αŸ’αž›αŸ„αŸ‡αž˜αž€ αž“αŸ„αŸ‡αžœαžΆαž˜αžΆαž“αž…αŸ’αžšαžœαžΆαž€αŸ‹αž‘αžΆαŸ†αž„αž“αŸαŸ‡ hot αžŸαŸ’αžαžΆαž”αž“αžΆαž‘αžΎαž„αžœαž·αž‰ αž αžΎαž™αž’αŸ’αžœαžΈαŸ—αž”αž“αŸ’αžαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž˜αž·αž“αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸ αž αžΎαž™αž’αŸ’αžœαžΈαŸ—αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αžαŸ’αž‡αŸ‡αžαŸ’αž‡αžΆαž™αž’αž“αž’αžΆαž“αžαž·αž…αŸ”

αž αžΎαž™αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž˜αžΆαž“ n_tup_hot_upd αž’αŸ† αžœαžΆαž›αŸ’αž’αžŽαžΆαžŸαŸ‹αŸ” αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆαž€αžΆαžšαž’αžΆαž”αŸ‹αžŠαŸαžαž‘αž˜αŸ’αž„αž“αŸ‹αžŸαŸ’αžšαžΆαž›αž’αžΆαž…αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž”αžΆαž“ αž αžΎαž™αž“αŸαŸ‡αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ„αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž’αž“αž’αžΆαž“ αž αžΎαž™αž’αŸ’αžœαžΈαŸ—αž‚αžΊαž›αŸ’αž’αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

ALTER TABLE table_name SET (fillfactor = 70);

αžœαž·αž’αžΈαž”αž„αŸ’αž€αžΎαž“αž”αžšαž·αž˜αžΆαžŽ hot updateធូ? αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎ fillfactor. αžœαžΆαž€αŸ†αžŽαžαŸ‹αž‘αŸ†αž αŸ†αž“αŸƒαž‘αŸ†αž αŸ†αž‘αŸ†αž“αŸαžšαžŠαŸ‚αž›αž”αžΆαž“αž”αž˜αŸ’αžšαž»αž„αž‘αž»αž€αž“αŸ…αž–αŸαž›αž”αŸ†αž–αŸαž‰αž‘αŸ†αž–αŸαžšαž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αžŠαŸ„αž™αž”αŸ’αžšαžΎ INSERTs αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžŸαž·αž›αžΆαž…αžΆαžšαžΉαž€αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αžαžΆαžšαžΆαž„ αž–αž½αž€αž‚αŸαž”αŸ†αž–αŸαž‰αž‘αŸ†αž–αŸαžšαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ αž€αž»αŸ†αž‘αž»αž€αž…αž“αŸ’αž›αŸ„αŸ‡αž‘αž‘αŸαž“αŸ…αž€αŸ’αž“αž»αž„αž“αŸ„αŸ‡αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž‘αŸ†αž–αŸαžšαžαŸ’αž˜αžΈαž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αž›αž·αž…αŸ” αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž–αŸαž‰αž˜αŸ’αžαž„αž‘αŸ€αžαŸ” αž αžΎαž™αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž₯αžšαž·αž™αžΆαž”αž‘αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ fillfactor = 100% αŸ”

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

select c.relname,
current_setting('autovacuum_vacuum_threshold') as av_base_thresh,
current_setting('autovacuum_vacuum_scale_factor') as av_scale_factor,
(current_setting('autovacuum_vacuum_threshold')::int +
(current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples))
as av_thresh,
s.n_dead_tup
from pg_stat_user_tables s join pg_class c ON s.relname = c.relname
where s.n_dead_tup > (current_setting('autovacuum_vacuum_threshold')::int
+ (current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples));

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

αž…αŸ†αžŽαžΆαŸ†: _αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈ Postgres 10 αž˜αž€ αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžαžΆαž˜αžŠαžΆαž“αž€αžΆαžšαž”αžΌαž˜αž’αžΌαž›αžΈαž”αžΆαž“αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž…αŸ’αžšαžΎαž“ - αž‘αž·αžŠαŸ’αž‹αž—αžΆαž– pg_stat_progress αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαŸ’αž›αž½αž“vacuum αžŠαŸ‚αž›αž‡αž½αž™αžŸαž˜αŸ’αžšαž½αž›αž”αž‰αŸ’αž αžΆαž“αŸƒαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ autovacuum αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αŸ”

αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎαžŸαŸ†αžŽαž½αžšαžŸαžΆαž˜αž‰αŸ’αž‰αž“αŸαŸ‡αŸ” αž αžΎαž™β€‹αž™αžΎαž„β€‹αž’αžΆαž…β€‹αž˜αžΎαž›β€‹αžƒαžΎαž‰β€‹αžαžΆ αžαžΎβ€‹αž–αŸαž›β€‹αžŽαžΆβ€‹αž‚αž½αžšβ€‹αž’αŸ’αžœαžΎβ€‹αž€αžΆαžšβ€‹αž”αžΌαž˜β€‹αž’αžΌαž›αžΈβ€‹αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚ αžαžΎαž€αžΆαžšαž”αžΌαž˜αž’αžΌαž›αžΈαž‚αž½αžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™αžšαž”αŸ€αž”αžŽαžΆ αž“αž·αž„αž“αŸ…αž–αŸαž›αžŽαžΆ? αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αŸ†αžŽαŸ‚αž…αžΆαžŸαŸ‹αž“αŸƒαžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžšαžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž˜αž»αž“αŸ” αž€αžΆαžšαž’αžΆαž”αŸ‹αžŠαŸαžαž”αžΆαž“αž€αžΎαžαž‘αžΎαž„ αž€αŸ†αžŽαŸ‚αžαŸ’αž˜αžΈαž“αŸƒαž‡αž½αžšαžŠαŸαž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αŸ” αž€αŸ†αžŽαŸ‚αžŠαŸ‚αž›αž›αŸ‚αž„αž”αŸ’αžšαžΎαž“αŸƒαžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžšαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαŸ’αž›αž½αž“αŸ” តុ pg_stat_user_tables αž˜αžΆαž“αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž”αŸ‚αž”αž“αŸαŸ‡ n_dead_tup. αžœαžΆαž”αž„αŸ’αž αžΆαž‰αž–αžΈαž…αŸ†αž“αž½αž“αž‡αž½αžšαžŠαŸαž€ "αžŸαŸ’αž›αžΆαž”αŸ‹" αŸ” αž αžΎαž™αžŠαžšαžΆαž”αžŽαžΆαž…αŸ†αž“αž½αž“αž‡αž½αžšαžŠαŸαž€αžŸαŸ’αž›αžΆαž”αŸ‹αž”αžΆαž“αž›αžΎαžŸαž–αžΈαž€αž˜αŸ’αžšαž·αžαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™ autovacuum αž“αžΉαž„αž˜αž€αžŠαž›αŸ‹αžαž»αŸ”

αž αžΎαž™β€‹αž€αž˜αŸ’αžšαž·αžβ€‹αž“αŸαŸ‡β€‹αžαŸ’αžšαžΌαžœβ€‹αž‚αžŽαž“αžΆβ€‹αžŠαŸ„αž™β€‹αžšαž”αŸ€αž”β€‹αžŽαžΆ? αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž—αžΆαž‚αžšαž™αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸƒαž…αŸ†αž“αž½αž“αž‡αž½αžšαžŠαŸαž€αžŸαžšαž»αž”αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αŸ” αž˜αžΆαž“αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš autovacuum_vacuum_scale_factor. αžœαžΆαž€αŸ†αžŽαžαŸ‹αž—αžΆαž‚αžšαž™αŸ” αž…αžΌαžšαž“αž·αž™αžΆαž™αžαžΆ 10% + αž˜αžΆαž“αž€αž˜αŸ’αžšαž·αžαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž“αŸƒ 50 αž”αž“αŸ’αž‘αžΆαžαŸ‹αŸ” αž αžΎαž™αž˜αžΆαž“αž’αŸ’αžœαžΈαž€αžΎαžαž‘αžΎαž„? αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž˜αžΆαž“αž‡αž½αžšαžŠαŸαž€αžŸαŸ’αž›αžΆαž”αŸ‹αž…αŸ’αžšαžΎαž“αž‡αžΆαž„ "10% + 50" αž“αŸƒαž‡αž½αžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„ αž™αžΎαž„αžŠαžΆαž€αŸ‹αžαžΆαžšαžΆαž„αž“αŸ…αž›αžΎ autovacuum αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

select c.relname,
current_setting('autovacuum_vacuum_threshold') as av_base_thresh,
current_setting('autovacuum_vacuum_scale_factor') as av_scale_factor,
(current_setting('autovacuum_vacuum_threshold')::int +
(current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples))
as av_thresh,
s.n_dead_tup
from pg_stat_user_tables s join pg_class c ON s.relname = c.relname
where s.n_dead_tup > (current_setting('autovacuum_vacuum_threshold')::int
+ (current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples));

αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž˜αžΆαž“αž…αŸ†αžŽαž»αž…αž˜αž½αž™αŸ” αž€αž˜αŸ’αžšαž·αžαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš av_base_thresh ΠΈ av_scale_factor αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαžαŸ‹αžαžΆαŸ†αž„αž‡αžΆαž›αž€αŸ’αžαžŽαŸˆαž”αž»αž‚αŸ’αž‚αž›αŸ” αž αžΎαž™αžαžΆαž˜αž“αŸ„αŸ‡ αž€αž˜αŸ’αžšαž·αžαž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αž“αžΉαž„αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαžŸαž€αž›αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž”αž»αž‚αŸ’αž‚αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαžΆαžšαžΆαž„αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŠαžΎαž˜αŸ’αž”αžΈαž‚αžŽαž“αžΆαž“αŸ…αž‘αžΈαž“αŸ„αŸ‡αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž›αŸ’αž”αž·αž…αž“αž·αž„αž›αŸ’αž”αž·αž…αŸ” αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸ αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžšαž”αžŸαŸ‹αžŸαž αžŸαŸαžœαž·αž€αžšαž”αžŸαŸ‹αž™αžΎαž„αž–αžΈ Avito (αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž“αŸ…αž›αžΎαžŸαŸ’αž›αžΆαž™αž‚αžΊαž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ αž αžΎαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘)αŸ”

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

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

pg_stat_all_indexes αž‚αžΊαž‡αžΆαžŸαŸ’αžαž·αžαž·αž“αŸ…αž›αžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αŸ” αž“αžΆαž„αž˜αž·αž“αž’αŸ†αž‘αŸαŸ” αž αžΎαž™αž™αžΎαž„αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž›αž·αž”αž·αž€αŸ’αžšαž˜αž–αžΈαžœαžΆαŸ” αž αžΎαž™αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αž™αžΎαž„αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αžαžΆαžαžΎαžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž™αžΎαž„αž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αžŠαžΌαž…αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž“αž·αž™αžΆαž™αžšαž½αž…αž˜αž€αž αžΎαž™αžαžΆ update αž‚αžΊαž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αžαžΆαžšαžΆαž„αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž‘αŸ αžœαžΆαž€αŸαž€αŸ†αž–αž»αž„αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž›αž·αž”αž·αž€αŸ’αžšαž˜αž•αž„αžŠαŸ‚αžšαŸ” αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž αžΎαž™ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž˜αžΆαž“αž›αž·αž”αž·αž€αŸ’αžšαž˜αž…αŸ’αžšαžΎαž“αž“αŸ…αž›αžΎαžαžΆαžšαžΆαž„ αž“αŸ„αŸ‡αž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž‡αž½αžšαžŠαŸαž€αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„ αž›αž·αž”αž·αž€αŸ’αžšαž˜αž“αŸƒαžœαžΆαž›αžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž›αž·αž”αž·αž€αŸ’αžšαž˜αž€αŸαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž•αž„αžŠαŸ‚αžš αž αžΎαž™ αž”αŸ’αžšαžŸαž·αž“β€‹αž”αžΎβ€‹αž™αžΎαž„β€‹αž˜αžΆαž“β€‹αž›αž·αž”αž·αž€αŸ’αžšαž˜β€‹αžŠαŸ‚αž›β€‹αž˜αž·αž“β€‹αž”αžΆαž“β€‹αž”αŸ’αžšαžΎβ€‹αžŠαŸ‚αž›β€‹αž˜αž·αž“β€‹αž˜αžΆαž“β€‹αž€αžΆαžšβ€‹αžŸαŸ’αž€αŸαž“β€‹αž›αž·αž”αž·αž€αŸ’αžšαž˜ αž“αŸ„αŸ‡β€‹αž–αž½αž€αž‚αŸβ€‹αž–αŸ’αž™αž½αžšβ€‹αž‡αžΆαž˜αž½αž™β€‹αž™αžΎαž„β€‹αžŠαžΌαž…β€‹αž‡αžΆ ballastαŸ” αž αžΎαž™αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αž˜αŸ’αž…αžΆαžαŸ‹αž–αž½αž€αž‚αŸαŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžœαžΆαž›αž˜αž½αž™αŸ” idx_scan. αž™αžΎαž„αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž˜αžΎαž›αž…αŸ†αž“αž½αž“αž“αŸƒαž€αžΆαžšαžŸαŸ’αž€αŸαž“αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž˜αžΆαž“αž€αžΆαžšαžŸαŸ’αž€αŸαž“αžŸαžΌαž“αŸ’αž™αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž›αžœαŸ‚αž„αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αž»αž€αžŸαŸ’αžαž·αžαž· (αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹ 2-3 αžŸαž”αŸ’αžαžΆαž αŸ) αž“αŸ„αŸ‡αž‘αŸ†αž“αž„αž‡αžΆαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž˜αž·αž“αž›αŸ’αž’ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αž˜αŸ’αž…αžΆαžαŸ‹αž–αž½αž€αžœαžΆαŸ”

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

αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž–αžΈαžšαŸ–

https://github.com/dataegret/pg-utils/blob/master/sql/low_used_indexes.sql

http://www.databasesoup.com/2014/05/new-finding-unused-indexes-query.html

αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαžŸαŸ†αžŽαž½αžšαž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαž”αŸ€αž”αžšαž€αž˜αžΎαž›αž›αž·αž”αž·αž€αŸ’αžšαž˜αžŠαŸ‚αž›αž˜αž·αž“αž”αŸ’αžšαžΎαŸ”

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αžαžΎαž˜αžΆαž“αž’αŸ’αžœαžΈαž‘αŸ€αžαžŠαŸ‚αž›αž‚αž½αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž„αŸ’αžαŸαž”αžŠαŸ„αž™αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸ?

  • αž›αž·αž”αž·αž€αŸ’αžšαž˜αžŠαŸ‚αž›αž˜αž·αž“αž”αŸ’αžšαžΎαž‚αžΊαž’αžΆαž€αŸ’αžšαž€αŸ‹αŸ”

  • αž–αž½αž€αž‚αŸαž™αž€αž€αž“αŸ’αž›αŸ‚αž„αž‘αŸ†αž“αŸαžšαŸ”

  • αž–αž“αŸ’αž™αžΊαžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž’αžΆαž”αŸ‹αžŠαŸαžαŸ”

  • αž€αžΆαžšαž„αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αžΌαž˜αž’αžΌαž›αžΈαŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž›αž»αž”αž›αž·αž”αž·αž€αŸ’αžšαž˜αžŠαŸ‚αž›αž˜αž·αž“αž”αŸ’αžšαžΎ αž“αŸ„αŸ‡αž™αžΎαž„αž“αžΉαž„αž’αŸ’αžœαžΎαž±αŸ’αž™αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αžΆαž“αŸ‹αžαŸ‚αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‚αžΊ pg_stat_activity. αž“αŸαŸ‡αž‚αžΊαž‡αžΆ analogue αž“αŸƒαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ psαž˜αžΆαž“αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„ PostgreSQL αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎ ps'ធូម αž’αŸ’αž“αž€αž˜αžΎαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ pg_stat_activity αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž’αŸ’αž“αž€αž–αžΈαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„ PostgreSQL αŸ”

αžαžΎαž™αžΎαž„αž’αžΆαž…αž™αž€αž’αŸ’αžœαžΈαž–αžΈαž‘αžΈαž“αŸ„αŸ‡?

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

select
count(*)*100/(select current_setting('max_connections')::int)
from pg_stat_activity;

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

select
client_addr, usename, datname, count(*)
from pg_stat_activity group by 1,2,3 order by 4 desc;

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

select
client_addr, usename, datname,
clock_timestamp() - xact_start as xact_age,
clock_timestamp() - query_start as query_age,
query
from pg_stat_activity order by xact_start, query_start;

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

select * from pg_stat_activity where state in
('idle in transaction', 'idle in transaction (aborted)';

αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž˜αž·αž“αž›αŸ’αž’αž‚αžΊαž“αŸ…αž‘αŸ†αž“αŸαžšαž€αŸ’αž“αž»αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž“αž·αž„αž“αŸ…αž‘αŸ†αž“αŸαžšαž€αŸ’αž“αž»αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš (αž”αŸ„αŸ‡αž”αž„αŸ‹) αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ”

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

select * from pg_stat_activity where state in
('idle in transaction', 'idle in transaction (aborted)';

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

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžƒαžΎαž‰αžαžΆαž’αŸ’αž“αž€αž˜αžΆαž“αž…αŸ’αžšαžΎαž“αž‡αžΆαž„ 5-10-20 αž“αŸƒαž–αž½αž€αž‚αŸαž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž“αŸ„αŸ‡αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž–αŸ’αžšαž½αž™αž”αžΆαžšαž˜αŸ’αž— αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž˜αž½αž™αž‡αžΆαž˜αž½αž™αž–αž½αž€αž‚αŸαŸ”

αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž™αžΎαž„αž€αŸαž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αžœαŸαž›αžΆαž‚αžŽαž“αžΆαž•αž„αžŠαŸ‚αžšαŸ” clock_timestamp(). αž™αžΎαž„αž”αžΆαž‰αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž™αžΎαž„αž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αžŠαžΌαž…αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž“αž·αž™αžΆαž™αžαžΆαž„αž›αžΎ αž€αžΆαžšαž…αžΆαž€αŸ‹αžŸαŸ„αž‚αžΊαž‡αžΆαž–αŸαž›αžŠαŸ‚αž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž–αžΈαžš αž¬αž…αŸ’αžšαžΎαž“αž”αŸ’αžšαž€αž½αžαž”αŸ’αžšαž‡αŸ‚αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αž“αž’αžΆαž“αž˜αž½αž™ αž¬αž€αŸ’αžšαž»αž˜αž˜αž½αž™αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž“αŸαŸ‡αž™αžΎαž„αž˜αžΆαž“αžœαžΆαž›αž˜αž½αž™αŸ” waiting αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžαž˜αŸ’αž›αŸƒαž”αŸŠαžΌαž›αžΈαž“ true ឬ false.

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

αž–αŸ’αžšαž˜αžΆαž“: _αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αžΈ Postgres 9.6 αžœαžΆαž› waiting αžŠαž€αž…αŸαž‰ αž“αž·αž„αž‡αŸ†αž“αž½αžŸαžŠαŸ„αž™αžœαžΆαž›αž–αŸαžαŸŒαž˜αžΆαž“αž–αžΈαžšαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αž wait_event_type ΠΈ wait_event._

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

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

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

https://github.com/lesovsky/uber-scripts/blob/master/postgresql/sql/c4_06_show_locked_queries.sql

https://github.com/lesovsky/uber-scripts/blob/master/postgresql/sql/show_locked_queries_95.sql

https://github.com/lesovsky/uber-scripts/blob/master/postgresql/sql/show_locked_queries_96.sql

http://big-elephants.com/2013-09/exploring-query-locks-in-postgres/

αž αžΎαž™αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŸαŸ†αžŽαž½αžšαž–αžΈαžšαžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžαžΆαž˜αžŠαžΆαž“αž€αžΆαžšαž…αžΆαž€αŸ‹αžŸαŸ„αŸ” αž™αžΎαž„αž”αŸ’αžšαžΎαž‘αž·αžŠαŸ’αž‹αž—αžΆαž– pg_locksαžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžαžΆαž˜αžŠαžΆαž“αžŸαŸ„αžšαž’αŸ’αž„αž“αŸ‹αŸ”

αž αžΎαž™αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αžΈαž˜αž½αž™αž‚αžΊαž‡αžΆαž’αžαŸ’αžαž”αž‘αžŸαŸ’αž“αžΎαžŸαž»αŸ†αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αŸ” αžœαžΆαžœαŸ‚αž„αžŽαžΆαžŸαŸ‹αŸ”

αž αžΎαž™αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αžΈαž–αžΈαžšαž‚αžΊαž‡αžΆαž’αžαŸ’αžαž”αž‘αžŸαŸ’αžαžΈαž–αžΈαžŸαŸ„αŸ” αžœαžΆαž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αžΆαž“αžœαžΆαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžŽαžΆαžŸαŸ‹αŸ”

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

αž“αŸαŸ‡β€‹αž‡αžΆβ€‹αžšαž”αŸ€αž”β€‹αžŠαŸ‚αž›β€‹αž™αžΎαž„β€‹αž’αžΆαž…β€‹αžŠαžΉαž„β€‹αžαžΆβ€‹αž’αŸ’αž“αž€β€‹αžŽαžΆβ€‹αž…αžΆαž€αŸ‹αžŸαŸ„β€‹αž’αŸ’αž“αž€αžŽαžΆ αž’αŸ’αž“αž€αžŽαžΆβ€‹αž€αžΆαž“αŸ‹β€‹αž’αŸ’αž“αž€αžŽαžΆ αž αžΎαž™β€‹αž™αžΎαž„β€‹αž’αžΆαž…β€‹αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™β€‹αž”αž‰αŸ’αž αžΆβ€‹αž“αŸαŸ‡β€‹αžαž‘αŸ…αž‘αŸ€αžβ€‹αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αž˜αŸ‰αžΌαžŒαž»αž›αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‚αžΊ pg_stat_statements. αžŠαžΌαž…αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž“αž·αž™αžΆαž™ αžœαžΆαž‡αžΆαž˜αŸ‰αžΌαžŒαž»αž›αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎαžœαžΆ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž•αŸ’αž‘αž»αž€αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžšαž”αžŸαŸ‹αžœαžΆαž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜ PostgreSQL αž‘αžΎαž„αžœαž·αž‰ αžŠαŸ†αž‘αžΎαž„αž˜αŸ‰αžΌαžŒαž»αž› (αž‡αžΆαž˜αž½αž™αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž˜αž½αž™) αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž“αžΉαž„αž˜αžΆαž“αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αžαŸ’αž˜αžΈαŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

CΡ€Π΅Π΄Π½Π΅Π΅ врСмя запроса Π² милисСкундах
$ select (sum(total_time) / sum(calls))::numeric(6,3)
from pg_stat_statements;

Π‘Π°ΠΌΡ‹Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΠΈΡˆΡƒΡ‰ΠΈΠ΅ (Π² shared_buffers) запросы
$ select query, shared_blks_dirtied
from pg_stat_statements
where shared_blks_dirtied > 0 order by 2 desc;

αžαžΎαž™αžΎαž„αž’αžΆαž…αž™αž€αž’αŸ’αžœαžΈαž–αžΈαž‘αžΈαž“αŸ„αŸ‡? αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαžšαžΏαž„αžŸαžΆαž˜αž‰αŸ’αž‰ αž™αžΎαž„αž’αžΆαž…αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž’αž“αž»αžœαžαŸ’αžαžŸαŸ†αžŽαž½αžšαž‡αžΆαž˜αž’αŸ’αž™αž˜αŸ” αž–αŸαž›αžœαŸαž›αžΆαž€αŸ†αž–αž»αž„αž€αžΎαž“αž‘αžΎαž„ αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸαž™αžαžΆ PostgreSQL αž€αŸ†αž–αž»αž„αž†αŸ’αž›αžΎαž™αžαž”αž™αžΊαžαŸ— αž αžΎαž™αž’αŸ’αžœαžΈαž˜αž½αž™αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαŸ”

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

αž αžΎαž™αž™αžΎαž„αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž’αžΆαž…αž˜αžΎαž›αžŸαŸ’αžαž·αžαž·αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ†αžŽαžΎαž‘αžΆαŸ†αž„αž“αŸαŸ‡αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

https://github.com/dataegret/pg-utils/blob/master/sql/global_reports/query_stat_total.sql

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αž–αž½αž€β€‹αž™αžΎαž„β€‹αž€αŸ†αž–αž»αž„β€‹αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈβ€‹αž αŸ’αž“αžΉαž„? αž™αžΎαž„αž‚αžŽαž“αžΆαžŸαŸ’αžαž·αžαž·αžšαž½αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ†αžŽαž½αžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ†αžŽαž½αžšαž“αžΈαž˜αž½αž™αŸ— αž™αžΎαž„αžšαžΆαž”αŸ‹αž€αžΆαžšαžšαž½αž˜αž…αŸ†αžŽαŸ‚αž€αž“αžΈαž˜αž½αž™αŸ—αžšαž”αžŸαŸ‹αžœαžΆαž…αŸ†αž–αŸ„αŸ‡αžŸαŸ’αžαž·αžαž·αžšαž½αž˜αž“αŸαŸ‡αŸ”

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αžαžΎαž™αžΎαž„αž˜αžΆαž“αž’αŸ’αžœαžΈαž“αŸ…αž–αžΈαž€αŸ’αžšαŸ„αž™αž†αžΆαž€? αž“αŸ…β€‹αž˜αžΆαž“β€‹αž€αžΆαžšβ€‹αžŠαžΆαž€αŸ‹β€‹αžŸαŸ’αž“αžΎβ€‹αž˜αž½αž™β€‹αž…αŸ†αž“αž½αž“β€‹αžŠαŸ‚αž›β€‹αžαŸ’αž‰αž»αŸ†β€‹αž˜αž·αž“β€‹αž”αžΆαž“β€‹αž–αž·αž…αžΆαžšαžŽαžΆ αž–αŸ’αžšαŸ„αŸ‡β€‹αž–αŸαž›β€‹αžœαŸαž›αžΆβ€‹αž˜αžΆαž“β€‹αž€αŸ†αžŽαžαŸ‹αŸ”

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

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

αž˜αŸ‰αžΌαžŒαž»αž›αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‚αžΊ pgfincore. αžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαžΆαžšαžΆαž„αž€αž˜αŸ’αžšαž·αžαž‘αžΆαž”αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž αŸ…αžαžΆαž˜αž”αŸ’αžšαž–αŸαž“αŸ’αž’ mincore()αž–αŸ„αž›αž‚αžΊαžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž•αŸ’αž‘αž»αž€αžαžΆαžšαžΆαž„αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€ αž¬αžŠαž€αžœαžΆαž…αŸαž‰αŸ” αž αžΎαž™αžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™ αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž‘αŸ†αž–αŸαžšαž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž“αŸ„αŸ‡αž‚αžΊαžαžΆαžαžΎαžαžΆαžšαžΆαž„αž€αžΆαž“αŸ‹αž€αžΆαž”αŸ‹αž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž‘αŸ†αž–αŸαžš αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€ αž αžΎαž™αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžœαžΆαž™αžαž˜αŸ’αž›αŸƒαž”αž“αŸ’αž‘αž»αž€αž“αŸ…αž›αžΎαžαž»αŸ”

αž˜αŸ‰αžΌαžŒαž»αž›αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‚αžΊ pg_stat_kcache. αžœαžΆαž€αŸαž”αŸ’αžšαžΎαž€αžΆαžšαž αŸ…αžαžΆαž˜αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αž„αžŠαŸ‚αžšαŸ” getrusage(). αž αžΎαž™αžœαžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžœαžΆαž˜αž»αž“ αž“αž·αž„αž€αŸ’αžšαŸ„αž™αž€αžΆαžšαžŸαŸ’αž“αžΎαžŸαž»αŸ†αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αŸ” αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αžŠαŸ‚αž›αž‘αž‘αž½αž›αž”αžΆαž“αžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αž”αŸ‰αžΆαž“αŸ‹αž”αŸ’αžšαž˜αžΆαžŽαžαžΆαžαžΎαžŸαŸ†αžŽαžΎαžšαž”αžŸαŸ‹αž™αžΎαž„αž…αŸ†αžŽαžΆαž™αž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“αž“αŸ…αž›αžΎαžαžΆαžŸ I / O αž–αŸ„αž›αž‚αžΊαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‡αžΆαž˜αž½αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž―αž€αžŸαžΆαžšαž“αž·αž„αž˜αžΎαž›αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžαž½αžšαž€αŸ’αž”αžΆαž›αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž˜αŸ‰αžΌαžŒαž»αž›αž“αŸαŸ‡αž“αŸ…αž€αŸ’αž˜αŸαž„ (khe-khe) αž αžΎαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αžœαžΆ αžœαžΆαž‘αžΆαž˜αž‘αžΆαžš PostgreSQL 9.4 αž“αž·αž„ pg_stat_statements αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž›αžΎαž€αž‘αžΎαž„αž–αžΈαž˜αž»αž“αŸ”

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

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

  • αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαŸ’αžαž·αžαž·αž‚αžΊαž„αžΆαž™αžŸαŸ’αžšαž½αž› αžœαžΆαž‡αžΆ SQL αž’αž˜αŸ’αž˜αžαžΆαŸ” αž’αŸ’αž“αž€αž”αžΆαž“αž”αŸ’αžšαž˜αžΌαž›αžŸαŸ†αžŽαžΎ αž…αž„αž€αŸ’αžšαž„αžœαžΆ αž•αŸ’αž‰αžΎαžœαžΆ αž˜αžΎαž›αžœαžΆαŸ”

  • αžŸαŸ’αžαž·αžαž·αž‡αž½αž™αž†αŸ’αž›αžΎαž™αžŸαŸ†αžŽαž½αžšαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αžΆαž“αžŸαŸ†αžŽαž½αžš αž’αŸ’αž“αž€αž„αžΆαž€αž‘αŸ…αžšαž€αžŸαŸ’αžαž·αžαž· - αž˜αžΎαž› αž‘αžΆαž‰αž€αžΆαžšαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“ αžœαž·αž—αžΆαž‚αž›αž‘αŸ’αž’αž•αž›αŸ”

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

αž…αžΌαž›αž‡αŸ’αžšαŸ…αž‘αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαž·αžαž·αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ PostgreSQL αŸ” Alexey Lesovsky

αžŸαŸαž…αž€αŸ’αžαžΈαž™αŸ„αž„

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

αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αžŸαžšαžŸαŸαžšαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αž
https://dataegret.com/news-blog (eng)

αž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αžŸαŸ’αžαž·αžαž·
https://www.postgresql.org/docs/current/monitoring-stats.html

αž˜αž»αžαž„αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’
https://www.postgresql.org/docs/current/functions-admin.html

αž˜αŸ‰αžΌαžŒαž»αž›αžšαž½αž˜αž…αŸ†αžŽαŸ‚αž€
https://www.postgresql.org/docs/current/pgstatstatements.html
https://www.postgresql.org/docs/current/pgstattuple.html
https://www.postgresql.org/docs/current/pgbuffercache.html
https://github.com/klando/pgfincore
https://github.com/dalibo/pg_stat_kcache

αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ SQL αž“αž·αž„αž§αž‘αžΆαž αžšαžŽαŸαž€αžΌαžŠ sql
https://github.com/dataegret/pg-utils

αžŸαžΌαž˜αž’αžšαž‚αž»αžŽαž’αŸ’αž“αž€αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αŸ’αž“αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€!

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

αž‘αž·αž‰αž€αžΆαžšαž”αž„αŸ’αž αŸ„αŸ‡αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸαž αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαžšαž€αžΆαžšαž–αžΆαžš DDoS, αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS VDS πŸ”₯ αž‘αž·αž‰αžŸαŸαžœαžΆαž”αž„αŸ’αž αŸ„αŸ‡αž‚αŸαž αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αžΆαžšαž–αžΆαžš DDoS αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS VDS | ProHoster