āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡āđāļšāļšāļŠāļ­āļšāļ–āļēāļĄ PostgreSQL āļŠāđˆāļ§āļ™āļ—āļĩāđˆ 1 - āļāļēāļĢāļĢāļēāļĒāļ‡āļēāļ™

āļ§āļīāļĻāļ§āļāļĢ - āđāļ›āļĨāļˆāļēāļāļ āļēāļĐāļēāļĨāļ°āļ•āļīāļ™ - āđ„āļ”āđ‰āļĢāļąāļšāđāļĢāļ‡āļšāļąāļ™āļ”āļēāļĨāđƒāļˆ
āļ§āļīāļĻāļ§āļāļĢāļŠāļēāļĄāļēāļĢāļ–āļ—āļģāļ­āļ°āđ„āļĢāļāđ‡āđ„āļ”āđ‰ (āļ„) āļĢ. āļ”āļĩāđ€āļ‹āļĨ.
Epigraphs
āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡āđāļšāļšāļŠāļ­āļšāļ–āļēāļĄ PostgreSQL āļŠāđˆāļ§āļ™āļ—āļĩāđˆ 1 - āļāļēāļĢāļĢāļēāļĒāļ‡āļēāļ™
āļŦāļĢāļ·āļ­āđ€āļĢāļ·āđˆāļ­āļ‡āļĢāļēāļ§āđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļŠāļēāđ€āļŦāļ•āļļāļ—āļĩāđˆāļœāļđāđ‰āļ”āļđāđāļĨāļĢāļ°āļšāļšāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ•āđ‰āļ­āļ‡āļˆāļ”āļˆāļģāļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđƒāļ™āļ­āļ”āļĩāļ•

āļ„āļģāļ›āļĢāļēāļĢāļ 

āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāļ·āđˆāļ­āļŦāļĄāļ”āđāļĨāđ‰āļ§ āļāļēāļĢāđāļ‚āđˆāļ‡āļ‚āļąāļ™āđ€āļ›āđ‡āļ™āđāļšāļšāļŠāļļāđˆāļĄ āđ€āļ™āļ·āđ‰āļ­āļŦāļēāđ€āļ›āđ‡āļ™āđ€āļžāļĩāļĒāļ‡āļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŦāđ‡āļ™āļŠāđˆāļ§āļ™āļ•āļąāļ§āļ‚āļ­āļ‡āļœāļđāđ‰āđ€āļ‚āļĩāļĒāļ™āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™

āļ‚āđ‰āļ­āļˆāļģāļāļąāļ”āļ„āļ§āļēāļĄāļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāļ‚āļ­āļ‡āļāļēāļĢāļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™: āđƒāļ™āļŠāļļāļ”āļšāļ—āļ„āļ§āļēāļĄāļ—āļĩāđˆāļ§āļēāļ‡āđāļœāļ™āđ„āļ§āđ‰āļˆāļ°āđ„āļĄāđˆāļĄāļĩāļ„āļģāļ­āļ˜āļīāļšāļēāļĒāđ‚āļ”āļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āđāļĨāļ°āļ–āļđāļāļ•āđ‰āļ­āļ‡āļ‚āļ­āļ‡āļ•āļēāļĢāļēāļ‡āđāļĨāļ°āļŠāļ„āļĢāļīāļ›āļ•āđŒāļ—āļĩāđˆāđƒāļŠāđ‰ āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļ§āļąāļŠāļ”āļļāđ„āļ”āđ‰āļ—āļąāļ™āļ—āļĩ "āļ•āļēāļĄāļŠāļ āļēāļž"
āļ›āļĢāļ°āļāļēāļĢāđāļĢāļāđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāļ§āļąāļŠāļ”āļļāļˆāļģāļ™āļ§āļ™āļĄāļēāļ
āļ›āļĢāļ°āļāļēāļĢāļ—āļĩāđˆāļŠāļ­āļ‡āđ€āļžāļĢāļēāļ°āļ„āļ§āļēāļĄāđ€āļ‰āļĩāļĒāļšāļ„āļĄāļ”āđ‰āļ§āļĒāļāļēāļ™āļāļēāļĢāļœāļĨāļīāļ•āļ‚āļ­āļ‡āļĨāļđāļāļ„āđ‰āļēāļ•āļąāļ§āļˆāļĢāļīāļ‡
āļ”āļąāļ‡āļ™āļąāđ‰āļ™āđƒāļ™āļšāļ—āļ„āļ§āļēāļĄāļˆāļ°āļĄāļĩāđ€āļ‰āļžāļēāļ°āđāļ™āļ§āļ„āļīāļ”āđāļĨāļ°āļ„āļģāļ­āļ˜āļīāļšāļēāļĒāđƒāļ™āļĢāļđāļ›āđāļšāļšāļ—āļąāđˆāļ§āđ„āļ›āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™
āļšāļēāļ‡āļ—āļĩāđƒāļ™āļ­āļ™āļēāļ„āļ•āļĢāļ°āļšāļšāļˆāļ°āđ€āļ•āļīāļšāđ‚āļ•āļ–āļķāļ‡āļĢāļ°āļ”āļąāļšāļāļēāļĢāđ‚āļžāļŠāļ•āđŒāļšāļ™ GitHub āļŦāļĢāļ·āļ­āļ­āļēāļˆāļˆāļ°āđ„āļĄāđˆ āđ€āļ§āļĨāļēāļˆāļ°āđāļŠāļ”āļ‡

āļˆāļļāļ”āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āļ‚āļ­āļ‡āđ€āļĢāļ·āđˆāļ­āļ‡āļĢāļēāļ§ -āļ„āļļāļ“āļˆāļģāđ„āļ”āđ‰āđ„āļŦāļĄāļ§āđˆāļēāļĄāļąāļ™āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āļ­āļĒāđˆāļēāļ‡āđ„āļĢ'
āđ€āļāļīāļ”āļ­āļ°āđ„āļĢāļ‚āļķāđ‰āļ™ āđƒāļ™āđāļ‡āđˆāļ—āļąāđˆāļ§āđ„āļ›āļ—āļĩāđˆāļŠāļļāļ” - "āļāļēāļĢāļŠāļąāļ‡āđ€āļ„āļĢāļēāļ°āļŦāđŒāđ€āļ›āđ‡āļ™āļŦāļ™āļķāđˆāļ‡āđƒāļ™āļ§āļīāļ˜āļĩāļāļēāļĢāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡ PostgreSQLÂŧ

āļ—āļģāđ„āļĄāļ‰āļąāļ™āļ–āļķāļ‡āļ•āđ‰āļ­āļ‡āļāļēāļĢāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ™āļĩāđ‰?

āļ›āļĢāļ°āļāļēāļĢāđāļĢāļāđ€āļžāļ·āđˆāļ­āđ„āļĄāđˆāđƒāļŦāđ‰āļĨāļ·āļĄāļ•āļąāļ§āđ€āļ­āļ‡āļˆāļģāļ§āļąāļ™āļ—āļĩāđˆāļĢāļļāđˆāļ‡āđ‚āļĢāļˆāļ™āđŒāđƒāļ™āļ§āļąāļĒāđ€āļāļĐāļĩāļĒāļ“
āļ›āļĢāļ°āļāļēāļĢāļ—āļĩāđˆāļŠāļ­āļ‡ āđ€āļžāļ·āđˆāļ­āļˆāļąāļ”āļĢāļ°āļšāļšāļŠāļīāđˆāļ‡āļ—āļĩāđˆāđ€āļ‚āļĩāļĒāļ™ āļŠāļģāļŦāļĢāļąāļšāļ•āļąāļ§āđ€āļ­āļ‡āđāļĨāđ‰āļ§āļšāļēāļ‡āļ—āļĩāļāđ‡āđ€āļĢāļīāđˆāļĄāļŠāļąāļšāļŠāļ™āļˆāļ™āļĨāļ·āļĄāđāļĒāļāļŠāđˆāļ§āļ™

āđāļĨāļ°āļ—āļĩāđˆāļŠāļģāļ„āļąāļāļ—āļĩāđˆāļŠāļļāļ” - āļ—āļąāļ™āđƒāļ”āļ™āļąāđ‰āļ™āļĄāļąāļ™āļāđ‡āļĄāļĩāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļŠāļģāļŦāļĢāļąāļšāđƒāļ„āļĢāļšāļēāļ‡āļ„āļ™āđāļĨāļ°āļŠāđˆāļ§āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļ„āļīāļ”āļ„āđ‰āļ™āļĨāđ‰āļ­āđƒāļŦāļĄāđˆāđāļĨāļ°āđ„āļĄāđˆāđ€āļāđ‡āļšāļ„āļĢāļēāļ” āļāļĨāđˆāļēāļ§āļ­āļĩāļāļ™āļąāļĒāļŦāļ™āļķāđˆāļ‡ āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āļāļĢāļĢāļĄāļ‚āļ­āļ‡āļ„āļļāļ“ (āđ„āļĄāđˆāđƒāļŠāđˆ Khabrovsky) āđ€āļžāļĢāļēāļ°āļŠāļīāđˆāļ‡āļ—āļĩāđˆāļĄāļĩāļ„āđˆāļēāļ—āļĩāđˆāļŠāļļāļ”āđƒāļ™āđ‚āļĨāļāļ™āļĩāđ‰āļ„āļ·āļ­āļ„āļ§āļēāļĄāļ„āļīāļ” āļŠāļīāđˆāļ‡āļŠāļģāļ„āļąāļāļ„āļ·āļ­āļāļēāļĢāļŦāļēāļ„āļ§āļēāļĄāļ„āļīāļ” āđāļĨāļ°āļāļēāļĢāđāļ›āļĨāļ„āļ§āļēāļĄāļ„āļīāļ”āđƒāļŦāđ‰āđ€āļ›āđ‡āļ™āļˆāļĢāļīāļ‡āļ™āļąāđ‰āļ™āđ€āļ›āđ‡āļ™āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļ—āļēāļ‡āđ€āļ—āļ„āļ™āļīāļ„āļĨāđ‰āļ§āļ™āđ†

