Введение в современную postgresql. Часть 1

24
Введение в современную PostgreSQL ДЕНИС ПИРШТУК SLONIK

Upload: dzianis-pirshtuk

Post on 16-Jan-2017

106 views

Category:

Software


6 download

TRANSCRIPT

Page 1: Введение в современную PostgreSQL. Часть 1

Введение в

современную

PostgreSQL

ДЕНИС ПИРШТУК

SLONIK

Page 2: Введение в современную PostgreSQL. Часть 1

КРАТКАЯ ИНФОРМАЦИЯ

• Свободная объектно-реляционная СУБД

• Приемник Ingres и Postres

• Разрабатывается более 20 лет, PostgreSQL = Postres95

• Лицензия MIT

• 5-летний цикл поддержки каждого релиза

• Релизы 1 раз в 12-15 месяцев

• Разрабатывается сообществом

• Доступна коммерческая версияEnterpiseDB Postgres Advanced Server ― замена Oracle

2

Page 3: Введение в современную PostgreSQL. Часть 1

OPERATIONAL

DATABASE

MANAGEMENT

SYSTEMS

3

Page 4: Введение в современную PostgreSQL. Часть 1

DB-ENGINES RANKING OF

POSTGRESQL

4

Page 5: Введение в современную PostgreSQL. Часть 1

5

Page 6: Введение в современную PostgreSQL. Часть 1

ПЛАН ДОКЛАДА

1. Мультиверсионность (MVCC)

2. Буферизация

3. Индексы

4. Слабоструктурированные данные

5. Масштабирование

6

Page 7: Введение в современную PostgreSQL. Часть 1

VISIBILITY MAP

SELECT COUNT(*) FROM contest;

count

--------

709098

(1 row)

Time: 78.839 ms

7

SELECT reltuples AS approximate_row_count FROM pg_classWHERE relname = 'contest';approximate_row_count-----------------------

709098(1 row)Time: 0.215 ms

QUERY PLAN----------------------------------------------------------------------Aggregate (cost=46739.73..46739.74 rows=1 width=0)-> Seq Scan on contest (cost=0.00..44966.98 rows=709098 width=0)

(2 rows)

Page 8: Введение в современную PostgreSQL. Часть 1

MULTI VERSION CONCURRENCY

CONTROL (MVCC)

Предоставление каждому пользователю «снимка» БД,

обладающего тем свойством, что вносимые

пользователем изменения в БД невидимы другим

пользователям до момента фиксации транзакции.

8

Page 9: Введение в современную PostgreSQL. Часть 1

УРОВНИ ИЗОЛЯЦИИ

ТРАНЗАКЦИЙ

1. Read uncommitted (чтение незафиксированных данных)

2. Read committed (чтение фиксированных данных)

3. Repeatable read (повторяемость чтения)

4. Serializable (упорядочиваемость)

9

Page 10: Введение в современную PostgreSQL. Часть 1

ИЗОЛЯЦИИ КАК РЕШЕНИЕ

ПРОБЛЕМЫ ...

Уровень

изоляции

Фантомное

чтение

Неповторяющ

ееся чтение

«Грязное»

чтение

Потерянное

обновление[3]

SERIALIZABLE + + + +

REPEATABLE

READ- + + +

READ

COMMITTED- - + +

READ

UNCOMMITTE

D

- - - +

10

Page 11: Введение в современную PostgreSQL. Часть 1

НЕПОВТОРЯЮЩЕЕСЯ ЧТЕНИЕ

Транзакция 1 Транзакция 2

SELECT f2 FROM tbl1 WHERE f1=1;

UPDATE tbl1 SET f2=f2+1 WHERE f1=1;

COMMIT;

SELECT f2 FROM tbl1 WHERE f1=1;

11

Page 12: Введение в современную PostgreSQL. Часть 1

ФАНТОМНОЕ ЧТЕНИЕ

Транзакция 1 Транзакция 2

SELECT SUM(f2) FROM tbl1;

INSERT INTO tbl1 (f1,f2) VALUES (15,20);

COMMIT;

SELECT SUM(f2) FROM tbl1;

12

Page 13: Введение в современную PostgreSQL. Часть 1

ПРИМЕР

13

Page 14: Введение в современную PostgreSQL. Часть 1

ПОЛЕЗНЫЙ ХАК

BEGIN;

SELECT 1 FROM fooWHERE baz = 1234ORDER BY bar

FOR UPDATE;

UPDATE foo

SET bar = bar + 1

WHERE baz = 1234;

COMMIT;

14http://www.postgresql.org/docs/9.1/static/explicit-locking.html

Page 15: Введение в современную PostgreSQL. Часть 1

АРХИТЕКТУРА

15

PgBouncer -- легковесные пулы

pgpool-II• Connection Pooling

• Replication

• Load Balancing

• Limiting Exceeding Connections

Page 16: Введение в современную PostgreSQL. Часть 1

БУФЕРЫ

16

Page 17: Введение в современную PostgreSQL. Часть 1

ВАЖНЫЕ НАСТРОЙКИ

shared_buffers ― рекомендуется 25% RAM вместо 128 MB

work_mem ― ? вместо 4 MB

maintenance_work_mem ― по умолчанию 64 Mb, >= work_mem

http://www.postgresql.org/docs/9.5/static/runtime-config-resource.html

17

Page 18: Введение в современную PostgreSQL. Часть 1

PGTUNE

18

http://pgtune.leopard.in.ua/

Page 19: Введение в современную PostgreSQL. Часть 1

ЕЩЕ НАСТРОЙКИ

synchronous_commit

wal_writer_delay

fsync

19

Page 20: Введение в современную PostgreSQL. Часть 1

НЕМНОГО ТРОЛЛИНГА

20

http://erthalion.info/2015/

12/29/json-benchmarks/

• Mongodb 3.2.0

journaled

(writeConcern j: true)

• Mongodb 3.2.0 fsync

(transaction_sync=(en

abled=true,method=fs

ync))

Page 21: Введение в современную PostgreSQL. Часть 1

НЕМНОГО ТРОЛЛИНГА

21

http://erthalion.info/2015/

12/29/json-benchmarks/

• Mongodb 3.2.0

journaled

(writeConcern j: true)

• Mongodb 3.2.0 fsync

(transaction_sync=(en

abled=true,method=fs

ync))

Page 22: Введение в современную PostgreSQL. Часть 1

НЕМНОГО ТРОЛЛИНГА

22

http://erthalion.info/2015/

12/29/json-benchmarks/

• Mongodb 3.2.0

journaled

(writeConcern j: true)

• Mongodb 3.2.0 fsync

(transaction_sync=(en

abled=true,method=fs

ync))

Page 23: Введение в современную PostgreSQL. Часть 1

НЕМНОГО ТРОЛЛИНГА

23

http://erthalion.info/2015/

12/29/json-benchmarks/

• Mongodb 3.2.0

journaled

(writeConcern j: true)

• Mongodb 3.2.0 fsync

(transaction_sync=(en

abled=true,method=fs

ync))

Page 24: Введение в современную PostgreSQL. Часть 1

СПАСИБО!

24