ααααα·α αΆαα·ααααααΆαααΆαααααααΆα 2015 ααα Alexey Lesovsky "ααααα»αααΉαα αΌααα αααα»ααααα·αα·αααααααα»α PostgreSQL"
ααΆαααα·αααααΈα’ααααα·αααααααΆαααΆαααα αααα»αααααααααΆααααΆαααΆαααΆααααααα α»αααΆαααα·α αααααααα·α ααα·ααΆ 2015 - ααΆα 4 ααααΆαααΆαααααααα»ααα α αΎααααααααΆααΆα αααΎαααΆαααααααα»ααα α αααα 9.4 αααααααΌαααΆααα·ααΆααααΆαα αααα»ααααΆαααΆααααα·αααααΌαααΆαααΆαααααααααα αααα»ααααααα 4 ααααΆααααααααααα ααΆαα ααααααΆαααααΈα ααα½α 5 ααααΌαααΆαα ααααααΆα αααααΆαα αααααααα·α ααΆααααααα’ αα·αααΆαααααΆααααααΌαααΆα αααΎαααΆααααααΉααααα·αα·ααΆαααα α‘αΎα α αΎααααααΆαααα½αα ααα½αααΊα α½ααααα αα·ααα·αααΆαααααααα ααΌα ααααααα»αααΆααα·αα·ααα αααα»αααΆαααααΆααΆααααααΆααααααααααΆααααα ααΎααααΈαα»αα±ααα’αααα’αΆααααα ααα‘αα αααα»αβαα·αβααΆαβαααααβααααααβααΆααβαααβα‘αΎαβαα·αβαα ααΆαβα αααΎαβαααααα α αΎαβααΆβαααααα αααΆαααΆαααβαα»αβααααΆβααΆααβαααα»αβααΉαβα ααα
PostgreSQL DBMS ααΊααΆααααααΆααααααα½α α αΎαααααααΆααααααΆαααααααααααααΆα
αααΎα αααααΆααΆαααΆααααααααααα½ααααααα₯αααα·αααααααααΆαααααααααΎαααΆααααα DBMS α αααα»αα’αα‘α»ααααααααα·ααααα·ααΆα αααα·αα· αα·αααααααΆαα’αααΈααααα·ααααα·ααΆααααααΆαααΆαα»ααααΌαααΆααααααΌα αααα’αα»ααααΆαα±ααα’αααααΆααααααααααα·αααααΆααα PostgreSQL αα·αα
αΆαααα·ααΆαααΆαααΎααααΈαααααα’ααΆαα’αα»ααααα ααααααΆαααΆααααα ααΆαααααααΆααααα
αααΎα α αΎαααΆααααΌαααΆααααα αΆαααΆααααααααΆααααααΆαα ααΆαααααΎαααΆαααααααΆαααα αα·αααΆαααααααΆαααΆαα½αααΆαααΆαα·α
αα
ααΆαααααα·αααααΆααααΆαααααα»α α αΎα "αα½ααααα" ααα§ααααα αα·αα§αααααααααΎααααΆααα’αΆα
α
ααα‘ααααΆαααΆααααα½αααΌααααΈαα DBA ααααα·αααααααααααα


α’αα»ααα½ααααΈ αααα»αααααα α’αΆα‘α·α α ααΌα ααα Ilya ααΆααα·ααΆααααα»αααΉααα·ααΆαα’αααΈαααα·αα· PostgreSQL α

αααα·αα·αααααααΆα PostgreSQL α PostgreSQL ααΆααααα·αα·ααΈαα αααα·αα·αααααααΆα αααααΉαααααΌαααΆααα·ααΆααααΆα αα·ααααα·αα·α’αααααααααααα’αααΈααΆαα ααα αΆααα·ααααααα αααα»αααΉααα·ααΆαααΆαα·αααα’αααΈαααα·αα·αααααααΆα PostgreSQL αααα’αα»ααααΆαα±ααααΎααα·αα·α ααααααΆαα’αα»αααα αα·ααααααα’ααΆαααααΌα ααααα α
αααα»αααΉαααααΆααα’αααααΈααααααααΎααααΆαααααα·αα·ααααααααααααα·αααααΆα ααΎααααΈαααααααΆααααα αΆαααααααααα’αααααΆα α¬α’αΆα ααΆαα

ααΎα’αααΈααΉααα·αααΆααα αααα»ααααΆαααΆααα? αα αααα»ααααΆαααΆααααααα»αααΉααα·ααααααΎαααα·αα·ααααα’αααααααααααααααααααααα αααααΊααΆαααααΆαααααΆα ααααα‘αααααααΆαααααΆαααΆαααααΆα ααααα‘ααα’αααΈααααααααα·ααααααααααΌαααΆααααααΆαα»ααααα»αααΌαααααΆααα·αααααα αα·ααααααααα’ααααααα ααααααΆααααα½αααα½αααΆααααα·ααααααααααα»αααΆα αα·αααα·ααΆααααα·αααααααααα
α αΎαααΉααα·αααΆαααΆααα·αα·αααα§ααααααα αααα»αααΉααα·αααααααααααα·ααααα½αααΆαα½αααα·ααααα½αααααααααααα ααΉααα·αααΆαααΆαααααΆαααΆαα·αααααααααα α αΌαβαααααΆααβαααβα α»αα

αααα»αα αααααα αΆαα’αααααΆααΆαααααΎαααα·αα·ααΆαααααααααα ααΆβααΊβααΆβααΆαβα αΆαααΆα αα ααααΎααΆααααα·ααααααααΆα α α’αααΈαααααΎαααααΌαααΆαααΊ SQL ααααααΆ αα·αα ααααααΉαααΆααΌαααααΆααα SQL α
α αΎαααΎαααΉααα·ααΆαα’αααΈαααα·αα·αα½αααΆαααααααΌαααααΎαααΎαααΎααααΈαααααααΆααααα αΆα

ααααα·αααΎααΎααααα‘ααααΎα PostgreSQL α αΎαααααΎαααΆαααΆααααααααΆαα ααΎααααααααααααα·ααααα·ααΆαααΎααααΈααΎαααααΎαααΆα αααααΎαααΉαααΎα "αααα’αααααα "α ααΎαααΉαααΎαααααΎαααΆααα½αα ααα½ααααααααΎα’αααΈαα½α α αΎαααΆαααααα ααΎαα’αΆα αααααααΎαααΆααΎαα½ααααααα»αααααΎα’αααΈαα ααΈααα ααΎαα½ααααααα»αααααΎα’αααΈ ααα»ααααααΆααα·α αααααΊααΆαααα’αααααα αα½α ααΎααα·αα’αΆα ααΎαααΆααααα»αααΆαααα
ααΎαα’αΆα
αα·αα·αααααΎαααΆααααα»ααααΈααΈααΌ topααΎαα’αΆα
ααΎαααΎαααΆαααααΎααααΆααα’αααα
αα
αΆααααα§αααααααααΎααααΆαααααααααααα½αα
ααα½α ααα»ααααααΎαααΉααα·αα’αΆα
ααΎαααΆααααα»α PostgreSQL ααΆαααα αααααΆαααααα αΆαααααΎαααααΌαααΆαα§αααααααααααααα

α αΎααααααα αα»αααα αααα»αααΉαααααΆααα’αααααΈααααααααααααααααΆααααΌαα αααΆαα ααααα·αααΎααΎαααααΆαα±αα PostgreSQL αααα»ααααααααααααααααΆααααααααα αααααΆααΉαα’αΆα ααααΎαααΆαααΆ ααΎαααααααΆααααΌαα αααΆααα α―ααΆα ααΆαααααααΊααΆααΏαααΈαα ααΆααΊααΆααααΎαααΆαααααααΎααααα’αα·αα·ααααΈαααααα·ααΈ αα·ααα·α αα ααΆαααααααΆααααααααα PostgreSQL α’αα»ααααααΎααααΈα±ααααΆααααΎαααΆαα
ααααα·αααΎααΎαα αΆααααααΎαααΎααα αααα»αααΆααααααααΆαααΎ ααΎαα’αΆα ααΎαααΈαααααααααααΎααααα’αα·αα·ααααααΌαααΆαααααΎαααΆαα ααααΎαααααΆαααααΈαααααα·ααΈ α αΎαααααα’αα·αα·ααααααΌαααΆαααΎααααααΆααααΆαααΆααααααααααα ααααΎααααΌαααΆααααααΌααα α’αααααααααααα α’ααααααα ααααααΆααααααΎααααααΆααααα½αα ααααΎααΆααααααααααααααΆααααΆαααααα·ααααα·α ααΆααααααααααα·αααααααααα»α I/O αα½αα ααα½ααααααΆααααααΉαααΆααΆα αα·ααα·αα·ααααα αα·ααααααα αΆαααΆα αααααΌαααΆαα’αΆαααΈααΆαα αΌααα αααα»αα’αααα αα αΆααα αααα»αααααααα·ααααα½αα α ααΆ "α αααααααααα·ααααααα’αΆαααα"α αααααααααα½α ααααα·αααΎαα½αααααααΌαααΆαα’αΆααααα αα»α ααααΌαααΆααααααααΆαα αααα»ααααααα ααα»ααααα·ααααα·ααΆααα αααα»α WALα ααααααΆααααα·αα·αα½αα ααα½αα αΌααα αααα»ααααααα ααα» α¬α’ααααααααΌααααα·αα·α α αΎαβααααααβααβααααΎβααααΌαβααααααβααΌαβα’αα·αα·ααβαα·αα αααααΆααααΈααα α’αα·αα·ααα’αΆα ααααΎα’αααΈαααααααααΆαα‘αΎααα·αααΆαα½αααΉαααααΎααααΈα
ααΎβααΎαβααΆαβα’αααΈβααααβααΆαα½αβααΉαβαα·α αα ααΆαβααααβααΆαβααααα αα·αβααααΎαβααΆαβααααβααΆαβααααα? ααΎαβααΆαβααααΎαβααΆαβααΆβα αααΎαβαααβαααααΆβααΌαααααΆαβαα·ααααααβα±ααβααααΎαααΆαβαααα»αβααααβααααα·ααααα·ααΆαβααααααΆα ααααΎαααΆαααΆαααααααααΉαααααΌαααΆααααααααααααα αααα»ααααΆαααΆααααααααα ααΆαααααααΊααΆ autovacuum, checkpointer, processes related to replication, background writer. αααα»αβααΉαβαααβααΎβαα½αααβααααΆαααβααΌα βαααβαααα»αβααΆαααΆαααα