āļ‡āļąāđ‰āļ™āđ€āļĢāļēāļĄāļēāđ€āļĢāļīāđˆāļĄāļāļąāļ™āļŠāđ‰āļēāđ†...

āļāļēāļĢāļāļģāļŦāļ™āļ”āļ›āļąāļāļŦāļē

āļĄāļĩāļ­āļĒāļđāđˆ:

PostgreSQL(10.5), āđ‚āļŦāļĨāļ”āđāļšāļšāļœāļŠāļĄ (OLTP+DSS), āđ‚āļŦāļĨāļ”āļ›āļēāļ™āļāļĨāļēāļ‡āļ–āļķāļ‡āđ€āļšāļē, āđ‚āļŪāļŠāļ•āđŒāđƒāļ™ AWS Cloud
āđ„āļĄāđˆāļĄāļĩāļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™āļˆāļ°āđāļŠāļ”āļ‡āđ€āļ›āđ‡āļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­ AWS āļĄāļēāļ•āļĢāļāļēāļ™āđƒāļ™āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļēāļ‚āļąāđ‰āļ™āļ•āđˆāļģ

āļĄāļąāļ™āđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļˆāļģāđ€āļ›āđ‡āļ™:

āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđāļĨāļ°āļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ āļ„āđ‰āļ™āļŦāļēāđāļĨāļ°āļĄāļĩāļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļšāļ·āđ‰āļ­āļ‡āļ•āđ‰āļ™āđ€āļžāļ·āđˆāļ­āđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļāļēāļĢāļŠāļ·āļšāļ„āđ‰āļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļģāļ™āļ§āļ™āļĄāļēāļ

āļšāļ—āļ™āļģāļŦāļĢāļ·āļ­āļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļ§āļīāļ˜āļĩāđāļāđ‰āļ›āļąāļāļŦāļēāđ‚āļ”āļĒāļŠāļąāļ‡āđ€āļ‚āļ›

āđƒāļ™āļāļēāļĢāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āđƒāļŦāđ‰āļĨāļ­āļ‡āļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļ•āļąāļ§āđ€āļĨāļ·āļ­āļāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđāļāđ‰āļ›āļąāļāļŦāļēāļˆāļēāļāļĄāļļāļĄāļĄāļ­āļ‡āļ‚āļ­āļ‡āļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļšāļœāļĨāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāđāļĨāļ°āļ›āļąāļāļŦāļēāļŠāļģāļŦāļĢāļąāļšāļ§āļīāļĻāļ§āļāļĢāđāļĨāļ°āļ›āļĨāđˆāļ­āļĒāđƒāļŦāđ‰āļœāļđāđ‰āļ—āļĩāđˆāļ„āļ§āļĢāļˆāļ°āļ­āļĒāļđāđˆāđƒāļ™āļĢāļēāļĒāļŠāļ·āđˆāļ­āļžāļ™āļąāļāļ‡āļēāļ™āļˆāļąāļ”āļāļēāļĢāļāļąāļšāļœāļĨāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāđāļĨāļ°āļāļēāļĢāļŠāļđāļāđ€āļŠāļĩāļĒ āļ‚āļ­āļ‡āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ

āļ•āļąāļ§āđ€āļĨāļ·āļ­āļ 1 - "āļ—āļģāļ‡āļēāļ™āļ•āļēāļĄāļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢ"

āđ€āļĢāļēāļ›āļĨāđˆāļ­āļĒāđƒāļŦāđ‰āļ—āļļāļāļ­āļĒāđˆāļēāļ‡āđ€āļŦāļĄāļ·āļ­āļ™āđ€āļ”āļīāļĄ āļŦāļēāļāļĨāļđāļāļ„āđ‰āļēāđ„āļĄāđˆāļžāļ­āđƒāļˆāļāļąāļšāļŠāļļāļ‚āļ āļēāļž āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļĢāļ·āļ­āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™ āļĨāļđāļāļ„āđ‰āļēāļˆāļ°āđāļˆāđ‰āļ‡āļ§āļīāļĻāļ§āļāļĢāļ‚āļ­āļ‡ DBA āļ—āļēāļ‡āļ­āļĩāđ€āļĄāļĨāļŦāļĢāļ·āļ­āđ‚āļ”āļĒāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđƒāļ™āļāļĨāđˆāļ­āļ‡āļ•āļąāđ‹āļ§
āļ§āļīāļĻāļ§āļāļĢāļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āļˆāļ°āđ€āļ‚āđ‰āļēāđƒāļˆāļ›āļąāļāļŦāļē āđ€āļŠāļ™āļ­āļ§āļīāļ˜āļĩāđāļāđ‰āđ„āļ‚ āļŦāļĢāļ·āļ­āļĢāļ°āļ‡āļąāļšāļ›āļąāļāļŦāļē āđ‚āļ”āļĒāļŦāļ§āļąāļ‡āļ§āđˆāļēāļ—āļļāļāļ­āļĒāđˆāļēāļ‡āļˆāļ°āļ„āļĨāļĩāđˆāļ„āļĨāļēāļĒāđ€āļ­āļ‡ āđāļĨāļ°āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄ āļ—āļļāļāļ­āļĒāđˆāļēāļ‡āļˆāļ°āļ–āļđāļāļĨāļ·āļĄāđƒāļ™āđ„āļĄāđˆāļŠāđ‰āļē
āļ‚āļ™āļĄāļ›āļąāļ‡āļ‚āļīāļ‡āđāļĨāļ°āđ‚āļ”āļ™āļąāļ— āļĢāļ­āļĒāļŸāļāļŠāđ‰āļģāđāļĨāļ°āļāļēāļĢāļāļĢāļ°āđāļ—āļāļ‚āļ™āļĄāļ›āļąāļ‡āļ‚āļīāļ‡āđāļĨāļ°āđ‚āļ”āļ™āļąāļ—:
1. āđ„āļĄāđˆāļĄāļĩāļ­āļ°āđ„āļĢāļžāļīāđ€āļĻāļĐāđƒāļŦāđ‰āļ—āļģ
2. āļĄāļĩāđ‚āļ­āļāļēāļŠāļ—āļĩāđˆāļˆāļ°āļ­āļ­āļāđ„āļ›āļ—āļģāļŠāļāļ›āļĢāļāđ„āļ”āđ‰āđ€āļŠāļĄāļ­
3. āļĄāļĩāđ€āļ§āļĨāļēāļĄāļēāļāļĄāļēāļĒāļ—āļĩāđˆāļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļ”āđ‰āļ§āļĒāļ•āļąāļ§āđ€āļ­āļ‡
āļĢāļ­āļĒāļŸāļāļŠāđ‰āļģāđāļĨāļ°āļāļēāļĢāļāļĢāļ°āđāļ—āļ:
1. āđ„āļĄāđˆāļŠāđ‰āļēāļāđ‡āđ€āļĢāđ‡āļ§ āļĨāļđāļāļ„āđ‰āļēāļˆāļ°āļ„āļīāļ”āļ–āļķāļ‡āđāļāđˆāļ™āđāļ—āđ‰āļ‚āļ­āļ‡āļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āļ­āļĒāļđāđˆāđāļĨāļ°āļ„āļ§āļēāļĄāļĒāļļāļ•āļīāļ˜āļĢāļĢāļĄāļŠāļēāļāļĨāđƒāļ™āđ‚āļĨāļāļ™āļĩāđ‰ āđāļĨāļ°āļ–āļēāļĄāļ•āļąāļ§āđ€āļ­āļ‡āļ­āļĩāļāļ„āļĢāļąāđ‰āļ‡āļ§āđˆāļē - āļ—āļģāđ„āļĄāļ‰āļąāļ™āļ–āļķāļ‡āļˆāđˆāļēāļĒāđ€āļ‡āļīāļ™āđƒāļŦāđ‰āļžāļ§āļāđ€āļ‚āļē āļœāļĨāļ—āļĩāđˆāļ•āļēāļĄāļĄāļēāļāđ‡āđ€āļŦāļĄāļ·āļ­āļ™āđ€āļ”āļīāļĄ āļ„āļģāļ–āļēāļĄāđ€āļ”āļĩāļĒāļ§āļ„āļ·āļ­āđ€āļĄāļ·āđˆāļ­āļĨāļđāļāļ„āđ‰āļēāđ€āļšāļ·āđˆāļ­āđāļĨāļ°āđ‚āļšāļāļĄāļ·āļ­āļĨāļē āđāļĨāļ°āļ•āļąāļ§āļ›āđ‰āļ­āļ™āļ§āđˆāļēāļ‡āđ€āļ›āļĨāđˆāļē āļĄāļąāļ™āđ€āļ›āđ‡āļ™āđ€āļĢāļ·āđˆāļ­āļ‡āļ™āđˆāļēāđ€āļĻāļĢāđ‰āļē
2. āļāļēāļĢāļžāļąāļ’āļ™āļēāļ§āļīāļĻāļ§āļāļĢāđ€āļ›āđ‡āļ™āļĻāļđāļ™āļĒāđŒ
3. āļ„āļ§āļēāļĄāļĒāļēāļāļĨāļģāļšāļēāļāđƒāļ™āļāļēāļĢāļˆāļąāļ”āļ•āļēāļĢāļēāļ‡āļ‡āļēāļ™āđāļĨāļ°āļāļēāļĢāđ‚āļŦāļĨāļ”

