Учебно-практическое пособие москва 2017 ббк


BEGIN; BEGIN EXPLAIN ANALYZE



Pdf көрінісі
бет230/243
Дата21.07.2022
өлшемі3,05 Mb.
#147663
түріУчебно-практическое пособие
1   ...   226   227   228   229   230   231   232   233   ...   243
Байланысты:
Язык SQL. Базовый курс

BEGIN;
BEGIN
EXPLAIN ANALYZE
UPDATE aircrafts
SET range = range + 100
WHERE model ~ '^Air';
QUERY PLAN
-----------------------------------------------------------------
Update on aircrafts (cost=0.00..1.11 rows=1 width=58)
(actual time=0.299..0.299 rows=0 loops=1)
-> Seq Scan on aircrafts (cost=0.00..1.11 rows=1 width=58)
(actual time=0.111..0.121 rows=3 loops=1)
Filter: (model ~ '^Air'::text)
Rows Removed by Filter: 6
Planning time: 0.235 ms
Execution time: 0.414 ms
(6 строк)
ROLLBACK;
ROLLBACK
241


В документации приводится важное предостережение о том, что нельзя экстраполи-
ровать, т. е. распространять, пусть даже и с некоторыми поправками, оценки, полу-
ченные для таблиц небольшого размера, на таблицы большого размера. Это объясня-
ется тем, что оценки, вычисляемые планировщиком, не являются линейными. Одна
из причин заключается в том, что для таблиц разных размеров могут быть выбраны
разные планы. Например, для маленькой таблицы может быть выбрано последова-
тельное сканирование, а для большой — сканирование по индексу.
10.5 Оптимизация запросов
Мы рассмотрели базовые способы получения плана выполнения запроса и познако-
мились с типичными компонентами плана. Эти знания призваны помочь в тех си-
туациях, когда необходимо ускорить выполнение запроса. При принятии решения
о том, что выполнение какого-либо запроса нужно оптимизировать, следует учиты-
вать не только абсолютное время его выполнения, но и частоту его использования.
Запрос может выполняться, например, за несколько миллисекунд, но таких запросов
могут быть сотни или тысячи.
В результате ресурсы сервера будут расходоваться очень интенсивно. Возможно, что
в такой ситуации придется заняться ускорением выполнения этого запроса. А если
запрос выполняется один раз в месяц, скажем, для получения итоговой картины по
продажам авиабилетов за этот период, то в этом случае бороться за ускорение на
несколько миллисекунд, видимо, не имеет смысла.
Повлиять на скорость выполнения запроса можно различными способами, мы рас-
смотрим некоторые из них:
– обновление статистики, на основе которой планировщик строит планы;
– изменение исходного кода запроса;
– изменение схемы данных, связанное с денормализацией: создание материализо-
ванных представлений и временных таблиц, создание индексов, использование
вычисляемых столбцов таблиц;
– изменение параметров планировщика, управляющих выбором порядка соедине-
ния наборов строк: использование общих табличных выражений (запросы с пред-
ложением WITH), использование фиксированного порядка соединения (параметр
join_collapse_limit = 1), запрет раскрытия подзапросов и преобразования их в со-
единения таблиц (параметр from_collapse_limit = 1);
– изменение параметров планировщика, управляющих выбором метода досту-
па (enable_seqscan, enable_indexscan, enable_indexonlyscan, enable_bitmapscan)
и способа соединения наборов строк (enable_nestloop, enable_hashjoin,
enable_mergejoin);
– изменение параметров планировщика, управляющих использованием ряда опе-
раций: агрегирование на основе хеширования (enable_hashagg), материализация
временных наборов строк (enable_material), выполнение явной сортировки при на-
личии других возможностей (enable_sort).
242


Необходимым условием для того, чтобы планировщик выбрал правильный план, яв-
ляется наличие актуальной статистики. Если вы предполагаете, что планировщик
опирается на неактуальную статистику, можно ее принудительно обновить с помо-
щью команды ANALYZE. Например, обновить статистику для таблицы aircrafts мож-
но, выполнив команду


Достарыңызбен бөлісу:
1   ...   226   227   228   229   230   231   232   233   ...   243




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет