เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบ„เปเบฒเบ–เบฒเบก PostgreSQL. เบžเบฒเบเบ—เบต 1 - เบเบฒเบ™เบฅเบฒเบเบ‡เบฒเบ™

เบงเบดเบชเบฐเบงเบฐเบเบญเบ™ - เปเบ›เบˆเบฒเบเบฅเบฒเบ•เบดเบ™ - เบ”เบปเบ™เปƒเบˆ.
เบงเบดเบชเบฐเบงเบฐเบเบญเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบซเบเบฑเบ‡เป„เบ”เป‰. (c) R. เบเบฒเบŠเบงเบ™.
Epigraphs.
เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบ„เปเบฒเบ–เบฒเบก PostgreSQL. เบžเบฒเบเบ—เบต 1 - เบเบฒเบ™เบฅเบฒเบเบ‡เบฒเบ™
เบซเบผเบทเป€เบฅเบทเปˆเบญเบ‡เบเปˆเบฝเบงเบเบฑเบšเบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบœเบนเป‰เบšเปเบฅเบดเบซเบฒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบˆเบทเปˆเบˆเปเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเบ‚เบญเบ‡เบฅเบฒเบงเปƒเบ™เบญเบฐเบ”เบตเบ”.

เบ„เปเบฒเบญเบฐเบ—เบดเบ–เบฒเบ™

เบŠเบทเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ”เป‰เบ–เบทเบเบ›เปˆเบฝเบ™. เบšเบฑเบ‡เป€เบญเบตเบ™เปเบกเปˆเบ™เปเบšเบšเบชเบธเปˆเบก. เป€เบญเบเบฐเบชเบฒเบ™เบชเบฐเปเบ”เบ‡เป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบชเปˆเบงเบ™เบ•เบปเบงเบ‚เบญเบ‡เบœเบนเป‰เบ‚เบฝเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™.

เบเบฒเบ™เบ›เบฐเบ•เบดเป€เบชเบ”เบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™: เบŠเบธเบ”เบšเบปเบ”เบ„เบงเบฒเบกเบ—เบตเปˆเบงเบฒเบ‡เปเบœเบ™เป„เบงเป‰เบˆเบฐเบšเปเปˆเบกเบตเบฅเบฒเบเบฅเบฐเบญเบฝเบ” เปเบฅเบฐเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ เปเบฅเบฐเบชเบฐเบ„เบฃเบดเบšเบ—เบตเปˆเปƒเบŠเป‰. เบงเบฑเบ”เบชเบฐเบ”เบธเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ™เบณเปƒเบŠเป‰เป„เบ”เป‰เบ—เบฑเบ™เบ—เบต โ€œAS ISโ€.
เบ›เบฐเบเบฒเบ™เบ—เปเบฒเบญเบดเบ”, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ›เบฐเบฅเบดเบกเบฒเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡เบงเบฑเบ”เบชเบฐเบ”เบธ,
เบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เบเป‰เบญเบ™เบ„เบงเบฒเบกเปƒเบเป‰เบŠเบดเบ”เบเบฑเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡.
เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบšเบปเบ”เบ„เบงเบฒเบกเบˆเบฐเบกเบตเบžเบฝเบ‡เปเบ•เปˆเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เปเบฅเบฐเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบธเบ”.
เบšเบฒเบ‡เบ—เบตเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”เบฅเบฐเบšเบปเบšเบˆเบฐเป€เบ•เบตเบšเป‚เบ•เป€เบ–เบดเบ‡เบฅเบฐเบ”เบฑเบšเบ—เบตเปˆเบ–เบทเบเบ›เบฐเบเบฒเบ”เบขเบนเปˆเปƒเบ™ GitHub, เบซเบผเบทเบญเบฒเบ”เบˆเบฐเบšเปเปˆ. เป€เบงเบฅเบฒเบˆเบฐเบชเบฐเปเบ”เบ‡.

เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เป€เบฅเบทเปˆเบญเบ‡ - ".เป€เบˆเบปเป‰เบฒเบˆเบทเปˆเป„เบ”เป‰เบšเปเบงเปˆเบฒเบกเบฑเบ™เบ—เบฑเบ‡เปเบปเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบ™เบงเปƒเบ”".
เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เป€เบ›เบฑเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš, เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบธเบ” - "เบเบฒเบ™เบชเบฑเบ‡เป€เบ„เบฒเบฐเป€เบ›เบฑเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” PostgreSQLยป

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ‚เป‰เบญเบเบˆเบถเปˆเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰?

เบ”เบต, เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบฅเบทเบก, เบˆเบทเปˆเบˆเปเบฒเบงเบฑเบ™เบญเบฑเบ™เบฎเบธเปˆเบ‡เป‚เบฅเบ”เปƒเบ™เบเบฒเบ™เบšเปเบฒเบ™เบฒเบ™.
เบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เบเบฒเบ™เบˆเบฑเบ”เบฅเบฐเบšเบปเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เบฝเบ™. เป€เบžเบฒเบฐเบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบ‚เป‰เบญเบเป€เบฅเบตเปˆเบกเบชเบฑเบšเบชเบปเบ™ เปเบฅเบฐเบฅเบทเบกเบšเบฒเบ‡เบชเปˆเบงเบ™.

เบ”เบต, เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เปƒเบ”เบœเบนเป‰เบ™เบถเปˆเบ‡เปเบฅเบฐเบŠเปˆเบงเบเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™ reinventing เบฅเปเป‰เปเบฅเบฐเบšเปเปˆเป€เบเบฑเบšเบเปเบฒ rake เป„เบ”เป‰. เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เบ›เบฑเบšเบ›เบธเบ‡ karma เบ‚เบญเบ‡เบ—เปˆเบฒเบ™ (เบšเปเปˆเปเบกเปˆเบ™ Khabrov). เป€เบžเบฒเบฐเบงเปˆเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบตเบ„เบธเบ™เบ„เปˆเบฒเบ—เบตเปˆเบชเบธเบ”เปƒเบ™เป‚เบฅเบเบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบ„เบดเบ”. เบชเบดเปˆเบ‡เบ—เบตเปˆ เบชเบณ เบ„เบฑเบ™เปเบกเปˆเบ™เบŠเบญเบเบซเบฒเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”. เปเบ•เปˆเบเบฒเบ™เบซเบฑเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เป„เบ›เบชเบนเปˆเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ„เปเบฒเบ–เบฒเบกเบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบซเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ„เปˆเบญเบเป† ...

เบเบฒเบ™เบชเป‰เบฒเบ‡เบšเบฑเบ™เบซเบฒ.

เบกเบตเปƒเบซเป‰:

เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ PostgreSQL(10.5), เบ›เบฐเป€เบžเบ”เบเบฒเบ™เป‚เบซเบผเบ”เบ›เบฐเบชเบปเบก (OLTP+DSS), เบเบฒเบ™เป‚เบซเบผเบ”เปเบชเบ‡เบชเบฐเบซเบงเปˆเบฒเบ‡เบ›เบฒเบ™เบเบฒเบ‡, เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบ„เบฅเบฒเบงเบ‚เบญเบ‡ AWS.
เบšเปเปˆเบกเบตเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™; เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เปเบกเปˆเบ™เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบท AWS เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบซเบ™เป‰เบญเบ.

เบกเบฑเบ™ เบˆเบณ เป€เบ›เบฑเบ™:

เบ•เบดเบ”เบ•เบฒเบกเบเบงเบ”เบเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบšเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เบŠเบญเบเบซเบฒเปเบฅเบฐเบกเบตเบ‚เปเป‰เบกเบนเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบฎเบธเบ™เปเบฎเบ‡.

เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเป‚เบ”เบเบซเบเปเป‰เบซเบผเบทเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบเบฒเบ™เปเบเป‰เป„เบ‚

เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เปƒเบซเป‰เบžเบฐเบเบฒเบเบฒเบกเบงเบดเป€เบ„เบฒเบฐเบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบˆเบฒเบเบˆเบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ›เบฝเบšเบ—เบฝเบšเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เปเบฅเบฐเบ‚เปเป‰เป€เบชเบเบ‚เบญเบ‡เบงเบดเบชเบฐเบงเบฐเบเบญเบ™, เปเบฅเบฐเปƒเบซเป‰เบœเบนเป‰เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบชเบดเบ”เบกเบฑเบ™เบ•เบฒเบกเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เปเบฅเบฐ เบเบฒเบ™โ€‹เบชเบนเบ™โ€‹เป€เบชเบโ€‹เบเบฒเบ™โ€‹เบ„เบธเป‰เบกโ€‹เบ„เบญเบ‡โ€‹.

เบ—เบฒเบ‡เป€เบฅเบทเบญเบ 1 - "เป€เบฎเบฑเบ”เบงเบฝเบเบ•เบฒเบกเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™"

เบžเบงเบเป€เบฎเบปเบฒเบ›เปˆเบญเบเปƒเบซเป‰เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™. เบ–เป‰เบฒเบฅเบนเบเบ„เป‰เบฒเบšเปเปˆเบžเปเปƒเบˆเบเบฑเบšเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบซเบผเบทเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ, เบฅเบฒเบงเบˆเบฐเปเบˆเป‰เบ‡เปƒเบซเป‰เบ™เบฑเบเบงเบดเบชเบฐเบงเบฐเบเบญเบ™ DBA เปเบˆเป‰เบ‡เป‚เบ”เบเบญเบตเป€เบกเบฅเบซเบผเบทเป‚เบ”เบเบเบฒเบ™เบชเป‰เบฒเบ‡เป€เบซเบ”เบเบฒเบ™เปƒเบ™เบ–เบฒเบ”เบ›เบตเป‰.
เบงเบดเบชเบฐเบงเบฐเบเบญเบ™, เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™, เบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบšเบฑเบ™เบซเบฒ, เบชเบฐเป€เบซเบ™เบตเบเบฒเบ™เปเบเป‰เป„เบ‚เบซเบผเบทเป€เบญเบปเบฒเบšเบฑเบ™เบซเบฒเปƒเบชเปˆเบเบฑเบš burner เบซเบฅเบฑเบ‡, เบซเบงเบฑเบ‡เบงเปˆเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฐเปเบเป‰เป„เบ‚เป€เบญเบ‡, เปเบฅเบฐเปƒเบ”เบเปเปˆเบ•เบฒเบก, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฐเบ–เบทเบเบฅเบทเบกเปƒเบ™เป„เบงเป†เบ™เบตเป‰.
Gingerbread เปเบฅเบฐ donuts, bruises เปเบฅเบฐเบ•เปเบฒGingerbread เปเบฅเบฐ donuts:
1. เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบซเบเบฑเบ‡เบžเบดเป€เบชเบ”.
2. เบกเบตเป‚เบญเบเบฒเบ”เบ—เบตเปˆเบˆเบฐเปเบเป‰เบ•เบปเบง เปเบฅเบฐ เปเบฑเปˆเบ™เปเบเป‰เบ•เบปเบงเบชเบฐเป€เปเบต.
3. เป€เบงเบฅเบฒเบซเบผเบฒเบเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบงเบฅเบฒเบ•เบฒเบกเบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป€เบญเบ‡.
เบฎเบญเบเปเบ•เบ เปเบฅเบฐเบšเบฒเบ”เปเบœ:
1. เบšเปเปˆเบ”เบปเบ™ เบซเบผเบท เบ•เปเปˆเบกเบฒ, เบฅเบนเบเบ„เป‰เบฒเบˆเบฐเบ„เบดเบ”เป€เบ–เบดเบ‡เป€เบ™เบทเป‰เบญเปเบ—เป‰เบ‚เบญเบ‡เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบขเบนเปˆเปเบฅเบฐเบ„เบงเบฒเบกเบเบธเบ•เบดเบ—เบณเบ—เบปเปˆเบงเป„เบ›เปƒเบ™เป‚เบฅเบเบ™เบตเป‰ เปเบฅเบฐ เบ–เบฒเบกเบ•เบปเบงเป€เบญเบ‡เบญเบตเบเบ„เบฑเป‰เบ‡เบงเปˆเบฒ - เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ‚เป‰เบญเบเบˆเบถเปˆเบ‡เบˆเปˆเบฒเบเป€เบ‡เบดเบ™เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ? เบœเบปเบ™เบชเบฐเบ—เป‰เบญเบ™เปเบกเปˆเบ™เบชเบฐเป€เบซเบกเบตเบ„เบทเบเบฑเบ™ - เบ„เปเบฒเบ–เบฒเบกเบ”เบฝเบงเปเบกเปˆเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบฅเบนเบเบ„เป‰เบฒเบˆเบฐเป€เบšเบทเปˆเบญเปเบฅเบฐเป‚เบšเบเบกเบทเบฅเบฒ. เปเบฅเบฐ feeder เบˆเบฐเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ. เบกเบฑเบ™เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเป‚เบชเบเป€เบชเบปเป‰เบฒ.
2. เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบงเบดเบชเบฐเบงเบฐเบเบญเบ™ - เบชเบนเบ™.
3. เบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเปƒเบ™เบเบฒเบ™เบงเบฒเบ‡เปเบœเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบฅเบฐเบเบฒเบ™เป‚เบซเบผเบ”

เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบ 2- โ€œเป€เบ•เบฑเป‰เบ™โ€‹เบ”เป‰เบงเบโ€‹ tambourines, steaming and putting on shoesโ€

เบงเบฑเบ 1- เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบกเบตเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป. เบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ—เบธเบเบ›เบฐเป€เบžเบ”เป„เบ›เบซเบฒเบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบกเบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบ—เบฑเบ”เบชเบฐเบ™เบฐเปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง, เป€เบ›เบตเบ”เป€เบ„เบทเปˆเบญเบ‡เบ™เบฑเบšเบ—เบธเบเบ›เบฐเป€เบžเบ”, เป€เบญเบปเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เปเบฅเบฐเบงเบดเป€เบ„เบฒเบฐเบฅเบฒเบเบเบฒเบ™เปเบฅเบฐเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบ›เบฑเบ™เป„เบฅเบเบฐ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบเบฒเบŸ, เบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบ—เบตเปˆเบชเบงเบเบ‡เบฒเบกเบซเบผเบทเบšเปเปˆเบ‡เบฒเบก. เบชเบดเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เปเบกเปˆเบ™เบˆเบฐเบกเบตเบซเบผเบฒเบ, เบซเบผเบฒเบ.
เบงเบฑเบ 2- เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบเบดเบ”เบˆเบฐเบเปเบฒเปเบฅเบฐเป€เบ›เบตเบ”เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ‚เบญเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰.
เบงเบฑเบ 3- เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบเบฐเบเบฝเบกเป€เบญเบเบฐเบชเบฒเบ™เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™, เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบตเป‰เบ™เป€เบญเบเบฐเบชเบฒเบ™เบ™เบตเป‰เบ‡เปˆเบฒเบเป† - "เบžเบงเบเป€เบฎเบปเบฒเบ„เบงเบ™เบ•เบฑเป‰เบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบ™เบงเปƒเบ”."
เบงเบฑเบ 4เบฅเบนเบเบ„เป‰เบฒ, เป€เบซเบฑเบ™เป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡ เปเบฅเบฐเบ•เบปเบงเป€เบฅเบเบญเบฑเบ™เบ‡เบปเบ”เบ‡เบฒเบกเบ—เบฑเบ‡เปเบปเบ”เบ™เบตเป‰, เบขเบนเปˆเปƒเบ™เบ„เบงเบฒเบกเปเบฑเป‰เบ™เปƒเบˆเปเบšเบšเป€เบ”เบฑเบเบ™เป‰เบญเบ, เป„เบฎเป‰เบชเบฒเบฅเบฐ - เบ”เบฝเบงเบ™เบตเป‰เบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเปƒเบซเป‰เบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเปƒเบ™เป„เบงเป†เบ™เบตเป‰. เปเบฅเบฐ, เบฅเบฒเบงเป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบšเปเปˆเป€เบˆเบฑเบšเบ›เบงเบ”เบเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบฒเบ‡เบ”เป‰เบฒเบ™เบเบฒเบ™เป€เบ‡เบดเบ™เบ‚เบญเบ‡เบฅเบฒเบง. เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบ‡เบซเบกเบฑเป‰เบ™เปƒเบˆเบงเปˆเบฒเบงเบดเบชเบฐเบงเบฐเบเบญเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบต. เบเบณเบฅเบฑเบ‡เป‚เบซเบผเบ”เบชเบนเบ‡เบชเบธเบ”.
เบงเบฑเบ 5- เป€เบฎเบฑเบ”โ€‹เป€เบฅโ€‹เบทเป‰เบกโ€‹เบ„เบทเบ™โ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ—เบต 1 เป€เบ›เบฑเบ™โ€‹เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบดโ€‹.
Gingerbread เปเบฅเบฐ donuts, bruises เปเบฅเบฐเบ•เปเบฒGingerbread เปเบฅเบฐ donuts:
1. เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เปเบฅเบฐเบงเบดเบชเบฐเบงเบฐเบเบญเบ™เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ, เบ„เบฒเบ”เบ„เบฐเป€เบ™เปเบฅเบฐเป€เบ•เบฑเบกเป„เบ›เบ”เป‰เบงเบเบเบดเบ”เบˆเบฐเบเปเบฒ. เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™ buzzing, เบ—เบธเบเบ„เบปเบ™เปเบกเปˆเบ™เบ„เปˆเบญเบเบกเบตเป€เบงเบฅเบฒ.
2. เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเบเปเปˆเบšเปเปˆเบซเบเบธเป‰เบ‡เบเบฒเบ - เบฅเบฒเบงเปเบฑเป‰เบ™เปƒเบˆเบชเบฐเป€เปเบตเบงเปˆเบฒเบ•เป‰เบญเบ‡เบญเบปเบ”เบ—เบปเบ™เปœเป‰เบญเบเปœเบถเปˆเบ‡ เปเบฅเป‰เบงเบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฐเบชเบณเป€เบฅเบฑเบ”. เบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบ”เบตเบ‚เบถเป‰เบ™, เบ”เบต, เป‚เบฅเบเบšเปเปˆเบเบธเบ”เบ•เบดเบ—เปเบฒ, เปƒเบ™เบŠเบตเบงเบดเบ”เบ•เปเปˆเป„เบ›เป€เบˆเบปเป‰เบฒเบˆเบฐเป‚เบŠเบเบ”เบต.
เบฎเบญเบเปเบ•เบ เปเบฅเบฐเบšเบฒเบ”เปเบœ:
1. เบšเปเปˆเบ”เบปเบ™, เบˆเบฐเบกเบตเบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เป„เบงเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™, เปเบ•เปˆเบฅเบฒเบ„เบฒเบ–เบทเบเบเบงเปˆเบฒเป€เบฅเบฑเบเบ™เป‰เบญเบ. เปเบฅเบฐเบ–เป‰เบฒเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ„เบทเบเบฑเบ™, เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ•เป‰เบญเบ‡เบˆเปˆเบฒเบเบซเบผเบฒเบ. เป€เบŠเบดเปˆเบ‡เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบˆเบฐเบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบซเบฒเบเบ•เบปเบงเบ‚เบญเบ‡ feeder เป„เบ”เป‰.
2. เบกเบฑเบ™เบซเบ™เป‰เบฒเป€เบšเบทเปˆเบญ. เบเบดเบ”เบˆเบฐเบเปเบฒเบ—เบตเปˆเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบซเบกเบฒเบเบ—เบตเปˆเบซเบ™เป‰เบฒเป€เบšเบทเปˆเบญเบ›เบฒเบ™เปƒเบ”.
3. เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบšเปเปˆเบกเบตเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ. เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบงเบดเบชเบฐเบงเบฐเบเบญเบ™, เบ‚เปเป‰เป€เบชเบเปเบกเปˆเบ™เบงเปˆเบฒ, เบšเปเปˆเป€เบซเบกเบทเบญเบ™เบเบฑเบšเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เปเบฒเบญเบดเบ”, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡ IBD เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡. เปเบฅเบฐเบ™เบตเป‰เปƒเบŠเป‰เป€เบงเบฅเบฒ. เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบงเบฅเบฒเป€เบžเบทเปˆเบญเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡เบ„เบปเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบฎเบฑเบ. เป€เบžเบฒเบฐเป€เบˆเบปเป‰เบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ”เบนเปเบฅเบ•เบปเบงเป€เบญเบ‡เป„เบ”เป‰, เบšเปเปˆเบกเบตเปƒเบœเบกเบฒเบ”เบนเบ–เบนเบเป€เบˆเบปเป‰เบฒ.

เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบ 3 - เบ—เปˆเบฒเบ™โ€‹เบšเปเปˆโ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบชเป‰เบฒเบ‡โ€‹เบฅเบปเบ”โ€‹เบ–เบตเบšโ€‹, เบ—เปˆเบฒเบ™โ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบŠเบทเป‰โ€‹เบกเบฑเบ™โ€‹เปเบฅเบฐโ€‹เบ‚เบฑเบšโ€‹เป€เบ„เบทเปˆเบญเบ™โ€‹เบกเบฑเบ™โ€‹.

เบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบ—เบตเปˆเบงเบดเบชเบฐเบงเบฐเบเบญเบ™เบˆเบฒเบเบšเปเบฅเบดเบชเบฑเบ”เบญเบทเปˆเบ™เบเบดเบ™ pizza เบเบฑเบšเป€เบšเบ (เป‚เบญเป‰, เบงเบฑเบ™เบชเบฐเบซเบ‡เปˆเบฒเบฅเบฒเบชเบตเบ‚เบญเบ‡ St. Petersburg เปƒเบ™ 90s). เปƒเบซเป‰เปƒเบŠเป‰เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ—เบตเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™, เปเบเป‰เป„เบ‚เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบ, เปเบฅเบฐเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบงเบเบฒเบ™เป€เบงเบปเป‰เบฒเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ” (เบ”เบต, เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบเบฑเบšเบœเบนเป‰เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ).
Gingerbread เปเบฅเบฐ donuts, bruises เปเบฅเบฐเบ•เปเบฒGingerbread เปเบฅเบฐ donuts:
1. เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบชเบเป€เบงเบฅเบฒเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบ›เบฐเบ”เบดเบ”เบกเบฒเปเบฅเป‰เบง. เป€เบญเบปเบฒเบกเบฑเบ™เปเบฅเบฐเปƒเบŠเป‰เบกเบฑเบ™.
2. เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™เป‚เบ”เบเบ„เบปเบ™เป‚เบ‡เปˆเปเบฅเบฐเปเบ™เปˆเบ™เบญเบ™, เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”.
3. เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเปƒเบซเป‰เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”.
เบฎเบญเบเปเบ•เบ เปเบฅเบฐเบšเบฒเบ”เปเบœ:
1. เบงเบดเบชเบฐเบงเบฐเบเบญเบ™เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบงเบดเบชเบฐเบงเบฐเบเบญเบ™, เปเบ•เปˆเป€เบ›เบฑเบ™เบœเบนเป‰เปƒเบŠเป‰เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบ‚เบญเบ‡เบ„เบปเบ™เบญเบทเปˆเบ™.
2. เบฅเบนเบเบ„เป‰เบฒเบ•เป‰เบญเบ‡เบซเบกเบฑเป‰เบ™เปƒเบˆเปƒเบ™เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบŠเบทเป‰เบชเบดเปˆเบ‡เบ—เบตเปˆ, เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบง, เบฅเบฒเบงเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆ, เปเบฅเบฐเบšเปเปˆเบ„เบงเบ™, เปเบฅเบฐเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เบ‡เบปเบšเบ›เบฐเบกเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบ›เบตเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบญเบฐเบ™เบธเบกเบฑเบ”เปเบฅเบฐเบˆเบฐเบšเปเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบˆเบฑเบ”เบชเบฑเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเปเบฅเบฐเบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒเบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบชเบฐเป€เบžเบฒเบฐ. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบ—เปเบฒเบญเบดเบ”เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบˆเปˆเบฒเบ, เบˆเปˆเบฒเบเปเบฅเบฐเบˆเปˆเบฒเบเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡. เปเบฅเบฐเบฅเบนเบเบ„เป‰เบฒเปเบกเปˆเบ™ stingy. เบ™เบตเป‰เปเบกเปˆเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ‚เบญเบ‡เบŠเบตเบงเบดเบ”เบ™เบตเป‰.

เบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ” - Chernyshevsky? เบ„เปเบฒเบ–เบฒเบกเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเปเบกเปˆเบ™เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบซเบผเบฒเบ. (เบ”เป‰เบงเบ)

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ - เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡.
เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบ„เปเบฒเบ–เบฒเบก PostgreSQL. เบžเบฒเบเบ—เบต 1 - เบเบฒเบ™เบฅเบฒเบเบ‡เบฒเบ™
เบ”เบต, เบšเปเปˆเปเบกเปˆเบ™เบฅเบฐเบšเบปเบš, เปเบ™เปˆเบ™เบญเบ™, เปƒเบ™เบ„เบงเบฒเบกเบซเบกเบฒเบเป€เบ•เบฑเบกเบ—เบตเปˆเบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเบš, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบชเบฝเบ‡เบ”เบฑเบ‡เป€เบเบตเบ™เป„เบ›เปเบฅเบฐเบกเบตเบ„เบงเบฒเบกเบซเบ™เป‰เบฒเป€เบŠเบทเปˆเบญเบ–เบท, เปเบ•เปˆเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเป€เบฎเบฑเบ”เปƒเบซเป‰เบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เปเบฅเบฐเป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบ•เบปเบงเป€เบญเบ‡เบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™ - "เป„เบ›เบ—เบตเปˆเบ™เบฑเป‰เบ™, เบ‚เป‰เบญเบเบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเบขเบนเปˆเปƒเบช, เบŠเบญเบเบซเบฒเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เบ‚เป‰เบญเบเบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเปเบกเปˆเบ™เบซเบเบฑเบ‡."

เบ‚เปเป‰เบ”เบต เปเบฅเบฐ เบ‚เปเป‰เป€เบชเบเบ‚เบญเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ™เบตเป‰เปเบกเปˆเบ™เบซเบเบฑเบ‡:

Pros:
1. เบ™เบตเป‰เปเบกเปˆเบ™เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆ. เบ”เบต, เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบกเบฑเบ™เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบเบเปˆเบงเบฒเบ„เบปเบ‡เบ—เบตเปˆ "เบซเบเปเป‰เบ‚เปเป‰เบกเบนเบ™เป„เบŸเบฅเปŒ, เบ›เปˆเบฝเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เปเบฅเบฐเบญเบทเปˆเบ™เป†."
2. เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ—เบฑเบเบชเบฐเปƒเบซเบกเปˆเปเบฅเบฐเบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปƒเบซเบกเปˆ. เป€เบŠเบดเปˆเบ‡, เบšเปเปˆเป„เบงเบซเบผเบทเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบˆเบฐเปƒเบซเป‰เบ—เปˆเบฒเบ™เบกเบตเป€เบ‚เบปเป‰เบฒเบˆเบตเปˆเบ‚เบตเบ‡เปเบฅเบฐเป‚เบ”เบ™เบฑเบ”เบ—เบตเปˆเบชเบปเบกเบ„เบงเบ™.
Cons:
1. เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบงเบฝเบ. เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เบซเบ™เบฑเบ.
2. เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบญเบฐเบ—เบดเบšเบฒเบเบ„เบงเบฒเบกเบซเบกเบฒเบเปเบฅเบฐเบ„เบงเบฒเบกเบชเบปเบ”เปƒเบชเบ”เป‰เบฒเบ™เบ‚เบญเบ‡เบเบดเบ”เบˆเบฐเบเปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ›เบปเบเบเบฐเบ•เบด.
3. เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบˆเบฐเบ•เป‰เบญเบ‡เป€เบชเบเบชเบฐเบฅเบฐ, เป€เบžเบฒเบฐเบงเปˆเบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ”เบฝเบงเบ—เบตเปˆเบกเบตเบขเบนเปˆเบเบฑเบšเบงเบดเบชเบฐเบงเบฐเบเบญเบ™ - เป€เบงเบฅเบฒ - เบ–เบทเบเบˆเปเบฒเบเบฑเบ”เป‚เบ”เบเบˆเบฑเบเบเบฐเบงเบฒเบ™.
4. เบชเบดเปˆเบ‡เบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡เบ—เบตเปˆเบชเบธเบ”เปเบฅเบฐเบšเปเปˆเบžเปเปƒเบˆเบ—เบตเปˆเบชเบธเบ” - เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™ bullshit เบ„เบท "เบšเปเปˆเปเบกเปˆเบ™เบซเบ™เบน, เบšเปเปˆเปเบกเปˆเบ™เบเบปเบš, เปเบ•เปˆเป€เบ›เบฑเบ™เบชเบฑเบ”เบ—เบตเปˆเบšเปเปˆเบฎเบนเป‰เบˆเบฑเบ."

เบœเบนเป‰เบ—เบตเปˆเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบชเปˆเบฝเบ‡เบšเปเปˆเบ”เบทเปˆเบกเปเบŠเบกเป€เบ›เบ™.
เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ - เบ„เบงเบฒเบกเบกเปˆเบงเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.

เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบปเปˆเบงเป„เบ› - schematically

เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบ„เปเบฒเบ–เบฒเบก PostgreSQL. เบžเบฒเบเบ—เบต 1 - เบเบฒเบ™เบฅเบฒเบเบ‡เบฒเบ™
(เบฎเบนเบšเบ›เบฐเบเบญเบšเบกเบฒเบˆเบฒเบเบšเบปเบ”เบ„เบงเบฒเบก ยซเบเบฒเบ™เบชเบฑเบ‡เป€เบ„เบฒเบฐเป€เบ›เบฑเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” PostgreSQLยป)

เบ„เบณ เบญเบฐเบ—เบดเบšเบฒเบ:

  • เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบ PostgreSQL เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ โ€œpg_stat_statementsโ€ เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบ›เบปเป‰เบฒเปเบฒเบ.
  • เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก, เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบŠเบธเบ”เบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ” pg_stat_statements เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ metrics เปเบฅเบฐเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”.
  • เปƒเบ™เป€เบˆเบปเป‰เบฒเบžเบฒเบšเบ•เบดเบ”เบ•เบฒเบก, เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบŠเบธเบ”เบ‚เบญเบ‡ bash scripts, เบฅเบงเบกเบ—เบฑเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบเบฒเบ™เปƒเบ™เบฅเบฐเบšเบปเบšเบ•เบปเป‹เบง.

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™

เบซเบ™เป‰เบฒเบ—เปเบฒเบญเบดเบ”, schematic simplified ERD, เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เบ—เบตเปˆเบชเบธเบ”:
เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบ„เปเบฒเบ–เบฒเบก PostgreSQL. เบžเบฒเบเบ—เบต 1 - เบเบฒเบ™เบฅเบฒเบเบ‡เบฒเบ™
เบฅเบฒเบโ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹เป‚เบ”เบโ€‹เบซเบเปเป‰โ€‹เบ‚เบญเบ‡โ€‹เบ•เบฒโ€‹เบ•เบฐโ€‹เบฅเบฒเบ‡โ€‹endpoint - เป€เบˆเบปเป‰เบฒเบžเบฒเบš, เบˆเบธเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ‚เบญเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡
เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ - เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™
pg_stat_history - เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ snapshots เบŠเบปเปˆเบงเบ„เบฒเบงเบ‚เบญเบ‡ pg_stat_statements view เบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ
metric_glossary - เบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบกเบ‚เบญเบ‡ metrics เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”
metric_config - เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบงโ€‹เบŠเบตเป‰โ€‹เบงเบฑเบ”โ€‹เบชเปˆเบงเบ™โ€‹เบšเบธเบโ€‹เบ„เบปเบ™โ€‹
metric โ€” เบ•เบปเบงโ€‹เบŠเบตเป‰โ€‹เบงเบฑเบ”โ€‹เบชเบฐโ€‹เป€เบžเบฒเบฐโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เปโ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฒเบกโ€‹เบเบงเบ”โ€‹เบเบฒโ€‹
metric_alert_history - เบ›เบฐโ€‹เบซเบงเบฑเบ”โ€‹เบชเบฒเบ”โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เป€เบ•เบทเบญเบ™โ€‹เป„เบžโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹
log_query โ€” เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเปเบเบเบˆเบฒเบเป„เบŸเบฅเปŒเบšเบฑเบ™เบ—เบถเบ PostgreSQL เบ—เบตเปˆเบ”เบฒเบงเป‚เบซเบผเบ”เบกเบฒเบˆเบฒเบ AWS
เบžเบทเป‰เบ™เบ–เบฒเบ™ โ€” เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ‚เบญเบ‡เป„เบฅเบเบฐเป€เบงเบฅเบฒเบ—เบตเปˆเปƒเบŠเป‰เป€เบ›เบฑเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™
เบ”เปˆเบฒเบ™ โ€” เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบ‚เบญเบ‡ metrics เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบเบงเบ”โ€‹เบชเบญเบšโ€‹เบชเบฐโ€‹เบ–เบฒโ€‹เบ™เบฐโ€‹เบžเบฒเบšโ€‹เบ‚เบญเบ‡โ€‹เบ–เบฒเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เป„เบ”เป‰โ€‹
checkpoint_alert_history โ€” เบ›เบฐโ€‹เบซเบงเบฑเบ”โ€‹เบเบฒเบ™โ€‹เป€เบ•เบทเบญเบ™โ€‹เป„เบžโ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบเบงเบ”โ€‹เบชเบญเบšโ€‹เบชเบธโ€‹เบ‚เบฐโ€‹เบžเบฒเบšโ€‹เบ–เบฒเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™ metricsโ€‹
pg_stat_db_queries - เบ•เบฒโ€‹เบ•เบฐโ€‹เบฅเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เปโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เป€เบ„เบทเปˆเบญเบ™โ€‹เป„เบซเบงโ€‹
เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบง - เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบเบดเบ”เบˆเบฐเบเปเบฒ
trap_oid โ€” เบ•เบฒโ€‹เบ•เบฐโ€‹เบฅเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบเบฑเบšโ€‹เบ”เบฑเบโ€‹

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต 1 - เป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบชเบฐเบ–เบดเบ•เบดเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบฅเบฐเบฎเบฑเบšเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปเบกเปˆเบ™เปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบชเบฐเบ–เบดเบ•เบด pg_stat_history
เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ pg_stat_history

                                          เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ "public.pg_stat_history" เบ–เบฑเบ™ | เบ›เบฐเป€เบžเบ” | เบ•เบปเบงเปเบเป‰เป„เบ‚ ---------------------+-------------------------------- ------------------------------------------------ id | เบˆเบณเบ™เบงเบ™เป€เบ•เบฑเบก | เบšเปเปˆเปเบกเปˆเบ™ null default nextval('pg_stat_history_id_seq'::regclass) snapshot_timestamp | เป€เบงเบฅเบฒเบ—เบตเปˆเบšเปเปˆเบกเบตเป€เบ‚เบ”เป€เบงเบฅเบฒ | database_id | เบˆเบณเบ™เบงเบ™เป€เบ•เบฑเบก | dbid | oid | userid | oid | เบชเบญเบšเบ–เบฒเบก | เปƒเบซเบเปˆ | เบชเบญเบšเบ–เบฒเบก | เบ‚เปเป‰เบ„เบงเบฒเบก | เป‚เบ— | เปƒเบซเบเปˆ | total_time | เบ„เบงเบฒเบกเปเบกเปˆเบ™เบเปเบฒเบชเบญเบ‡เป€เบ—เบปเปˆเบฒ | min_time | เบ„เบงเบฒเบกเปเบกเปˆเบ™เบเปเบฒเบชเบญเบ‡เป€เบ—เบปเปˆเบฒ | max_time | เบ„เบงเบฒเบกเปเบกเปˆเบ™เบเปเบฒเบชเบญเบ‡เป€เบ—เบปเปˆเบฒ | mean_time | เบ„เบงเบฒเบกเปเบกเปˆเบ™เบเปเบฒเบชเบญเบ‡เป€เบ—เบปเปˆเบฒ | stddev_time | เบ„เบงเบฒเบกเปเบกเปˆเบ™เบเปเบฒเบชเบญเบ‡เป€เบ—เบปเปˆเบฒ | เปเบ–เบง | เปƒเบซเบเปˆ | shared_blks_hit | เปƒเบซเบเปˆ | shared_blks_read | เปƒเบซเบเปˆ | shared_blks_dirtied | เปƒเบซเบเปˆ | shared_blks_written | เปƒเบซเบเปˆ | local_blks_hit | เปƒเบซเบเปˆ | local_blks_read | เปƒเบซเบเปˆ | local_blks_dirtied | เปƒเบซเบเปˆ | local_blks_written | เปƒเบซเบเปˆ | temp_blks_read | เปƒเบซเบเปˆ | temp_blks_written | เปƒเบซเบเปˆ | blk_read_time | เบ„เบงเบฒเบกเปเบกเปˆเบ™เบเปเบฒเบชเบญเบ‡เป€เบ—เบปเปˆเบฒ | blk_write_time | เบ„เบงเบฒเบกเปเบกเปˆเบ™เบเปเบฒเบชเบญเบ‡เป€เบ—เบปเปˆเบฒ | baseline_id | เบˆเบณเบ™เบงเบ™เป€เบ•เบฑเบก | เบ”เบฑเบ”เบŠเบฐเบ™เบต: "pg_stat_history_pkey" PRIMARY KEY, btree (id) "database_idx" btree (database_id) "queryid_idx" btree (queryid) "snapshot_timestamp_idx" btree (snapshot_timestamp) เบ•เปˆเบฒเบ‡เบ›เบฐเป€เบ—เบ”: เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ IG_basek "Key_id" ) เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡(id ) เป€เบกเบทเปˆเบญเบฅเบถเบš CASCADE

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เป€เบšเบดเปˆเบ‡เบชเบฐเบชเบปเบก pg_stat_statements เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ™เบตเป‰เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบ

pg_stat_history เบˆเบฐเบชเบฐเปเบ”เบ‡เบชเบฐเบ–เบดเบ•เบดเบชเบฐเบชเบปเบกเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบŠเบปเปˆเบงเป‚เบกเบ‡. เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเบŠเบปเปˆเบงเป‚เบกเบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ•เบทเปˆเบกเบ‚เปเป‰เบกเบนเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เบชเบฐเบ–เบดเบ•เบด pg_stat_statements เบฃเบตเป€เบŠเบฑเบ”เบ”เป‰เบงเบ pg_stat_statements_reset().
เบซเบกเบฒเบเป€เบซเบ”: เบชเบฐเบ–เบดเบ•เบดเปเบกเปˆเบ™เป€เบเบฑเบšเบเปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ—เบตเปˆเบกเบตเป„เบฅเบเบฐเป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบผเบฒเบเบเปˆเบงเบฒ 1 เบงเบดเบ™เบฒเบ—เบต.
เบเบณเบฅเบฑเบ‡เบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ pg_stat_history

--pg_stat_history.sql
CREATE OR REPLACE FUNCTION pg_stat_history( ) RETURNS boolean AS $$
DECLARE
  endpoint_rec record ;
  database_rec record ;
  pg_stat_snapshot record ;
  current_snapshot_timestamp timestamp without time zone;
BEGIN
  current_snapshot_timestamp = date_trunc('minute',now());  
  
  FOR endpoint_rec IN SELECT * FROM endpoint 
  LOOP
    FOR database_rec IN SELECT * FROM database WHERE endpoint_id = endpoint_rec.id 
	  LOOP
	    
		RAISE NOTICE 'NEW SHAPSHOT IS CREATING';
		
		--Connect to the target DB	  
	    EXECUTE 'SELECT dblink_connect(''LINK1'',''host='||endpoint_rec.host||' dbname='||database_rec.name||' user=USER password=PASSWORD '')';
 
        RAISE NOTICE 'host % and dbname % ',endpoint_rec.host,database_rec.name;
		RAISE NOTICE 'Creating snapshot of pg_stat_statements for database %',database_rec.name;
		
		SELECT 
	      *
		INTO 
		  pg_stat_snapshot
	    FROM dblink('LINK1',
	      'SELECT 
	       dbid , SUM(calls),SUM(total_time),SUM(rows) ,SUM(shared_blks_hit) ,SUM(shared_blks_read) ,SUM(shared_blks_dirtied) ,SUM(shared_blks_written) , 
           SUM(local_blks_hit) , SUM(local_blks_read) , SUM(local_blks_dirtied) , SUM(local_blks_written) , SUM(temp_blks_read) , SUM(temp_blks_written) , SUM(blk_read_time) , SUM(blk_write_time)
	       FROM pg_stat_statements WHERE dbid=(SELECT oid from pg_database where datname=current_database() ) 
		   GROUP BY dbid
  	      '
	               )
	      AS t
	       ( dbid oid , calls bigint , 
  	         total_time double precision , 
	         rows bigint , shared_blks_hit bigint , shared_blks_read bigint ,shared_blks_dirtied bigint ,shared_blks_written	 bigint ,
             local_blks_hit	 bigint ,local_blks_read bigint , local_blks_dirtied bigint ,local_blks_written bigint ,
             temp_blks_read	 bigint ,temp_blks_written bigint ,
             blk_read_time double precision , blk_write_time double precision	  
	       );
		 
		INSERT INTO pg_stat_history
          ( 
		    snapshot_timestamp  ,database_id  ,
			dbid , calls  ,total_time ,
            rows ,shared_blks_hit  ,shared_blks_read  ,shared_blks_dirtied  ,shared_blks_written ,local_blks_hit , 	 	
            local_blks_read,local_blks_dirtied,local_blks_written,temp_blks_read,temp_blks_written, 	
            blk_read_time, blk_write_time 
		  )		  
	    VALUES
	      (
	       current_snapshot_timestamp ,
		   database_rec.id ,
	       pg_stat_snapshot.dbid ,pg_stat_snapshot.calls,
	       pg_stat_snapshot.total_time,
	       pg_stat_snapshot.rows ,pg_stat_snapshot.shared_blks_hit ,pg_stat_snapshot.shared_blks_read ,pg_stat_snapshot.shared_blks_dirtied ,pg_stat_snapshot.shared_blks_written , 
           pg_stat_snapshot.local_blks_hit , pg_stat_snapshot.local_blks_read , pg_stat_snapshot.local_blks_dirtied , pg_stat_snapshot.local_blks_written , 
	       pg_stat_snapshot.temp_blks_read , pg_stat_snapshot.temp_blks_written , pg_stat_snapshot.blk_read_time , pg_stat_snapshot.blk_write_time 	   
	      );		   
		  
        RAISE NOTICE 'Creating snapshot of pg_stat_statements for queries with min_time more than 1000ms';
	
        FOR pg_stat_snapshot IN
          --All queries with max_time greater than 1000 ms
	      SELECT 
	        *
	      FROM dblink('LINK1',
	        'SELECT 
	         dbid , userid ,queryid,query,calls,total_time,min_time ,max_time,mean_time, stddev_time ,rows ,shared_blks_hit ,
			 shared_blks_read ,shared_blks_dirtied ,shared_blks_written , 
             local_blks_hit , local_blks_read , local_blks_dirtied , 
			 local_blks_written , temp_blks_read , temp_blks_written , blk_read_time , 
			 blk_write_time
	         FROM pg_stat_statements 
			 WHERE dbid=(SELECT oid from pg_database where datname=current_database() AND min_time >= 1000 ) 
  	        '

	                  )
	        AS t
	         ( dbid oid , userid oid , queryid bigint ,query text , calls bigint , 
  	           total_time double precision ,min_time double precision	 ,max_time double precision	 , mean_time double precision	 ,  stddev_time double precision	 , 
	           rows bigint , shared_blks_hit bigint , shared_blks_read bigint ,shared_blks_dirtied bigint ,shared_blks_written	 bigint ,
               local_blks_hit	 bigint ,local_blks_read bigint , local_blks_dirtied bigint ,local_blks_written bigint ,
               temp_blks_read	 bigint ,temp_blks_written bigint ,
               blk_read_time double precision , blk_write_time double precision	  
	         )
	    LOOP
		  INSERT INTO pg_stat_history
          ( 
		    snapshot_timestamp  ,database_id  ,
			dbid ,userid  , queryid  , query  , calls  ,total_time ,min_time ,max_time ,mean_time ,stddev_time ,
            rows ,shared_blks_hit  ,shared_blks_read  ,shared_blks_dirtied  ,shared_blks_written ,local_blks_hit , 	 	
            local_blks_read,local_blks_dirtied,local_blks_written,temp_blks_read,temp_blks_written, 	
            blk_read_time, blk_write_time 
		  )		  
	      VALUES
	      (
	       current_snapshot_timestamp ,
		   database_rec.id ,
	       pg_stat_snapshot.dbid ,pg_stat_snapshot.userid ,pg_stat_snapshot.queryid,pg_stat_snapshot.query,pg_stat_snapshot.calls,
	       pg_stat_snapshot.total_time,pg_stat_snapshot.min_time ,pg_stat_snapshot.max_time,pg_stat_snapshot.mean_time, pg_stat_snapshot.stddev_time ,
	       pg_stat_snapshot.rows ,pg_stat_snapshot.shared_blks_hit ,pg_stat_snapshot.shared_blks_read ,pg_stat_snapshot.shared_blks_dirtied ,pg_stat_snapshot.shared_blks_written , 
           pg_stat_snapshot.local_blks_hit , pg_stat_snapshot.local_blks_read , pg_stat_snapshot.local_blks_dirtied , pg_stat_snapshot.local_blks_written , 
	       pg_stat_snapshot.temp_blks_read , pg_stat_snapshot.temp_blks_written , pg_stat_snapshot.blk_read_time , pg_stat_snapshot.blk_write_time 	   
	      );
		  
        END LOOP;

        PERFORM dblink_disconnect('LINK1');  
				
	  END LOOP ;--FOR database_rec IN SELECT * FROM database WHERE endpoint_id = endpoint_rec.id 
    
  END LOOP;

RETURN TRUE;  
END
$$ LANGUAGE plpgsql;

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเป„เบฅเบเบฐเป€เบงเบฅเบฒเปƒเบ”เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ pg_stat_history เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบกเบตเบŠเบธเบ”เบ‚เบญเบ‡เบžเบฒเบšเบซเบเปเป‰เบ‚เบญเบ‡เป€เบ™เบทเป‰เบญเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ pg_stat_statements เบ–เบฒเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบโ€‹.

เบฅเบฒเบเบ‡เบฒเบ™เบ•เบปเบงเบˆเบดเบ‡

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปเบšเบšเบชเบญเบšเบ–เบฒเบกเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบ—เบตเปˆเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เปเบฅเบฐเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆ.

เบ‚เปเป‰เบกเบนเบ™เบฅเบงเบกเบชเปเบฒเบฅเบฑเบšเป„เบฅเบเบฐเป€เบงเบฅเบฒเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป

SELECT 
  database_id , 
  SUM(calls) AS calls ,SUM(total_time)  AS total_time ,
  SUM(rows) AS rows , SUM(shared_blks_hit)  AS shared_blks_hit,
  SUM(shared_blks_read) AS shared_blks_read ,
  SUM(shared_blks_dirtied) AS shared_blks_dirtied,
  SUM(shared_blks_written) AS shared_blks_written , 
  SUM(local_blks_hit) AS local_blks_hit , 
  SUM(local_blks_read) AS local_blks_read , 
  SUM(local_blks_dirtied) AS local_blks_dirtied , 
  SUM(local_blks_written)  AS local_blks_written,
  SUM(temp_blks_read) AS temp_blks_read, 
  SUM(temp_blks_written) temp_blks_written , 
  SUM(blk_read_time) AS blk_read_time , 
  SUM(blk_write_time) AS blk_write_time
FROM 
  pg_stat_history
WHERE 
  queryid IS NULL AND
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
GROUP BY database_id ;

เป€เบงเบฅเบฒ DB

to_char(เป„เบฅเบเบฐเบซเปˆเบฒเบ‡ '1 millisecond' * pg_total_stat_history_rec.total_time, 'HH24:MI:SS.MS')

เป€เบงเบฅเบฒ I/O

to_char(เป„เบฅเบเบฐเบซเปˆเบฒเบ‡ '1 millisecond' * ( pg_total_stat_history_rec.blk_read_time + pg_total_stat_history_rec.blk_write_time ), 'HH24:MI:SS.MS')

TOP10 SQL เป‚เบ”เบ total_time

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป

SELECT 
  queryid , 
  SUM(calls) AS calls ,
  SUM(total_time)  AS total_time  	
FROM 
  pg_stat_history
WHERE 
  queryid IS NOT NULL AND 
  database_id = DATABASE_ID AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT 
GROUP BY queryid 
ORDER BY 3 DESC 
LIMIT 10
------------------------------------------------ ----------------------------------- | TOP10 SQL เป‚เบ”เบเป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบฑเบ‡เปเบปเบ” | #| เบชเบญเบšเบ–เบฒเบก| เป‚เบ—| เป‚เบ— %| total_time (ms) | dbtime % +----------+-----------+-----------+----------+ --------------------------------------+---------- | 1| 821760255| 2| .00001|00:03:23.141( 203141.681 ms.)| 5.42 | 2| 4152624390| 2| .00001|00:03:13.929( 193929.215 ms.)| 5.17 | 3| 1484454471| 4| .00001|00:02:09.129( 129129.057 ms.)| 3.44 | 4| 655729273| 1| .00000|00:02:01.869( 121869.981 ms.)| 3.25 | 5| 2460318461| 1| .00000|00:01:33.113( 93113.835 ms.)| 2.48 | 6| 2194493487| 4| .00001|00:00:17.377( 17377.868 ms.)| .46 | 7| 1053044345| 1| .00000|00:00:06.156( 6156.352 ms.)| .16 | 8| 3644780286| 1| .00000|00:00:01.063( 1063.830 ms.)| .03

TOP10 SQL เป‚เบ”เบเป€เบงเบฅเบฒ I/O เบ—เบฑเบ‡เปเบปเบ”

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป

SELECT 
  queryid , 
  SUM(calls) AS calls ,
  SUM(blk_read_time + blk_write_time)  AS io_time
FROM 
  pg_stat_history
WHERE 
  queryid IS NOT NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
GROUP BY  queryid 
ORDER BY 3 DESC 
LIMIT 10
------------------------------------------------ -------------------------------------- | TOP10 SQL เป‚เบ”เบ TOTAL I/O เป€เบงเบฅเบฒ | #| เบชเบญเบšเบ–เบฒเบก| เป‚เบ—| เป‚เบ— %| เป€เบงเบฅเบฒ I/O (ms)|db I/O เป€เบงเบฅเบฒ % ++----+----------+----------+-------- ----------+--------------------------------+----- ------ --| 1| 4152624390| 2| .00001|00:08:31.616( 511616.592 ms.)| 31.06 | 2| 821760255| 2| .00001|00:08:27.099( 507099.036 ms.)| 30.78 | 3| 655729273| 1| .00000|00:05:02.209( 302209.137 ms.)| 18.35 | 4| 2460318461| 1| .00000|00:04:05.981( 245981.117 ms.)| 14.93 | 5| 1484454471| 4| .00001|00:00:39.144( 39144.221 ms.)| 2.38 | 6| 2194493487| 4| .00001|00:00:18.182( 18182.816 ms.)| 1.10 | 7| 1053044345| 1| .00000|00:00:16.611( 16611.722 ms.)| 1.01 | 8| 3644780286| 1| .00000|00:00:00.436( 436.205 ms.)| .03

TOP10 SQL เป‚เบ”เบเป€เบงเบฅเบฒเบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป

SELECT 
  id AS snapshotid , 
  queryid , 
  snapshot_timestamp ,  
  max_time 
FROM 
  pg_stat_history 
WHERE 
  queryid IS NOT NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
ORDER BY 4 DESC 
LIMIT 10

------------------------------------------------ --------------------------------------- | TOP10 SQL เป‚เบ”เบเป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบนเบ‡เบชเบธเบ” | #| เบžเบฒเบšเบ–เปˆเบฒเบ| snapshotID| เบชเบญเบšเบ–เบฒเบก| max_time (ms) +----+--------------------+----------------+-------- ---------------------------------------------------- | 1| 05.04.2019/01/03 4169:655729273| 00| 02| 01.869:121869.981:2( 04.04.2019 ms.) | 17| เบงเบฑเบ™เบ—เบต 00/4153/821760255 00:01| 41.570| 101570.841| 3:04.04.2019:16(00 ms.) | 4146| เบงเบฑเบ™เบ—เบต 821760255/00/01 41.570:101570.841| 4| 04.04.2019| 16:00:4144(4152624390 ms.) | 00| เบงเบฑเบ™เบ—เบต 01/36.964/96964.607 5:04.04.2019| 17| 00| 4151:4152624390:00(01 ms.) | 36.964| เบงเบฑเบ™เบ—เบต 96964.607/6/05.04.2019 10:00| 4188| 1484454471| 00:01:33.452(93452.150 ms.) | 7| เบงเบฑเบ™เบ—เบต 04.04.2019/17/00 4150:2460318461| 00| 01| 33.113:93113.835:8( 04.04.2019 ms.) | 15| เบงเบฑเบ™เบ—เบต 00/4140/1484454471 00:00| 11.892| 11892.302| 9:04.04.2019:16(00 ms.) | 4145| เบงเบฑเบ™เบ—เบต 1484454471/00/00 11.892:11892.302| 10| 04.04.2019| 17:00:4152( 1484454471 ms.) | 00| เบงเบฑเบ™เบ—เบต 00/11.892/11892.302 XNUMX:XNUMX| XNUMX| XNUMX| XNUMX:XNUMX:XNUMX( XNUMX ms.) | XNUMX| เบงเบฑเบ™เบ—เบต XNUMX/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX:XNUMX:XNUMX(XNUMX เบก.)