ααΎαααα·αα·ααΆααααα αΆα’αααΈαααα?
- ααααααΆαααΆα αααΎαα PostgreSQL 9.4 ααααα 109 αααααααααααΆααααΆαααΎααα·αααααααααα·αα·α ααααααΆαααΆααααα ααααα·αααΎααααΆαααα·αααααααααα»αααΆααΆαααΆα αααΎα αααααααΆααα ααΌαααααΆααα·αααααα αααααααααααΆααα’αααααααΉαααααΌααα»αααΉαα ααα½αααΆααΆα ααΌαααααΆααα·αααααααααααααΌαααααΆα αααααΊααΆαααααααΆαααααααα α αΎαααΆααΆααααα½αααΆαααααα»αααΆααααααΉαα
- αααα αΆαααααΆααααΊααΆαααα·αα·ααααΌαααΆαααααΆαααααααααα ααααα·αααΎααΎααααα‘ααααΎααααα·αα·ααΆααααα ααΎαααΉαααΎαααΆαααΎαα‘αΎαααΆαααααααααΆααα α αΎαααααα·αααΎαααααααΆααΆα αααΎαααΆαααααααα»ααα α αΆααααΆααααΈαααα·αα·ααααΌαααΆααααααα‘αΎααα·α αααααΎαααΉαααΎααααααααΆααααΆααααΆαα α αΎααα½ααααα·αααααΆααααΎαα’αααΈααΆααα’ααα
- αα·αααΆααααααααα·ααα ααααα·αααΎα’αααααΆαααααααααααΆααααΆαααα’αααΈαα½αααΆαααααΆααα α»α 15-30 ααΆααΈαα»α α’αααααΉααα·αα’αΆα ααααΎαααα·αα·αα·αααΎαα’αααΈαααααΆαααΎαα‘αΎαααΆαααΈ 15-30 ααΆααΈαα»αα αααααΆαααα αΆα
- αααααα§ααααααααααΆααααααΎαα‘αΎααα αααα»α PostgreSQL ααΊααΆαααα αΆαα½αα α’αααα’αα·ααααααααΊααααα·ααααααα§αααααααααΎααααΆααααΆαα½αα‘αΎαα αα½ααααα·αααΆαα’αααΈααΌα αααααα αα½αααααααΆααααααααααααα·αα·αα αααα»αααΌαααααΆααα·ααααααα ααααΎααΆ ααααΎααααΎαα ααΆ α’αααΈαααα’αααα ααααΆα αααααΆααααααααΎααΆα
- αααααΆααααα·αααΆαα§ααααααααααΆααααααΎαα‘αΎααα αααα»α PostgreSQL ααααααααΆαα±ααααΆααααα αΆαα½αααααααααα α§αααααααΆααΈααΈααΈααΆα αααΎαα ααααααααα»αα αα»ααααααΆαααααααΆααα αααΎα α¬αα·α αααα»αααααΆααΆαααααααααααα·ααΈααααΆαααααα½αα α αΎαααΆαααααα αα ααααααΆαα§αααααααΆα αααΎααααα’αααα’αΆα ααααΎααΎααααΈααααΎααΆαααΆαα½ααααα·αα·α α αΎααα αααα»αα§ααααααα½αα ααα½αααΆααααααααα·ααααα½αα ααα½ααα αααα»αα§ααααααααααααααα·αααΆααααααααα·αααααααααααα¬ααΆααααααααα·αααααααΈαα½αα ααα½αα α αΎαααααΆαααΆααα½αααΎαα‘αΎααααα’αααααααΌαααααΎα§αααααααΈα ααΈ α¬αα½α ααααααα½αααΎααααΆ αα·αααΆααα»αααΆααα»ααααααΆα αααααΆααΆαααααΆαααααΆααααΆααα

ααΎααΆαα’αααΈααααααΈααα? ααΆααΆααΆαααααΆααααΎααααΈα’αΆα αααααα·αα·αααααααΆαα ααΎααααΈαα»αα±ααααΉαααα’ααααΎαααααα·ααΈ α¬αααααα’αααααα·ααΈααΆαααααααααααα½αα―αα αααααααα»αααΆααα½αα ααα½αααΎααααΈααα½αααΆαα’αααααααααααααααα’αααα
α αΎαα’αααααααΌαααΆαα ααααααΉαααΆααΌαααααΆααα SQL α ααΎααααΈααα½αααΆααα·αααααααα½αα ααα½αααΈαααα·αα· α’αααααααΌααααααΎααααα½α SQL αααααΊα’αααααααΌαααΉαααΈααααααααΎαααΎα α αΌααα½αα

αααα·αα·ααααΆααααΎαααΌαααΏαααΆα αααΎαα αα½αααα’αΆα ααααΌαααΆααααα ααααΆααααααα
- ααααααααΈαα½αααΊααααΉαααα·ααΆααααααααΎαα‘αΎααα αααα»αααΌαααααΆααα·ααααααα αααααΊααΆααααααααααΉαααα·ααΆααααα½αα ααα½αααΎαα‘αΎααα αααα»αααΌαααααΆααα·ααααααα αααα½α ααΆαα αΌαααααΎααΆααΆα ααααααααααααα·αααα αααααααΉααα αααααΆααααααΆαααααααΊααΆααααΉαααα·ααΆαααααΆααα’ααα ααααααααααααΌαααααΆααΉαααααΉαααα·ααΆαααααΆαααααααααΌαααΆααααααΎαα α αΎαααΎαα’αΆα ααΆαααΆαααααΉαααα·ααΆαααααΆαααααα
- ααααααααΈααΈαααΊααΆαααααααααααααα·ααααααααα»ααΌα ααΆααΆααΆα ααΌαααααΆααα·ααααααα αα½αααααΆααααααααααααααα·α αααααΊααΆααα ααααα»α ααΎαβα’αΆα βααΆαβααΆαβααΆαβααΈαβα ααααΎαβααβααΆααΆα ααΆαβααΈαβα ααααΎαβααβαααααααααα ααΎαα’αΆα ααΎαααΎαααΆαααααΆααααααΌαααΆαααααα
- α αΎαβααααααβααΈβααΈβααΊβααΆαβα αααΆαβαααβααααΆβαααααΆααβααααΉαααα·ααΆαααα ααΆαααααΎαα»αααΊααΆααααΉαααα·ααΆααααα½αα ααΆααΆααααααΆααααΆααααΆααααααααααααααααΆα α αΆααααααΎααα ααΈααα αααα αααα ααΈαααα ααΎαα’αΆα ααΆαααΆαααΆααΆαα ααΆαααααααααΆααααΆαα’αΆααααα»αααΈααΆαα¬ααΆααααααα ααΏαααΆαααααααααααΌαααΆαααΆαααΆααααααα

ααααααααααα·αα·ααααΌαααΆααααα αΆαααΌα ααΆαααααα:
- αα αααα»αα’αααα αα αΆααααααΆαα ααααααα (shared buffers) ααΆαααααααα½ααααααΆααααΆαααα·αααααααα·αα·αααααα ααΈααα ααααΆαααΆααααΆααααααααααααΌαααΆααααααΎαααΆαααααααααΆαααα ααααααααααΉαααα·ααΆαααααΆααααΆααααΎαα‘αΎα α¬αααααααααΎαα‘αΎααα αααα»αααααα·ααααα·ααΆαααααΌαααααΆααα·ααααααα
- αααααααΆααα’ααααααα·αααΆααααααΆααα’αααααααΎααααΆαααα α αΎααααα·αααΆααααααΆααα’αααααααααααααααα ααΆαααααααΊααΆααααα»ααααα·αααΆαα ααΎααααΈα αΌαααααΎαα½αααΆ PostgreSQL αααααααΌαα ααα»α αααααΆαααααα»ααααααααααα»αααΆα SQL α ααΎαβα’αΆα βααααΎααΆαβααααΎαααΎαβαααβααααΎβαα»αααΆαβααΆααααα α αΎαβααα½αβααΆαβααααααβααααααβαα½αβα ααα½α (α¬βαααα»αβαααααα)α
- ααααααΆαααΆααααα ααΆαα·ααααααααΆααααα½αααααΎαα»αααΆαααΆααααααα ααΌα αααααα»αααΆαααΊααΆααΌαααααΆααααααΆαααα·αααααΆα (VIEWs)α ααΆαααααααΊααΆααΆααΆααα·αααα·ααααααααααααα·αα·αα ααΎααααααααααααΆααααΆαααα½α α¬αα ααΎαααα»αααααααΉαααα·ααΆααααα½αα ααα½ααα αααα»αααΌαααααΆααα·ααααααα
- αα·αααααΆααααααααΆααααααΆαα½α (VIEWs) ααΆαααααααΊααΆα ααα»α αααααΆααα’αααααααΎααααΆαααααααΆααααααΎααΆαααΆαα½ααααα·αα·α αα½αααΆα’αΆα ααααΎααΆαααΆαααααΆαααΎααααααααΆαααΆαααααααααααα α’αααα’αΆα ααααΎααΆααααΆαα ααΎα ααααααααΆαααΈααΈαααα α αΎαααααΆαααΆααα½αα αααααααααα ααΆαα αΌααα½αα ααααααΆααααΌαααΆαα α’αααα’αΆα ααα‘αΎααααα αα postgresql-contrib (α§ααΆα ααα postgresql94-contrib) αααα»ααααΌαα»αα αΆαααΆα ααααα»αααΆαααααααα ααΆαααααααα αααααΆαααααΆαααΆαααααααααααΆααααΆ α αΆααααααΎα PostgreSQL α αΎαα’αααα’αΆα ααααΎααΆααΆαα (α αααΆαα α’αΆαααααααΎααΆαα ααα αΆα αα αααα»αααααααααΈαααααΆααα½αα αααα αααα ααααΊααΆααααααα½ααααααα ααα αααα).
- α αΎαααΆαααΆααα½αα αααααααα ααααΌαααΆαα αα½ααααα·αααααΌαααΆαααααααααααααΆαα½αααΉαααΆαα ααα αΆα PostgreSQL αααααααΆαααα αα½αααααααΌαααα ααααα α¬ααα‘αΎαααΆαααααΆαααα αααααΎαα’αΆα ααΆαααΆααα»αααααΆααααΆαα α’αΆαααααααΎα’αααΈαααα’αααα’αα·ααααααααααΆααα½αα αααααααα ααααΌαααΆααααααΆααααααΎαα‘αΎαα

ααααΆαααααααα αΆαααΈαα·αααααΆαααΆααα’ααααα (VIEWs) αα·ααα»αααΆααα½αα ααα½ααααααΆααα αααα»α PostgreSQL 9.4α ααΌα αααααΎαααΎαααΆααα½αααααΆα αααΎαα α αΎαααΆααΆααααα½αααΆαααααα»αααΆααααα αααα ααααα·αααΎα’ααααα½ααααααααΆααΆααΎαααααΌαα

ααααααΆαααΆαααααααααα·αααΎααΎαααααΌαααΆααα»αα ΠΠ°ΠΊ ΡΡΠ°ΡΠΈΡΡΡ Π²ΡΠ΅ΠΌΡ Π½Π° PostgreSQL α αΎαααααΌαααααΆααΆαα½ααααααΈααα ααΎαααα½αααΆαααΌαααΆααααα αα·αααααΆαααΈαα½αα (VIEWs) α¬αα»αααΆαααΈαα½αα ααΎαα’αΆα
ααααΎαααααΆααααααααααα½α α¬αα½ααααααααα ααΎααααΈααα½αααΆααααα·αα·αααααααα
ααααααααΎαααΆα PostgreSQL αααα»αααααΎαααΆαα α αΎαααΎαα’αΆα
ααα½αααΆαααααααΆααα½αα
ααα½ααα½α
α αΎαα’αααΈααααα·ααααα·ααΆαααααααααααααα