āļ•āļąāļ§āđ€āļĨāļ·āļ­āļ 2 -“ āđ€āļ•āđ‰āļ™āļĢāļģāļāļąāļšāļĢāļģāļĄāļ°āļ™āļēāļŠāļ§āļĄāđāļĨāļ°āļŠāļ§āļĄāļĢāļ­āļ‡āđ€āļ—āđ‰āļē”

āļ§āļĢāļĢāļ„ 1-āļ—āļģāđ„āļĄāđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļĄāļĩāļĢāļ°āļšāļšāļ•āļĢāļ§āļˆāļŠāļ­āļš āđ€āļĢāļēāļˆāļ°āļĢāļąāļšāļ—āļļāļāļ„āļģāļ‚āļ­ āđ€āļĢāļēāđ€āļ›āļīāļ”āļ•āļąāļ§āļāļēāļĢāļŠāļ·āļšāļ„āđ‰āļ™āļ—āļļāļāļ›āļĢāļ°āđ€āļ āļ—āđ„āļ›āļĒāļąāļ‡āļžāļˆāļ™āļēāļ™āļļāļāļĢāļĄāļ‚āđ‰āļ­āļĄāļđāļĨāđāļĨāļ°āļĄāļļāļĄāļĄāļ­āļ‡āđāļšāļšāđ„āļ”āļ™āļēāļĄāļīāļ āđ€āļ›āļīāļ”āđƒāļŠāđ‰āļ‡āļēāļ™āļ•āļąāļ§āļ™āļąāļšāļ—āļļāļāļ›āļĢāļ°āđ€āļ āļ— āļ™āļģāļ—āļļāļāļ­āļĒāđˆāļēāļ‡āļĄāļēāđ„āļ§āđ‰āđƒāļ™āļ•āļēāļĢāļēāļ‡ āļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļĢāļēāļĒāļāļēāļĢāđāļĨāļ°āļ•āļēāļĢāļēāļ‡āđ€āļ›āđ‡āļ™āļĢāļ°āļĒāļ° āđ† āđ€āļŦāļĄāļ·āļ­āļ™āđ€āļ”āļīāļĄ āđ€āļ›āđ‡āļ™āļœāļĨāđƒāļŦāđ‰āđ€āļĢāļēāļĄāļĩāļāļĢāļēāļŸāļ•āļēāļĢāļēāļ‡āļĢāļēāļĒāļ‡āļēāļ™āļ—āļĩāđˆāļŠāļ§āļĒāļ‡āļēāļĄāļŦāļĢāļ·āļ­āđ„āļĄāđˆāļĄāļēāļāļ™āļąāļ āļŠāļīāđˆāļ‡āļŠāļģāļ„āļąāļ - āļ™āļąāđˆāļ™āļˆāļ°āļĄāļēāļāļ‚āļķāđ‰āļ™āđāļĨāļ°āļĄāļēāļāļ‚āļķāđ‰āļ™
āļ§āļĢāļĢāļ„ 2- āļŠāļĢāđ‰āļēāļ‡āļāļīāļˆāļāļĢāļĢāļĄ - āđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ™āļĩāđ‰
āļ§āļĢāļĢāļ„ 3- āđ€āļĢāļēāļāļģāļĨāļąāļ‡āđ€āļ•āļĢāļĩāļĒāļĄāđ€āļ­āļāļŠāļēāļĢāļšāļēāļ‡āļ­āļĒāđˆāļēāļ‡ āđ€āļĢāļēāđ€āļĢāļĩāļĒāļāđ€āļ­āļāļŠāļēāļĢāļ™āļĩāđ‰āļ‡āđˆāļēāļĒāđ† āļ§āđˆāļē - "āđ€āļĢāļēāļˆāļ°āđ€āļ•āļĢāļĩāļĒāļĄāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ­āļĒāđˆāļēāļ‡āđ„āļĢ"
āļ§āļĢāļĢāļ„ 4- āļĨāļđāļāļ„āđ‰āļēāļ—āļĩāđˆāđ€āļŦāđ‡āļ™āļ„āļ§āļēāļĄāļĒāļīāđˆāļ‡āđƒāļŦāļāđˆāļ‚āļ­āļ‡āļāļĢāļēāļŸāđāļĨāļ°āļ•āļąāļ§āđ€āļĨāļ‚āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰ āļĄāļĩāļ„āļ§āļēāļĄāļĄāļąāđˆāļ™āđƒāļˆāđāļšāļšāđ€āļ”āđ‡āļāđ† āļ—āļĩāđˆāđ„āļĢāđ‰āđ€āļ”āļĩāļĒāļ‡āļŠāļē āļ•āļ­āļ™āļ™āļĩāđ‰āļ—āļļāļāļ­āļĒāđˆāļēāļ‡āļˆāļ°āđ„āļ”āđ‰āļœāļĨāļŠāļģāļŦāļĢāļąāļšāđ€āļĢāļēāđƒāļ™āđ„āļĄāđˆāļŠāđ‰āļē āđāļĨāļ°āđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļŦāļ™āļķāđˆāļ‡āļ­āļĒāđˆāļēāļ‡āļ‡āđˆāļēāļĒāļ”āļēāļĒāđāļĨāļ°āđ„āļĄāđˆāļĨāļģāļšāļēāļāļāļąāļšāļ—āļĢāļąāļžāļĒāļēāļāļĢāļ—āļēāļ‡āļāļēāļĢāđ€āļ‡āļīāļ™āļ‚āļ­āļ‡āļžāļ§āļāđ€āļ‚āļē āļāđˆāļēāļĒāļšāļĢāļīāļŦāļēāļĢāļĒāļąāļ‡āļĄāļąāđˆāļ™āđƒāļˆāļ§āđˆāļēāļ§āļīāļĻāļ§āļāļĢāļ‚āļ­āļ‡āđ€āļĢāļēāļ—āļģāļ‡āļēāļ™āļ­āļĒāđˆāļēāļ‡āļŦāļ™āļąāļ āļāļģāļĨāļąāļ‡āđ‚āļŦāļĨāļ”āļŠāļđāļ‡āļŠāļļāļ”
āļ§āļĢāļĢāļ„ 5- āļ—āļģāļ‹āđ‰āļģāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆ 1 āļ­āļĒāđˆāļēāļ‡āļŠāļĄāđˆāļģāđ€āļŠāļĄāļ­
āļ‚āļ™āļĄāļ›āļąāļ‡āļ‚āļīāļ‡āđāļĨāļ°āđ‚āļ”āļ™āļąāļ— āļĢāļ­āļĒāļŸāļāļŠāđ‰āļģāđāļĨāļ°āļāļēāļĢāļāļĢāļ°āđāļ—āļāļ‚āļ™āļĄāļ›āļąāļ‡āļ‚āļīāļ‡āđāļĨāļ°āđ‚āļ”āļ™āļąāļ—:
1. āļŠāļĩāļ§āļīāļ•āļ‚āļ­āļ‡āļœāļđāđ‰āļˆāļąāļ”āļāļēāļĢāđāļĨāļ°āļ§āļīāļĻāļ§āļāļĢāļ™āļąāđ‰āļ™āđ€āļĢāļĩāļĒāļšāļ‡āđˆāļēāļĒ āļ„āļēāļ”āđ€āļ”āļēāđ„āļ”āđ‰ āđāļĨāļ°āđ€āļ•āđ‡āļĄāđ„āļ›āļ”āđ‰āļ§āļĒāļāļīāļˆāļāļĢāļĢāļĄ āļ—āļļāļāļ­āļĒāđˆāļēāļ‡āļ§āļļāđˆāļ™āļ§āļēāļĒ āļ—āļļāļāļ„āļ™āļĒāļļāđˆāļ‡
2. āļŠāļĩāļ§āļīāļ•āļ‚āļ­āļ‡āļĨāļđāļāļ„āđ‰āļēāļāđ‡āđ„āļĄāđˆāđ€āļĨāļ§āđ€āļŠāđˆāļ™āļāļąāļ™ - āđ€āļ‚āļēāļĄāļąāđˆāļ™āđƒāļˆāđ€āļŠāļĄāļ­āļ§āđˆāļēāļ„āļļāļ“āļ•āđ‰āļ­āļ‡āļ­āļ”āļ—āļ™āļŠāļąāļāļ™āļīāļ”āđāļĨāđ‰āļ§āļ—āļļāļāļ­āļĒāđˆāļēāļ‡āļˆāļ°āļ­āļ­āļāļĄāļēāļ”āļĩ āđ„āļĄāđˆāļ”āļĩāļ‚āļķāđ‰āļ™āļāđ‡āļ”āļĩ - āđ‚āļĨāļāļ™āļĩāđ‰āđ„āļĄāđˆāļĒāļļāļ•āļīāļ˜āļĢāļĢāļĄāđƒāļ™āļŠāļēāļ•āļīāļŦāļ™āđ‰āļē - āđ‚āļŠāļ„āļ”āļĩ
āļĢāļ­āļĒāļŸāļāļŠāđ‰āļģāđāļĨāļ°āļāļēāļĢāļāļĢāļ°āđāļ—āļ:
1. āđ„āļĄāđˆāļŠāđ‰āļēāļāđ‡āđ€āļĢāđ‡āļ§ āļˆāļ°āļĄāļĩāļœāļđāđ‰āđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢāļ—āļĩāđˆāļ„āļĨāđ‰āļēāļĒāļ„āļĨāļķāļ‡āļāļąāļ™āļ‹āļķāđˆāļ‡āļ‰āļĨāļēāļ”āļāļ§āđˆāļēāļ‹āļķāđˆāļ‡āļˆāļ°āļ—āļģāļŠāļīāđˆāļ‡āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āđāļ•āđˆāļ–āļđāļāļāļ§āđˆāļēāđ€āļĨāđ‡āļāļ™āđ‰āļ­āļĒ āđāļĨāļ°āļ–āđ‰āļēāļœāļĨāļĨāļąāļžāļ˜āđŒāđ€āļŦāļĄāļ·āļ­āļ™āļāļąāļ™āļˆāļ°āļˆāđˆāļēāļĒāđāļžāļ‡āļāļ§āđˆāļēāļ—āļģāđ„āļĄ āļ‹āļķāđˆāļ‡āļˆāļ°āļ™āļģāđ„āļ›āļŠāļđāđˆāļāļēāļĢāļŦāļēāļĒāđ„āļ›āļ‚āļ­āļ‡āļ•āļąāļ§āļ›āđ‰āļ­āļ™āļ­āļĩāļāļ„āļĢāļąāđ‰āļ‡
2. āļĄāļąāļ™āļ™āđˆāļēāđ€āļšāļ·āđˆāļ­ āļāļīāļˆāļāļĢāļĢāļĄāđ€āļĨāđ‡āļāđ† āļ™āđ‰āļ­āļĒāđ† āļ—āļĩāđˆāļĄāļĩāļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāļŠāđˆāļēāļ‡āļ™āđˆāļēāđ€āļšāļ·āđˆāļ­āđ€āļŠāļĩāļĒāļ™āļĩāđˆāļāļĢāļ°āđ„āļĢ
3. āđ€āļŠāđˆāļ™āđ€āļ”āļĩāļĒāļ§āļāļąāļšāđƒāļ™āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļāđˆāļ­āļ™āļŦāļ™āđ‰āļē - āđ„āļĄāđˆāļĄāļĩāļāļēāļĢāļžāļąāļ’āļ™āļē āđāļ•āđˆāļŠāļģāļŦāļĢāļąāļšāļ§āļīāļĻāļ§āļāļĢ āļ‚āđ‰āļ­āđ€āļŠāļĩāļĒāļ„āļ·āļ­ āļ„āļļāļ“āļ•āđ‰āļ­āļ‡āļŠāļĢāđ‰āļēāļ‡ IDB āļ­āļĒāđˆāļēāļ‡āļ•āđˆāļ­āđ€āļ™āļ·āđˆāļ­āļ‡ āļ‹āļķāđˆāļ‡āđ„āļĄāđˆāđ€āļŦāļĄāļ·āļ­āļ™āļāļąāļšāļ•āļąāļ§āđ€āļĨāļ·āļ­āļāđāļĢāļ āđāļĨāļ°āļ™āļąāđˆāļ™āļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰āđ€āļ§āļĨāļē āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļˆāđˆāļēāļĒāđ€āļžāļ·āđˆāļ­āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļ‚āļ­āļ‡āļ„āļ™āļ—āļĩāđˆāļ„āļļāļ“āļĢāļąāļ āđ€āļžāļĢāļēāļ°āļ„āļļāļ“āļ”āļđāđāļĨāļ•āļąāļ§āđ€āļ­āļ‡āđ„āļĄāđˆāđ„āļ”āđ‰ āđƒāļ„āļĢāđ† āļāđ‡āđ€āļ›āđ‡āļ™āļŦāđˆāļ§āļ‡āļ„āļļāļ“

āļ•āļąāļ§āđ€āļĨāļ·āļ­āļ 3-āđ„āļĄāđˆāļˆāļģāđ€āļ›āđ‡āļ™āļ•āđ‰āļ­āļ‡āļ›āļĢāļ°āļ”āļīāļĐāļāđŒāļˆāļąāļāļĢāļĒāļēāļ™ āļ„āļļāļ“āļ•āđ‰āļ­āļ‡āļ‹āļ·āđ‰āļ­āđāļĨāļ°āļ‚āļĩāđˆāļĄāļąāļ™

āļ§āļīāļĻāļ§āļāļĢāļˆāļēāļ āļšāļĢāļīāļĐāļąāļ— āļ­āļ·āđˆāļ™ āđ† āļāļīāļ™āļžāļīāļ‹āļ‹āđˆāļēāļāļąāļšāđ€āļšāļĩāļĒāļĢāđŒāļ­āļĒāđˆāļēāļ‡āļĢāļđāđ‰āđ€āļ—āđˆāļēāļ—āļąāļ™ (āđ‚āļ­āđ‰āļĒāļļāļ„āļĢāļļāđˆāļ‡āđ€āļĢāļ·āļ­āļ‡āļ‚āļ­āļ‡āđ€āļ‹āļ™āļ•āđŒāļ›āļĩāđ€āļ•āļ­āļĢāđŒāļŠāđ€āļšāļīāļĢāđŒāļāđƒāļ™āļĒāļļāļ„ 90) āļĄāļēāđƒāļŠāđ‰āļĢāļ°āļšāļšāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ—āļĩāđˆāļŠāļĢāđ‰āļēāļ‡āļ‚āļķāđ‰āļ™ āļ”āļĩāļšāļąāđŠāļ āđāļĨāļ°āđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰ āļ‹āļķāđˆāļ‡āđ‚āļ”āļĒāļ—āļąāđˆāļ§āđ„āļ›āđāļĨāđ‰āļ§āļĢāļ°āļšāļšāđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āļāđˆāļ­āđƒāļŦāđ‰āđ€āļāļīāļ”āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒ (āļ­āļĒāđˆāļēāļ‡āļ™āđ‰āļ­āļĒāļāđ‡āļŠāļģāļŦāļĢāļąāļšāļœāļđāđ‰āļŠāļĢāđ‰āļēāļ‡)
āļ‚āļ™āļĄāļ›āļąāļ‡āļ‚āļīāļ‡āđāļĨāļ°āđ‚āļ”āļ™āļąāļ— āļĢāļ­āļĒāļŸāļāļŠāđ‰āļģāđāļĨāļ°āļāļēāļĢāļāļĢāļ°āđāļ—āļāļ‚āļ™āļĄāļ›āļąāļ‡āļ‚āļīāļ‡āđāļĨāļ°āđ‚āļ”āļ™āļąāļ—:
1. āđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āđ€āļŠāļĩāļĒāđ€āļ§āļĨāļēāļ›āļĢāļ°āļ”āļīāļĐāļāđŒāļŠāļīāđˆāļ‡āļ—āļĩāđˆāļ›āļĢāļ°āļ”āļīāļĐāļāđŒāđ„āļ§āđ‰āđāļĨāđ‰āļ§ āļĢāļąāļšāđāļĨāļ°āđƒāļŠāđ‰
2. āļĢāļ°āļšāļšāļ•āļĢāļ§āļˆāļŠāļ­āļšāđ„āļĄāđˆāđ„āļ”āđ‰āđ€āļ‚āļĩāļĒāļ™āđ‚āļ”āļĒāļ„āļ™āđ‚āļ‡āđˆ āđāļĨāļ°āđāļ™āđˆāļ™āļ­āļ™āļ§āđˆāļēāļĄāļąāļ™āļĄāļĩāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒ
3. āļĢāļ°āļšāļšāļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļĄāļąāļāļˆāļ°āđƒāļŦāđ‰āļ‚āđ‰āļ­āļĄāļđāļĨāļāļĢāļ­āļ‡āļ—āļĩāđˆāđ€āļ›āđ‡āļ™āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒ
āļĢāļ­āļĒāļŸāļāļŠāđ‰āļģāđāļĨāļ°āļāļēāļĢāļāļĢāļ°āđāļ—āļ:
1. āļ§āļīāļĻāļ§āļāļĢāđƒāļ™āļāļĢāļ“āļĩāļ™āļĩāđ‰āđ„āļĄāđˆāđƒāļŠāđˆāļ§āļīāļĻāļ§āļāļĢāđāļ•āđˆāđ€āļ›āđ‡āļ™āđ€āļžāļĩāļĒāļ‡āļœāļđāđ‰āđƒāļŠāđ‰āļœāļĨāļīāļ•āļ āļąāļ“āļ‘āđŒāļ‚āļ­āļ‡āļœāļđāđ‰āļ­āļ·āđˆāļ™ āļŦāļĢāļ·āļ­āļœāļđāđ‰āđƒāļŠāđ‰
2. āļĨāļđāļāļ„āđ‰āļēāļ•āđ‰āļ­āļ‡āđ€āļŠāļ·āđˆāļ­āļĄāļąāđˆāļ™āļ–āļķāļ‡āļ„āļ§āļēāļĄāļˆāļģāđ€āļ›āđ‡āļ™āđƒāļ™āļāļēāļĢāļ‹āļ·āđ‰āļ­āļšāļēāļ‡āļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāđ‚āļ”āļĒāļ—āļąāđˆāļ§āđ„āļ›āđ€āļ‚āļēāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāđ€āļ‚āđ‰āļēāđƒāļˆ āđāļĨāļ°āđ„āļĄāđˆāļ„āļ§āļĢ āđāļĨāļ°āđ‚āļ”āļĒāļ—āļąāđˆāļ§āđ„āļ›āđāļĨāđ‰āļ§āļ‡āļšāļ›āļĢāļ°āļĄāļēāļ“āļŠāļģāļŦāļĢāļąāļšāļ›āļĩāđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ­āļ™āļļāļĄāļąāļ•āļīāđāļĨāđ‰āļ§āđāļĨāļ°āļˆāļ°āđ„āļĄāđˆāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡ āļˆāļēāļāļ™āļąāđ‰āļ™āļ„āļļāļ“āļ•āđ‰āļ­āļ‡āļˆāļąāļ”āļŠāļĢāļĢāļ—āļĢāļąāļžāļĒāļēāļāļĢāđāļĒāļāļ•āđˆāļēāļ‡āļŦāļēāļ āļāļģāļŦāļ™āļ”āļ„āđˆāļēāļŠāļģāļŦāļĢāļąāļšāļĢāļ°āļšāļšāđ€āļ‰āļžāļēāļ° āđ€āļŦāļĨāđˆāļēāļ™āļąāđ‰āļ™. āļāđˆāļ­āļ™āļ­āļ·āđˆāļ™ āļ„āļļāļ“āļ•āđ‰āļ­āļ‡āļˆāđˆāļēāļĒ āļˆāđˆāļēāļĒāđāļĨāđ‰āļ§āļˆāđˆāļēāļĒāļ­āļĩāļ āđāļĨāļ°āļĨāļđāļāļ„āđ‰āļēāļāđ‡āļ‚āļĩāđ‰āđ€āļŦāļ™āļĩāļĒāļ§ āļ™āļĩāđˆāļ„āļ·āļ­āļšāļĢāļĢāļ—āļąāļ”āļāļēāļ™āļ‚āļ­āļ‡āļŠāļĩāļ§āļīāļ•āļ™āļĩāđ‰

