Перейти к основному содержимому

Асинхронные материализованные представления

Эта тема описывает, как понимать, создавать, использовать и управлять асинхронными материализованными представлениями. Асинхронные материализованные представления поддерживаются начиная с Selena v2.4.

По сравнению с синхронными материализованными представлениями, асинхронные материализованные представления поддерживают соединения нескольких таблиц и больше агрегатных функций. Обновление асинхронных материализованных представлений может запускаться вручную, регулярно через заранее заданные интервалы или автоматически при изменении данных в базовой таблице. Вы также можете обновлять некоторые разделы вместо всего материализованного представления, значительно снижая стоимость обновления. Кроме того, асинхронные материализованные представления поддерживают различные сценарии перезаписи запросов, обеспечивая автоматическое, прозрачное ускорение запросов.

Для сценария и использования синхронных материализованных представлений (Rollup), см. Синхронное материализованное представление (Rollup).

Обзор

Приложения в базах данных часто выполняют сложные запросы к большим таблицам. Такие запросы включают соединения нескольких таблиц и агрегации таблиц, содержащих миллиарды строк. Обработка этих запросов может быть дорогостоящей с точки зрения системных ресурсов и времени, необходимого для вычисления результатов.

Асинхронные материализованные представления в Selena предназначены для решения этих проблем. Асинхронное материализованное представление — это специальная физическая таблица, которая содержит предварительно вычисленные результаты запросов из одной или нескольких базовых таблиц. Когда вы выполняете сложные запросы к базовой таблице, Selena возвращает предварительно вычисленные результаты из соответствующих материализованных представлений для обработки этих запросов. Таким образом, производительность запросов может быть улучшена, поскольку избегаются повторяющиеся сложные вычисления. Эта разница в производительности может быть значительной, когда запрос выполняется часто или достаточно сложен.

Кроме того, асинхронные материализованные представления особенно полезны для построения математических моделей на основе вашего хранилища данных. Таким образом, вы можете предоставить единую спецификацию данных для приложений верхнего уровня, скрыть базовую реализацию или защитить безопасность исходных данных базовых таблиц.

Понимание материализованных представлений в Selena

Selena v2.3 и более ранние версии предоставляли синхронное материализованное представление, которое можно было построить только на одной таблице. Синхронные материализованные представления, или Rollup, сохраняют более высокую свежесть данных и более низкие затраты на обновление. Однако по сравнению с асинхронными материализованными представлениями, поддерживаемыми начиная с v2.4, синхронные материализованные представления имеют много ограничений. У вас ограниченный выбор операторов агрегации, когда вы хотите построить синхронное материализованное представление для ускорения или перезаписи ваших запросов.

Следующая таблица сравнивает асинхронные материализованные представления (ASYNC MV) и синхронные материализованные представления (SYNC MV) в Selena с точки зрения функций, которые они поддерживают:

Агрегация одной таблицыСоединение нескольких таблицПерезапись запросовСтратегия обновленияБазовая таблица
ASYNC MVДаДаДа
  • Асинхронное обновление
  • Ручное обновление
Несколько таблиц из:
  • Default catalog
  • external catalog (v2.5)
  • Существующих материализованных представлений (v2.5)
  • Существующих представлений (v3.1)
SYNC MV (Rollup)Ограниченный выбор агрегатных функцийНетДаСинхронное обновление во время загрузки данныхОдна таблица в default catalog

Основные понятия

  • Базовая таблица

    Базовые таблицы — это ведущие таблицы материализованного представления.

    Для асинхронных материализованных представлений Selena базовыми таблицами могут быть нативные таблицы Selena в default catalog, таблицы в external catalog (поддерживается с v2.5) или даже существующие асинхронные материализованные представления (поддерживается с v2.5) и представления (поддерживается с v3.1). Selena поддерживает создание асинхронных материализованных представлений на всех типах таблиц Selena.

  • Обновление

    Когда вы создаете асинхронное материализованное представление, его данные отражают только состояние базовых таблиц на тот момент. Когда данные в базовых таблицах изменяются, вам нужно обновить материализованное представление, чтобы синхронизировать изменения.

    В настоящее время Selena поддерживает две общие стратегии обновления:

    • ASYNC: Режим асинхронного обновления. Материализованные представления могут обновляться автоматически при изменении данных в базовой таблице или через регулярные интервалы на основе заданных интервалов.
    • MANUAL: Режим ручного обновления. Материализованное представление не будет автоматически обновляться. Задачи обновления могут запускаться только вручную пользователями.
  • Перезапись запросов

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

    Начиная с v2.5, Selena поддерживает автоматическую, прозрачную перезапись запросов на основе асинхронных материализованных представлений типа SPJG. Материализованные представления типа SPJG относятся к материализованным представлениям, план которых включает только операторы типа Scan, Filter, Project и Aggregate.

    ПРИМЕЧАНИЕ

    Асинхронные материализованные представления, созданные на базовых таблицах в JDBC catalog или Hudi catalog, не поддерживают перезапись запросов.