TOP10 SQL เป‚เบ”เบ SHARED buffer read/write

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป

SELECT 
  id AS snapshotid , 
  queryid ,
  snapshot_timestamp , 
  shared_blks_read , 
  shared_blks_written 
FROM 
  pg_stat_history
WHERE 
  queryid IS NOT NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND
  ( shared_blks_read > 0 OR shared_blks_written > 0 )
ORDER BY 4 DESC  , 5 DESC 
LIMIT 10
------------------------------------------------ ------------------------------------------ | TOP10 SQL เป‚เบ”เบเปเบšเปˆเบ‡เบ›เบฑเบ™ BUFFER เบญเปˆเบฒเบ™/เบ‚เบฝเบ™ | #| เบžเบฒเบšเบ–เปˆเบฒเบ| snapshotID| เบชเบญเบšเบ–เบฒเบก| เบšเบฅเบฑเบญเบเปเบšเปˆเบ‡เบ›เบฑเบ™เบญเปˆเบฒเบ™| เบšเบฅเบฑเบญเบเปเบšเปˆเบ‡เบ›เบฑเบ™เบ‚เบฝเบ™ ----+------------------+-----------------+---------- ------------------------+--------------------- | 1| เบงเบฑเบ™เบ—เบต 04.04.2019/17/00 4153:821760255| 797308| 0| 2| 04.04.2019 | 16| เบงเบฑเบ™เบ—เบต 00/4146/821760255 797308:0| 3| 05.04.2019| 01| 03 | 4169| 655729273/797158/0 4:04.04.2019| 16| 00| 4144| 4152624390 | 756514| เบงเบฑเบ™เบ—เบต 0/5/04.04.2019 17:00| 4151| 4152624390| 756514| 0 | 6| เบงเบฑเบ™เบ—เบต 04.04.2019/17/00 4150:2460318461| 734117| 0| 7| 04.04.2019 | 17| เบงเบฑเบ™เบ—เบต 00/4155/3644780286 52973:0| 8| 05.04.2019| 01| 03 | 4168| เบงเบฑเบ™เบ—เบต 1053044345/52818/0 9:04.04.2019| 15| 00| 4141| 2194493487 | 52813| 0/10/04.04.2019 16:00| 4147| 2194493487| 52813| 0 | XNUMX| เบงเบฑเบ™เบ—เบต XNUMX/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX| XNUMX | XNUMX| เบงเบฑเบ™เบ—เบต XNUMX/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX| XNUMX ------------------------------------------------ ------------------------------------------------

Histogram เบ‚เบญเบ‡เบเบฒเบ™เปเบˆเบเบขเบฒเบเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเป‚เบ”เบเป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบนเบ‡เบชเบธเบ”

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป

SELECT  
  MIN(max_time) AS hist_min  , 
  MAX(max_time) AS hist_max , 
  (( MAX(max_time) - MIN(min_time) ) / hist_columns ) as hist_width
FROM 
  pg_stat_history 
WHERE 
  queryid IS NOT NULL AND
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT ;

SELECT 
  SUM(calls) AS calls
FROM 
  pg_stat_history 
WHERE 
  queryid IS NOT NULL AND
  database_id =DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND 
  ( max_time >= hist_current_min AND  max_time < hist_current_max ) ;
|------------------------------------------------ --------------------------------------------- | MAX_TIME HISTOGRAM | เป‚เบ—เบ—เบฑเบ‡เปเบปเบ”: 33851920 | เป€เบงเบฅเบฒเบ™เบฒเบ—เบต: 00:00:01.063 | เป€เบงเบฅเบฒ MAX: 00:02:01.869 ------------------------------------------ --------------------------------------- | เป„เบฅเบเบฐเป€เบงเบฅเบฒเบ™เบฒเบ—เบต| เป„เบฅเบเบฐเป€เบงเบฅเบฒเบชเบนเบ‡เบชเบธเบ”| เป‚เบ— ------------------------------------+---------------- ---------------------+---------- | 00:00:01.063( 1063.830 ms.) | 00:00:13.144( 13144.445 ms.) | 9 | 00:00:13.144( 13144.445 ms.) | 00:00:25.225( 25225.060 ms.) | 0 | 00:00:25.225( 25225.060 ms.) | 00:00:37.305(37305.675 ms.) | 0 | 00:00:37.305(37305.675 ms.) | 00:00:49.386( 49386.290 ms.) | 0 | 00:00:49.386( 49386.290 ms.) | 00:01:01.466( 61466.906 ms.) | 0 | 00:01:01.466( 61466.906 ms.) | 00:01:13.547( 73547.521 ms.) | 0 | 00:01:13.547( 73547.521 ms.) | 00:01:25.628( 85628.136 ms.) | 0 | 00:01:25.628( 85628.136 ms.) | 00:01:37.708( 97708.751 ms.) | 4 | 00:01:37.708( 97708.751 ms.) | 00:01:49.789( 109789.366 ms.) | 2 | 00:01:49.789( 109789.366 ms.) | 00:02:01.869( 121869.981 ms.) | 0

TOP10 เบžเบฒเบšเบ›เบฐเบเบญเบšเป‚เบ”เบเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป

--pg_qps.sql
--Calculate Query Per Second 
CREATE OR REPLACE FUNCTION pg_qps( pg_stat_history_id integer ) RETURNS double precision AS $$
DECLARE
 pg_stat_history_rec record ;
 prev_pg_stat_history_id integer ;
 prev_pg_stat_history_rec record;
 total_seconds double precision ;
 result double precision;
BEGIN 
  result = 0 ;
  
  SELECT *
  INTO pg_stat_history_rec
  FROM 
    pg_stat_history
  WHERE id = pg_stat_history_id ;

  IF pg_stat_history_rec.snapshot_timestamp IS NULL 
  THEN
    RAISE EXCEPTION 'ERROR - Not found pg_stat_history for id = %',pg_stat_history_id;
  END IF ;  
  
 --RAISE NOTICE 'pg_stat_history_id = % , snapshot_timestamp = %', pg_stat_history_id , 
 pg_stat_history_rec.snapshot_timestamp ;
  
  SELECT 
    MAX(id)   
  INTO
    prev_pg_stat_history_id
  FROM
    pg_stat_history
  WHERE 
    database_id = pg_stat_history_rec.database_id AND
	queryid IS NULL AND
	id < pg_stat_history_rec.id ;

  IF prev_pg_stat_history_id IS NULL 
  THEN
    RAISE NOTICE 'Not found previous pg_stat_history shapshot for id = %',pg_stat_history_id;
	RETURN NULL ;
  END IF;
  
  SELECT *
  INTO prev_pg_stat_history_rec
  FROM 
    pg_stat_history
  WHERE id = prev_pg_stat_history_id ;
  
  --RAISE NOTICE 'prev_pg_stat_history_id = % , prev_snapshot_timestamp = %', prev_pg_stat_history_id , prev_pg_stat_history_rec.snapshot_timestamp ;    

  total_seconds = extract(epoch from ( pg_stat_history_rec.snapshot_timestamp - prev_pg_stat_history_rec.snapshot_timestamp ));
  
  --RAISE NOTICE 'total_seconds = % ', total_seconds ;    
  
  --RAISE NOTICE 'calls = % ', pg_stat_history_rec.calls ;      
  
  IF total_seconds > 0 
  THEN
    result = pg_stat_history_rec.calls / total_seconds ;
  ELSE
   result = 0 ; 
  END IF;
   
 RETURN result ;
END
$$ LANGUAGE plpgsql;


SELECT 
  id , 
  snapshot_timestamp ,
  calls , 	
  total_time , 
  ( select pg_qps( id )) AS QPS ,
  blk_read_time ,
  blk_write_time
FROM 
  pg_stat_history
WHERE 
  queryid IS NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND
  ( select pg_qps( id )) IS NOT NULL 