ααΏαααααΌααααααΎαααΉαααΎαααΊ pg_stat_database. ααΌα
αααααΎαα’αΆα
ααΎαααΎααααααΊααΆααααΆαα ααΆααΆαααααααΆαααΆα
αααΎαα ααααααΆαα
αααα»ααααα»αα α αΎαβααΆβαααααβααΌαβα
ααααααΉαβααβααΆαβααααααααβααβα’αααΈβαααβααΎαβαααα»αβααΎαβα‘αΎαβαααα»αβααΌαααααΆαβαα·ααααααα
ααΎααΎαα’αΆα ααα’αααΈααΈααΈααα? α αΌαα αΆααααααΎαααΆαα½αααΉαα’αααΈαααααΆαααααααα»αα

select
sum(blks_hit)*100/sum(blks_hit+blks_read) as hit_ratio
from pg_stat_database;ααΏαααααΌααααααΎαα’αΆα ααΎαααΆαααΊααΆαααααααααΆαααααααΆααα ααΆαααααααααΆαααααααΆααααΊααΆααααααααααΆαααααααααα ααΆα’αα»ααααΆαα±ααα’ααααααΆααααααΆαααΆααΎαα·ααααααααα»ααααΆαααααΌαααΆαααα ααααΈααααΆαααααα»ααα·αααααααααααΆαα ααααααα αα·αα ααα½αααα»ααααΆαααααΌαααΆαα’αΆαααΈααΆαα
ααΆα αααΆααααΆαααααα ααααΆαααααααΆααααΆααααα αααΎααααααΎαααΆα αααααΆαααααααααΎα. ααΎαααΆαααααααααααααααααΆααΆαααα α αΎαααΆα§ααΆα ααα ααααα·αααΎααΎαααΆαααΆαααααααααΆαααααααΆααααΆαααααα αααΎαααΆα 90% αααααΆααΆαααα’α ααααα·αααΎααΆααααΆααα α»αααααα 90% αααααΎααα·αααΆαα’αααα αα αΆααααααααααΆααααΎααααΈαααααΆααααΆααααα αααα·αααααααα αααα»αα’αααα αα αΆααααααα α αΎαααΎααααΈααααΎαα·ααααααααα PostgreSQL ααααΌαααΆααααααα±ααα αΌαααααΎααΆα α αΎααααααΊααΊαααΆαααααα·αααΎαα·ααααααααααΌαααΆαα’αΆαααΈα’αααα αα αΆαα α αΎαα’αααααααΌααα·αα’αααΈααΆααααααΎαα’αααα αα αΆαα αααααΎαααα·ααααααα’αΆαααααααααΆαα ααααααα α¬αααααΎαα’αααα αα αΆαααα (RAM)α

select
datname,
(xact_commit*100)/(xact_commit+xact_rollback) as c_ratio,
deadlocks, conflicts,
temp_file, pg_size_pretty(temp_bytes) as temp_size
from pg_stat_database;ααΎααΆαα’αααΈααααααα’αΆα ααα ααααΈααΆαααααααααα? α’αααβα’αΆα βααΎαβααΎαβααΆαβαα·αβααααααααΈβαααβααΎαβα‘αΎαβαααα»αβααΌαααααΆαβαα·ααααααα ααΎα’αααΈααααΌαααΆααααα αΆααα ααΈααα? ααΆαααΆαααααααααΆα α·ααα ααΆααα·ααααα‘αααααα·α ααΆααααααΎαα―αααΆαααααααα’αΆαααα ααα αααααααΆ ααΆαααΆααααΆαα αα·αααΆααααααααα·α α
ααΎαα’αΆα ααααΎααααΎαααα SQL αααααΊααΆααααααΆααα α αΎαααΎαα’αΆα ααΎαααΎααα·ααααααααααααααΆαααααα½αααΎαα

α αΎααααααΊααΆαααααααααα·αα ααΎααααα‘ααααΎααααΆααΆαααααααΆααααααΆ αα·αααΆααα·ααααα‘αααααα·αα Commits ααΊααΆααΆααααααΆααααααααααααααα·ααααα·ααΆαα Rollbacks ααΊααΆ rollback αααααΊ ααααα·ααααα·ααΆαααΆαααααΎααΆαααΆααα½αα ααα½α ααααΎα±ααααΌαααααΆααα·ααααααααΆαααΆαααΉαααα αα·α αΆαααΆα’αααΈαα½α α αΎααααααΆααααααΆααααΆαααααΆαααΎαα‘αΎα α αΎαααααααααααααα·ααααα·ααΆαααααΌαααΆααα»αα ααα i.e. α ααα½α rollbacks ααΎαα‘αΎαα₯ααααααααΊα’αΆαααααα α αΎαβα’αααβαα½αβαααβααΆαβααΆβαααβααααβααΆ α αΎαβααβααΌαβααΎααααΈβαα»αβα±ααβααΏαβαααβααΎαβα‘αΎαα
ααααααααΆααααααΉαααΆαα ααααα α αΎααα½αααααααααΌααααααΆααααααα ααααα·αααΎα’αααααΆααααα½ααα½αα ααα½ααααααααΌαααΆαααααα·ααααα·ααΎααΆαα αααα αα·αααααααααΎαα‘αΎα αααα’αααααααΌααα·ααΆαααααααααΆααααα α αΎαααΎαααΆααΎααΆαα’αααΈααΎαα‘αΎαα ααααααΆααααα’α·αα’αΆα ααααΆααα αααα»ααααααα ααα»α αα·ααααααααΆαααααααααΎααααΈα±ααααααΎαααααα·ααΈααααΎαααΆααααααααΆαααα α»αα
Deadlocks ααααΆααααΆαααΆαα’αΆααααααααααα αα ααααααααααΎααααα½ααααααααααααΆααααααΆα ααααΎαα½αααΆαα αΌαααααΎααααΆααααααΆααα½α α αΎαααΆαα αΆαααα ααααΎααΈααΈαααΆαα αΌαααααΎααααΆααααααΆαααΈααΈα α αΎαααααΆαα αΆααααα α αΎααααααΆααααααααΎααΆααααΈαααΆαα αΌαααααΎααααΆααααααΆαααααΆαα αα·ααα αα α αΎαααΆαααΆααΆααααααααα αΆαα’ααααα·αααΆααααααα αααααααΆααααΆαααΆαααΆααααα αΆαααααα αα½αααααααΌαααααααΌαααΆααααααααΆααα ααααα·αααααΆαααααααααααα·ααΈα‘αΎααα·α αα·ααααααααΆαα αΌαααααΎααααΆααααααΆαα α αΎαααααα·αααΎα’αααααΎαααΆααΆαααΆααααΆααααααα’ααααααα»αααΎαα‘αΎαα₯αααααα α’αααααααΌαααΎαααααααΆααααα’α·ααα αααα»ααααααα ααα» αα·ααΆαααααΆαααΆααααααΆαααΎαα‘αΎα αα·αααΎαααΆααΎαααα αΆααΊααΆα’αααΈα
α―αααΆαααααααα’αΆαααα (temp_files) αααα·αααα’αααα αα ααααααααααΎααααα’αααααααΎαα·αααΆαα’αααα αα αΆααααααααααΆααααΎααααΈαααααααααα·ααααα·ααΆααα·ααααααααααααα’αΆαααα ααΆαααααΎαα―αααΆααα ααΎααΆαα α αΎαααααα·ααααα·ααΆαααΆααα’αααααααΆααα’αΆα α’αα»αααααα αααα»αααα·ααααααα’αΆαααααα αααα»αααα· ααΆααα αΆααααααΎαα’αα»αααααα½α α αΎααα ααΎααΆαα ααΆααΊαα ααΆαααααΎααααααααΆααααΎαααΆααααα½αα α αΎαα’αα·αα·αααααααΆαααααΎααααΎαα PostgreSQL ααΉαααα½αααΆαααΆαααααΎαααααααα·α αααααααα ααααα·αααΎααααα·ααααα·ααΆαααΆααα’αααααααααΌαααΆαα’αα»αααααα αααα»αααα· ααα Postgres ααΉαααααΎαααααΆααααααΏα α αΎαα’αα·αα·ααααΉααααα αΆααα·α ααΆααα»αα

pg_stat_bgwriter - αα·αααααΆαααααα·αααααΆα’αααΈααααα·ααααα·ααΆααααααααααααα PostgreSQL ααΈαα checkpointer ΠΈ background writer.