Решение о создании материализованного представления

Вы можете создать асинхронное материализованное представление, если у вас есть следующие потребности в среде хранилища данных:

  • Ускорение запросов с повторяющимися агрегатными функциями

    Предположим, что большинство запросов в вашем хранилище данных включают один и тот же подзапрос с агрегатной функцией, и эти запросы потребляли огромную долю ваших вычислительных ресурсов. На основе этого подзапроса вы можете создать асинхронное материализованное представление, которое вычислит и сохранит все результаты подзапроса. После построения материализованного представления Selena перезаписывает все запросы, содержащие подзапрос, загружает промежуточные результаты, хранящиеся в материализованном представлении, и таким образом ускоряет эти запросы.

  • Регулярное соединение нескольких таблиц

    Предположим, что вам нужно регулярно соединять несколько таблиц в вашем хранилище данных, чтобы создать новую широкую таблицу. Вы можете построить асинхронное материализованное представление для этих таблиц и установить стратегию обновления ASYNC, которая запускает задачи обновления через фиксированный интервал времени. После построения материализованного представления результаты запросов возвращаются напрямую из материализованного представления, и таким образом избегается задержка, вызванная операциями JOIN.

  • Слоистость хранилища данных

    Предположим, что ваше хранилище данных содержит массу исходных данных, и запросы в нем требуют сложного набора операций ETL. Вы можете построить несколько слоев асинхронных материализованных представлений для стратификации данных в вашем хранилище данных и таким образом разложить запрос на серию простых подзапросов. Это может значительно сократить повторяющиеся вычисления и, что более важно, помочь вашему администратору базы данных легко и эффективно выявить проблему. Кроме того, слоистость хранилища данных помогает разделить исходные данные и статистические данные, защищая безопасность конфиденциальных исходных данных.

  • Ускорение запросов в озерах данных

    Запросы к озеру данных могут быть медленными из-за сетевой задержки и пропускной способности объектного хранилища. Вы можете повысить производительность запросов, построив асинхронное материализованное представление поверх озера данных. Более того, Selena может интеллектуально перезаписывать запросы для использования существующих материализованных представлений, избавляя вас от необходимости вручную изменять ваши запросы.

Для конкретных случаев использования асинхронных материализованных представлений обратитесь к следующему содержанию:

Создание асинхронного материализованного представления

Асинхронные материализованные представления Selena могут быть созданы на следующих базовых таблицах:

  • Нативные таблицы Selena (поддерживаются все типы таблиц Selena)
  • Таблицы в external catalog
  • Существующие асинхронные материализованные представления (с v2.5)
  • Существующие представления (с v3.1)

Перед началом

Следующие примеры включают две базовые таблицы в default catalog:

  • Таблица goods записывает ID товара item_id1, название товара item_name и цену товара price.
  • Таблица order_list записывает ID заказа order_id, ID клиента client_id, ID товара item_id2 и дату заказа order_date.

Столбец goods.item_id1 эквивалентен столбцу order_list.item_id2.

Выполните следующие операторы для создания таблиц и вставки данных в них:

CREATE TABLE goods(
item_id1 INT,
item_name STRING,
price FLOAT
) DISTRIBUTED BY HASH(item_id1);

INSERT INTO goods
VALUES
(1001,"apple",6.5),
(1002,"pear",8.0),
(1003,"potato",2.2);

CREATE TABLE order_list(
order_id INT,
client_id INT,
item_id2 INT,
order_date DATE
) DISTRIBUTED BY HASH(order_id);

INSERT INTO order_list
VALUES
(10001,101,1001,"2022-03-13"),
(10001,101,1002,"2022-03-13"),
(10002,103,1002,"2022-03-13"),
(10002,103,1003,"2022-03-14"),
(10003,102,1003,"2022-03-14"),
(10003,102,1001,"2022-03-14");

Сценарий в следующем примере требует частых вычислений общей суммы каждого заказа. Он требует частых соединений двух базовых таблиц и интенсивного использования агрегатной функции sum(). Кроме того, бизнес-сценарий требует обновления данных с интервалом в один день.

Оператор запроса выглядит следующим образом:

