PostgreSQL рдФрджреНрдпреЛрдЧрд┐рдХ рдЯреНрдпреВрдирд┐рдВрдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг: рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рдпреЛрдЧред рдирд┐рдХреЛрд▓реЗ рд╕рдореЛрдЦрд╛рд╡рд▓реЛрд╡

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдирд┐рдХреЛрд▓реЗ рд╕рдореЛрдЦрд╛рд╡рд▓реЛрд╡ рджреНрд╡рд╛рд░рд╛ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ "рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдХреНрдпреВрдПрд▓ рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдФрджреНрдпреЛрдЧрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг: рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рдпреЛрдЧ"


Shared_buffers = 25% - рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рд╣реИ рдпрд╛ рдереЛрдбрд╝рд╛ рд╣реИ? рдпрд╛ рд╕рд┐рд░реНрдл рд╕рд╣реА? рдХреИрд╕реЗ рд╕рдордЭреЗрдВ рдХрд┐ рдпрд╣ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд╛рдлреА рдкреБрд░рд╛рдиреА рд╣реИ, рдЖрдкрдХреЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ рд╣реИ?


рдпрд╣ postgresql.conf рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рдореБрджреНрджреЗ рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ "рд╡рдпрд╕реНрдХ рддрд░реАрдХреЗ рд╕реЗред" рд▓реЗрдЦреЛрдВ рдФрд░ рдмреНрд▓реЙрдЧреЛрдВ рд╕реЗ рдЕрдВрдзреЗ "рдСрдЯреЛрдЯреНрдпреВрдирд░реНрд╕" рдпрд╛ рдкреБрд░рд╛рдиреА рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреА рдорджрдж рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░:


  1. рд╕рдЦреНрддреА рд╕реЗ рдХреИрд▓рд┐рдмреНрд░реЗрдЯ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рдпреЛрдЧреЛрдВ рдиреЗ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдФрд░ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛, рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ "рдореБрдХрд╛рдмрд▓рд╛" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реАрдм
  2. рдбреАрдмреАрдПрдордПрд╕ рдФрд░ рдУрдПрд╕ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЧрд╣рд░реА рд╕рдордЭред

