(В январе 2010 г. команда разработчиков решила, что следующая версия PostgreSQL будет нумероваться 9.0, а не 8.5)
Сегодня речь пойдёт о маленьком, но (по крайней мере для меня) действительно полезном патче. Принял его 15 декабря Robert Haas, а сделал Itagaki Takahiro:
Добавляет опцию EXPLAIN (BUFFERS) для отображения статистики
использования буферов.
Патч также убирает эту статистику из вывода track_counts, т.к. EXPLAIN
(или глобальная статистика) теперь считается лучшим местом для такой
информации.
Itagaki Takahiro, проверено Euler Taveira de Oliveira.
Давайте посмотрим о чём это:
# explain ( analyze on, buffers on ) select count(*) from pg_attribute ;
QUERY PLAN
-------------------------------------------------------------------------------------------------------------------
Aggregate (cost=64.70..64.71 rows=1 width=0) (actual time=0.466..0.466 rows=1 loops=1)
Buffers: shared hit=18 read=21
-> Seq Scan on pg_attribute (cost=0.00..59.56 rows=2056 width=0) (actual time=0.002..0.301 rows=2002 loops=1)
Buffers: shared hit=18 read=21
Total runtime: 0.492 ms
(5 rows)
Как легко заметить Postgres-у надо было прочитать 39 страниц 18 из которых уже были в разделяемой памяти. Обычно, когда запускаешь такие запросы 2-й раз, они выполняются быстрее потому что страницы кешируются. Давайте посмотрим:
# explain ( analyze on, buffers on ) select count(*) from pg_attribute ;
QUERY PLAN
-------------------------------------------------------------------------------------------------------------------
Aggregate (cost=64.70..64.71 rows=1 width=0) (actual time=0.325..0.325 rows=1 loops=1)
Buffers: shared hit=39
-> Seq Scan on pg_attribute (cost=0.00..59.56 rows=2056 width=0) (actual time=0.004..0.171 rows=2002 loops=1)
Buffers: shared hit=39
Total runtime: 0.353 ms
(5 rows)
Отлично. Теперь видно что все страницы взяты из кеша.
Конечно же в этой ситуации особого смысла в них нет, она просто показывает как будет выглядеть вывод.
Эта возможность также распространяется на расширение auto explain - теперь можно установить GUC переменную auto_explain.log_buffers, но будьте осторожны, т.к. она используется совместно с ANALYZE.
No comments:
Post a Comment