SELECT
order_id,
sum(goods.price) as total
FROM order_list INNER JOIN goods ON goods.item_id1 = order_list.item_id2
GROUP BY order_id;

Создание материализованного представления

Вы можете создать материализованное представление на основе конкретного оператора запроса, используя CREATE MATERIALIZED VIEW.

На основе таблиц goods, order_list и оператора запроса, упомянутого выше, следующий пример создает материализованное представление order_mv для анализа общей суммы каждого заказа. Материализованное представление настроено на обновление с интервалом в один день.

CREATE MATERIALIZED VIEW order_mv
DISTRIBUTED BY HASH(`order_id`)
REFRESH ASYNC START('2022-09-01 10:00:00') EVERY (interval 1 day)
AS SELECT
order_list.order_id,
sum(goods.price) as total
FROM order_list INNER JOIN goods ON goods.item_id1 = order_list.item_id2
GROUP BY order_id;

ПРИМЕЧАНИЕ

  • При создании асинхронного материализованного представления вы должны указать либо стратегию распределения данных, либо стратегию обновления материализованного представления, либо и то, и другое.
  • Вы можете установить различные стратегии разделения и группировки для асинхронного материализованного представления, отличные от стратегий его базовых таблиц, но вы должны включить ключи разделов и ключи групп материализованных представлений в оператор запроса, используемый для создания материализованного представления.
  • Асинхронные материализованные представления поддерживают стратегию динамического разделения в более длительном промежутке. Например, если базовая таблица разделена с интервалом в один день, вы можете установить материализованное представление для разделения с интервалом в один месяц.
  • Начиная с v3.3.3, Selena поддерживает создание асинхронных материализованных представлений со стратегией List Partitioning.
    • Вы можете создавать материализованные представления с разделением по списку на основе таблиц, созданных со стратегией List Partitioning или Expression partitioning.
    • В настоящее время вы можете указать только один Partition Key при создании материализованных представлений со стратегией List Partitioning. Вы должны выбрать один Partition Key, если базовая таблица имеет более одного Partition Key.
    • Поведение обновления и логика перезаписи запросов материализованных представлений со стратегией List Partitioning согласуются с теми, которые имеют стратегию Range Partitioning.
  • Оператор запроса, используемый для создания материализованного представления, не поддерживает случайные функции, включая rand(), random(), uuid() и sleep().
  • Асинхронные материализованные представления поддерживают различные типы данных. Для получения дополнительной информации см. CREATE MATERIALIZED VIEW - Поддерживаемые типы данных.
  • По умолчанию выполнение оператора CREATE MATERIALIZED VIEW немедленно запускает задачу обновления, которая может потреблять определенную долю системных ресурсов. Если вы хотите отложить задачу обновления, вы можете добавить параметр REFRESH DEFERRED к вашему оператору CREATE MATERIALIZED VIEW.
  • О механизмах обновления асинхронных материализованных представлений

    В настоящее время Selena поддерживает две стратегии обновления ON DEMAND: MANUAL refresh и ASYNC refresh.

    В Selena v2.5 асинхронные материализованные представления дополнительно поддерживают различные механизмы асинхронного обновления для контроля стоимости обновления и увеличения успешности:

    • Если MV имеет много больших разделов, каждое обновление может потреблять большое количество ресурсов. В v2.5 Selena поддерживает разделение задач обновления. Вы можете указать максимальное количество разделов для обновления, и Selena выполняет обновление партиями с размером партии, меньшим или равным указанному максимальному количеству разделов. Эта функция обеспечивает стабильное обновление больших асинхронных материализованных представлений, повышая стабильность и надежность моделирования данных.
    • Вы можете указать время жизни (TTL) для разделов асинхронного материализованного представления, уменьшая размер хранилища, занимаемый материализованным представлением.
    • Вы можете указать диапазон обновления для обновления только последних нескольких разделов, уменьшая накладные расходы на обновление.
    • Вы можете указать базовые таблицы, где изменения данных не будут автоматически запускать обновление соответствующего материализованного представления.
    • Вы можете назначить группу ресурсов для задачи обновления.

    Для получения дополнительной информации см. раздел PROPERTIES в CREATE MATERIALIZED VIEW - Параметры. Вы также можете изменить механизмы существующего асинхронного материализованного представления, используя ALTER MATERIALIZED VIEW.

    ВНИМАНИЕ

    Чтобы предотвратить исчерпание системных ресурсов операциями полного обновления и вызвать сбои задач, рекомендуется создавать разделенные материализованные представления на основе разделенных базовых таблиц. Это гарантирует, что когда обновления данных происходят в разделе базовой таблицы, обновляются только соответствующие разделы материализованного представления, а не все материализованное представление. Для получения дополнительной информации обратитесь к Моделирование данных с материализованными представлениями - Разделенное моделирование.

  • О вложенных материализованных представлениях

    Selena v2.5 поддерживает создание вложенных асинхронных материализованных представлений. Вы можете строить асинхронные материализованные представления на основе существующих асинхронных материализованных представлений. Стратегия обновления для каждого материализованного представления не влияет на материализованные представления на верхних или нижних уровнях. В настоящее время Selena не ограничивает количество уровней вложенности. В производственной среде мы рекомендуем, чтобы количество уровней вложенности не превышало ТРЕХ.

  • О материализованных представлениях external catalog

    Selena поддерживает построение асинхронных материализованных представлений на основе Hive Catalog (с v2.5), Hudi Catalog (с v2.5), Iceberg Catalog (с v2.5) и JDBC Catalog (с v3.0). Создание материализованного представления на external catalog аналогично созданию асинхронного материализованного представления на default catalog, но с некоторыми ограничениями использования. Для получения дополнительной информации обратитесь к Ускорение запросов к озеру данных с материализованными представлениями.