рдиреИрдиреНрд╕реА рд╕реАрдПрд▓рдЖрдИ ( https://gitlab.com/postgres.ai/nancy ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП , рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ - рдХреБрдЦреНрдпрд╛рдд рд╕рд╛рдЭрд╛_рдмрдлрд░реНрд╕ тАЛтАЛ- рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдФрд░ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ, рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рд╕реЗрдЯрд┐рдВрдЧ рдХреИрд╕реЗ рдЪреБрдиреЗрдВред ред



рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛ред рдпрд╣ рдПрдХ рдРрд╕реА рдХрд╣рд╛рдиреА рд╣реИ рдЬреЛ рдЫрд╣ рдорд╣реАрдиреЗ рд╕реЗ рдХреБрдЫ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдЪрд▓рддреА рд╣реИред



. Postgres 14 . -. Postgres .


RuPostgres Meetup, 2- . 2 000 . RuPostgres.org.


, Highload, , Postgres .



Postgres- 11 .



, Postgres, , 2010- . , DBA, - . , - , .


, . . . . . , , . . , DBA, .



:


  • ┬л ┬╗ тАУ 8 GB 25 % shared_buffers . shared_buffers .
  • ┬л┬╗.


?


  • , . , , Open Source, . . Open Source. , Open Source. , , . .
  • , : .


?



-, DBA instances, . ., тАФ .



. , - , - . , , .



. Pg_stat_statements тАУ . Postgres pgBadger.


. . SELECT * FROM table where ┬л?┬╗ ┬л$┬╗ Postgres 10. тАУ index scan seq scan. . , index scan. , 90 % , seq scan , Postgres . pg_stat_statements, - .


, ┬лlog_min_duration_statement = 0┬╗, . . , . - , , , , .


DBA ?



, - . ? , - - instance, . DBA, staging. . . , production. DBA production, . , , , , . . .



  • .
  • .
  • SQL- ( ).
  • ( ).


. Postgres. . Postgres, . , DBA , DBA . . . 10 , .


тАУ . , , .




, . , 1 000 default_statistict_target тАУ . , production.



, , , .



. .


  • тАУ . . - , , production. . instance Google, . . . . Postgres.
  • тАУ . . . .
  • тАУ . .
  • тАУ , , . . . , , . .


. pg_stat_statements. тАУ , . тАУ .



default_statistics_target = 100, =1 000. , . 8 % .



, pgBadger pg_stat_statements. . , - 88 %. . , , . , . .



, ┬лALTER TABLE тАж ALTER COLUMN┬╗ 100 . , . . , , .




. CI- . .



: , , , . - - . , .


.



-, . production, . , , . .


, , , . . , . Postgres. . production . , , auto_explain.


, , . , , .


Nancy CLI тАУ ┬л ┬╗



. . . , . Open Source Nancy CLI. , .



Nancy тАФ Open Source, Gitlab. , . . help .


, . . , . тАУ delete 40 000 000 IO, , , . . . . , - , . production. .



? , . . , MacBook . , . . - instance , , .


EC2 Instance, . . , 500 i3 instance, i3-16-xlarge. 500 64 . 15 . . . , , тАУ 70 %, . . .



Postgres . - 12- .



. :


  • Dump/sql-.
  • тАУ PGDATA . -. , . , Google . production. .
  • , , Postgres - . pgbench. pgbench. ┬лdb-pgbench┬╗. , scale. , .


:


  • SQL . .
  • . . . . , . pgreplay , Nancy.
  • . , . , . pgbench .


  • SQL - , . . - , , ANALAZE . , . , SQL.
  • . , , , 100 . . , . , , . . pgdata . Postgres , . .


  • , , pgstat***. тАУ pg_stat_statements, pg_stat_kcacke. , . pg_stat_bgwriter pgwriter , checkpoint , . . , shared_buffers , , .
  • Postgres. тАУ .
  • тАУ FlameGraphs.
  • , pgreplay pgbench , . latency TPS. , .
  • .
  • CPU IO. EC2 instance , 100 instances 100 , 10 000 . , instance, - . . . sysbench , , . . , CPU IO .


?



, . , Open Source pgreplay . . , , .


duration timestamp. . тАУ ?



https://gist.github.com/NikolayS/08d9b7b4845371d03e195a8d8df43408


, . , . pg_stat_statements, ( ) , .


. , , , . , . , .


, 802 . , bytes_per sec тАУ 300 kB/s . , , .



! , . ┬лsyslog┬╗.



syslog, . pgbench, , .



тАУ . 161 000 TPS. syslog тАУ Ubuntu 16.04 37 000 TPS. , . . . , , .



CentOS 7, journald , . ., , 44 TPS.



, . , , . syslog, , .



  • IOPS .
  • .
  • , .


pg_stat_statements. , . . pgbench тАУ ┬л-f┬╗.


┬л-f┬╗. ┬л@┬╗ , . . . , 10 % , 20 %. , production.



, production? ? . postgres-checkup. Open Source. .


. , . . . , , , . , , health_check. DBA, health_check. . . OKmeter, . Postgres. OKmeter.io тАУ , , . .


, , , , . CPU, IO , . . , , checkpoint, io checkpoint bgwriter . .


, - , - . OKmeter. , . - .


, , , . . production. , observing server, . : , , Postgres, - , production .


Postgres-checkup. -, . , тАУ . , . ? . . ? . , checkup, .


. . , .



┬л┬╗ тАУ 003 Postgres-checkup


. . 003. pg_stat_statements, total_time.


total_time , , , . . . ? . , , . . .


, , . .


, , , , , , 15 . , , .



? . Postgres_checkup : total-time, calls, rows, shared_blks_read . . , . pg_stat_statements , , reset. pg_stat_database , pg_stat_statements . , 1 000 000 , , .



, . , 56 . . total_time . , . . duration. duration, .


total_time per second тАУ . , , . . . , , . . , , , .


-, . тАУ тАУ . , CPU 100 %, , . . .


rows . , .


. shared_buffers shared_buffers. , , . , , , , , .


тАУ . . тАУ . , . 101 . , .


. 8 . . , . .


тАУ . calls. , 1 000 000. , . , , 0,01 %. . . , . тАУ 5 % . . . 5 % тАУ .


total_time . 14 % . тАУ 11 % . .


, . , , , , . . - , - . . 0, . . 20 %, .



. workload. , 80 % 90 %. 10-20 . pgbench. random. , , . Postgres 12 .


80-90 % total_time. ┬л@┬╗? calls, , , - . , . pgbench .



001 002.


001 тАУ . . . , , . . , . 75 % . . 10 , . .


002 тАУ , . . SELECT, INSERT, UPDATE, DELETE. SELECT FOR UPDATE, .


, SELECT тАУ 82 % , тАУ 74 % total_time. . . , .



: ┬л shared_buffers?┬╗. , тАУ , throughput , . . . TPS QPS.


. 311 select.



. . . , . production, 100% CPU. , , - , .


, 20 , 50 %. . . . , latency 20%- , . , .



:


  • Database Lab.
  • on demand, - тАУ . , , . . standing.
  • . - , , . Nancy , , , .
  • .
  • Postgres. , . , .
  • , , Postgres-checkup.



! .


.


, . . Nancy , ?


- . . , , .


. ? , . , , . . .


, , . . . . . , . , , . , . . .


. , . , ?


. . . . , . . - , - - . , тАУ .


, , . . !


! ! , . GSP?


. . , . . . run on localhost. instance . , . Getlab , GSP. , Google . ??? instances, . -, 70 % . 5-10 % , , . . . , . , , . Google . тАУ 24 . 5 . , .


! ! checkup. stat_statements?


. . тАУ , : . : total_time calls, . , . : . , .


, - ?


. . ?


, , , . - , ?


, .


. , , . , reset stat_statements , , , stat_statements . , , , .


-.


- .


, , тАУ queryid pg_stat_statements . queryid, , .


, .


id?


.


. . . , , 0 тАж


, , , , , stat_statemetns .


Pg_stat_statements . , track_utility = on, .


, .


java hibernate, , -. , 50-100 . - . тАУ pg_stat_statements.max .


, , . - . . . . pg_stat_statements.max. , 70 %. , , . reset. . 70, , , .


рд╣рд╛рдБред рдбрд┐рдлрд╝реЙрд▓реНрдЯ 5,000 рд╣реИред рдФрд░ рдЗрд╕рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред


рдЖрдорддреМрд░ рдкрд░ рд╣рд╛рдБред


рд╡реАрдбрд┐рдпреЛ:



PS рдореИрдВ рдЕрдкрдиреЗ рджрдо рдкрд░ рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ Postgres рдореЗрдВ рдЧреЛрдкрдиреАрдп рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рдЖрдк PostgreSQL Anonymizer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдпреЛрдЬрдирд╛ рд▓рдЧрднрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:



All Articles