Введение в современную PostgreSQL. Часть 1
-
Upload
dzianis-pirshtuk -
Category
Software
-
view
120 -
download
6
Transcript of Введение в современную PostgreSQL. Часть 1
Введение в
современную
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