Ручное обновление асинхронного материализованного представления

Вы можете обновить асинхронное материализованное представление независимо от его стратегии обновления через REFRESH MATERIALIZED VIEW. Selena v2.5 поддерживает обновление конкретных разделов асинхронного материализованного представления путем указания имен разделов. Selena v3.1 поддерживает синхронный вызов задачи обновления, и оператор SQL возвращается только при успехе или неудаче задачи.

-- Обновление материализованного представления через асинхронный вызов (по умолчанию).
REFRESH MATERIALIZED VIEW order_mv;
-- Обновление материализованного представления через синхронный вызов.
REFRESH MATERIALIZED VIEW order_mv WITH SYNC MODE;

Вы можете отменить задачу обновления, отправленную через асинхронный вызов, используя CANCEL REFRESH MATERIALIZED VIEW.

Прямой запрос к асинхронному материализованному представлению

Созданное вами асинхронное материализованное представление по сути является физической таблицей, которая содержит полный набор предварительно вычисленных результатов в соответствии с оператором запроса. Поэтому вы можете напрямую запрашивать материализованное представление после того, как материализованное представление обновится в первый раз.

MySQL > SELECT * FROM order_mv;
+----------+--------------------+
| order_id | total |
+----------+--------------------+
| 10001 | 14.5 |
| 10002 | 10.200000047683716 |
| 10003 | 8.700000047683716 |
+----------+--------------------+
3 rows in set (0.01 sec)

ПРИМЕЧАНИЕ

Вы можете напрямую запрашивать асинхронное материализованное представление, но результаты могут быть несогласованными с тем, что вы получаете от запроса к его базовым таблицам.

Перезапись и ускорение запросов с асинхронным материализованным представлением

Selena v2.5 поддерживает автоматическую и прозрачную перезапись запросов на основе асинхронных материализованных представлений типа SPJG. Перезапись запросов материализованных представлений типа SPJG включает перезапись запросов к одной таблице, перезапись запросов Join, перезапись запросов агрегации, перезапись запросов Union и перезапись запросов на основе вложенных материализованных представлений. Начиная с v3.3.0, Selena дополнительно поддерживает перезапись материализованных представлений на основе текста. Для получения дополнительной информации обратитесь к Перезапись запросов с материализованными представлениями.

В настоящее время Selena поддерживает перезапись запросов к асинхронным материализованным представлениям, созданным на default catalog или external catalog, таком как Hive catalog, Hudi catalog или Iceberg catalog. При запросе данных в default catalog Selena обеспечивает строгую согласованность результатов между перезаписанным запросом и исходным запросом, исключая материализованные представления, данные которых несогласованны с базовой таблицей. Когда данные в материализованном представлении устаревают, материализованное представление не будет использоваться как кандидат материализованного представления. При запросе данных в external catalog Selena не обеспечивает строгую согласованность результатов, поскольку Selena не может воспринимать изменения данных в external catalog. Для получения дополнительной информации об асинхронных материализованных представлениях, созданных на основе external catalog, обратитесь к Ускорение запросов к озеру данных с материализованными представлениями.

ПРИМЕЧАНИЕ

Асинхронные материализованные представления, созданные на базовых таблицах в JDBC catalog, не поддерживают перезапись запросов.

Управление асинхронным материализованным представлением

Изменение асинхронного материализованного представления