ORDER BY 5 DESC 
LIMIT 10
|------------------------------------------------ --------------------------------------------- | TOP10 เบžเบฒเบšเบ–เปˆเบฒเบเบ—เบตเปˆเบชเบฑเปˆเบ‡เบ”เป‰เบงเบเบ•เบปเบงเป€เบฅเบ QueryPerSeconds ------------------------------------------------ ------------------------------------------------ ------------------------------------------------ | #| เบžเบฒเบšเบ–เปˆเบฒเบ| snapshotID| เป‚เบ—| dbtime เบ—เบฑเบ‡เบซเบกเบปเบ”| QPS| เป€เบงเบฅเบฒ I/O| เป€เบงเบฅเบฒ I/O % +-----+--------------------+-----------------+-------- ----+------------------------------------+---------------- -------------------------+----------- | 1| เบงเบฑเบ™เบ—เบต 04.04.2019/20/04 4161:5758631| 00| 06| 30.513:390513.926:1573.396( 00 ms.)| 00| 01.470:1470.110:376(2 ms.)| .04.04.2019 | 17| เบงเบฑเบ™เบ—เบต 00/4149/3529197 00:11| 48.830| 708830.618| 980.332:00:12( 47.834 ms.)| 767834.052| 108.324:3:04.04.2019( 16 ms.)| 00 | 4143| เบงเบฑเบ™เบ—เบต 3525360/00/10 13.492:613492.351| 979.267| 00| 08:41.396:521396.555( 84.988 ms.)| 4| 04.04.2019:21:03(4163 ms.)| 2781536 | 00| เบงเบฑเบ™เบ—เบต 03/06.470/186470.979 785.745:00| 00| 00.249| 249.865:134:5(04.04.2019 ms.)| 19| 03:4159:2890362( 00 ms.)| .03 | 16.784| 196784.755 776.979:00 | 00| 01.441| 1441.386:732:6( 04.04.2019 ms.)| 14| 00:4137:2397326(00 ms.)| .04 | 43.033| เบงเบฑเบ™เบ—เบต 283033.854/665.924/00 00:00.024| 24.505| 009| 7:04.04.2019:15( 00 ms.)| 4139| 2394416:00:04(51.435 ms.)| .291435.010 | 665.116| เบงเบฑเบ™เบ—เบต 00/00/12.025 12025.895:4.126| 8| 04.04.2019| 13:00:4135( 2373043 ms.)| 00| 04:26.791:266791.988(659.179 ms.)| 00 | 00| 00.064 64.261:024| 9| 05.04.2019| 01:03:4167( 4387191 ms.)| 00| 06:51.380:411380.293( 609.332 ms.)| .00 | 05| 18.847/318847.407/77.507 10:04.04.2019| 18| 01| 4157:1145596:00(01 ms.)| 19.217| 79217.372:313.004:00( 00 ms.)| 01.319 | 1319.676| เบงเบฑเบ™เบ—เบต 1.666/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX:XNUMX:XNUMX( XNUMX ms.)| XNUMX| XNUMX:XNUMX:XNUMX(XNUMX ms.)| XNUMX

เบ›เบฐเบซเบงเบฑเบ”เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบŠเบปเปˆเบงเป‚เบกเบ‡เบ—เบตเปˆเบกเบต QueryPerSeconds เปเบฅเบฐเป€เบงเบฅเบฒ I/O

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป

SELECT 
  id , 
  snapshot_timestamp ,
  calls , 	
  total_time , 
  ( select pg_qps( id )) AS QPS ,
  blk_read_time ,
  blk_write_time
FROM 
  pg_stat_history
WHERE 
  queryid IS NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
ORDER BY 2
|-----------------------------------------------------------------------------------------------
| HOURLY EXECUTION HISTORY  WITH QueryPerSeconds and I/O Time
-----------------------------------------------------------------------------------------------------------------------------------------------
| QUERY PER SECOND HISTORY
|    #|          snapshot| snapshotID|      calls|                      total dbtime|        QPS|                          I/O time| I/O time %
+-----+------------------+-----------+-----------+----------------------------------+-----------+----------------------------------+-----------
|    1|  04.04.2019 11:00|       4131|       3747|  00:00:00.835(       835.374 ms.)|      1.041|  00:00:00.000(          .000 ms.)|       .000
|    2|  04.04.2019 12:00|       4133|    1002722|  00:01:52.419(    112419.376 ms.)|    278.534|  00:00:00.149(       149.105 ms.)|       .133
|    3|  04.04.2019 13:00|       4135|    2373043|  00:04:26.791(    266791.988 ms.)|    659.179|  00:00:00.064(        64.261 ms.)|       .024
|    4|  04.04.2019 14:00|       4137|    2397326|  00:04:43.033(    283033.854 ms.)|    665.924|  00:00:00.024(        24.505 ms.)|       .009
|    5|  04.04.2019 15:00|       4139|    2394416|  00:04:51.435(    291435.010 ms.)|    665.116|  00:00:12.025(     12025.895 ms.)|      4.126
|    6|  04.04.2019 16:00|       4143|    3525360|  00:10:13.492(    613492.351 ms.)|    979.267|  00:08:41.396(    521396.555 ms.)|     84.988
|    7|  04.04.2019 17:00|       4149|    3529197|  00:11:48.830(    708830.618 ms.)|    980.332|  00:12:47.834(    767834.052 ms.)|    108.324
|    8|  04.04.2019 18:01|       4157|    1145596|  00:01:19.217(     79217.372 ms.)|    313.004|  00:00:01.319(      1319.676 ms.)|      1.666
|    9|  04.04.2019 19:03|       4159|    2890362|  00:03:16.784(    196784.755 ms.)|    776.979|  00:00:01.441(      1441.386 ms.)|       .732
|   10|  04.04.2019 20:04|       4161|    5758631|  00:06:30.513(    390513.926 ms.)|   1573.396|  00:00:01.470(      1470.110 ms.)|       .376
|   11|  04.04.2019 21:03|       4163|    2781536|  00:03:06.470(    186470.979 ms.)|    785.745|  00:00:00.249(       249.865 ms.)|       .134
|   12|  04.04.2019 23:03|       4165|    1443155|  00:01:34.467(     94467.539 ms.)|    200.438|  00:00:00.015(        15.287 ms.)|       .016
|   13|  05.04.2019 01:03|       4167|    4387191|  00:06:51.380(    411380.293 ms.)|    609.332|  00:05:18.847(    318847.407 ms.)|     77.507
|   14|  05.04.2019 02:03|       4171|     189852|  00:00:10.989(     10989.899 ms.)|     52.737|  00:00:00.539(       539.110 ms.)|      4.906
|   15|  05.04.2019 03:01|       4173|       3627|  00:00:00.103(       103.000 ms.)|      1.042|  00:00:00.004(         4.131 ms.)|      4.010
|   16|  05.04.2019 04:00|       4175|       3627|  00:00:00.085(        85.235 ms.)|      1.025|  00:00:00.003(         3.811 ms.)|      4.471
|   17|  05.04.2019 05:00|       4177|       3747|  00:00:00.849(       849.454 ms.)|      1.041|  00:00:00.006(         6.124 ms.)|       .721
|   18|  05.04.2019 06:00|       4179|       3747|  00:00:00.849(       849.561 ms.)|      1.041|  00:00:00.000(          .051 ms.)|       .006
|   19|  05.04.2019 07:00|       4181|       3747|  00:00:00.839(       839.416 ms.)|      1.041|  00:00:00.000(          .062 ms.)|       .007
|   20|  05.04.2019 08:00|       4183|       3747|  00:00:00.846(       846.382 ms.)|      1.041|  00:00:00.000(          .007 ms.)|       .001
|   21|  05.04.2019 09:00|       4185|       3747|  00:00:00.855(       855.426 ms.)|      1.041|  00:00:00.000(          .065 ms.)|       .008
|   22|  05.04.2019 10:00|       4187|       3797|  00:01:40.150(    100150.165 ms.)|      1.055|  00:00:21.845(     21845.217 ms.)|     21.812

เบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡ SQL-selects เบ—เบฑเบ‡เปเบปเบ”

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป

SELECT 
  queryid , 
  query 
FROM 
  pg_stat_history
WHERE 
  queryid IS NOT NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT
GROUP BY queryid , query

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เป‚เบ”เบเปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบเบเปˆเบฝเบงเบเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™.

เบซเบกเบฒเบโ€‹เป€เบซเบ”โ€‹:เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบšเบฑเบ™เบ—เบถเบ queryid เปƒเบ™เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ (เป€เบžเบทเปˆเบญเบŠเปˆเบงเบเบ›เบฐเบขเบฑเบ”เบžเบทเป‰เบ™เบ—เบตเปˆ, เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเปเบกเปˆเบ™เบ–เบทเบเบฅเบฐเป€เบงเบฑเป‰เบ™).

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ‚เปเป‰เบกเบนเบ™เบชเบฐเบ–เบดเบ•เบดเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเปเบกเปˆเบ™เบกเบตเปเบฅเบฐเป€เบเบฑเบšเบเปเบฒ.
เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ” "เป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เบชเบฐเบ–เบดเบ•เบด" เปเบกเปˆเบ™เบชเปเบฒเป€เบฅเบฑเบ”.

เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบเป‰เบฒเบโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ—เบตโ€‹เบชเบญเบ‡ - "เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบเบฒเบ™โ€‹เบงเบฑเบ”โ€‹เปเบ—เบโ€‹เบ›เบฐโ€‹เบชเบดเบ”โ€‹เบ—เบดโ€‹เบžเบฒเบšโ€‹"โ€‹.
เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบ„เปเบฒเบ–เบฒเบก PostgreSQL. เบžเบฒเบเบ—เบต 1 - เบเบฒเบ™เบฅเบฒเบเบ‡เบฒเบ™

เปเบ•เปˆเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ เปเบปเบ”.

เบ•เบดเบ”โ€‹เบ•เบฒเบกโ€‹เบ•เบญเบ™โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€ฆ

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™