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

Post on 16-Jan-2017

106 Views

Category:

Software

6 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Введение в

современную

PostgreSQL

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

SLONIK

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

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

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

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

• Лицензия MIT

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

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

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

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

2

OPERATIONAL

DATABASE

MANAGEMENT

SYSTEMS

3

DB-ENGINES RANKING OF

POSTGRESQL

4

5

ПЛАН ДОКЛАДА

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

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

3. Индексы

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

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

6

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)

MULTI VERSION CONCURRENCY

CONTROL (MVCC)

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

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

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

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

8

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

ТРАНЗАКЦИЙ

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

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

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

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

9

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

ПРОБЛЕМЫ ...

Уровень

изоляции

Фантомное

чтение

Неповторяющ

ееся чтение

«Грязное»

чтение

Потерянное

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

SERIALIZABLE + + + +

REPEATABLE

READ- + + +

READ

COMMITTED- - + +

READ

UNCOMMITTE

D

- - - +

10

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

Транзакция 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

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

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

SELECT SUM(f2) FROM tbl1;

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

COMMIT;

SELECT SUM(f2) FROM tbl1;

12

ПРИМЕР

13

ПОЛЕЗНЫЙ ХАК

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

АРХИТЕКТУРА

15

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

pgpool-II• Connection Pooling

• Replication

• Load Balancing

• Limiting Exceeding Connections

БУФЕРЫ

16

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

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

PGTUNE

18

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

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

synchronous_commit

wal_writer_delay

fsync

19

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

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))

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

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))

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

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))

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

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))

СПАСИБО!

24

top related