PostgreSQL-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก ASH-แƒ˜แƒก แƒแƒœแƒแƒšแƒแƒ’แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒ›แƒชแƒ“แƒ”แƒšแƒแƒ‘แƒ

แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒ’แƒแƒœแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒ

PostgreSQL แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒซแƒแƒšแƒ–แƒ”แƒ“ แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒแƒฅแƒขแƒ˜แƒ•แƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ˜แƒก, แƒ™แƒ”แƒ แƒซแƒแƒ“, แƒšแƒแƒ“แƒ˜แƒœแƒ˜แƒก, แƒฉแƒแƒ™แƒ”แƒขแƒ•แƒ˜แƒกแƒ แƒ“แƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒกแƒขแƒแƒขแƒ˜แƒกแƒขแƒ˜แƒ™แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒก แƒฃแƒœแƒแƒ แƒ˜.

แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜

แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒฃแƒšแƒ˜ แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ แƒแƒœ "AWR Postgres-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก": แƒซแƒแƒšแƒ˜แƒแƒœ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก pg_stat_activity แƒ“แƒ pg_locks แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ.

pgsentinel แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ :
ยซแƒงแƒ•แƒ”แƒšแƒ แƒ“แƒแƒ’แƒ แƒแƒ•แƒ˜แƒšแƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ RAM-แƒจแƒ˜, แƒฎแƒแƒšแƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ แƒ แƒ”แƒ’แƒฃแƒšแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ‘แƒแƒšแƒ แƒจแƒ”แƒœแƒแƒฎแƒฃแƒšแƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒ—.

แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ queryid แƒ•แƒ”แƒšแƒ˜ - แƒ˜แƒ’แƒ˜แƒ•แƒ” queryid pg_stat_statements แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ (แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ แƒ˜ แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ).ยซ

แƒ”แƒก, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒซแƒแƒšแƒ˜แƒแƒœ แƒ“แƒแƒ’แƒ•แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒฃแƒ แƒ˜ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ˜แƒโ€œ.แƒงแƒ•แƒ”แƒšแƒ แƒ“แƒแƒ’แƒ แƒแƒ•แƒ˜แƒšแƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ RAM-แƒจแƒ˜ โ€œ, แƒ”.แƒ˜. แƒแƒ แƒ˜แƒก แƒ–แƒ”แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ” แƒ‘แƒแƒ–แƒแƒ–แƒ”. แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ•แƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ แƒ“แƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒกแƒขแƒแƒขแƒ˜แƒกแƒขแƒ˜แƒ™แƒ. แƒ˜แƒ›แƒแƒ—. แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ แƒ–แƒแƒ’แƒแƒ“แƒแƒ“ แƒแƒ แƒแƒกแƒ แƒฃแƒšแƒ˜แƒ: โ€แƒฏแƒ”แƒ  แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒ–แƒ แƒžแƒแƒ™แƒ”แƒขแƒ˜ แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ›แƒ˜แƒ–แƒแƒœแƒจแƒ”แƒฌแƒแƒœแƒ˜แƒšแƒ˜แƒ แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ— แƒฌแƒงแƒแƒ แƒแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ—แƒแƒ•แƒแƒ“ แƒ›แƒแƒแƒฌแƒงแƒแƒ— แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ. แƒ—แƒฅแƒ•แƒ”แƒœ แƒฏแƒ”แƒ  แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒแƒ— "แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒก" แƒžแƒแƒ™แƒ”แƒขแƒ˜ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ“แƒแƒแƒงแƒ”แƒœแƒแƒ— แƒ’แƒ–แƒ pg_config PATH แƒชแƒ•แƒšแƒแƒ“แƒจแƒ˜.".

แƒ–แƒแƒ’แƒแƒ“แƒแƒ“ แƒ“แƒ˜แƒ“แƒ˜ แƒแƒฃแƒ แƒ–แƒแƒฃแƒ แƒ˜แƒ แƒ“แƒ แƒกแƒ”แƒ แƒ˜แƒแƒ–แƒฃแƒšแƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒ˜แƒก แƒ‘แƒแƒ–แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ—แƒแƒœ แƒ•แƒ”แƒ แƒแƒคแƒ”แƒ แƒ˜ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ. แƒฉแƒ•แƒ”แƒœ แƒ˜แƒกแƒ”แƒ• แƒฃแƒœแƒ“แƒ แƒ›แƒแƒ•แƒ˜แƒคแƒ˜แƒฅแƒ แƒแƒ— แƒ แƒแƒฆแƒแƒช แƒฉแƒ•แƒ”แƒœแƒ˜.

แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ.

แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ“แƒ˜แƒ“แƒ˜ แƒ›แƒแƒชแƒฃแƒšแƒแƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒแƒ แƒแƒกแƒ แƒฃแƒšแƒ˜ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒกแƒขแƒแƒขแƒ˜แƒ แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒแƒ“ แƒกแƒแƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ›แƒ˜แƒ–แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒกแƒแƒ แƒ’แƒแƒœแƒ™แƒฃแƒ—แƒ•แƒœแƒ˜แƒšแƒ˜, แƒฃแƒคแƒ แƒ แƒ—แƒ”แƒ–แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒจแƒฃแƒแƒšแƒ”แƒ“แƒฃแƒ แƒ˜ แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜แƒก แƒ”แƒ แƒ—แƒแƒ‘แƒšแƒ˜แƒแƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ—.
แƒฃแƒคแƒ แƒ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒกแƒแƒšแƒ แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ—, แƒœแƒแƒฌแƒ˜แƒš-แƒœแƒแƒฌแƒ˜แƒš แƒ›แƒแƒ›แƒ–แƒแƒ“แƒ“แƒ”แƒ‘แƒ

แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜

แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ“แƒ”แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ›แƒแƒ’แƒชแƒ”แƒ›แƒ— แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒแƒ—:

pg_stat_activity แƒœแƒแƒฎแƒ•แƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ
แƒกแƒ”แƒกแƒ˜แƒ˜แƒก แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ•แƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ pg_locks แƒฎแƒ”แƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ- แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ“แƒ”แƒก แƒ’แƒแƒ•แƒšแƒ”แƒœแƒ แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒ–แƒ”.

แƒ–แƒแƒ’แƒแƒ“แƒ˜ แƒแƒ–แƒ แƒ˜โ€“ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒจแƒ”แƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒแƒ’แƒ”แƒœแƒขแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒ แƒ แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜. แƒ“แƒ˜แƒแƒฎ, แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ™แƒแƒ แƒ’แƒ•แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒ™แƒ แƒ˜แƒขแƒ˜แƒ™แƒฃแƒšแƒ˜ แƒ›แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ  แƒแƒ แƒ˜แƒก แƒ’แƒแƒ•แƒšแƒ”แƒœแƒ แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒ–แƒ” แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ“แƒ˜แƒกแƒ™แƒ˜แƒก แƒกแƒ˜แƒ•แƒ แƒชแƒ˜แƒก แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ—. แƒ“แƒ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒแƒฃแƒ–แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ’แƒแƒ•แƒšแƒ”แƒœแƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒ–แƒ” แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜แƒ.

แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ”แƒขแƒแƒžแƒ”แƒ‘แƒ˜

1.แƒ›แƒแƒ›แƒกแƒแƒฎแƒฃแƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ’แƒ˜แƒ“แƒ”แƒ‘แƒ˜

แƒชแƒแƒšแƒ™แƒ” แƒกแƒฅแƒ”แƒ›แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒแƒ“, แƒ แƒแƒ—แƒ แƒแƒ  แƒ’แƒแƒ แƒ—แƒฃแƒšแƒ“แƒ”แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜.

DROP SCHEMA IF EXISTS activity_hist ;
CREATE SCHEMA activity_hist AUTHORIZATION monitor ;

แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ: แƒกแƒฅแƒ”แƒ›แƒ แƒแƒ  แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜.

pg_stat_activity แƒœแƒแƒฎแƒ•แƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ

แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ pg_stat_activity แƒฎแƒ”แƒ“แƒ˜แƒก แƒแƒ›แƒŸแƒแƒ›แƒ˜แƒœแƒ“แƒ”แƒšแƒ˜ แƒกแƒœแƒ”แƒžแƒจแƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒแƒ“

activity_hist.history_pg_stat_activity :

--ACTIVITY_HIST.HISTORY_PG_STAT_ACTIVITY
DROP TABLE IF EXISTS activity_hist.history_pg_stat_activity;
CREATE TABLE activity_hist.history_pg_stat_activity
(
  timepoint timestamp without time zone ,
  datid             oid  , 
  datname           name ,
  pid               integer,
  usesysid          oid    ,
  usename           name   ,
  application_name  text   ,
  client_addr       inet   ,
  client_hostname   text   ,
  client_port       integer,
  backend_start     timestamp with time zone ,
  xact_start        timestamp with time zone ,
  query_start       timestamp with time zone ,
  state_change      timestamp with time zone ,
  wait_event_type   text ,                     
  wait_event        text ,                   
  state             text ,                  
  backend_xid       xid  ,                 
  backend_xmin      xid  ,                
  query             text ,               
  backend_type      text ,  
  queryid           bigint
);

แƒฉแƒแƒกแƒ›แƒ˜แƒก แƒ“แƒแƒกแƒแƒฉแƒฅแƒแƒ แƒ”แƒ‘แƒšแƒแƒ“ - แƒแƒ แƒแƒœแƒแƒ˜แƒ แƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒ•แƒ”แƒ‘แƒ˜.

แƒ—แƒแƒ•แƒแƒ“ แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ“แƒแƒœแƒแƒฌแƒ”แƒ•แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜:

activity_hist.archive_pg_stat_activity:

DROP TABLE IF EXISTS activity_hist.archive_pg_stat_activity;
CREATE TABLE activity_hist.archive_pg_stat_activity
(
  timepoint timestamp without time zone ,
  datid             oid  , 
  datname           name ,
  pid               integer,
  usesysid          oid    ,
  usename           name   ,
  application_name  text   ,
  client_addr       inet   ,
  client_hostname   text   ,
  client_port       integer,
  backend_start     timestamp with time zone ,
  xact_start        timestamp with time zone ,
  query_start       timestamp with time zone ,
  state_change      timestamp with time zone ,
  wait_event_type   text ,                     
  wait_event        text ,                   
  state             text ,                  
  backend_xid       xid  ,                 
  backend_xmin      xid  ,                
  query             text ,               
  backend_type      text ,
  queryid           bigint
)
PARTITION BY RANGE (timepoint);

แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ แƒฉแƒแƒกแƒ›แƒ˜แƒก แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒ›แƒแƒ แƒ—, แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒ“แƒแƒกแƒแƒฉแƒฅแƒแƒ แƒ”แƒ‘แƒšแƒแƒ“.

แƒกแƒ”แƒกแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ•แƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ

แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒกแƒ”แƒกแƒ˜แƒ˜แƒก แƒฉแƒแƒ™แƒ”แƒขแƒ•แƒ˜แƒก แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ™แƒแƒ“แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒแƒ“:

activity_hist.history_locking :

--ACTIVITY_HIST.HISTORY_LOCKING
DROP TABLE IF EXISTS activity_hist.history_locking;
CREATE TABLE activity_hist.history_locking
(
	timepoint timestamp without time zone ,
	locktype text ,
	relation oid ,
	mode text ,
	tid xid ,
	vtid text ,
	pid integer ,
	blocking_pids integer[] ,
	granted boolean
);

แƒแƒกแƒ”แƒ•แƒ”, แƒฉแƒแƒกแƒ›แƒ˜แƒก แƒ“แƒแƒกแƒแƒฉแƒฅแƒแƒ แƒ”แƒ‘แƒšแƒแƒ“, แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜ แƒแƒœ แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒ•แƒ”แƒ‘แƒ˜.

แƒ—แƒแƒ•แƒแƒ“ แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ“แƒแƒœแƒแƒฌแƒ”แƒ•แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜:

activity_hist.archive_locking:

DROP TABLE IF EXISTS activity_hist.archive_locking;
CREATE TABLE activity_hist.archive_locking
(
	timepoint timestamp without time zone ,
	locktype text ,
	relation oid ,
	mode text ,
	tid xid ,
	vtid text ,
	pid integer ,
	blocking_pids integer[] ,
	granted boolean	
)
PARTITION BY RANGE (timepoint);

แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ แƒฉแƒแƒกแƒ›แƒ˜แƒก แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒ›แƒแƒ แƒ—, แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒ“แƒแƒกแƒแƒฉแƒฅแƒแƒ แƒ”แƒ‘แƒšแƒแƒ“.

2. แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ˜แƒก แƒจแƒ”แƒ•แƒกแƒ”แƒ‘แƒ

แƒœแƒแƒฎแƒ•แƒ˜แƒก แƒกแƒœแƒ”แƒžแƒจแƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒจแƒ”แƒกแƒแƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ bash แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒก plpgsql แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒก.

แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ—_แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”_แƒแƒฅแƒขแƒ˜แƒ•แƒแƒ‘แƒ.แƒจ

#!/bin/bash
#########################################################
#get_current_activity.sh

ERROR_FILE='/home/demon/get_current_activity'$(date +%Y%m%d-)'T'$(date +%H)$(date +%M)$(date +%S)
host=$1
s_name=$2
s_pass=$3

psql  -A -t -q -v ON_ERROR_STOP=1 -c "SELECT activity_hist.get_current_activity( '$host' , '$s_name' , '$s_pass' )" >/dev/null 2>$ERROR_FILE