āļˆāļ°āļ—āļģāļ­āļĒāđˆāļēāļ‡āđ„āļĢ Chernyshevsky? āļ„āļģāļ–āļēāļĄāļ‚āļ­āļ‡āļ„āļļāļ“āļ•āļĢāļ‡āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļĄāļēāļ (āļāļąāļš)

āđƒāļ™āļāļĢāļ“āļĩāļ™āļĩāđ‰āđāļĨāļ°āļŠāļ–āļēāļ™āļāļēāļĢāļ“āđŒāļ›āļąāļˆāļˆāļļāļšāļąāļ™ āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āļ—āļģāļŠāļīāđˆāļ‡āļ—āļĩāđˆāļ•āđˆāļēāļ‡āļ­āļ­āļāđ„āļ›āđ€āļĨāđ‡āļāļ™āđ‰āļ­āļĒ - āļĄāļēāļŠāļĢāđ‰āļēāļ‡āļĢāļ°āļšāļšāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āļ­āļ‡āđ€āļĢāļēāđ€āļ­āļ‡āļāļąāļ™āđ€āļ–āļ­āļ°
āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡āđāļšāļšāļŠāļ­āļšāļ–āļēāļĄ PostgreSQL āļŠāđˆāļ§āļ™āļ—āļĩāđˆ 1 - āļāļēāļĢāļĢāļēāļĒāļ‡āļēāļ™
āđāļ™āđˆāļ™āļ­āļ™āļ§āđˆāļēāđ„āļĄāđˆāđƒāļŠāđˆāļĢāļ°āļšāļš āđƒāļ™āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāļ—āļĩāđˆāļŠāļĄāļšāļđāļĢāļ“āđŒāļ‚āļ­āļ‡āļ„āļģāļ™āļĩāđ‰ āļĄāļąāļ™āļ”āļąāļ‡āđ€āļāļīāļ™āđ„āļ›āđāļĨāļ°āđ€āļāļĢāļ‡āđƒāļˆ āđāļ•āđˆāļ­āļĒāđˆāļēāļ‡āļ™āđ‰āļ­āļĒāļāđ‡āļ—āļģāđƒāļŦāđ‰āļĄāļąāļ™āļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™āļŠāļģāļŦāļĢāļąāļšāļ•āļąāļ§āļ„āļļāļ“āđ€āļ­āļ‡āđāļĨāļ°āļĢāļ§āļšāļĢāļ§āļĄāļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄāđ€āļžāļ·āđˆāļ­āđāļāđ‰āđ„āļ‚āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļ”āđ‰āļēāļ™āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž āđ€āļžāļ·āđˆāļ­āđ„āļĄāđˆāđƒāļŦāđ‰āļ•āļąāļ§āđ€āļ­āļ‡āļ•āļāļ­āļĒāļđāđˆāđƒāļ™āļŠāļ–āļēāļ™āļāļēāļĢāļ“āđŒ - "āđ„āļ›āļ—āļĩāđˆāļ™āļąāđˆāļ™ āļ‰āļąāļ™āđ„āļĄāđˆāļĢāļđāđ‰āļ§āđˆāļēāļ—āļĩāđˆāđ„āļŦāļ™ āļ„āđ‰āļ™āļŦāļē āļ‰āļąāļ™āđ„āļĄāđˆāļĢāļđāđ‰āļ§āđˆāļēāļ­āļ°āđ„āļĢ"

āļ‚āđ‰āļ­āļ”āļĩāđāļĨāļ°āļ‚āđ‰āļ­āđ€āļŠāļĩāļĒāļ‚āļ­āļ‡āļ•āļąāļ§āđ€āļĨāļ·āļ­āļāļ™āļĩāđ‰āļ„āļ·āļ­āļ­āļ°āđ„āļĢ:

āļˆāļļāļ”āđ€āļ”āđˆāļ™:
1. āļĄāļąāļ™āļ™āđˆāļēāļŠāļ™āđƒāļˆ āļ­āļĒāđˆāļēāļ‡āļ™āđ‰āļ­āļĒāļāđ‡āļ™āđˆāļēāļŠāļ™āđƒāļˆāļāļ§āđˆāļēāļ„āđˆāļēāļ„āļ‡āļ—āļĩāđˆ "āļĨāļ”āļ‚āļ™āļēāļ”āđ„āļŸāļĨāđŒāļ‚āđ‰āļ­āļĄāļđāļĨ, āđāļāđ‰āđ„āļ‚āļžāļ·āđ‰āļ™āļ—āļĩāđˆāļ•āļēāļĢāļēāļ‡, āļŊāļĨāļŊ "
2. āļ™āļĩāđˆāļ„āļ·āļ­āļ—āļąāļāļĐāļ°āđƒāļŦāļĄāđˆāđāļĨāļ°āļāļēāļĢāļžāļąāļ’āļ™āļēāđƒāļŦāļĄāđˆ āļ‹āļķāđˆāļ‡āđƒāļ™āļ­āļ™āļēāļ„āļ•āđ„āļĄāđˆāļŠāđ‰āļēāļāđ‡āđ€āļĢāđ‡āļ§āļˆāļ°āđƒāļŦāđ‰āļ‚āļ™āļĄāļ›āļąāļ‡āļ‚āļīāļ‡āđāļĨāļ°āđ‚āļ”āļ™āļąāļ—āļ—āļĩāđˆāļ„āļđāđˆāļ„āļ§āļĢ
āļˆāļļāļ”āļ”āđ‰āļ­āļĒ:
1. āļ•āđ‰āļ­āļ‡āļ—āļģāļ‡āļēāļ™ āļ—āļģāļ‡āļēāļ™āļŦāļ™āļąāļ.
2. āļ„āļļāļ“āļˆāļ°āļ•āđ‰āļ­āļ‡āļ­āļ˜āļīāļšāļēāļĒāļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđāļĨāļ°āļĄāļļāļĄāļĄāļ­āļ‡āļ‚āļ­āļ‡āļāļīāļˆāļāļĢāļĢāļĄāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ­āļĒāđˆāļēāļ‡āļŠāļĄāđˆāļģāđ€āļŠāļĄāļ­
3. āļˆāļ°āļ•āđ‰āļ­āļ‡āđ€āļŠāļĩāļĒāļŠāļĨāļ°āļšāļēāļ‡āļ­āļĒāđˆāļēāļ‡āđ€āļžāļĢāļēāļ°āļ—āļĢāļąāļžāļĒāļēāļāļĢāđ€āļ”āļĩāļĒāļ§āļ—āļĩāđˆāļĄāļĩāđƒāļŦāđ‰āļ§āļīāļĻāļ§āļāļĢ - āđ€āļ§āļĨāļē - āļ–āļđāļ āļˆāļģāļāļąāļ” āđ‚āļ”āļĒāļˆāļąāļāļĢāļ§āļēāļĨ
4. āđāļĒāđˆāļ—āļĩāđˆāļŠāļļāļ”āđāļĨāļ°āđ„āļĄāđˆāđ€āļ›āđ‡āļ™āļ—āļĩāđˆāļžāļ­āđƒāļˆāļ—āļĩāđˆāļŠāļļāļ” - āđ€āļ›āđ‡āļ™āļœāļĨāđƒāļŦāđ‰āļ‚āļĒāļ°āđ€āļŠāđˆāļ™ "āđ„āļĄāđˆāđƒāļŠāđˆāļŦāļ™āļđāđ„āļĄāđˆāđƒāļŠāđˆāļāļš āđāļ•āđˆāđ€āļ›āđ‡āļ™āļŠāļąāļ•āļ§āđŒāļ•āļąāļ§āđ€āļĨāđ‡āļ āđ† āļ—āļĩāđˆāđ„āļĄāđˆāļĢāļđāđ‰āļˆāļąāļ" āļ­āļēāļˆāļ›āļĢāļēāļāļāļ‚āļķāđ‰āļ™

