当一台服务器不够用时,PostgreSQL进行负载管理。安德烈·萨尔尼科夫(Andrey Salnikov)

我建议熟悉Andrey Salnikov对2019年初报告的解码,“当一台服务器已经不够时,管理PostgreSQL上的负载”


要点:
1)PostgreSQL标准负载平衡实践。首先,我们讨论数据库负载高的原因。下一步是考虑那些负载平衡方法。
2)将讨论有关如何在PostgreSQL中组织复制,同步和异步副本之间的区别以及如何正确配置副本的问题。




, . – Data Egret. . . HeadHunter, Lamoda. DBA PostgreSQL. DBA – . . , .


, - , .


Postgres open source’ community, . , Postgres.


, RDBMS . – enterprise: Oracle MSSQL, open source: MySQL Posgres, .


- . . . – Postgres .


– .


, - . , , , . . . Postgres, , , . , , .



. ? , . , -, .



, .



, , . . , , , , , , .


. , ? , raid 1 raid 0. . -. , , . , . , .



, , – 20 000-30 000. 40 000, , - . .


, . 50 000 . .



, , - - . . – , . . , . , . . . , , - , , , . .



. . , , . . , . .


, . – «exclusive», «share».


20 000 ( ), , - .


: HH Lamoda. , ? 10-20-50 , .


. , .



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


, , Postgres , . . Postgres Posix, , , . – . , , : «, » sleep. , . , . , .



. .



timestamps.


, 30 . . . . RDBMS , . , - . , . , . .



-. , . .


, – idle-. Idle- , - pool connection. , , . , , , , , , , . overhead, , -, .


– . – , .


– , . - , : , . .


– - , . , , , .


? . .


, . ? -, . -, - Postgres ( MVCC), . update/delete, , , , .


idle in transaction , , Postgres . , . . , . , . , . - ( ), 10 , 300 , 400 . . Postgres, .


– waiting. , - . , , . , , .


, . . : - , . , Ruby, Python. , . , , - , . idle in transaction.


instances , . . - . . . , .



-. , pool connection . pools, . Hibernate pools. , pool. , pool .


, . , , idle-. . . , . , , , . , . , . . .


, , .



, , , . , .



.


, . . , , – . , - .


, , , . . , .


, 2,5 . 2 – transaction log. . , . , . . . 1,5 . : « . ». 0,5 . 2,5 0,5 . , .


. , . , , . .


. ORM-. . , , , . .


, , 2 , , 490 , . 490 , , . - . .


, , . , , , , , .


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


, , . , , . , . . , , . . , , – 3-4 , .


. . , .


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


. Json, , . . . - Json . . , .


. , , , , . . . . , , , . , Json, . Json, . , .



. , join. . , , , , , .


Java , hibernate . Hibernate, , . . , 2 , . , . 2 – , .


, , Python, 490 , . . 5 . . . , . , - , , .


2 . , , . .


, , , . . , , , , . . , , . . . LEFT JOIN, DISTINCT , , - .


GROUP BY – DISTINCT. . . , . .


– COUNT, MAX, MIN , . . , , . , , . , . . . - . . , MIN, MAX . . .


, . «WHERE id IN (SELECT id FROM)», . «NOT EXISTS». id, , .


, . SELECT ids. id , – .


NOT EXISTS , . , : «, id, ». WHERE, . , WHERE , , , .


– . . , - , , . cron- ( ) , , , . , .


. , -, , . - . , , . PIDs . , , .


, HH , cron …, . . cron . , , – .



. . , : Kafka, RabbitMQ, ZeroMQ, .


, . . Skype SkyTools PGQ. . . . . 20 000-30 000 .


– . , . , , .


. . DBA, , Postgres. .


. , , idles. , .


idle-. . . , 10 , 15, 15 , . . idle 15 . , , .


pgbouncer . . , .


PgBouncer transaction-, . . : start transaction commit rollback. , … – . – . , , , .


Pgpool-II, , .


PgBouncer , . . Odyssey. . , . . . . -, , , - Odyssey Pgbouncer. PgBouncer – .


. , COUNT 200 , 200 . MIN , .


200 , 100 . . .


– , . . . , . , , , . , .


, . ? , 100 , 2 200 . , . , 90 % 10 % . 200 , .


. . Oracle, partition. «» . - – .


. .



?



. , , .


. , : , , , . , . , , . , , . , , . , .


. , , , , .


– . , , , : HDD SSD. NVMe . – , . , NVMe, .



? WHERE , , , .


, - . . .



– . – , . – , , . . – drop table, .


. - , , . - . , – Coca-Cola, Pepsi, Nike, Adidas . . , . . . .


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



, , , 4 , 2 , 2 , , : « ?».


, - . , . , RDBMS .



. , , , .


: .


– , . INSERT. INSERT INSERT’ . DELETE DELETE SQL . .


. INSERT . , . . . . , .


, .


9.4 . . 9.6 . 10-11 . , , , , .


Postgres . , – , . .


Postgres, , , , . – . INSERTS DELETES.


, . Slony, Londiste Burcado.


Burcado – . – Slony. Londiste – , . , .


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


, Postgres , . .


? .


– -, , -. -, . , -. - .


. , -. Postgres , Postgres , , , , , , .


. . .


, , , , , , .


. , . , , 10-20 .


. , , .


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


. . , Postgres, . .


. delayed . , . , 8 , 8 , . , 6 , . . . , . . . , 200 – .


. . . . , , - , , . . . – . , . . , , .



. ?


wal_keep_segments. , . - , , , wal- – 16 . . . 1 000 , , 1,5 . , .


, …, , -, , , . , «0» . , .


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


, , , , . , Postgres , .


Synchronous_standby_names. - . . . . . . . . . .


Hot_standby_feedback. , , . , , , . .


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


. . Hot_standby_feedback , -, . , . .


Recovery_min_apply_delay. CI/CD , , - , . 6 . 6 , . 8 .


, . , .



.



Postgres , . .


, full story , -, - . -. .


? , , . , COUNT, MAX - , , .



. 20 , . . . , , - . Join, .



- , KPI -. . , . max_standby_streaming_delay. , 4 , .


, 2 , . . . OLAP-, , -, , . , OLAP-. .


, , HeadHunter , . - . . , , . .


RDBMS , , , RDBMS, . , ClickHouse, .



. , latency. , , , , - . , . , . . . , . , , , .


, - , . - . , . .


, , , , . . . .


HeadHunter上的“上瘾阶段”方案看起来像这样。在那里,它们有11台用于级联服务的服务器。而且有效。他们拥有如此疯狂的巨石,可以像时钟一样毫无问题地工作。部分原因在于其支持团队的服务水平取决于停机时间。他们允许停机时间。以及他们从这段允许的时间中节省了多少,所以他们有丰厚的奖金。他们正在努力。他们有停机时间。


我有关于这个问题的一切。它比较全景,但我认为它将很有用。


视频:



All Articles