ααΎααααΈα
αΆααααααΎαααΆαα½α α
αΌαααΎααα·ααΆαα
ααα»α
αααα½ααα·αα·ααα αααα α
ααΆα checkpoints. ααΎααα»αααα·ααααα½ααα·αα·αααααΆαα’αααΈαααα? α
ααα»α
αααα½ααα·αα·αααααΊααΆααΈααΆαααα½ααα
αααα»ααααααα ααα»ααααα·ααααα·ααΆαααααααα αΆαααΆααΆαααααΆααααααΌααα·ααααααααΆααα’αααααααΆααααααααΉααααα
αααα»ααααααα ααα»ααααΌαααΆαααααΎααααΆααααααααααααααααΆαα½αααΉααα·αααααααα
ααΎααΆαα ααααΎαααΆαααα α’αΆαααααααΎααααα»αααΆαααΆα αα·αααΆααααααα’αΆα
ααΆαααααααααα α αΎαααΆαα
αααΎαααΆαααΆαααααΎααααΆαααααααααααααααααα
αααα»αααα·ααααααα’αΆαααααααααΆαα
αααααααααΆαα½αα―αααΆααα·αααααααα
ααΎααΆαα ααΎβααΆβααααΎβααααΆααβααααΎα’αααΈ? ααααα·αααΎ PostgreSQL α
αΌαααααΎααΆααααααααα α αΎααααα·ααααααααΈααΈααα α αΎαααααααα·ααααααααΎααΆαα
αΌαααααΎααΈαα½αα ααΆααΉαααΊαα ααΌα
αααα PostgreSQL ααΆααααααα’αααα
αα
αΆααααααα αααααααΆα’αΆαααααααΎαααΆαααΆαααααααα
αααα»αααΆαααααααα
ααΆααααααααα Postgres αααα
αααα·ααααααααααα·ααααα·ααΆααα
αααα»αα’αααα
αα
αΆαααααααααΆααααααΎαααΆααααααα α¬αα½ααααα½αα αααα»αααααΈααααΎααααΆααααααΌααα·αααααα αα½αααααααΌαααΆαααααΆααααααΌαα α αΎαααΎαααα½αααΆααα·ααααααααΈαααααα αα½αααΊαα
αααα»αααα· αα½ααααααΊαα
ααΎααΆαα α αΎαααΆαααααΆααα’αααααααΌαααααΎααααΆααααααα·αααααααααα ααΎαααααΌαααΆαα’αααΈαααααααΌαααΆαααααΆααααααΌααα
αααα»αα’αααα
αα
αΆαααΎααααΈααααΎααααΆααααααα
ααΆαα ααααααααΌαα±ααααΆαααα»αααα·ααααα½ααα·αα·αααα
ααα»αααα·ααααα½ααα·αα·αααααααααΆααααααααα’αΆαααααααααΆαα ααααααα αααααΆαααααααααααααααααα½αααααααΌαααΆααααααΆααααα»αααα·ααααα½ααα·αα·αααα αααααΆααααααΆα αΆααααααΎαααααααΈααΈαααΆααααααα·ααααααα’αΆαααααααααΆαα αααααααα α αΎαααααααααααααΌαααΆααααααΆαααααααΆααααα»αααα·ααααα½ααα·αα·ααα ααΆααααααΎααααΆααααααα½αααΆαα½α α αΎαα ααΌα αααααα·ααααααααααΌαααΆαααααΎααααΆααααααα½α α αΎαααΆαα½αααΈαα
ααΆαα
ααα»α
αααα½ααα·αα·αααααΈαααααααα ααα»αααα·ααααα½ααα·αα·ααααα½αααααΌαααΆαααααα·ααααα·αα
αααα’αααααα ααα»αααα·ααααα½ααα·αα·ααααααααΆααααααααααα·αααα’ - checkpoint_timed. α αΎαααΆαααα»αααα·ααααα½ααα·αα·αααααΆααααααΌαααΆα - checkpoint required. ααα»αααα·ααααα½ααα·αα·αααααααααααΎαα‘αΎααα
ααααααααΎαααΆααααααααααΆαα·ααααααααααΆααα ααΎαααΆααααααααΆαααααα ααα»ααααα·ααααα·ααΆαααΆα
αααΎαα α αΎα PostgreSQL ααΏααΆααααΆααΆααααΌαααααΎααααΆαααααααΆααα’αααααα±ααααΆαααΏαααΆααααα’αΆα
ααααΎαα
ααΆα αααααΎαααα»αααα·ααααα½ααα·αα·ααα αα·ααααααα
αα»ααααα
α αΎαααααα·αααΎα’ααααααα‘ααααΎααααα·αα· pg_stat_bgwriter α αΎαααΎαα’αααΈαααα’αααααΆα checkpoint_req ααΆαααα αααααΆα checkpoint_timed αααααΆααααααΆαα·αααα’ααα α ααα»α’αααΈα’αΆααααα? αααααΆααααααΆ PostgreSQL αααα·ααα
αααααααΆαααΆαααΉαααααα
ααααααααΆααααΌαααΆαααααααα·αααααααα
ααΆαα ααΆααααα½ααα·αα·αααααΆααααααααΆααΊαα·αααΌαααΆαααΉααα α αΎαααααΌαααΆαααααα·ααααα·ααΆαααΆααα·ααΆααααααααα»α α αΎαααΌα
αααααΆααααΌαααΆαααΆααααααΉαααΆααααααααΆα PostgreSQL ααΆααααααααΆαααα’αΆαααΆαααΆα αα·ααα·ααααααΆααααααααααααααααααΈαα ααΆααΆααααααααααααααΆαα PostgreSQL α α αΎαααααΎαααααααΌαααΆαααααα·ααααα·ααα‘α»αααααααα½ααα·αα·αααααΉααα·ααα½ααααααααΆαααΆαααΉαααΈααΆααα·ααααααΆααααααααααααααααΆααααααααααα
α αΎαααΆααααΆαααΆααααααα ααα½αααΈααΎααααΈαααααααΌαα ααα»α αααα½ααα·αα·ααα:
Ρheckpoint_segments.Ρheckpoint_timeout.Ρheckpoint_competion_target.
αα½αααα’αα»ααααΆαα±ααα’ααααααααααααααααα·ααααα·ααΆαααα ααα»α αααα½ααα·αα·αααα ααα»αααααααα»αααΉααα·αααααα ααΎαα½αααααα α₯αααα·αααααααα½αααααΊααΆαααα αΆααΆα ααααα‘ααα
αααααΆα: αααα 9.4 αααααααΌαααΆααα·α
αΆαααΆαα
αααα»ααααΆαααΆαααααΊαααααΆααααααααααα αΎαα αα
αααα»αααααααααΎααα PostgreSQL αααΆαααΆαααααα checkpoint_segments αααα½αααααααΆαααΆαααααα min_wal_size ΠΈ max_wal_size.

αααααααααααααααΆααααΊα’ααααααααααααααΆαααααα β background writer. ααΎβααΆααβαααα»αβααααΎα’αααΈ? ααΆααααΎαααΆαα₯αααααααα
αααα»αααααα·ααα»αααααΆαααΈαααα
ααα ααΆααααααααααα
αΌααα
αααα»αααα·ααααααα’αΆαααααααααΆαα
ααααααα α αΎααα»αααααααααααααααααΆααααΎααα
ααΆαα ααΆαααααααα ααΆαα½αα±ααα’ααααααα½ααα·αα·αααααααΎααΆααα·α
ααΆααα»ααααα»αα’αα‘α»αααααααα½ααα·αα·αααα
ααΎααΆααααααΌαααΆαα’αααΈααα? ααΆαααααααΌααααααΌαααΆααααααΆαααααααααα’αΆααα
αααα»αααα·ααααααα’αΆαααααααααΆαα
ααααααα ααααα·αααΎαα½αααααααΌαααΆαααΆαααΆαααααΆαα (αααα»αααα·ααΆαα
αααΎα αα·αααααΆαα) ααΎααααΈαααα»ααα·ααααααα α§αααΆααΆααααΆαααΆααα½αααΆαααΎαα‘αΎααα
ααααααααααΎααΆαααΆααααααααα’αΆα α αΎααα½αααΆαααα·ααα
αααα»αααα·ααααααα’αΆαααααααααΆαα
ααααααααα½α
α αΎαα Postgres backend ααΆααααααΆααααααααΆαα
ααααΎ α αΎαααΆαααα·αα
αΆαααΆα
ααααα’αΆαα’αααΈααααααα½αα―αααα ααα»ααααααααα·αααΎααααΆααααααα·αααΆαααααααααααααα αααααα·ααΈααΆααααααααα’αΆα α αΎαα
αΆααααααΎαααααααααααααααΎααααΈαααα
αααα½αααΆαα
αααα»αααΆα α αΎαααααΆαααααΆαααααααΌαααΆαααααΆαααααα½αααααααΆ αααααα₯αααα·ααα’αα·αααααΆαααααααααααΆααααααΎααααααα»αααααΎαααΆααα
αα
α»ααααααα ααααα·αααΎα’αααααΎαααΆα’αααααΆααααΆαααΆαααααα maxwritten_clean αα αααααΆααααααΆα’ααααααααααααααΆαααααααα·αααααΎααΆαααΆαααααααΆαα α αΎαα’αααααααΌααααααΎααααΆαααΆαααααα bgwriter_lru_maxpagesααΌα
ααααβααΆααβα’αΆα
βααααΎβααΆαααΆαβααΆαβα
αααΎαβαααα»αβαα½αβαααα αααααβαααααβααααααβαααα
α αΎαααΌα
ααΆααααααΆααααααααααα½ααααααΊ buffers_backend_fsync. αααααααΆαααααααα·αααααΎ fsync αααααααααΆααΊαα αα½αααααααααΆαα fsync α‘αΎα IO stack checkpointer α α§ααααααα·αα·αααααΆααα½αααααααΆ ααΆααααΎαααΆα fsync ααΆαααααΆαα αα·αααααΎααααΆαααααααααααα
αααα»αα’αααα
αα
αΆαααΆαα½αα―αααΆααα
ααΎααΆαα ααααα·αααΎαα½α checkpointer αα αα·αααα ααα backend ααααΌαααΆααααααα±ααααααΎ fsync αααα½αααΆ α αΎαααΆααΉαααααα backendαααααΊ α’αα·αα·ααααΉαααα½αααΆαααΆαααααΎαααααΊαααΆαααΆα’αΆα
ααααΎαα
ααΆαα ααααα·αααΎα’αααααΎαααΆα’αααααΆαααααααααααααΆαααΌααα ααααααααΊααΆαααα αΆαα½α
αα
α αΎα α’αααααααΌαααα
α·ααααα»αααΆααααΎααΆαααααααααααααααα·ααΈαααααααααααΆαααααα αα·αααΆααααααααααΎαααΆαααααααααααααααααααΈααααααα

αααααΆα: _α’αααααααΆαααααααα·αααααΆα’αααΈαα·αααααΆααααα·αα·αααααΆααααααΉαααΆαα
ααααα ααααααα·αααααΆα αα·ααα»αααΆαααΆαα
αααΎαααααΌαααΆαααααΌαααααααα
αααα»α Postgres 10α ααααΉαααΆαααααΆαααααΌααααααααΊααααΌααααα½α xlog αα
ααΎ wal ΠΈ location αα
ααΎ lsn αα
αααα»ααα»αααΆα/ααΎααααααααα α§ααΆα ααααα·ααα αα»αααΆα pg_xlog_location_diff() ααααΌαααΆαααααΌαααααααα
ααΆ pg_wal_lsn_diff()._
ααΎαααααΆαα αααΎααα ααΈααααααα ααα»ααααααΎαααααΌαααΆαααααΆαα»αααααΆααααααΉαααΈααΆααααα»αααααα

