我建议您熟悉安德烈·萨尔尼科夫(Andrey Salnikov)对2016年初报告的解读,“应用程序中的典型错误导致postgresql膨胀”
在此报告中,我将分析在设计和编写应用程序代码阶段出现的应用程序中的主要错误。而且我将只考虑那些导致Postgresql膨胀的错误。通常,这是整个系统性能结束的开始,尽管最初并没有可见的先决条件。

很高兴欢迎大家!这份报告的技术性不如我同事的上一份。该报告主要针对后端系统的开发人员,因为我们有大量的客户。他们都犯了同样的错误。我会告诉你有关它们的信息。我将解释这些错误导致的致命和不良后果。

为什么会犯错误?执行它们的原因有两个:偶然,也许是由于对基础和应用程序之间以及基础本身中发生的某种机制的无知。
, . , . , , . .

, . , . - .

: , 2 MB. . – 2 000 .

, , . 2 . – , .
, . 2 MB. .
, . .
– . , . , – -. .

. . , , . , ( ) .
, , . – 2 000 , .

. - . :
- – , . . . . , , - . – , .
- , - exception. exception . .
- – . . . , , .
?
, . bloat. , , . . 10 , 10 , 20 . .
, . , . , , 300 . , . . .

. . . . Postgres , - .

? . . , , . . , . . – , .

. , . . . .
, , , . , . - . , .

: « ?». . , . . . . . - , .

, : . .
, . . , - . . . . .
, , . , .

, , , . . ?
. - . . , , . . , , , . , . - Postgres.
? - , : « , , id , ». id. . , - , , , . .
, - . , , . , . . - , , . PostgreSQL.

? ?
- , - , - . . , , id. id, , . , . , . .
. - , , . ? , . .
. , .
, : , , . «bloat», . , 2 MB, 300 MB? .

?
- 150 . , .
- . , . , , - . , , .
- . , .
- , 10 , 10 , 10 , . . . 20 , 10 . , . - , , , , .
- : « ?», , .

, .
, . , - , - . pgstattuple. , , , .
, , . . . – VACUUM FULL. , , . Pg_repack pgcompacttable – . .
, . . , . .
, , , , , :
- . -. idle in transaction. , , - , .
- , , . . . «» , .

, , VACUUM FULL’ . production.
. .

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

. . , , . .
,

- . , : , . , - ETL. . .
- , . , , . , , .
- .
- . .

? . -.
. . , . , , 2 . , . .

. , . .

, . .
, . .
– . , 3 . – 3 . , , .
, . . – hot_standby_feedback. . Hot_standby_feedback . . .

-? - . , . , - -. , , . . . - .

, . . . , .

, , ?
- . , , . . . , Load Average .
- , . , . , .
- . raid. . . , , .
- : , . .
- - .

. . . , . , , , .
. - - . - . , -, , . . , .

, , . . , , . . , .

- , .
. . . , .
- hot_standby_feedback? , . - . - , .
- max_standby_streaming_delay? , – . , - , . , . , , - . , , – , .
- , , , hot_standby_feedback . . , . . , . . . , .
- , . streaming_delay. . , 6 , . .
:
. .

, .

- . . . , , , .
- . , , . , , , . : .
- . , Liquibase. . . . . , . . , . .
- , .

. , 15 GB. , , .

, , . , . . . 5 , , 7,5.

.
, :
bloat, .

, , , . .

, , . 7,5, . 2 , 1,5 , . . . – . .

, . . .
- . .
- . DBA , DBA. . , , , .
- , , , , . . , :
- , .
- . ? -, . , - -.
- , , , .
- , ( ) , . – .
- , , . - , .
- .
bloat .
.

https://github.com/dataegret/pg-utils/blob/master/sql/table_bloat.sql
https://github.com/dataegret/pg-utils/blob/master/sql/table_bloat_approx.sql
, .
, bloat, pgstattuple.
, . . .
- , bloat .
- , – bloat bloat . , bloat Postgres . MVCC.
- 20 % bloat – . . . .
, , , , .
, bloat:
- , . . VACUUM FULL. , . VACUUM FULL? . . , . . , : , , . VACUUM FULL , .
- pg_repack. VACUUM FULL, . , , , . VACUUM FULL. , , . , -.
- – pgcompacttable. , . pgcompacttable , . , , , . , . . . .
.

bloat , :
, , . . !
! , . ? . . , , - . - joins. - , , - . . . , . ? , ? ?
– , DBA.
.
PostgreSQL , pg_stat_activity, . , .
5 ?
cron . , . . . , . , . .
, ?
. . .
! pg_repack . , …
.
… . ?
, , . . pg_repack , . , - . .
. . - ?
, .
, VACUUM FULL?
VACUUM FULL, , . , . pg_repack . , , .
! . , . . . – . - ?
. Postgres . . , . id , , . , . - . , . .
. . . , . . - , .
, . Postgres . . , , tos-. : , json. . bloat, . . . .
! statement timeout?
. . . . , , . . . . cron, . , . , 10 . . pg_stat_activity.
! . , . - exception, rollback . . . , . , PostgreSQL , ?
, , , ORM, . . auto commit on, , .
. . ?
. . auto commit on. . , - . «start transaction» «end transaction», .
! ! , , - . - , ?
- .
, DBA , . .
, - , .
?
reserved space, . . , , . , . – , . - , .
?
. , , , . , , . .
! . -, , , , . , . ?
.
?
. , pg_rapack, pgcompacttable. , . VACUUM FULL , , . . .
. , . , – , – .
? , . . , ? - . , , , , . , , , , . PostgreSQL , . , , .
安德烈,有一个问题。您在演示过程中显示的这些精美图形是工作的结果,是某种实用程序的结果吗?是什么建立了图表?
这是Okometer服务。
这是商业产品吗?
是。这是一种商业产品。