āđƒāļ„āļĢāđ„āļĄāđˆāđ€āļŠāļĩāđˆāļĒāļ‡āļšāđ‰āļēāļ‡āļ­āļĒāđˆāļēāļ”āļ·āđˆāļĄāđāļŠāļĄāđ€āļ›āļ
āļ„āļ§āļēāļĄāļŠāļ™āļļāļāļˆāļķāļ‡āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āļ‚āļķāđ‰āļ™

āđāļ™āļ§āļ„āļīāļ”āļ—āļąāđˆāļ§āđ„āļ› - āđāļœāļ™āļœāļąāļ‡

āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡āđāļšāļšāļŠāļ­āļšāļ–āļēāļĄ PostgreSQL āļŠāđˆāļ§āļ™āļ—āļĩāđˆ 1 - āļāļēāļĢāļĢāļēāļĒāļ‡āļēāļ™
(āļ āļēāļžāļ›āļĢāļ°āļāļ­āļšāļ™āļģāļĄāļēāļˆāļēāļāļšāļ—āļ„āļ§āļēāļĄ ÂŦāļāļēāļĢāļŠāļąāļ‡āđ€āļ„āļĢāļēāļ°āļŦāđŒāđ€āļ›āđ‡āļ™āļŦāļ™āļķāđˆāļ‡āđƒāļ™āļ§āļīāļ˜āļĩāļāļēāļĢāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡ PostgreSQL")

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:

  • āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ›āđ‰āļēāļŦāļĄāļēāļĒāđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ•āļīāļ”āļ•āļąāđ‰āļ‡āļ”āđ‰āļ§āļĒāļŠāđˆāļ§āļ™āļ‚āļĒāļēāļĒ PostgreSQL āļĄāļēāļ•āļĢāļāļēāļ™ â€œpg_stat_statements”
  • āđƒāļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļāļēāļĢāļĄāļ­āļ™āļīāđ€āļ•āļ­āļĢāđŒ āđ€āļĢāļēāļŠāļĢāđ‰āļēāļ‡āļŠāļļāļ”āļ‚āļ­āļ‡āļ•āļēāļĢāļēāļ‡āļšāļĢāļīāļāļēāļĢāđ€āļžāļ·āđˆāļ­āļˆāļąāļ”āđ€āļāđ‡āļšāļ›āļĢāļ°āļ§āļąāļ•āļī pg_stat_statements āļ—āļĩāđˆāļĢāļ°āļĒāļ°āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™ āđāļĨāļ°āđ€āļžāļ·āđˆāļ­āļāļģāļŦāļ™āļ”āļ„āđˆāļēāđ€āļĄāļ•āļĢāļīāļāđāļĨāļ°āļāļēāļĢāļĄāļ­āļ™āļīāđ€āļ•āļ­āļĢāđŒāđƒāļ™āļ­āļ™āļēāļ„āļ•
  • āļšāļ™āđ‚āļŪāļŠāļ•āđŒāļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļš āđ€āļĢāļēāļŠāļĢāđ‰āļēāļ‡āļŠāļļāļ”āļ‚āļ­āļ‡āļŠāļ„āļĢāļīāļ›āļ•āđŒāļ—āļļāļšāļ•āļĩ āļĢāļ§āļĄāļ–āļķāļ‡āļŠāļ„āļĢāļīāļ›āļ•āđŒāļŠāļģāļŦāļĢāļąāļšāļŠāļĢāđ‰āļēāļ‡āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđƒāļ™āļĢāļ°āļšāļšāļ•āļąāđ‹āļ§

āđ‚āļ•āđŠāļ°āļšāļĢāļīāļāļēāļĢ

āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āļ”āđ‰āļ§āļĒ ERD āļ—āļĩāđˆāđ€āļĢāļĩāļĒāļšāļ‡āđˆāļēāļĒāļ•āļēāļĄāđāļœāļ™āļœāļąāļ‡ āļŠāļīāđˆāļ‡āļ—āļĩāđˆāđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āđƒāļ™āļ•āļ­āļ™āļ—āđ‰āļēāļĒ:
āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡āđāļšāļšāļŠāļ­āļšāļ–āļēāļĄ PostgreSQL āļŠāđˆāļ§āļ™āļ—āļĩāđˆ 1 - āļāļēāļĢāļĢāļēāļĒāļ‡āļēāļ™
āļ„āļģāļ­āļ˜āļīāļšāļēāļĒāļŠāļąāđ‰āļ™ āđ† āļ‚āļ­āļ‡āļ•āļēāļĢāļēāļ‡āļ›āļĨāļēāļĒāļ—āļēāļ‡ - āđ‚āļŪāļŠāļ•āđŒ āļˆāļļāļ”āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļāļąāļšāļ­āļīāļ™āļŠāđāļ•āļ™āļ‹āđŒ
āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ - āļ•āļąāļ§āđ€āļĨāļ·āļ­āļāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ
pg_stat_history - āļ•āļēāļĢāļēāļ‡āļ›āļĢāļ°āļ§āļąāļ•āļīāļŠāļģāļŦāļĢāļąāļšāļˆāļąāļ”āđ€āļāđ‡āļšāļ āļēāļžāļĢāļ§āļĄāļŠāļąāđˆāļ§āļ„āļĢāļēāļ§āļ‚āļ­āļ‡āļĄāļļāļĄāļĄāļ­āļ‡ pg_stat_statements āļ‚āļ­āļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ›āđ‰āļēāļŦāļĄāļēāļĒ
metric_āļ­āļ āļīāļ˜āļēāļ™āļĻāļąāļžāļ—āđŒ - āļžāļˆāļ™āļēāļ™āļļāļāļĢāļĄāļ•āļąāļ§āļŠāļĩāđ‰āļ§āļąāļ”āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž
metric_config - āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļēāļ‚āļ­āļ‡āđāļ•āđˆāļĨāļ°āđ€āļĄāļ•āļĢāļīāļ
āđ€āļĄāļ•āļĢāļīāļ - āđ€āļĄāļ•āļĢāļīāļāđ€āļ‰āļžāļēāļ°āļŠāļģāļŦāļĢāļąāļšāļ„āļģāļ‚āļ­āļ—āļĩāđˆāļ–āļđāļāļ•āļĢāļ§āļˆāļŠāļ­āļš
metric_alert_history - āļ›āļĢāļ°āļ§āļąāļ•āļīāļ„āļģāđ€āļ•āļ·āļ­āļ™āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž
log_query - āļ•āļēāļĢāļēāļ‡āļšāļĢāļīāļāļēāļĢāļŠāļģāļŦāļĢāļąāļšāļˆāļąāļ”āđ€āļāđ‡āļšāļšāļąāļ™āļ—āļķāļāļāļēāļĢāđāļĒāļāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļˆāļēāļāđ„āļŸāļĨāđŒāļšāļąāļ™āļ—āļķāļ PostgreSQL āļ—āļĩāđˆāļ”āļēāļ§āļ™āđŒāđ‚āļŦāļĨāļ”āļˆāļēāļ AWS
āļžāļ·āđ‰āļ™āļāļēāļ™ - āļžāļēāļĢāļēāļĄāļīāđ€āļ•āļ­āļĢāđŒāļ‚āļ­āļ‡āļŠāđˆāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļĩāđˆāđƒāļŠāđ‰āđ€āļ›āđ‡āļ™āļāļēāļ™
āļ”āđˆāļēāļ™ - āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļēāđ€āļĄāļ•āļĢāļīāļāļŠāļģāļŦāļĢāļąāļšāļ•āļĢāļ§āļˆāļŠāļ­āļšāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ
āļ”āđˆāļēāļ™_alert_history - āļ›āļĢāļ°āļ§āļąāļ•āļīāļāļēāļĢāđ€āļ•āļ·āļ­āļ™āļ‚āļ­āļ‡āļ•āļąāļ§āļŠāļĩāđ‰āļ§āļąāļ”āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļŠāļ–āļēāļ™āļ°āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ
pg_stat_db_queries — āļ•āļēāļĢāļēāļ‡āļšāļĢāļīāļāļēāļĢāļ‚āļ­āļ‡āļ„āļģāļ‚āļ­āļ—āļĩāđˆāđƒāļŠāđ‰āļ‡āļēāļ™āļ­āļĒāļđāđˆ
āļšāļąāļ™āļ—āļķāļāļāļīāļˆāļāļĢāļĢāļĄ â€” āļ•āļēāļĢāļēāļ‡āļšāļĢāļīāļāļēāļĢāļšāļąāļ™āļ—āļķāļāļāļīāļˆāļāļĢāļĢāļĄ
āļāļąāļšāļ”āļąāļ - āļ•āļēāļĢāļēāļ‡āļšāļĢāļīāļāļēāļĢāļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļēāļāļąāļšāļ”āļąāļ

āļ‚āļąāđ‰āļ™āļ—āļĩāđˆ 1 - āļĢāļ§āļšāļĢāļ§āļĄāļŠāļ–āļīāļ•āļīāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđāļĨāļ°āļĢāļąāļšāļĢāļēāļĒāļ‡āļēāļ™

āļ•āļēāļĢāļēāļ‡āđƒāļŠāđ‰āđ€āļžāļ·āđˆāļ­āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļēāļ‡āļŠāļ–āļīāļ•āļī pg_stat_history
āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ•āļēāļĢāļēāļ‡ pg_stat_history

                                          āļ•āļēāļĢāļēāļ‡ "public.pg_stat_history" āļ„āļ­āļĨāļąāļĄāļ™āđŒ | āļžāļīāļĄāļžāđŒ | āļ•āļąāļ§āđāļāđ‰āđ„āļ‚ ---------------------+-------------------- --+---- -------------------------------- āļĢāļŦāļąāļŠ | āļˆāļģāļ™āļ§āļ™āđ€āļ•āđ‡āļĄ | āđ„āļĄāđˆāđƒāļŠāđˆ null āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™ nextval('pg_stat_history_id_seq'::regclass) snapshot_timestamp | āļāļēāļĢāļ›āļĢāļ°āļ—āļąāļšāđ€āļ§āļĨāļēāđ‚āļ”āļĒāđ„āļĄāđˆāļĄāļĩāđ€āļ‚āļ•āđ€āļ§āļĨāļē | āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ_id | āļˆāļģāļ™āļ§āļ™āđ€āļ•āđ‡āļĄ | dbid | āļ­āļ­āļĒāļ”āđŒ | āļĢāļŦāļąāļŠāļœāļđāđ‰āđƒāļŠāđ‰ | āļ­āļ­āļĒāļ”āđŒ | āļĢāļŦāļąāļŠāđāļšāļšāļŠāļ­āļšāļ–āļēāļĄ | āļšāļīāđŠāļāļ­āļīāļ™āļ—āđŒ | āđāļšāļšāļŠāļ­āļšāļ–āļēāļĄ | āļ‚āđ‰āļ­āļ„āļ§āļēāļĄ | āđ‚āļ—āļĢ | āļšāļīāđŠāļāļ­āļīāļ™āļ—āđŒ | 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" āļ„āļĩāļĒāđŒāļŦāļĨāļąāļ btree (id) "database_idx" btree (database_id) "queryid_idx" btree (queryid) "snapshot_timestamp_idx" btree (snapshot_timestamp) āļ‚āđ‰āļ­āļˆāļģāļāļąāļ”āļ„āļĩāļĒāđŒāļ•āđˆāļēāļ‡āļ›āļĢāļ°āđ€āļ—āļĻ: "database_id_fk" FOREIGN KEY (database_id) REFERENCES āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ (id ) āđ€āļĄāļ·āđˆāļ­āļĨāļšāļĨāļģāļ”āļąāļš

āļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ„āļļāļ“āđ€āļŦāđ‡āļ™ āļ•āļēāļĢāļēāļ‡āđ€āļ›āđ‡āļ™āđ€āļžāļĩāļĒāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļĄāļļāļĄāļĄāļ­āļ‡āļŠāļ°āļŠāļĄ 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 ;

āļ”āļĩ.āļšāļĩ.āđ„āļ—āļĄāđŒ

to_char(āļŠāđˆāļ§āļ‡āđ€āļ§āļĨāļē '1 āļĄāļīāļĨāļĨāļīāļ§āļīāļ™āļēāļ—āļĩ' * pg_total_stat_history_rec.total_time, 'HH24:MI:SS.MS')

āđ€āļ§āļĨāļē I/O

to_char(āļŠāđˆāļ§āļ‡āđ€āļ§āļĨāļē '1 āļĄāļīāļĨāļĨāļīāļ§āļīāļ™āļēāļ—āļĩ' * ( pg_total_stat_history_rec.blk_read_time + pg_total_stat_history_rec.blk_write_time ), 'HH24:MI:SS.MS')

TOP10 SQL āđ‚āļ”āļĒ total_time

āļāļēāļĢāļŠāļ­āļšāļŠāļ§āļ™

SELECT 
  queryid , 
  SUM(calls) AS calls ,
  SUM(total_time)  AS total_time  	
FROM 
  pg_stat_history
WHERE 
  queryid IS NOT NULL AND 
  database_id = DATABASE_ID AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT 
GROUP BY queryid 
ORDER BY 3 DESC 
LIMIT 10
-------------------------------------------------- ------------------------------------ | TOP10 SQL āļ•āļēāļĄāđ€āļ§āļĨāļēāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļ—āļąāđ‰āļ‡āļŦāļĄāļ” | #| āļĢāļŦāļąāļŠāđāļšāļšāļŠāļ­āļšāļ–āļēāļĄ| āđ‚āļ—āļĢ| āđ‚āļ—āļĢ %| total_time (āļĄāļīāļĨāļĨāļīāļ§āļīāļ™āļēāļ—āļĩ) | 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
-------------------------------------------------- -------------------------------------- | 10 āļ­āļąāļ™āļ”āļąāļšāđāļĢāļāļ‚āļ­āļ‡ SQL āļ•āļēāļĄāđ€āļ§āļĨāļē I/O āļ—āļąāđ‰āļ‡āļŦāļĄāļ” | #| āļĢāļŦāļąāļŠāđāļšāļšāļŠāļ­āļšāļ–āļēāļĄ| āđ‚āļ—āļĢ| āđ‚āļ—āļĢ %| āđ€āļ§āļĨāļē I/O (āļĄāļīāļĨāļĨāļīāļ§āļīāļ™āļēāļ—āļĩ)|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 āļ•āļēāļĄāđ€āļ§āļĨāļēāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļŠāļđāļ‡āļŠāļļāļ” | #| āļ āļēāļžāļĢāļ§āļĄ| āļĢāļŦāļąāļŠāļŠāđāļ™āļ›āļŠāļ­āļ•| āļĢāļŦāļąāļŠāđāļšāļšāļŠāļ­āļšāļ–āļēāļĄ| max_time (āļĄāļīāļĨāļĨāļīāļ§āļīāļ™āļēāļ—āļĩ) +----+----------+-----------+--------- --+---------------------------------------- | 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 āļ™.) | 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 āļ­āđˆāļēāļ™/āđ€āļ‚āļĩāļĒāļ™

āļāļēāļĢāļŠāļ­āļšāļŠāļ§āļ™

SELECT 
  id AS snapshotid , 
  queryid ,
  snapshot_timestamp , 
  shared_blks_read , 
  shared_blks_written 
FROM 
  pg_stat_history
WHERE 
  queryid IS NOT NULL AND 
  database_id = DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND
  ( shared_blks_read > 0 OR shared_blks_written > 0 )
ORDER BY 4 DESC  , 5 DESC 
LIMIT 10
-------------------------------------------------- ------------------------------------ | TOP10 SQL āļ•āļēāļĄāļšāļąāļŸāđ€āļŸāļ­āļĢāđŒāļ—āļĩāđˆāđƒāļŠāđ‰āļĢāđˆāļ§āļĄāļāļąāļ™ āļ­āđˆāļēāļ™/āđ€āļ‚āļĩāļĒāļ™ | #| āļ āļēāļžāļĢāļ§āļĄ| āļĢāļŦāļąāļŠāļŠāđāļ™āļ›āļŠāļ­āļ•| āļĢāļŦāļąāļŠāđāļšāļšāļŠāļ­āļšāļ–āļēāļĄ| āļšāļĨāđ‡āļ­āļāļ—āļĩāđˆāđƒāļŠāđ‰āļĢāđˆāļ§āļĄāļāļąāļ™āļ­āđˆāļēāļ™| āļšāļĨāđ‡āļ­āļāļ—āļĩāđˆāđƒāļŠāđ‰āļĢāđˆāļ§āļĄāļāļąāļ™āđ€āļ‚āļĩāļĒāļ™ +----+----------+----------+--------- -+---------------------+-------------------- | 1| 04.04.2019/17/00 4153:821760255| 797308| 0| 2| 04.04.2019 | 16| 00/4146/821760255 797308:0| 3| 05.04.2019| 01| 03 | 4169| 655729273/797158/0 4:04.04.2019| 16| 00| 4144| 4152624390 | 756514| 0/5/04.04.2019 17:00| 4151| 4152624390| 756514| 0 | 6| 04.04.2019/17/00 4150:2460318461| 734117| 0| 7| 04.04.2019 | 17| 00/4155/3644780286 52973:0| 8| 05.04.2019| 01| 03 | 4168| 1053044345/52818/0 9:04.04.2019| 15| 00| 4141| 2194493487 | 52813| 0/10/04.04.2019 16:00| 4147| 2194493487| 52813| 0 | XNUMX| XNUMX/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX| XNUMX | XNUMX| XNUMX/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX| XNUMX ------------------------------------------------- -------------------------------------------------

āļŪāļīāļŠāđ‚āļ•āđāļāļĢāļĄāļ‚āļ­āļ‡āļāļēāļĢāļāļĢāļ°āļˆāļēāļĒāđāļšāļšāļŠāļ­āļšāļ–āļēāļĄāļ•āļēāļĄāđ€āļ§āļĨāļēāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļŠāļđāļ‡āļŠāļļāļ”

āļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­

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

SELECT 
  SUM(calls) AS calls
FROM 
  pg_stat_history 
WHERE 
  queryid IS NOT NULL AND
  database_id =DATABASE_ID  AND
  snapshot_timestamp BETWEEN BEGIN_TIMEPOINT AND END_TIMEPOINT AND 
  ( max_time >= hist_current_min AND  max_time < hist_current_max ) ;
|------------------------------------------------- ---------------------------------------- | MAX_TIME āļŪāļīāļŠāđ‚āļ•āđāļāļĢāļĄ | āđ‚āļ—āļĢāļ—āļąāđ‰āļ‡āļŦāļĄāļ” : 33851920 | āđ€āļ§āļĨāļēāļ‚āļąāđ‰āļ™āļ•āđˆāļģ : 00:00:01.063 | āđ€āļ§āļĨāļēāļŠāļđāļ‡āļŠāļļāļ” : 00:02:01.869 ------------------------------------------ ---------------------------- | āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ‚āļąāđ‰āļ™āļ•āđˆāļģ| āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļŠāļđāļ‡āļŠāļļāļ”| āđ‚āļ—āļĢ +-------------------------------- +------------ ---------------------+--------- | 00:00:01.063( 1063.830 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

āļ āļēāļžāļĢāļ§āļĄ 10 āļ­āļąāļ™āļ”āļąāļšāđāļĢāļāļ•āļēāļĄāļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļ„āđ‰āļ™āļŦāļēāļ•āđˆāļ­āļ§āļīāļ™āļēāļ—āļĩ

āļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­

--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
|------------------------------------------------- ---------------------------------------- | āļ āļēāļžāļĢāļ§āļĄ 10 āļ­āļąāļ™āļ”āļąāļšāđāļĢāļāđ€āļĢāļĩāļĒāļ‡āļĨāļģāļ”āļąāļšāļ•āļēāļĄāļ•āļąāļ§āđ€āļĨāļ‚ QueryPerSeconds -------------------------------------------- -------------------------------------------- ------ ------------------------------------------- | #| āļ āļēāļžāļĢāļ§āļĄ| āļĢāļŦāļąāļŠāļŠāđāļ™āļ›āļŠāļ­āļ•| āđ‚āļ—āļĢ| āđ€āļ§āļĨāļē db āļ—āļąāđ‰āļ‡āļŦāļĄāļ”| āļ„āļīāļ§āļžāļĩāđ€āļ­āļŠ | āđ€āļ§āļĨāļē 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:14( 00 ms.)| 4137| 2397326:00:04( 43.033 ms.)| .283033.854 | 665.924| 00/00/00.024 24.505:009| 7| 04.04.2019| 15:00:4139( 2394416 ms.)| 00| 04:51.435:291435.010( 665.116 ms.)| .00 | 00| 12.025/12025.895/4.126 8:04.04.2019| 13| 00| 4135:2373043:00( 04 ms.)| 26.791| 266791.988:659.179:00( 00 ms.)| 00.064 | 64.261| 024/9/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 | 10| 04.04.2019/18/01 4157:1145596| 00| 01| 19.217:79217.372:313.004( 00 ms.)| 00| 01.319:1319.676:1.666( XNUMX ms.)| XNUMX | XNUMX| XNUMX/XNUMX/XNUMX XNUMX:XNUMX| XNUMX| XNUMX| XNUMX:XNUMX:XNUMX( XNUMX ms.)| XNUMX| XNUMX:XNUMX:XNUMX( XNUMX ms.)| XNUMX

āļ›āļĢāļ°āļ§āļąāļ•āļīāļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļĢāļēāļĒāļŠāļąāđˆāļ§āđ‚āļĄāļ‡āļžāļĢāđ‰āļ­āļĄ QueryPerSeconds āđāļĨāļ° I/O Time

āļāļēāļĢāļŠāļ­āļšāļŠāļ§āļ™

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

āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļ‚āļ­āļ‡ SQL āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ—āļĩāđˆāđ€āļĨāļ·āļ­āļ

āļāļēāļĢāļŠāļ­āļšāļŠāļ§āļ™

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

āļ—āļąāđ‰āļ‡āļŦāļĄāļ”

āļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆāļ„āļļāļ“āđ€āļŦāđ‡āļ™ āļ”āđ‰āļ§āļĒāļ§āļīāļ˜āļĩāļāļēāļĢāļ—āļĩāđˆāļ„āđˆāļ­āļ™āļ‚āđ‰āļēāļ‡āļ‡āđˆāļēāļĒ āļ„āļļāļ“āļˆāļ°āđ„āļ”āđ‰āļĢāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāđ€āļ›āđ‡āļ™āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļĄāļēāļāļĄāļēāļĒāđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļ›āļĢāļīāļĄāļēāļ“āļ‡āļēāļ™āđāļĨāļ°āļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ

āļšāļąāļ™āļ—āļķāļ:āļŦāļēāļāļ„āļļāļ“āđāļāđ‰āđ„āļ‚āļĢāļŦāļąāļŠāđāļšāļšāļŠāļ­āļšāļ–āļēāļĄāđƒāļ™āđāļšāļšāļŠāļ­āļšāļ–āļēāļĄ āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‰āļĢāļąāļšāļ›āļĢāļ°āļ§āļąāļ•āļīāļŠāļģāļŦāļĢāļąāļšāļ„āļģāļ‚āļ­āđāļĒāļāļ•āđˆāļēāļ‡āļŦāļēāļ (āđ€āļžāļ·āđˆāļ­āļ›āļĢāļ°āļŦāļĒāļąāļ”āļžāļ·āđ‰āļ™āļ—āļĩāđˆ āļĢāļēāļĒāļ‡āļēāļ™āļŠāļģāļŦāļĢāļąāļšāļ„āļģāļ‚āļ­āđāļĒāļāļ•āđˆāļēāļ‡āļŦāļēāļāļˆāļ°āļ–āļđāļāļĨāļ°āđ„āļ§āđ‰)

āļ”āļąāļ‡āļ™āļąāđ‰āļ™āļˆāļķāļ‡āļĄāļĩāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļēāļ‡āļŠāļ–āļīāļ•āļīāđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļāļēāļĢāļ„āđ‰āļ™āļŦāļēāđāļĨāļ°āļĢāļ§āļšāļĢāļ§āļĄāđ„āļ§āđ‰
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđāļĢāļ "āļāļēāļĢāļĢāļ§āļšāļĢāļ§āļĄāļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļ–āļīāļ•āļī" āđ€āļŠāļĢāđ‡āļˆāļŠāļĄāļšāļđāļĢāļ“āđŒ

āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āđ„āļ›āļĒāļąāļ‡āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆāļŠāļ­āļ‡ - "āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļēāđ€āļĄāļ•āļĢāļīāļāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž"
āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡āđāļšāļšāļŠāļ­āļšāļ–āļēāļĄ PostgreSQL āļŠāđˆāļ§āļ™āļ—āļĩāđˆ 1 - āļāļēāļĢāļĢāļēāļĒāļ‡āļēāļ™

āđāļ•āđˆāļ™āļąāđˆāļ™āđ€āļ›āđ‡āļ™āļ­āļĩāļāđ€āļĢāļ·āđˆāļ­āļ‡

āļˆāļ°āļĒāļąāļ‡āļ„āļ‡ ...

āļ—āļĩāđˆāļĄāļē: will.com

āļ‹āļ·āđ‰āļ­āđ‚āļŪāļŠāļ•āļīāđ‰āļ‡āļ—āļĩāđˆāđ€āļŠāļ·āđˆāļ­āļ–āļ·āļ­āđ„āļ”āđ‰āļŠāļģāļŦāļĢāļąāļšāđ„āļ‹āļ•āđŒāļ—āļĩāđˆāļĄāļĩāļāļēāļĢāļ›āđ‰āļ­āļ‡āļāļąāļ™ DDoS āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ VPS VDS ðŸ”Ĩ āļ‹āļ·āđ‰āļ­āļšāļĢāļīāļāļēāļĢāđ€āļ§āđ‡āļšāđ‚āļŪāļŠāļ•āļīāđ‰āļ‡āļ—āļĩāđˆāđ€āļŠāļ·āđˆāļ­āļ–āļ·āļ­āđ„āļ”āđ‰ āļžāļĢāđ‰āļ­āļĄāļĢāļ°āļšāļšāļ›āđ‰āļ­āļ‡āļāļąāļ™ DDoS āđāļĨāļ°āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ VPS/VDS | ProHoster