ααααα·αααΎααΎαααΎαααΆαααααααΆααα’ααααααΎααααΆ αααααΆααΆαααα’ α αΎαααΆαα αααααα·αααΊααααΆααα ααΈααααααααααααα
ααΈααΆααααααααααααΆααα½ααααααΊααΆααΈααΆαααα αααα»ααααααα ααα»ααααα·ααααα·ααΆαα ααΆααΎαα‘αΎαα₯αααααα ααααα·αααΎααΆααααααααΆααα½αα ααα½ααα αααα»αααΌαααααΆααα·ααααααα αααα αΌα αα»α ααΆααΎαα

ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ xlog Π² Π±Π°ΠΉΡΠ°Ρ
$ select
pg_xlog_location_diff(pg_current_xlog_location(),'0/00000000');
Π»Π°Π³ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π² Π±Π°ΠΉΡΠ°Ρ
$ select
client_addr,
pg_xlog_location_diff(pg_current_xlog_location(), replay_location)
from pg_stat_replication;
Π»Π°Π³ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°Ρ
$ select
extract(epoch from now() - pg_last_xact_replay_timestamp());ααΎβααΏαβααΆααβαααβαα»αβααααΆ αααβααβααΆαβααΆαβααΊααααΆαβααααβαααα Lag ααΊααΆααΆαααΊααααΆαααααΆαα ααααααΈαα αααααΊαα·αααααααα»αααααΆαααΆααααΆαααΈαααα
ααΆαα ααα»ααααΈαααΆααααααΆααααΆααααααΆααααα
- ααΆβααΆβααααααααβααβααΆαβαααβαα·αβα’αΆα βαααααααΆαβααΆαβαααααβααααΆαααααβα―αααΆαα
- ααΆαααααααΊααΆααα α»ααααααΆααααα’αΆα ααΎαααΆα α¬ααΆααααα»αααΎααααααααααααααΆα αα αααααααα·αααααααα·αααΆαααααα αααααΆαα αααα α αΎαααΆαα·αα’αΆα ααα·αααΆα‘αΎααα·αααΆαααα
- αα·ααα½αααααΆαα αα½αααααΆαααΊααΆααααΈαααααααα½αα α αΎαβαααα»αβααΆαβααΎαβααΆβααΈα α¬βααΈβααβα αΎα ααα»ααααβααΆβααβα’αΆα βααΎαβα‘αΎαβαααα
α αΎααααααΊααΆαααα½αα
ααα½αααΈαααα’αα»ααααΆαα±ααααΎαααααΎαααα·αα·α ααΎαα’αΆα
αααΆααααααΆαααΆααΎα
ααα½αααα»ααααΆαααααΌαααΆααααααααΆαα
αααα»ααααααα ααα»ααααα·ααααα·ααΆαααααααΎαα ααΆααα»αααΆααααααα pg_xlog_location_diff α αΎαααΎαα’αΆα
αααΆααααααΆαααΆαααΊαααααΆαα
ααααααΆαα αα·ααα·ααΆααΈα ααΎαααααααΎαααααααΈαα·αααααΆαααα (VIEWs) αααααΆααααΏαααααααααα
α αααΆα: αααα½αα±αα pg_xlog_locationαα»αααΆα diff() α’αααα’αΆα ααααΎαααααΆαααααΆααα·ααΈαα αα·αααααΈααΆαααα½αααΈααΈααΆαααα½ααααα ααΆαβααΆβαα»αααΆαα
ααΆαα½αααΉαααΆαααΊααααΆα ααααα·αααΆαα·ααΆααΈ ααΆαααααα½αα ααααα·αααΎαα·αααΆααααααααΆααα ααΎαααα ααααα·ααααα·ααΆααα ααΈααααααα αα 15 ααΆααΈαα»α α αΎααα·αααΆααααααααΆααα α αΎαααααα·αααΎααΎααα·αα·αααααΎαααΆαααΊααααΆααα ααΎααΆαα ααααααα ααΎαααΉαααΎαααΆαααΊααααΆα 15 ααΆααΈα αααααΊααΆααααααα αα αΆαα α αΎαβααΆβα’αΆα βααΆαβα±ααβααΆαβααΆαβαααα‘αΆααααΆααβαα βαααβαααβα’αααβααΎαβααΆαβααΊααααΆαβαααβα

pg_stat_all_tables ααΊααΆαα·αααααΆαααααΆααααααααααα½αααααααααα ααΆαααα αΆααααα·αα·αα ααΎααΆααΆαα αα ααααααααΎαααΆαααΆααΆααα αααα»α database ααΆααααααααΆαααααααΆαα½αααΆ αααααααΆαααααααΎαα’αΆα ααα½αααΆαααααααΆααααααΈαα·αααααΆααααα

select
relname,
pg_size_pretty(pg_relation_size(relname::regclass)) as size,
seq_scan, seq_tup_read,
seq_scan / seq_tup_read as seq_tup_avg
from pg_stat_user_tables
where seq_tup_read > 0 order by 3,4 desc limit 5;ααΏαααααΌααααααΎαα’αΆα ααΎαααΊααΆααααααααΆααΆαααΆαααααΆαααααααα ααααααα½αααΆαααααΆααααΈααΆαα’αα»αααααΆαααααααΊαα·αα αΆαααΆα αα’αΆαααααα αΎααα·ααααα αΆαααΆααΎαααααΌαααααΎα’αααΈαα½ααα½α αα α αΎαα
ααααααΆαααΆαααααααΆαααααααααΈααΈα - seq_tup_read α αααβααΆβα ααα½αβαα½αβαααβαααβααΆαβαααα‘ααβααβααΈβααΆαβαααααβααΆαβααααΆααβα ααααα·αααΎα ααα½ααααααααΎαααΈ 1, 000, 10, 000 ααααααααΊααΆααΌα ααΆαααα½α α αΎααααα’ααααααα ααααΆααααΌααααααΎααα·αα·αααααα ααααααααΆαα½α ααΌα ααααααΆαα αΌαααααΎααΊααΆααα·αα·αααα α¬ααΆα’αΆα ααααΎαα ααΆαααΎααααΈαααααΎαααααα·αααααΆααααα½ααααααααΎααΆααααααααΆαααααΆαααααααααΌα ααααα ααααα·αααΎαα‘αΎαααα
α§ααΆα αααααΆαααααα½α - α αΌααα·ααΆαααΆααααΎαα½ααααααΆα OFFSET αααα·α LIMIT ααΆααααααααΆα α§ααΆα ααα 100 αα½ααααα»αααΆααΆααα½αααααΌαααΆαααααα α αΎααααααΆααααΈααα 000 αα½ααααααααΌαααΆαααααΌαααΆααα α αΎααα½ααααααΆααααααααΈαα»αααααΌαααΆααααα ααα αααβααβααΆβααααΈβα’αΆαααααβαααα α αΎαααααΎααααααααααΌαααααααΎα±αααααααΎαα α αΎααααααΊααΆαααα½α SQL ααααΆαααααα½ααααα’αααα’αΆα ααΎαααΆ αα·αααΆααααααααααααααα½αααΆαα

select
relname,
pg_size_pretty(pg_total_relation_size(relname::regclass)) as
full_size,
pg_size_pretty(pg_relation_size(relname::regclass)) as
table_size,
pg_size_pretty(pg_total_relation_size(relname::regclass) -
pg_relation_size(relname::regclass)) as index_size
from pg_stat_user_tables
order by pg_total_relation_size(relname::regclass) desc limit 10;ααα αααΆααΆαααα’αΆα
ααα½αααΆααααααααΎααΆααΆαααα αα·αααααΎααααΆαααα»αααΆααααααα pg_total_relation_size(), pg_relation_size().
ααΆααΌαα
ααΆαααΆααααααααΆααααΆ dt ΠΈ diαααα’αααα’αΆα
ααααΎαααα»α PSQL αα·αααΎαααα αααΆααΆα αα·ααα·αα·αααααααααα
αααααΆαααΆαααΆααααα ααΆαααααΎααααΆαααα»αααΆααα½αα±ααααΎααα·αα·αααααΎαααα αααααΆααΆα ααΌααααΈαααα·αααΌαααΈαα·αα·ααααααααΈ α¬ααααα·ααα·αααΈαα·αα·ααααααααΈ α αΎαααααΎααΆααααΆαααααααΆααα½α α αΎααααααα’ααααΎααααΎαααααΌαααααΆααα·αααααα αααααΊαααααααααΆααΈαα ααααΎαααΆαα½αααΎαα ααΎα’αΆααααααααΈααα’αααΈ α αΎαααΆαααΆαααααα·ααααΆααα½αα ααα½αα’αααΈααΆααααααΎαααααα·αααααΆαααα αα

ααααααααααααΆαα ααΎαααααααααΆααΊααΆα’αααΈ? αααααΎαααααα·ααααα·ααΆα UPDATE - ααααα·ααααα·ααΆαααααΎαα
αα
α»ααααααααΆααα½ααααα»αααΆααΆαα ααΆααα·αααΆαααααΎαα
αα
α»ααααααααΆαααΊααΆααααα·ααααα·ααΆαααΈα (α¬ααΌααααΈααα
αααΎα) α ααΆβαααα»αβαααα
αΌαβααααβαα½αβαααβααααΈ αα·αβαααααΆααβααααβαα½αβαααβα
αΆααβααΆβαααβααααΎβα αΎαα ααααααα autovacuum ααΉααα α αΎααααα’αΆααααααΆααααααααααααΎααΆααααα α αΎααααααΆαααααααααααααΆααΆααααααΆααααααΎα‘αΎααα·αα
ααααα ααΆαααααΎαα αα α»ααααααααΆααα·ααααααααΆααααα’αααΈααΆαααααΎα±ααααΆααααααααΆααΆααααααα ααΆαα ααααΆααΆαααααΎαα αα α»ααααααααΆααααααααααα ααααα·αααΎα’αααααΆααα·αα·ααααα αααΎααα ααΎααΆααΆα αααααΆααααααΆαα½αααΉαααΆαα’αΆααααα αα·αα·ααααααΆααα’αααααααΆααααααΆαααααΎαα αα α»ααααααααΆααααα»ααααα½αα αΌααα½αααααΉαααααΌαααααΎαα αα α»ααααααααΆααααααα αα·αα·ααααααΆαααααααααΉαααΆααααααα½αααααααααααΎααααα αααααΉαααααΌααααα’αΆαα

select
s.relname,
pg_size_pretty(pg_relation_size(relid)),
coalesce(n_tup_ins,0) + 2 * coalesce(n_tup_upd,0) -
coalesce(n_tup_hot_upd,0) + coalesce(n_tup_del,0) AS total_writes,
(coalesce(n_tup_hot_upd,0)::float * 100 / (case when n_tup_upd > 0
then n_tup_upd else 1 end)::float)::numeric(10,2) AS hot_rate,
(select v[1] FROM regexp_matches(reloptions::text,E'fillfactor=(\d+)') as
r(v) limit 1) AS fillfactor
from pg_stat_all_tables s
join pg_class c ON c.oid=relid
order by total_writes desc limit 50;α αΎααααααΆαααααΆααα
ααΆααααααΆ UPDATE ααΊααΆααααα·ααααα·ααΆααααααααααααα ααα»αααααα½αααα’αΆα
ααααΌαααΆαααααΎα±ααααΆααααααΆααααα½αα ααα·ααα hot updates. αα½αααααΆααααα αΆααααα½ααα
αααα»α PostgreSQL αααα 8.3 α α αΎααααααΆα’αααΈ? αααβααΊβααΆβααΆαβα’αΆαααααβααααααβααααΆαβαααβαα·αβαααααΆαβα±ααβαα·αα·ααααβααααΌαβααΆαβαααααΎαβα‘αΎαβαα·αα αααααΊααΎαααααΎαα
αα
α»ααααααααΆααααααααααΆ ααα»ααααααΆααααααααααααΆαα
αααα»αααααα (αααααΆαααααα·αααα·ααααααΆααΆα) ααα»ααααααααααααΌαααΆαααααΎαα
αα
α»ααααααααΆα α αΎαααααααααααα
ααα
ααα’α»ααα
αααααααααΆαααααα
αααα»ααααααα ααΆααααααα·ααααΆαα½αα±ααα
αΆααα’αΆααααααααααα·α
ααααΆαααΆαααα αα
ααααααααΆαααααα
ααααααα αααααΆααΆαα
ααααΆααααΆααααα hot ααααΆαααΆα‘αΎααα·α α αΎαα’αααΈαααααααααΎαααΆαααααα·αααααΎαα
αα
α»ααααααααΆαααααααααα α αΎαα’αααΈαααΎαα‘αΎααααααααααααΆαααααΆααα·α
α
α αΎααα
ααααααα’αααααΆα n_tup_hot_upd αα ααΆααα’ααΆααα αααααΆααααααΆααΆαα’αΆαααααααααααααααΆαα’αΆα
αααααααααααΆα α αΎααααααΆααααααααααααααΆααααΎαααΆααααααΉαααααΆα α αΎαα’αααΈαααΊααα’α