Вы можете изменить свойство асинхронного материализованного представления, используя ALTER MATERIALIZED VIEW.

  • Активация неактивного материализованного представления.

    ALTER MATERIALIZED VIEW order_mv ACTIVE;
  • Переименование асинхронного материализованного представления.

    ALTER MATERIALIZED VIEW order_mv RENAME order_total;
  • Изменение интервала обновления асинхронного материализованного представления на 2 дня.

    ALTER MATERIALIZED VIEW order_mv REFRESH ASYNC EVERY(INTERVAL 2 DAY);

Показ асинхронных материализованных представлений

Вы можете просмотреть асинхронные материализованные представления в вашей базе данных, используя SHOW MATERIALIZED VIEWS или запрашивая системное представление метаданных в Information Schema.

  • Проверка всех асинхронных материализованных представлений в вашей базе данных.

    SHOW MATERIALIZED VIEWS;
  • Проверка конкретного асинхронного материализованного представления.

    SHOW MATERIALIZED VIEWS WHERE NAME = "order_mv";
  • Проверка конкретных асинхронных материализованных представлений по совпадению имени.

    SHOW MATERIALIZED VIEWS WHERE NAME LIKE "order%";
  • Проверка всех асинхронных материализованных представлений путем запроса представления метаданных materialized_views в Information Schema. Для получения дополнительной информации обратитесь к information_schema.materialized_views.

    SELECT * FROM information_schema.materialized_views;

Проверка определения асинхронного материализованного представления

Вы можете проверить запрос, используемый для создания асинхронного материализованного представления, через SHOW CREATE MATERIALIZED VIEW.

SHOW CREATE MATERIALIZED VIEW order_mv;

Проверка статуса выполнения асинхронного материализованного представления

Вы можете проверить статус выполнения (построения или обновления) асинхронного материализованного представления, запрашивая tasks и task_runs в Information Schema.

Следующий пример проверяет статус выполнения материализованного представления, которое было создано последним:

  1. Проверьте TASK_NAME самой последней задачи в таблице tasks.

    mysql> select * from information_schema.tasks  order by CREATE_TIME desc limit 1\G;
    *************************** 1. row ***************************
    TASK_NAME: mv-59299
    CREATE_TIME: 2022-12-12 17:33:51
    SCHEDULE: MANUAL
    DATABASE: ssb_1
    DEFINITION: insert overwrite hive_mv_lineorder_flat_1 SELECT `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_orderkey`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_linenumber`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_custkey`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_partkey`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_orderpriority`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_ordtotalprice`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_revenue`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`p_mfgr`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`s_nation`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`c_city`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`c_nation`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_orderdate`
    FROM `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`
    WHERE `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_orderdate` = '1997-01-01'
    EXPIRE_TIME: NULL
    1 row in set (0.02 sec)
  2. Проверьте статус выполнения в таблице task_runs, используя найденный TASK_NAME.

    mysql> select * from information_schema.task_runs where task_name='mv-59299' order by CREATE_TIME\G
    *************************** 1. row ***************************
    QUERY_ID: d9cef11f-7a00-11ed-bd90-00163e14767f
    TASK_NAME: mv-59299
    CREATE_TIME: 2022-12-12 17:39:19
    FINISH_TIME: 2022-12-12 17:39:22
    STATE: SUCCESS
    DATABASE: ssb_1
    DEFINITION: insert overwrite hive_mv_lineorder_flat_1 SELECT `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_orderkey`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_linenumber`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_custkey`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_partkey`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_orderpriority`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_ordtotalprice`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_revenue`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`p_mfgr`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`s_nation`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`c_city`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`c_nation`, `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_orderdate`
    FROM `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`
    WHERE `hive_ci`.`dla_scan`.`lineorder_flat_1000_1000_orc`.`lo_orderdate` = '1997-01-01'
    EXPIRE_TIME: 2022-12-15 17:39:19
    ERROR_CODE: 0
    ERROR_MESSAGE: NULL
    PROGRESS: 100%
    2 rows in set (0.02 sec)

Удаление асинхронного материализованного представления

Вы можете удалить асинхронное материализованное представление через DROP MATERIALIZED VIEW.

DROP MATERIALIZED VIEW order_mv;

Соответствующие переменные сессии

Следующие переменные контролируют поведение асинхронного материализованного представления:

  • analyze_mv: Анализировать ли материализованное представление после обновления и как. Допустимые значения: пустая строка (Не анализировать), sample (Сбор выборочной статистики) и full (Сбор полной статистики). По умолчанию sample.
  • enable_materialized_view_rewrite: Включать ли автоматическую перезапись для материализованного представления. Допустимые значения: true (По умолчанию с v2.5) и false.