line_count=`cat $ERROR_FILE | wc -l`
if [[ $line_count != '0' ]];
then
    rm -f /home/demon/*.err >/dev/null 2>/dev/null
	cp $ERROR_FILE $ERROR_FILE'.err' >/dev/null 2>/dev/null  
fi
rm $ERROR_FILE >/dev/null 2>/dev/null
exit 0

plpgsql dblink แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒฌแƒ•แƒ“แƒ”แƒ‘แƒ แƒฎแƒ”แƒ“แƒ”แƒ‘แƒก แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒ“แƒ แƒฉแƒแƒกแƒ›แƒ แƒ แƒ˜แƒ’แƒ”แƒ‘แƒ˜ แƒ›แƒแƒ›แƒกแƒแƒฎแƒฃแƒ แƒ”แƒ‘แƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜ แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜.

get_current_activity.sql

CREATE OR REPLACE FUNCTION activity_hist.get_current_activity( current_host text , current_s_name text , current_s_pass text ) RETURNS BOOLEAN AS $$
DECLARE 
  database_rec record;
  dblink_str text ;
BEGIN   

	EXECUTE 'SELECT dblink_connect(''LINK1'',''host='||current_host||' port=5432 dbname=postgres'||
	                                         ' user='||current_s_name||' password='||current_s_pass|| ' '')';



--------------------------------------------------------------------
--GET pg_stat_activity stats
	INSERT INTO activity_hist.history_pg_stat_activity
	(
		SELECT * FROM dblink('LINK1',
			'SELECT 
			now() , 
			datid             , 
			datname           ,
			pid               ,
			usesysid              ,
			usename              ,
			application_name     ,
			client_addr          ,
			client_hostname      ,
			client_port       ,
			backend_start         ,
			xact_start            ,
			query_start           ,
			state_change          ,
			wait_event_type    ,                     
			wait_event         ,                   
			state              ,                  
			backend_xid         ,                 
			backend_xmin        ,                
			query              ,               
			backend_type   			
		FROM pg_stat_activity
		') 
		AS t (
		    timepoint 		  timestamp without time zone ,			
			datid             oid  , 
			datname           name ,
			pid               integer,
			usesysid          oid    ,
			usename           name   ,
			application_name  text   ,
			client_addr       inet   ,
			client_hostname   text   ,
			client_port       integer,
			backend_start     timestamp with time zone ,
			xact_start        timestamp with time zone ,
			query_start       timestamp with time zone ,
			state_change      timestamp with time zone ,
			wait_event_type   text ,                     
			wait_event        text ,                   
			state             text ,                  
			backend_xid       xid  ,                 
			backend_xmin      xid  ,                
			query             text ,               
			backend_type      text 			
		)
	);

---------------------------------------	
--ACTIVITY_HIST.HISTORY_LOCKING	
	INSERT INTO activity_hist.history_locking
	(
		SELECT * FROM dblink('LINK1',
			'SELECT 
			now() , 
			lock.locktype,
			lock.relation,
			lock.mode,
			lock.transactionid as tid,
			lock.virtualtransaction as vtid,
			lock.pid,
			pg_blocking_pids(lock.pid), 
			lock.granted
			FROM 	pg_catalog.pg_locks lock LEFT JOIN pg_catalog.pg_database db ON db.oid = lock.database
			WHERE NOT lock.pid = pg_backend_pid()	
		') 
		AS t (
			timepoint timestamp without time zone ,
			locktype text ,
			relation oid , 
			mode text ,
			tid xid ,
			vtid text ,
			pid integer ,
			blocking_pids integer[] ,
			granted boolean
		)
	);
	PERFORM dblink_disconnect('LINK1');
	
	RETURN TRUE ;
END
$$ LANGUAGE plpgsql;

แƒœแƒแƒฎแƒ•แƒ˜แƒก แƒกแƒœแƒ”แƒžแƒจแƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ systemd แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ แƒ“แƒ แƒแƒ แƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜:

pg_current_activity.service

# /etc/systemd/system/pg_current_activity.service
[Unit]
Description=Collect history of pg_stat_activity , pg_locks 
Wants=pg_current_activity.timer

[Service]
Type=forking
StartLimitIntervalSec=0
ExecStart=/home/postgres/pgutils/demon/get_current_activity.sh 10.124.70.40 postgres postgres

[Install]
WantedBy=multi-user.target

pg_current_activity.timer

# /etc/systemd/system/pg_current_activity.timer
[Unit]
Description=Run pg_current_activity.sh every 1 second
Requires=pg_current_activity.service

[Timer]
Unit=pg_current_activity.service
OnCalendar=*:*:0/1
AccuracySec=1

[Install]
WantedBy=timers.target

แƒ›แƒ˜แƒแƒœแƒ˜แƒญแƒ”แƒ— แƒฃแƒคแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ–แƒ”:
# chmod 755 pg_current_activity.timer
# chmod 755 pg_current_activity.service

แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒแƒ— แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜:
# systemctl daemon-reload
# systemctl แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ pg_current_activity.service

แƒแƒ›แƒ แƒ˜แƒ’แƒแƒ“, แƒœแƒแƒฎแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ แƒ’แƒ แƒแƒ•แƒ“แƒ”แƒ‘แƒ แƒฌแƒแƒ›แƒ˜แƒก แƒฌแƒแƒ›แƒจแƒ˜ แƒ™แƒแƒ“แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ—. แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ—แƒฃ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ˜แƒกแƒ” แƒ“แƒแƒ แƒฉแƒ”แƒ‘แƒ, แƒ›แƒแƒ’แƒ˜แƒ“แƒ”แƒ‘แƒ˜ แƒซแƒแƒšแƒ˜แƒแƒœ แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒ’แƒแƒ˜แƒ–แƒ แƒ“แƒ”แƒ‘แƒ แƒ–แƒแƒ›แƒ˜แƒ— แƒ“แƒ แƒ›แƒ”แƒข-แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒแƒ“ แƒžแƒ แƒแƒ“แƒฃแƒฅแƒขแƒ˜แƒฃแƒšแƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒฎแƒ“แƒ”แƒ‘แƒ.

แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒแƒ แƒฅแƒ˜แƒ•แƒ˜แƒก แƒแƒ แƒ’แƒแƒœแƒ˜แƒ–แƒ”แƒ‘แƒ.

3. แƒแƒ แƒฅแƒ˜แƒ•แƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ

แƒแƒ แƒฅแƒ˜แƒ•แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ“แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒ•แƒ˜*.

แƒงแƒแƒ•แƒ”แƒš แƒกแƒแƒแƒ—แƒจแƒ˜ แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒแƒฎแƒแƒšแƒ˜ แƒขแƒ˜แƒฎแƒ แƒ”แƒ‘แƒ˜, แƒฎแƒแƒšแƒ แƒซแƒ•แƒ”แƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ˜แƒก* แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ˜แƒก* แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ–แƒแƒ›แƒ แƒ“แƒ˜แƒ“แƒแƒ“ แƒแƒ  แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ แƒ“แƒ แƒฉแƒแƒกแƒ›แƒ˜แƒก แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ” แƒ“แƒ แƒแƒ—แƒ แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒแƒ  แƒ›แƒชแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ.

แƒแƒฎแƒแƒšแƒ˜ แƒกแƒ”แƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ plpgsql แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒ— activity_hist.archive_current_activity. แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ (แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ archive_pg_stat_activity แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก).

แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒ“แƒ แƒจแƒ”แƒแƒ•แƒกแƒ”แƒ— แƒแƒฎแƒแƒšแƒ˜ แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ

EXECUTE format(
'CREATE TABLE ' || partition_name || 
' PARTITION OF activity_hist.archive_pg_stat_activity FOR VALUES FROM ( %L ) TO ( %L ) ' , 
to_char(date_trunc('year', partition_min_range ),'YYYY')||'-'||
to_char(date_trunc('month', partition_min_range ),'MM')||'-'||
to_char(date_trunc('day', partition_min_range ),'DD')||' '||
to_char(date_trunc('hour', partition_min_range ),'HH24')||':00', 
to_char(date_trunc('year', partition_max_range ),'YYYY')||'-'||
to_char(date_trunc('month', partition_max_range ),'MM')||'-'||
to_char(date_trunc('day', partition_max_range ),'DD')||' '||
to_char(date_trunc('hour', partition_max_range ),'HH24')||':00'
);

INSERT INTO activity_hist.archive_pg_stat_activity
(
	SELECT 	* 
	FROM 	activity_hist.history_pg_stat_activity
	WHERE 	timepoint BETWEEN partition_min_range AND partition_max_range 		
);

แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ

EXECUTE format	(
'CREATE INDEX '||index_name||
' ON '||partition_name||' ( wait_event_type , backend_type , timepoint )' 
);

EXECUTE format	('CREATE INDEX '||index_name||
' ON '||partition_name||' ( wait_event_type , backend_type , timepoint , queryid )' 
);

แƒซแƒ•แƒ”แƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒฌแƒแƒจแƒšแƒ history_pg_stat_activity แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒ“แƒแƒœ

DELETE 
FROM 	activity_hist.history_pg_stat_activity
WHERE 	timepoint < partition_max_range;

แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ“แƒ แƒแƒ“แƒแƒ“แƒ แƒ แƒซแƒ•แƒ”แƒšแƒ˜ แƒกแƒ”แƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ˜แƒจแƒšแƒ”แƒ‘แƒ แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ แƒแƒกแƒแƒญแƒ˜แƒ แƒ.

แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒ›แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜

แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒ แƒแƒขแƒแƒ› แƒ™แƒ”แƒ—แƒ“แƒ”แƒ‘แƒ แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜? แƒ›แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ‘แƒฃแƒœแƒ“แƒแƒ•แƒœแƒแƒ“ แƒ›แƒแƒ’แƒแƒ’แƒแƒœแƒ”แƒ‘แƒ— Oracle-แƒ˜แƒก AWR-แƒก.

แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒแƒ—, แƒ แƒแƒ› แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ pg_stat_activity แƒ“แƒ pg_stat_statements แƒฎแƒ”แƒ“แƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก. แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ "queryid" แƒกแƒ•แƒ”แƒขแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ— "history_pg_stat_activity", "archive_pg_stat_activity" แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜. แƒกแƒ•แƒ”แƒขแƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒ˜ แƒกแƒชแƒ˜แƒšแƒ“แƒ”แƒ‘แƒ แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒคแƒแƒ แƒ’แƒšแƒ”แƒ‘แƒก แƒ“แƒ แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ แƒแƒฅ โˆ’ pg_stat_statements + pg_stat_activity + loq_query = pg_ash? .

CPU-แƒ˜แƒก แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒ˜ แƒ“แƒ แƒ แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก

แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ:

WITH hist AS
(
SELECT 
	aa.query ,aa.queryid ,			
	count(*) * interval '1 second' AS duration 
FROM 	activity_hist.archive_pg_stat_activity aa
WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND  pg_stat_history_end+(current_hour_diff * interval '1 hour')  AND backend_type = 'client backend' AND datname != 'postgres' AND	( aa.wait_event_type IS NULL  ) ANDaa.state = 'active'
GROUP BY aa.wait_event_type , aa.wait_event , aa.query ,aa.queryid		
UNION 
SELECT 
	ha.query ,ha.queryid,
	count(*) * interval '1 second' AS duration 
FROM 	activity_hist.history_pg_stat_activity_for_reports ha
WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour')  AND 	backend_type = 'client backend' AND datname != 'postgres' AND ( ha.wait_event_type IS NULL  )AND ha.state = 'active'
GROUP BY ha.wait_event_type , ha.wait_event , ha.query ,ha.queryid		
)
SELECT 	query , queryid , SUM( duration ) as duration 
FROM hist
GROUP BY  query , queryid 
ORDER BY 3 DESC

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜:

-------------------------------------------------------------------
| TOTAL CPU TIME FOR QUERIES : 07:47:36
+----+----------------------------------------+--------------------
|   #|                                 queryid|            duration
+----+----------------------------------------+--------------------
|   1|                      389015618226997618|            04:28:58
|   2|                                        |            01:07:29
|   3|                     1237430309438971376|            00:59:38
|   4|                     4710212362688288619|            00:50:48
|   5|                       28942442626229688|            00:15:50
|   6|                     9150846928388977274|            00:04:46
|   7|                    -6572922443698419129|            00:00:06
|   8|                                        |            00:00:01
+----+----------------------------------------+--------------------

แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒ‘แƒ–แƒ” แƒšแƒแƒ“แƒ˜แƒœแƒ˜แƒก แƒ“แƒ แƒ แƒกแƒฃแƒš

แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ:

WITH hist AS
(
SELECT 
	aa.query ,aa.queryid ,			
	count(*) * interval '1 second' AS duration 
FROM 	activity_hist.archive_pg_stat_activity aa
WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour')  AND 
	backend_type = 'client backend' AND datname != 'postgres' AND
	( aa.wait_event_type IS NOT NULL  ) 
GROUP BY aa.wait_event_type , aa.wait_event , aa.query ,aa.queryid		
UNION 
SELECT 
	ha.query ,ha.queryid,
	count(*) * interval '1 second' AS duration 
FROM 	activity_hist.history_pg_stat_activity_for_reports ha
WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour')  AND 
	backend_type = 'client backend' AND datname != 'postgres' AND				
	( ha.wait_event_type IS NOT NULL  )
GROUP BY ha.wait_event_type , ha.wait_event , ha.query ,ha.queryid		
)
SELECT 	query , queryid , SUM( duration ) as duration 
FROM hist
GROUP BY  query , queryid 
ORDER BY 3 DESC 

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“:

-------------------------------------------------------------------
| TOTAL WAITINGS TIME FOR QUERIES : 21:55:04
+----+----------------------------------------+--------------------
|   #|                                 queryid|            duration
+----+----------------------------------------+--------------------
|   1|                      389015618226997618|            16:19:05
|   2|                                        |            03:47:04
|   3|                     8085340880788646241|            00:40:20
|   4|                     4710212362688288619|            00:13:35
|   5|                     9150846928388977274|            00:12:25
|   6|                       28942442626229688|            00:11:32
|   7|                     1237430309438971376|            00:09:45
|   8|                     2649515222348904837|            00:09:37
|   9|                                        |            00:03:45
|  10|                     3167065002719415275|            00:02:20
|  11|                     5731212217001535134|            00:02:13
|  12|                     8304755792398128062|            00:01:31
|  13|                     2649515222348904837|            00:00:59
|  14|                     2649515222348904837|            00:00:22
|  15|                                        |            00:00:12
|  16|                     3422818749220588372|            00:00:08
|  17|                    -5730801771815999400|            00:00:03
|  18|                    -1473395109729441239|            00:00:02
|  19|                     2404820632950544954|            00:00:02
|  20|                    -6572922443698419129|            00:00:02
|  21|                     2369289265278398647|            00:00:01
|  22|                      180077086776069052|            00:00:01
+----+----------------------------------------+--------------------

แƒ”แƒšแƒแƒ“แƒ”แƒ‘แƒ แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒ‘แƒก

แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜:

WITH hist AS
(
SELECT 
	aa.wait_event_type , aa.wait_event 
FROM 	activity_hist.archive_pg_stat_activity aa
WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND 
	backend_type = 'client backend' AND datname != 'postgres' AND
	aa.wait_event IS NOT NULL 
GROUP BY aa.wait_event_type , aa.wait_event
UNION 
SELECT 
	ha.wait_event_type , ha.wait_event 
FROM 	activity_hist.history_pg_stat_activity_for_reports ha
WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND 
	backend_type = 'client backend' AND datname != 'postgres' AND
	ha.wait_event IS NOT NULL 
GROUP BY ha.wait_event_type , ha.wait_event		
)
SELECT 	wait_event_type , wait_event 
FROM hist
GROUP BY wait_event_type , wait_event
ORDER BY 1 ASC,2 ASC

----------------------------------------------------------------------

WITH hist AS
(
SELECT 
	aa.wait_event_type , aa.wait_event , aa.query ,aa.queryid ,			
	count(*) * interval '1 second' AS duration 
FROM 	activity_hist.archive_pg_stat_activity aa
WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND 
	backend_type = 'client backend' AND datname != 'postgres' AND
	( aa.wait_event_type = waitings_stat_rec.wait_event_type AND aa.wait_event = waitings_stat_rec.wait_event )
GROUP BY aa.wait_event_type , aa.wait_event , aa.query ,aa.queryid		
UNION 
SELECT 
	ha.wait_event_type , ha.wait_event , ha.query ,ha.queryid,
	count(*) * interval '1 second' AS duration 
FROM 	activity_hist.history_pg_stat_activity_for_reports ha
WHERE timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND 
	backend_type = 'client backend' AND datname != 'postgres' AND				
	( ha.wait_event_type = waitings_stat_rec.wait_event_type AND ha.wait_event = waitings_stat_rec.wait_event )
GROUP BY ha.wait_event_type , ha.wait_event , ha.query ,ha.queryid		
)
SELECT 	query , queryid , SUM( duration ) as duration 
FROM hist
GROUP BY  query , queryid 
ORDER BY 3 DESC

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜:

------------------------------------------------
| WAITINGS FOR QUERIES
+-----------------------------------------------
|                      wait_event_type = Client|
|                       wait_event = ClientRead|
|                        Total time  = 00:46:56|
------------------------------------------------
|    #|             queryid|            duration
+-----+--------------------+--------------------
|    1| 8085340880788646241|            00:40:20
|    2|                    |            00:03:45
|    3| 5731212217001535134|            00:01:53
|    4|                    |            00:00:12
|    5| 9150846928388977274|            00:00:09
|    6| 3422818749220588372|            00:00:08
|    7| 1237430309438971376|            00:00:06
|    8|   28942442626229688|            00:00:05
|    9| 4710212362688288619|            00:00:05
|   10|-5730801771815999400|            00:00:03
|   11| 8304755792398128062|            00:00:02
|   12|-6572922443698419129|            00:00:02
|   13|-1473395109729441239|            00:00:02
|   14| 2404820632950544954|            00:00:02
|   15|  180077086776069052|            00:00:01
|   16| 2369289265278398647|            00:00:01

+-----------------------------------------------
|                          wait_event_type = IO|
|                      wait_event = BufFileRead|
|                        Total time  = 00:00:38|
------------------------------------------------
|    #|             queryid|            duration
+-----+--------------------+--------------------
|    1|   28942442626229688|            00:00:38

+-----------------------------------------------

แƒฉแƒแƒ™แƒ”แƒขแƒ˜แƒšแƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ

แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ:

SELECT 
MIN(date_trunc('second',timepoint)) AS started , 
	count(*) * interval '1 second' as duration ,
	pid , blocking_pids , relation , mode , locktype 	 
FROM 
	activity_hist.archive_locking al 
WHERE 
	timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND
	NOT granted AND 
	locktype = 'relation' 
GROUP BY pid , blocking_pids , relation , mode , locktype			
UNION
SELECT 
	MIN(date_trunc('second',timepoint)) AS started , 
	count(*) * interval '1 second' as duration ,
	pid , blocking_pids , relation , mode , locktype
FROM 
	activity_hist.history_locking 
WHERE 
	timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND
	NOT granted AND 
	locktype = 'relation' 
GROUP BY pid , blocking_pids , relation , mode , locktype			
ORDER BY 1

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜:

------------------------------------------------ ------------------------------------------------ --------------------------------- | แƒฉแƒแƒ™แƒ”แƒขแƒ˜แƒšแƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ +---------------+-----+------------------------ --------+---------------------------------------- +------------------- | #| แƒžแƒ˜แƒ“| แƒ“แƒแƒ˜แƒฌแƒงแƒ| แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒแƒ‘แƒ| blocking_pids| แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ| แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜| แƒกแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒขแƒ˜แƒžแƒ˜ +----------+----------+-----+---------- +--------- ------------------------------------------------- -------------- | 1| 26224| 2019-09-02 19:32:16| 00:01:45| {26211}| 16541| AccessShareLock| แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ | 2| 26390| 2019-09-02 19:34:03| 00:00:53| {26211}| 16541| AccessShareLock| แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ | 3| 26391| 2019-09-02 19:34:03| 00:00:53| {26211}| 16541| AccessShareLock| แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ | 4| 26531| 2019-09-02 19:35:27| 00:00:12| {26211}| 16541| AccessShareLock| แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ | 5| 27284| 2019-09-02 19:44:02| 00:00:19| {27276}| 16541| AccessShareLock| แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ | 6| 27283| 2019-09-02 19:44:02| 00:00:19| {27276}| 16541| AccessShareLock| แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ | 7| 27286| 2019-09-02 19:44:02| 00:00:19| {27276}| 16541| AccessShareLock| แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ | 8| 27423| 2019-09-02 19:45:24| 00:00:12| {27394}| 16541| AccessShareLock| แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ | 9| 27648| 2019-09-02 19:48:06| 00:00:20| {27647}| 16541| AccessShareLock| แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ | 10| 27650| 2019-09-02 19:48:06| 00:00:20| {27647}| 16541| AccessShareLock| แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ | 11| 27735| 2019-09-02 19:49:08| 00:00:06| {27650}| 16541| AccessExclusiveLock| แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ | 12| 28380| 2019-09-02 19:56:03| 00:01:56| {28379}| 16541| AccessShareLock| แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ | 13| 28379| 2019-09-02 19:56:03| 00:00:01| 28377| 16541| AccessExclusiveLock| แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ | | | | | 28376| | 

แƒ‘แƒšแƒแƒ™แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ

แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜:

SELECT 
blocking_pids 
FROM 
	activity_hist.archive_locking al 
WHERE 
	timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND
	NOT granted AND 
	locktype = 'relation' 
GROUP BY blocking_pids 		
UNION
SELECT 
	blocking_pids 
FROM 
	activity_hist.history_locking 
WHERE 
	timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') AND
	NOT granted AND 
	locktype = 'relation' 
GROUP BY blocking_pids 		
ORDER BY 1

---------------------------------------------------------------

SELECT 
	pid , usename , application_name , datname ,
	MIN(date_trunc('second',timepoint)) as started , 
	count(*) * interval '1 second' as duration ,		 
	state , 
	query
				FROM  	activity_hist.archive_pg_stat_activity
				WHERE 	pid= current_pid AND 
						timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') 						 
				GROUP BY pid , usename , application_name , 
						datname , 
						state_change, 
						state , 
						query 
				UNION
				SELECT 
					pid , usename , application_name , datname ,
					MIN(date_trunc('second',timepoint)) as started , 
					count(*) * interval '1 second' as duration ,		 
					state , 
					query
				FROM  	activity_hist.history_pg_stat_activity_for_reports
				WHERE 	pid= current_pid AND 
						timepoint BETWEEN pg_stat_history_begin+(current_hour_diff * interval '1 hour') AND pg_stat_history_end+(current_hour_diff * interval '1 hour') 						 
				GROUP BY pid , usename , application_name , 
						datname , 
						state_change, 
						state , 
						query 
				ORDER BY 5 , 1

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜:

------------------------------------------------ ------------------------------------------------ ------------------------------------------------ ----------------------- แƒ‘แƒšแƒแƒ™แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ +----+------------------ ---+--------------------------------------------- ------------------------------------------------ -------+-------------------------------------- | #| แƒžแƒ˜แƒ“| แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜| แƒ’แƒแƒœแƒแƒชแƒฎแƒแƒ“แƒ˜แƒก_แƒกแƒแƒฎแƒ”แƒšแƒ˜| แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒแƒฎแƒ”แƒšแƒ˜| แƒ“แƒแƒ˜แƒฌแƒงแƒ| แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒแƒ‘แƒ| แƒกแƒแƒฎแƒ”แƒšแƒ›แƒฌแƒ˜แƒคแƒ| แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ +---------+----------+----------+-----+ --------- -+------------------------------------- --+------- ------------------------------------------------ ----------------- | 1| 26211| แƒขแƒฃแƒ–แƒ”แƒ แƒ˜| psql| tdb1| 2019-09-02 19:31:54| 00:00:04| แƒฃแƒกแƒแƒฅแƒ›แƒฃแƒ แƒ˜| | 2| 26211| แƒขแƒฃแƒ–แƒ”แƒ แƒ˜| psql| tdb1| 2019-09-02 19:31:58| 00:00:06| แƒฃแƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒจแƒ˜| แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ‘แƒ; | 3| 26211| แƒขแƒฃแƒ–แƒ”แƒ แƒ˜| psql| tdb1| 2019-09-02 19:32:16| 00:01:45| แƒฃแƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒจแƒ˜| แƒกแƒแƒ™แƒ”แƒขแƒ˜ แƒ›แƒแƒ’แƒ˜แƒ“แƒ˜แƒก แƒ•แƒแƒคแƒšแƒ˜_แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜; | 4| 26211| แƒขแƒฃแƒ–แƒ”แƒ แƒ˜| psql| tdb1| 2019-09-02 19:35:54| 00:01:23| แƒฃแƒกแƒแƒฅแƒ›แƒฃแƒ แƒ˜| แƒฉแƒแƒ˜แƒ“แƒ˜แƒœแƒแƒก; | 5| 26211| แƒขแƒฃแƒ–แƒ”แƒ แƒ˜| psql| tdb1| 2019-09-02 19:38:46| 00:00:02| แƒฃแƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒจแƒ˜| แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ‘แƒ; | 6| 26211| แƒขแƒฃแƒ–แƒ”แƒ แƒ˜| psql| tdb1| 2019-09-02 19:38:54| 00:00:08| แƒฃแƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ แƒขแƒ แƒแƒœแƒ–แƒแƒฅแƒชแƒ˜แƒแƒจแƒ˜| แƒกแƒแƒ™แƒ”แƒขแƒ˜ แƒ›แƒแƒ’แƒ˜แƒ“แƒ˜แƒก แƒ•แƒแƒคแƒšแƒ˜_แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜; | 7| 26211| แƒขแƒฃแƒ–แƒ”แƒ แƒ˜| psql| tdb1| 2019-09-02 19:39:08| 00:42:42| แƒฃแƒกแƒแƒฅแƒ›แƒฃแƒ แƒ˜| แƒฉแƒแƒ˜แƒ“แƒ˜แƒœแƒแƒก; | 8| 26211| แƒขแƒฃแƒ–แƒ”แƒ แƒ˜| psql| tdb1| 2019-09-03 07:12:07| 00:00:52| แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ˜| แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒ— test_del();

แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ.

แƒœแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜ แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ”แƒ‘แƒ˜ แƒฃแƒ™แƒ•แƒ” แƒแƒแƒ“แƒ•แƒ˜แƒšแƒ”แƒ‘แƒก แƒชแƒฎแƒแƒ•แƒ แƒ”แƒ‘แƒแƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒœแƒชแƒ˜แƒ“แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒ˜แƒกแƒแƒก.
แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ”, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ›แƒ˜แƒ˜แƒฆแƒแƒ— แƒ›แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ‘แƒฃแƒœแƒ“แƒแƒ•แƒœแƒแƒ“ แƒฌแƒแƒแƒ’แƒแƒ•แƒก Oracle-แƒ˜แƒก AWR-แƒก.
แƒจแƒ”แƒ›แƒแƒฏแƒแƒ›แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜

+----------------------------------------------- ----------------------------------- | แƒแƒฅแƒขแƒ˜แƒ•แƒแƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒแƒšแƒแƒ“แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒกแƒแƒšแƒ˜แƒ“แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜. 

แฒ’แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒแƒ แƒ˜แƒก แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ•แƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ (pg_stat_locks), แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ•แƒกแƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒฃแƒคแƒ แƒ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒ˜ แƒแƒฆแƒฌแƒ”แƒ แƒ.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