ALTER TABLE table_name SET (fillfactor = 70);αα·ααΈαααααΎαααα·ααΆα hot updateα’αΌ? ααΎαα’αΆα
ααααΎ fillfactor. ααΆαααααααα αααααα αααααααααααΆαααααα»ααα»ααα
ααααααααααααααααα»αααΆααΆααααααααΎ INSERTs α αα
αααααααα·ααΆα
αΆααΉαα
αΌααα
ααΆααααΆααΆα αα½αααααααααααααααΆαααααα»α αα»ααα»αα
αααααααααα
αααα»ααααα αααααΆαααααααααααααΈαα½αααααΌαααΆαααααα·α
α αα·ααααααααααΌαααΆαααααααααααααα α αΎααααααΊααΆα₯αα·ααΆααααααΆαααΎα fillfactor = 100% α
ααΎαα’αΆα ααααααααααΆαααααααα 70% α αααααΊααΆαα½αααΉαααΆααααα αΌα αααααααααΈααααΌαααΆααααα αα ααα»ααααααΆααα 70% αααααααααα»ααααααααααααΌαααΆααααααα α αΎαααΎααα ααα 30% αα αααα»ααα»αααααα»αα αα ααααααα’αααααααΌαααααΎαα αα α»ααααααααΆα ααΆααΉαααΎαα‘αΎααα ααΎααααααααα½α α αΎαααααααααΈαααα½ααααααΉααααα ααΎαααααααΌα ααααΆα α αΎα hot_update ααΉαααααΌαααααΎα αααααααΎα±ααααΆααΆααααααΆααααα½ααααα»αααΆαααααααα ααΎαα»α

select c.relname,
current_setting('autovacuum_vacuum_threshold') as av_base_thresh,
current_setting('autovacuum_vacuum_scale_factor') as av_scale_factor,
(current_setting('autovacuum_vacuum_threshold')::int +
(current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples))
as av_thresh,
s.n_dead_tup
from pg_stat_user_tables s join pg_class c ON s.relname = c.relname
where s.n_dead_tup > (current_setting('autovacuum_vacuum_threshold')::int
+ (current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples));αα½αααααααααααααα·α Autovacuum ααΊααΆαααααααααααααααΆααααα·αα·αα·α αα½α ααΆαααα αααα»α PostgreSQL α ααΎαα’αΆα ααΎαααΎααααα αααα»αααΆααΆααααα»α pg_stat_activity ααΆααΎααΎαααΆααααααααααααααα»ααααΆααα ααααααα ααααααΆαααΆααααα ααΆααΆααΆαααααΆαααααΆααααΆαααααα»αααΆααααααΆααΎααΆααα»ααα»ααααΆααααα»ααα½ααααααΆααΆααα αααααααΆααααΈα
α αααΆα: _α αΆααααΆααααΈ Postgres 10 αα ααααΆαααΆαααΆαα½αααΉαααΆαααΆαααΆαααΆαααΌαααΌααΈααΆααααααΎαα‘αΎαα αααΎα - αα·αααααΆα pg_stat_progress ααΆααααα αΆααααα½αvacuum ααααα½αααααα½ααααα αΆααααΆααααα½ααα·αα·ααα autovacuum αααΆαααααΆααα
ααΎαα’αΆα
ααααΎαααα½αααΆαααααααα α αΎαβααΎαβα’αΆα
βααΎαβααΎαβααΆ ααΎβαααβααΆβαα½αβααααΎβααΆαβααΌαβααΌααΈβα ααα»αααα ααΎααΆαααΌαααΌααΈαα½αα
αΆααααααΎααααααααααΆ αα·ααα
αααααΆ? ααΆαααααααΊααΆααααα
αΆααααααααα’ααααααααααα»αααΆααα·ααΆαα’αααΈαα»αα ααΆαα’αΆαααααααΆαααΎαα‘αΎα ααααααααΈαααα½ααααααααΌαααΆααααα
αΌαα ααααααααααααααΎααααααα’ααααααΆααααα αΆααααα½αα αα» pg_stat_user_tables ααΆααααΆαααΆαααααααααααα n_dead_tup. ααΆαααα αΆαααΈα
ααα½ααα½αααα "ααααΆαα" α α αΎααααΆαααΆα
ααα½ααα½ααααααααΆααααΆαααΎαααΈααααα·αααΆααααΆαααα½α autovacuum ααΉαααααααα»α
α αΎαβααααα·αβαααβααααΌαβααααΆβαααβααααβααΆ? αααααΊααΆααΆαααααΆααααΆααααα
ααα½ααα½ααααααα»ααα
αααα»αααΆααΆαα ααΆααααΆαααΆαααααα autovacuum_vacuum_scale_factor. ααΆαααααααΆαααα α
αΌααα·ααΆαααΆ 10% + ααΆαααααα·αααΌαααααΆααααααααα 50 αααααΆααα α αΎαααΆαα’αααΈααΎαα‘αΎα? αα
ααααααααΎαααΆααα½ααααααααΆααα
αααΎαααΆα "10% + 50" αααα½αααΆααα’αααα
αααα»αααΆααΆα ααΎαααΆααααΆααΆααα
ααΎ autovacuum α

select c.relname,
current_setting('autovacuum_vacuum_threshold') as av_base_thresh,
current_setting('autovacuum_vacuum_scale_factor') as av_scale_factor,
(current_setting('autovacuum_vacuum_threshold')::int +
(current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples))
as av_thresh,
s.n_dead_tup
from pg_stat_user_tables s join pg_class c ON s.relname = c.relname
where s.n_dead_tup > (current_setting('autovacuum_vacuum_threshold')::int
+ (current_setting('autovacuum_vacuum_scale_factor')::float * c.reltuples));ααααααΆαααΆαααααααΆαα
ααα»α
αα½αα ααααα·αααΌαααααΆααααααΆαααααΆαααΆαααααα av_base_thresh ΠΈ av_scale_factor α’αΆα
ααααΌαααΆαα
αΆααααΆααααΆαααααααα»ααααα α αΎαααΆαααα ααααα·αα
αΆααααααΎαααΉααα·ααααααΆααααα ααα»ααααααΆαα»αααααααααΆααααΆααΆαα ααΌα
ααααααΎααααΈααααΆαα
ααΈαααα’αααααααΌαααααΎαααα·α
αα·ααααα·α
α α αΎαααααα·αααΎα’αααα
αΆααα’αΆαααααα α’αααα’αΆα
ααΎααααα·ααααααααααα αααα·αααααααΎαααΈ Avito (αααααααΆαααα
ααΎααααΆαααΊαα·αααααΉαααααΌα α αΎαααααΌαααΆαααααΎαα
αα
α»ααααααααΆααα
αααα»αα’ααααα)α
αα½αααααΆαααααααααααΆαα ααααααα αααα»αααααΈααΆαααααα ααΆααααααΆααααΎααα ααΎαααααΉαααΈαα ααα»ααααααΆαααα·α αΆαααΆααΆαααααΉαααααΌα αα·αααΆαααααα·αααααΆαα’αα»ααααΆαα±ααααΎαααΆαααααααααααααααααΎαααααΌαααΆααααααααααααα αααΎααααααΆαααα» αααααααααααΆααα·α αα½α α
ααΎααΎαα’αΆα ααααΎα’αααΈααΆαα’αααΈααΆ? ααααα·αααΎααΎαααΆααα½αααα α αΎααααΆαααΈαααΌαααΌααΈαα·αα’αΆα αααααααΆαααΆααα αααααΎαα’αΆα αααααΎαα ααα½αα’αααααααΎααΆαααΌαααΌααΈ α¬ααααΆααααααααΎα±αααααΆαααΈαααΌαααΌααΈααΆααααααααΆαααΆααααΌα ααααααΆααααα»α ααααΎαααΆαααΆααΆαααΆαααααααΌα αα α αΎαααΌα αααααα½αααΉαααα α»αα - ααΏαααααΆαααα ααΈαααααΊααΎααααΈαααα½ααα·αα·αααααΆααααα»ααα ααΎααΆα, αααααΆαααα ααΏαααααα αααααααΊαα·ααα·ααααααα αααααΈααΆααΆαα½αααΉαααΆααααααααα§ααααα SSD / NVMe ααααα αααααα αΆααΆαααααα½αα±ααααααααααΆααα

pg_stat_all_indexes ααΊααΆαααα·αα·αα ααΎαα·αα·ααααα ααΆααα·αααααα α αΎαααΎαα’αΆα ααα½αααΆαααααααΆαα’αααΈααΆαααααΎααααΆαααα·αα·ααααααΈααΆα α αΎαααΆα§ααΆα ααα ααΎαα’αΆα αααααααΆααΎαααααααααααΆαα½ααααααΎαααΆαααααααα

ααΌα
ααααααα»αααΆααα·ααΆααα½α
ααα αΎαααΆ update ααΊαα·αααααΉαααααααΎαα
αα
α»ααααααααΆαααΆααΆαααα»ααααααα ααΆαααααα»αααααΎαα
αα
α»ααααααααΆααα·αα·αααααααααα ααΌα
ααααα αΎα ααααα·αααΎααΎαααΆααα·αα·ααααα
αααΎααα
ααΎααΆααΆα ααααα
αααααααΎαα
αα
α»ααααααααΆααα½αααααααα»αααΆααΆα αα·αα·ααααααααΆααααααΆαααααΎαα·αα·ααααααα
αΆαααΆα
αααααΌαααααΎαα
αα
α»ααααααααΆαααααα α αΎα ααααα·αβααΎβααΎαβααΆαβαα·αα·ααααβαααβαα·αβααΆαβααααΎβαααβαα·αβααΆαβααΆαβαααααβαα·αα·αααα αααβαα½αααβαααα½αβααΆαα½αβααΎαβααΌα
βααΆ ballastα α αΎαα’αααααααΌααααα
αΆαααα½αααα αααααΆαααααα αΆαααααΎαααααΌαααΆαααΆααα½αα idx_scan. ααΎαααααΆααααααΎαα
ααα½αααααΆαααααααααααααααα ααααα·αααΎαααααααααααΆαααΆααααααααΌααααααα»ααααααααααααααΆααααα»ααααα·αα· (αααΆαα αα
ααΆαα 2-3 αααααΆα α) αααααααααΆααΆαααααααΊααΆααααααααααα·αααα’ ααΎαααααΌααααα
αΆαααα½αααΆα
α αααΆα: αα αααααααααααα·αα·ααααααααα·αααααΎαα αααα»αααααΈααααΆαααααααΈαααΆαα ααααααα ααααα α’αααααααΌααα·αα·αααααΎαααααΆααααΆααα’ααααα ααααα ααααα αααα·αα·αα·ααααααΆααααα α αΎαααααα·αααΎαα·αα·αααααα·αααααΌαααΆαααααΎαα ααΎαα αααααΆα’αΆα ααααΎαα ααΎααΆαα αααα (ααααα·αααΎααΆαααααα»α)α
αααααααΆααααΈαα
ααΆαααααααΊααΆα§ααΆα ααααααα½αααααα·ααααααααααααααααααααΆααααααααααΎααα·αα·ααααααααα·αααααΎα
αααααααΆααααΈααΈαααΊααΆαααα½ααα½αα±ααα αΆααα’αΆααααααα ααΆααααααα·ααααΆααααα·ααααααΆααΏαααΌα ααΆα αα αααα»ααααα αααα»αααΌαααααΆαααΆα±αααα·αα·αααα‘αΎααα·αα

ααΎααΆαα’αααΈαααααααα½αααααΌαααΆααααααααααααααααααα?
αα·αα·ααααααααα·αααααΎααΊα’αΆαααααα
αα½ααααααααααααααααα
αααααΊαααααα·ααααα·ααΆαα’αΆαααααα
ααΆαααΆααααααααααααΆαααααΆαααΈαααΌαααΌααΈα
ααααα·αααΎααΎααα»ααα·αα·ααααααααα·αααααΎ αααααΎαααΉαααααΎα±ααααΌαααααΆααα·ααααααααΆαααααααααΎαα‘αΎαααα»αααααα

αα·αααααΆααααααΆααααΊ pg_stat_activity. αααααΊααΆ analogue ααα§αααααααααΎααααΆαα psααΆααααα
αααα»α PostgreSQL ααα»αααααα ααααα·αααΎ ps'α’αΌα α’αααααΎαααααΎαααΆααα
αααα»αααααααααααααα·ααααα·ααΆα αααααΆαααα pg_stat_activity ααΉααααα αΆαα’αααααΈαααααααΆααα
ααΆααααα»α PostgreSQL α
ααΎααΎαα’αΆα ααα’αααΈααΈααΈααα?

select
count(*)*100/(select current_setting('max_connections')::int)
from pg_stat_activity;ααΎαα’αΆα ααΎαααΎααααααααΆαααΆααααΌαααααααα»αααΎαα‘αΎααα αααα»αααΌαααααΆααα·ααααααα ααΎαα’αΆα ααΆαααααααΆαααααΈα α’αααΈααααααααΆαααΆααααα»ααα ααΈααα ααΆααααααΆααααααΈαα·αααααΌαααΆαααα½ααααα ααα α»ααααα»αα αΌααα αααα»ααααααα·ααΈα

select
client_addr, usename, datname, count(*)
from pg_stat_activity group by 1,2,3 order by 4 desc;ααΎαα’αΆα
ααααΎαααΆααααα½αααΌα
ααα α αΎαααΎαααΆαααααα»αααααΆααααααΆαααααααΆαααααα
ααΉαααααααααα’αα·ααααΆααααΆααααααΆαα α αΎαααΎαααΆααΎααααΆαααααΎαααΆαααΆααααααΆααα
αααΎαααΆαααα α αΎααα
αααα»αααααΈαααααΆααααααα±ααααα ααΎαααΎαα’αααααααΎααααΆαααααα cron_role ααΎα 508 ααΆααααααΆααα α αΎαααΆαα’αααΈαα½αααΆαααΎαα‘αΎαα
ααααααΆααα α’αααααααΌααααααααΆαααΆα αΎαααΎαα α αΎαααΆαα·αααΆα’αΆα
αα
αα½α
αααααΆαααααΊααΆααααααααα
ααα½ααα·αααααααααΈααααΆααααααΆααα

ααααα·αααΎααΎαααΆαααΆααααα»α OLTP αααα½ααα½αααααΏα ααΏααααα»α α αΎααα·ααα½αααΆααααα½αααΌαααα ααααααΆαααΆαααααααααα·αααΎααΆαααΆαααααΎαα»αααΌαααααααα»αααααααααααΈαα·αααΆαα’αααΈαααααααΌααααα½αααΆαααααααααααα»αααα αααα»αααααααααα αααα½ααααααααΎα±αααααααΆαααααααΌαααααΆααα·αααααα αα½αααΆαααααΎαα₯αααα·ααααααΆααΆααα ααααααααΆααααα ααααΆααΆαααΎαα‘αΎαα ααΆααααΆααα½ααααααα αα·ααααα½ααααα α αΆαααΆα αααααΌααααα ααα

select
client_addr, usename, datname,
clock_timestamp() - xact_start as xact_age,
clock_timestamp() - query_start as query_age,
query
from pg_stat_activity order by xact_start, query_start;ααΌαα
αααΆαα ααΆαα½αααΉαααααΎαααααα ααΎαα’αΆα
αααααααααΎ αα·αααααα·ααααα·ααΆααααααααααα ααΎαααααΎαα»αααΆα clock_timestamp() ααΎααααΈααααααααααααΆααααΎααΆαα ααααΎααααααααααΎαααΆαααααΎα ααΎαα’αΆα
α
αα
αΆααα½ααα ααααα·ααααα·αα½αααα explainααΌααααα‘ααααΎααααααΆα αα·ααα·ααΈαααααΎαααααα·αααααΆαα ααΎαααΆααααααΎαααααααΆααααα
αα
α»αααααα α αΎαααααααααΆααα

select * from pg_stat_activity where state in
('idle in transaction', 'idle in transaction (aborted)';ααααα·ααααα·ααΆααα·αααα’ααΊαα ααααααααα»αααααα·ααααα·ααΆα αα·ααα ααααααααα»αααααα·ααααα·ααΆα (αααααα) ααααα·ααααα·ααΆαα
ααΎβααΆβααΆααααβαααΆαβααΌα
ααααα
? ααααα·ααααα·ααΆαααΆαααααα
αααΎαα α αΎααααααα½ααααα»αα
ααααααααααΆαααααα’αΆα
ααα½ααααα
αααααΆααααΆαα ααΆαααΆαααΎααααΈααααααααα state αα
αααα»ααα·αααααΆααααα α αΎαααΎαααααΎααΆααΎααααΈαααααααααα

select * from pg_stat_activity where state in
('idle in transaction', 'idle in transaction (aborted)';α αΎαααΌα αααα»αααΆααα·ααΆαααΆαααΎ ααααααΆααααΈααααα ααααααααα»αααααα·ααααα·ααΆα αα·αααααααααα»αααααα·ααααα·ααΆα (αααααα) ααΊαα·αααα’α ααΎβααΆβααΆβα’αααΈ? αααααΊααΆαααααααααααα·ααΈααΎαααααα·ααααα·ααΆα ααααΎαααααααΆααα½αα ααα½α αα·αααααΎαααΆαα’αΆααΈααααααααααααα½αα ααααα·ααααα·ααΆααα ααααΎαα αα α ααΆαααα½α ααααΆαα’αααΈααΎαα‘αΎααα αααα»αααΆ ααΆααααΌαααΆαααΆααααααΆαα α αΆααααααΎαα½ααααααΆαααααΆααααααΌα α αΎααα ααα’αΆα αααααΎαααΆαα αΎααααααααΆααΆααααααααα αααααΆαααααααΆαααααααααααααΆαααΈαααααα·ααααα·ααΆα Postrges α α αΎαααααα·ααααα·ααΆααααααααααα½αααααααΌαααΆαααΆααααααααααααΆααΆααααααααααΆααααΆααΌαα αααα»αααααΈααΆαααααα
ααααα·αααΎα’αααααΎαααΆα’αααααΆαα αααΎαααΆα 5-10-20 αααα½ααααα αααα»αααΌαααααΆααα·ααααααααααα’ααα αααα’αααααααΌααααα½αααΆαααα α αΎαα αΆααααααΎαααααΎα’αααΈαα½αααΆαα½ααα½αααα
αα
ααΈαααααΎαααααααΎαααααΆαααααααααΆααααΆαααααα clock_timestamp(). ααΎαααΆααααααα·ααααα·ααΆα ααΎααααααΎαααααα·αααααΆααααααα·ααΈα

ααΌα
ααααααα»αααΆααα·ααΆαααΆαααΎ ααΆαα
αΆααααααΊααΆααααααααααα·ααααα·ααΆαααΈα α¬α
αααΎαααααα½ααααααααααααΆααααααΆααα½α α¬αααα»ααα½αα αααααΆαααααααΎαααΆαααΆααα½αα waiting ααΆαα½αααΉαααααααααΌααΈα true α¬ false.
αα·α - αααααΆααααααΆααααΎαααΆααααα»ααααα αΆαα’αααΈαα½αααααΌαααααΎα αα ααααααααααΎαααΆααααα»ααααα αΆα αααα’αα·αα·αααααα αΆααααααΎαααααΎαααΆααααααα»ααααα αΆααααα αααΆαααΈαααααααα αααα»ααααααα·ααΈαα»αααα’αααα»α α αΎααααα αΆααααααα
αααααΆα: _α
αΆααααααΎαααΈ Postgres 9.6 ααΆα waiting ααα
αα αα·ααααα½ααααααΆαααααααΆαααΈαααααααααα wait_event_type ΠΈ wait_event._

ααΎαααα»ααα½αααααΎα’αααΈ? ααααα·αααΎα’αααααΎαααΆααα·αααΆααΌαααα αΎααααα’ααααα½ααααααα αΆααααααΎααααααα ααΎαααααΆααααααΆααααααα·ααααα·ααΆαααααααα ααΎαβαααααβαα βα’αααβα’αα·ααααααβααΌαβα’αααΈβαααβααααΌαβααααΎβα±ααβαααααΎαβα‘αΎαβαααβααααβααΆβααΎααααΈβαα»αβα±ααβααΆαβααΆαβααααα½αααααααβαααααΆααβααααΆαα α αΎαβαααααΆααβααβα’αααβα’αα·ααααααβαααααΎαβααααα·αααααΆαβαααααα·ααΈβααΎααααΈβαα»αβα±ααβααΆβααΎαα‘αΎαα
α αΎαβααααΈβααααααααα ααα»ααααβαα·αβα’αΆα βαααααΆαβα²ααβααααΆααβαααβααα ααΆαααΎαα‘αΎαααααΆαααΆααααΆααα ααααα·ααααα·ααΆαααΈαααΆαααααΎαα αα α»ααααααααΆαααααΆαααΈα αααααΆαααααα½αααα αΌαααααΎααΆααααααα αα ααΆααααααΆαααααααα»αααααΆα PostgreSQL αααα»αααααΈααααααα·αααΆααα ααααααα·ααααα·ααΆαααααααα½αα―αααΎααααΈα±ααα’αααααααααααα’αΆα ααααααααΎααΆαααΆαα αααβααΆβααααΆαβααΆαααβα α»αβααααα α αΎαβααΆαβαα·αβαααβααΈβαααα½αβα―αβααα ααΌα αααα PostgreSQL ααααΌαααΆααααααα±ααα αΆαααα·ααΆαααΆαααααΆααα

α αΎααααααΊααΆαααα½αααΈααααα’αα»ααααΆαα±ααα’αααααΆαααΆαααΆαα
αΆααααα ααΎαααααΎαα·αααααΆα pg_locksαααα’αα»ααααΆαα±ααα’αααααΆαααΆαααααααααα
α αΎααααααααΆααααΈαα½αααΊααΆα’αααααααααΎαα»αααααααα½αα―αα ααΆαααααΆααα
α αΎααααααααΆααααΈααΈαααΊααΆα’αααααααααΈααΈααα ααΆααΆααααααααααααα»αααΆαα’αΆαααΆαα½αα±ααα αΆααα’αΆααααααααΆααα
ααΌα
ααααααΎααΎαααΎαα’αααΈ? ααΎαααΎαααααΎααΈαα ααααα·ααααα·ααΆαααΆαα½α ALTER TABLE ααΊααΆααααα·ααααα·ααΆααααααααΆααα ααΆααΆαα
αΆααααααΎα ααα»αααααα·αααΆααααα
αα α αΎααααααα·ααΈαααααΆααααα ααααααα·ααααα·ααΆαααααααα»αααααΎα’αααΈααααααααααα
ααααααααΆαα½αα α αΎαααααΎααΈααΈαααΊααΆαααααΎαα
αα
α»ααααααααΆαα ααΆαααα
αΆααααααΆααααΆααΆαααααΆααααααΌαααΎααααΈαααα
αααα»ααααααααααΆαααΆαααααααΆα
αααβααΆβααααβαααβααΎαβα’αΆα βααΉαβααΆβα’αααβααΆβα αΆααααβα’αααααΆ α’αααααΆβααΆααβα’αααααΆ α αΎαβααΎαβα’αΆα βαααααααΆαβαααα αΆβαααβααα αααβα

αααΌαα»ααααααΆααααΊ pg_stat_statements. ααΌα
ααααααα»αααΆααα·ααΆα ααΆααΆαααΌαα»αα ααΎααααΈααααΎααΆ α’αααααααΌααααα»ααααααΆαααααααααΆαααα»αααΆαααααααα
ααΆαααααααα α
αΆααααααΎα PostgreSQL α‘αΎααα·α ααα‘αΎααααΌαα»α (ααΆαα½αααΆααααααααΆαα½α) α αΎααααααΆααααααΎαααΉαααΆααα·αααααΆαααααΈα

CΡΠ΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΡΠΎΡΠ° Π² ΠΌΠΈΠ»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ
$ select (sum(total_time) / sum(calls))::numeric(6,3)
from pg_stat_statements;
Π‘Π°ΠΌΡΠ΅ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΠΈΡΡΡΠΈΠ΅ (Π² shared_buffers) Π·Π°ΠΏΡΠΎΡΡ
$ select query, shared_blks_dirtied
from pg_stat_statements
where shared_blks_dirtied > 0 order by 2 desc;ααΎααΎαα’αΆα ααα’αααΈααΈααΈααα? ααααα·αααΎααΎααα·ααΆαα’αααΈααΏαααΆαααα ααΎαα’αΆα α αααΆααααα’αα»αααααααα½αααΆαααααα αααααααΆαααα»αααΎαα‘αΎα αααααΆααααααΆ PostgreSQL αααα»αααααΎαααααΊαα α αΎαα’αααΈαα½αααααΌαααααΎα
ααΎαα’αΆα ααΎαααΎαααααα·ααααα·ααΆααααααααααααααα»ααα αααα»αααΌαααααΆααα·αααααααααααααΆααααααΌααα·αααααααα αααα»αααα·ααααααα’αΆαααααααααΆαα αααααααα ααΎαααΆα’αααααΆααααΎαα αα α»ααααααααΆα α¬αα»ααα·αααααααα ααΈαααα
α αΎαααΎαααααΆααααα’αΆα ααΎααααα·αα·αααααααααΆαααααΆααααααΎααΆαααααα

ΠΡ pg_stat_statements ααααΎααΎααααΈαααααΎααααΆαααΆαααα ααΎαααααααααα·αα·α‘αΎααα·ααααααααα»ααα½αααααα α
αΌαααΎααααααΌαααΆα αα»αααΉαααααααααα·αα·α‘αΎααα·ααα
αααααααα ααΎααααααΎααααΆαααΆααααα½αα αααααΊααΆαααααααΆαααα
ααΆαααααΆαααΆαααα α’αααα’αΆα
ααΎαααΆααΆαα

αα½αβααΎαβαααα»αβααααΎα’αααΈβα αααΉα? ααΎαααααΆαααα·αα·αα½ααααααΆαααααα½αααΆααα’ααα αααααΆαααα αααααΆαααααα½αααΈαα½αα ααΎαααΆααααΆααα½αα ααααααΈαα½ααααααααΆα αααααααα·αα·αα½ααααα
α αΎαααΎααΎαα’αΆα ααΎαα’αααΈαααα? ααΎαα’αΆα ααΎαααΎααααααααΆααααα·ααααα·ααα»αααααααΎααΆααα’ααααααααααααΆααααΆαααα½ααααααΆααααΉαααααααΆααααααααααααΎααααααααααΆααα’ααα ααΎαα’αΆα αα·αα·αααααΎαααΆαααααΎααααΆαα CPU αα·α I/O ααΆααααααΉαααΌαααΆααα½αα α αΎαααΎααααΈαααααΎαααααα·αααααΆαααααΎααΆααααααα½α α αΎαα ααΎααααα»ααααααΎααααα½αααααΌααααααα’ααααΎαααΆαααΆαααααα α αΎααααα»αααα½αααΆαα’αΆα αΆααα½α α αΎααααααΆααααΆααα·αααΎα’αααΈαααααααΌααααααΎαααααα·αααααΆαα

ααΎααΎαααΆαα’αααΈαα ααΈαααααααΆα? αα βααΆαβααΆαβααΆααβααααΎβαα½αβα ααα½αβαααβαααα»αβαα·αβααΆαβαα·α αΆαααΆ αααααβαααβααααΆβααΆαβαααααα
ααΆα pgstattuple ααααΆαααΌαα»αααααααααΈαααα
αααα·ααΆαααΆααααααααΆααααααα ααΆα’αα»ααααΆαα±ααα’αααααΆαααααα bloat αα»αααα α
ααΆα ααΆααααααααΆααΆαα α αΎαααααα·αααΎααΆαααααααααααΆαααα ααα α’αααααααΌαααααΆα
αα ααααΎα§αααααααααααα αα·ααα»αααΆα pgstattuple ααααΎααΆααααα»αααααααααΌαα α αΎααα»ααΆααααα
αααΎαααΆααΉαααααΎαααΆαααΆαααΌαα

ααΆααα½αα
αααααααααΆααααΊ pg_buffercache. ααΆβα’αα»ααααΆαβα±ααβα’αααβαα·αα·αααβααΎαβααα·ααααααβα’αΆααααβαααβααΆαβα
ααβαααααα ααΆααΎβαααααβααα·ααααααβα’αΆααααβααΆααΆαβααΆβααααΌαβααΆαβααααΎβαααΆαβααααΆααβαα·αβααααα·αβααΆα α αΎαααΆααααΆααααα’αα»ααααΆαα±ααα’αααααααΎααα
αααα»αααα·ααααααα’αΆαααααααααΆαα
ααααααα αα·αααΆααααααα’αααΈααααααα»αααΎαα‘αΎααα
ααΈαααα
αααΌαα»ααααααΆααααΊ pgfincore. ααΆα’αα»ααααΆαα±ααα’αααααααΎααααα·ααααα·ααΆαααΆααΆαααααα·αααΆαααΆααααααΆαα α
ααΆααααααααα mincore()αααααΊααΆα’αα»ααααΆαα±ααα’ααααααα»αααΆααΆααα
αααα»αααα·ααααααα’αΆαααααααααΆαα
ααααααα α¬ααααΆα
ααα α αΎαααΆα’αα»ααααΆαα±αα αα·αα·αααααΎαααααΆαααααααΆαααααααααααααααααααααα·ααααα·ααΆα αααααΊααΆααΎααΆααΆαααΆααααΆααααα»ααααΆααα
αααα»αααααΆαααααααΆααααααα αα
αααα»αααα·ααααααα’αΆαααααααααΆαα
ααααααα α αΎαααααΆααααα’αα»ααααΆαα±ααα’αααααΆααααααααααα»ααα
ααΎαα»α
αααΌαα»ααααααΆααααΊ pg_stat_kcache. ααΆααααααΎααΆαα α
ααΆααααααααααααααα getrusage(). α αΎαααΆααααα·ααααα·ααΆαα»α αα·ααααααααΆαααααΎαα»αααααΌαααΆαααααα·ααααα·α α αΎααα
αααα»ααααα·αα·αααααα½αααΆαααΆα’αα»ααααΆαα±ααααΎααααΆαααααααΆαααΆααΎααααΎααααααΎαα
αααΆαααα»ααααΆααα
ααΎααΆα I / O αααααΊααααα·ααααα·ααΆαααΆαα½αααααααααα―αααΆααα·αααΎαααΆαααααΎααααΆαααα½αααααΆαα ααααααΆαααΆααααα αααΌαα»αααααα
ααααα (khe-khe) α αΎααααααΆααααΆαααΆαααααααΆ ααΆααΆαααΆα PostgreSQL 9.4 αα·α pg_stat_statements ααααααα»αααΆαααΎαα‘αΎαααΈαα»αα

αααααααΆααααα»αααΆαααααΎαααα·αα·ααΆαααααααααα α’ααααα·αααααΌαααΆααααααα·ααΈααΆααΈααΈααΈααα α’αααα’αΆα ααΎα ααΎα ααααΎα’αααΈαα½α α’αα»ααααα
ααΆαααααΎααααΆαααααα·αα·ααΊααΆααααα½α ααΆααΆ SQL ααααααΆα α’αααααΆααααααΌαααααΎ α αααααααΆ ααααΎααΆ ααΎαααΆα
αααα·αα·αα½αααααΎααααα½αα ααααα·αααΎα’αααααΆααααα½α α’αααααΆααα αααααα·αα· - ααΎα ααΆαααΆαααααα·ααααΆα αα·ααΆαααααααα
αα·ααα·αααααα ααααΎα αααΎα αα·ααααααα αααΎαα α’ααααααααα’αΆα αααααΎαααααα·αααααΆααααα½ααααααΆαααααΆαααα½αα ααα½αα α’αααα’αΆα αααααΎαααααααααΆαααααα½αααααα’αααααααααΎαααααΆαααααΉαα’ααααααααΎαααΆαα αααΆααααΎα α αΎαααααΎααΆα

ααα ααααΈααα
αααααααΆαααααααΆααα»ααααΆααααααααΌαααΆαααααΎααα αααα»αα’ααααα αααααα’ααααΎα’αααΈαααααΆααα αααα»ααααΆαααΆαααα
α’ααααα·αααααααααααααααααα
(eng)
α’ααααααααΌααααα·αα·
αα»αααΆαααααααααααααααααα
αααΌαα»ααα½αα
αααα
α§αααααααααΎααααΆαα SQL αα·αα§ααΆα αααααΌα sql
ααΌαα’ααα»αα’αααααΆααα’ααααααΆαααααΆααααΆαααα α·ααααα»αααΆααααααα’ααα!
ααααα: www.habr.com
