Конфигурация | Tcs

Version:

1.x

Конфигурация

Конфигурация TCS

Конфигурация TCS задается в файле формата YAML и описывает конфигурацию всего кластера. Конфигурация хранится локально, либо обновляется посредством etcd (см. Первичная установка системы.

Далее описаны возможности конфигурирования типовых сценариев.

Настройка частоты обновлений представления для чтения

Представление для чтения обновляется раз в столько миллисекунд, сколько указано в параметре rv_update_ms. По умолчанию, 100. При необходимости можно задать другое значение. Пример:

groups:
  storages:
    replicasets:
      replicaset1:
        instances:
          instance1:
            roles_cfg:
              tcs_roles/storage:
                rv_update_ms: 100000

Настройка максимального времени выполнения запросов

В TCS заданы ограничения по умолчанию на максимальное время выполнения запросов:

  • для всех типов запросов, кроме аналитических расчетов: 5 мс

  • для каждого счетчика в аналитических расчетах: 4,5 мс

По истечении этого времени TCS прерывает обработку запроса и присылает ответ HTTP 408 Request timeout.

При необходимости эти значения можно изменить в консоли с помощью Lua-инструкций на всех серверах с Tarantool:

require('app.roles.tcs.storage.api').configure_http_timeout_ms({timeout_ms})

require('app.roles.tcs.storage.api').configure_computation_max_duration_ms({duration_ms})

Перезагрузка при этом не требуется.

Настройка параллельного чтения колонок

Для параллельного чтения колонок можно задать количество потоков обработки запроса (партиций) в параметре partition_count. По умолчанию, 1. При необходимости можно увеличить это значение, чтобы ускорить обработку запросов. Пример:

roles_cfg:
  tcs_roles/storage:
    partition_count: 10

Рекомендуется оставлять значение по умолчанию, либо задавать значение в два раза меньше количества ядер CPU.

Настройка аварийного переключения

В конфигурации можно задать вид аварийного переключения в случае сбоя экземпляра в наборе реплик:

  • manual – ручной режим

  • supervised – автоматический режим (требует запуска отдельного экземпляра Tarantool, который выступает в качестве координатора отказоустойчивого кластера)

Для автоматического режима также можно указать дополнительные параметры:

failover:
  call_timeout: 1
  connect_timeout: 1
  lease_interval: 10
  probe_interval: 1
  renew_interval: 10
  stateboard:
    keepalive_interval: 15
    renew_interval: 3

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

lease_interval > probe_interval + renew_interval

Описания параметров см. в документации Tarantool.

Настройка портов для мониторинга

В конфигурации TCS можно указать номер порта для передачи метрик мониторинга на HTTP-адресе /metrics с экземпляров Storage.

Можно указать следующие номера портов:

  • для метрик TCS (по умолчанию 7777):

    http:
      enabled: true
      listen: 0.0.0.0:7777
    
  • для метрик Tarantool (по умолчанию 8081):

    roles.metrics-export:
      http:
        - listen: 0.0.0.0:8081
    

Конфигурация данных

Модель данных в TCS задается с помощью инструкций SQL DDL и не является частью конфигурации. См. подробнее в разделе Модель данных.

Конфигурация переменных

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

Например:

SET datafusion.execution.batch_size to 10000

SHOW datafusion.execution.batch_size
   name                             value
0  datafusion.execution.batch_size  10000

Поддерживаются следующие переменные.

datafusion.execution.batch_size

Размер пакета (batch) по умолчанию при создании новых пакетов. Это особенно полезно для пакетов с буферизацией в памяти, поскольку создание небольших пакетов приведет к слишком большому потреблению памяти для метаданных.

Значение по умолчанию: 8192

datafusion.execution.coalesce_batches

Если значение равно true, пакеты записей (record batches) будут проверяться каждым оператором, и небольшие пакеты будут объединяться в более крупные. Это полезно при использовании высокоизбирательных фильтров или объединений, которые могут создавать небольшие пакеты на выходе. Целевой размер пакета определяется параметром конфигурации.

Значение по умолчанию: TRUE

datafusion.execution.collect_statistics

Нужно ли собирать статистику при первом создании таблицы. Не влияет ни на что после создания таблицы. Применяется к ListingTableProvider по умолчанию.

Значение по умолчанию: FALSE

datafusion.execution.target_partitions

Количество партиций для выполнения запроса. Увеличение количества партиций может увеличить параллелизм. По умолчанию используется количество ядер процессора в системе.

Значение по умолчанию: 0

datafusion.execution.time_zone

Часовой пояс по умолчанию. Некоторые функции, например, EXTRACT(HOUR from SOME_TIME), сдвигают базовую дату-время в соответствии с этим часовым поясом, а затем извлекают час.

Значение по умолчанию: +00:00

datafusion.execution.parquet.enable_page_index

(чтение) Если значение равно true, считывать метаданные на уровне страницы Parquet data (Page Index), если они присутствуют, для уменьшения ввода-вывода и количества из расшифрованных строк.

Значение по умолчанию: TRUE

datafusion.execution.parquet.pruning

(чтение) Если значение равно true, программа чтения parquet пытается пропустить целые группы строк на основе предиката в запросе и метаданных (минимальных/максимальных значений), хранящихся в файле parquet.

Значение по умолчанию: TRUE

datafusion.execution.parquet.skip_metadata

(чтение) Если значение равно true, программа чтения parquet пропускает необязательные встроенные метаданные, которые могут быть в схеме файла. Этот параметр может помочь избежать конфликтов схем при запросе нескольких файлов parquet со схемами, содержащими совместимые типы, но разные метаданные.

Значение по умолчанию: TRUE

datafusion.execution.parquet.metadata_size_hint

(чтение) Если значение указано, программа чтения parquet попытается извлечь последние байты size_hint файла parquet оптимистично. Если не указано, требуется выполнить два чтения: одно чтение для извлечения 8-байтового нижнего колонтитула parquet, а другое - для извлечения длины метаданных, закодированных в нижнем колонтитуле.

Значение по умолчанию: NULL

datafusion.execution.parquet.pushdown_filters

(чтение) Если значение равно true, во время операции декодирования parquet применяются выражения фильтра, чтобы уменьшить количество декодируемых строк. Такую оптимизацию иногда называют «поздней материализацией».

Значение по умолчанию: FALSE

datafusion.execution.parquet.reorder_filters

(чтение) Если значение равно true, выражения фильтра, вычисленные во время операции последовательного декодирования, будут эвристически переупорядочены, чтобы минимизировать затраты на вычисление. Если false, фильтры применяются в том же порядке, что и в запросе

Значение по умолчанию: FALSE

datafusion.execution.parquet.schema_force_view_types

(чтение) Если значение равно true, parquet reader будет считывать столбцы Utf8/Utf8Large с помощью Utf8View и Binary/BinaryLarge с помощью BinaryView.

Значение по умолчанию: TRUE

datafusion.execution.parquet.binary_as_string

(чтение) Если значение равно true, parquet reader будет считывать столбцы Binary/LargeBinary с Utf8, а BinaryView - с помощью Utf8View. В файлах Parquet, созданных некоторыми устаревшими редакторами, неправильно установлен флаг UTF8 для строк, в результате чего столбцы string загружаются как большие двоичные объекты.

Значение по умолчанию: FALSE

datafusion.execution.parquet.coerce_int96

(чтение) Если значение равно true, parquet reader будет считывать столбцы физического типа int96 как исходящие из другого разрешения, отличного от наносекундного. Это полезно для чтения данных из таких систем, как Spark, которые хранят временные метки с разрешением в микросекунды в int96, что позволяет записывать значения с бОльшим диапазоном дат, чем 64-разрядные временные метки с наносекундным разрешением.

Значение по умолчанию: NULL

datafusion.execution.parquet.bloom_filter_on_read

(чтение) При чтении файлов parquet использовать любые доступные bloom-фильтры.

Значение по умолчанию: TRUE

datafusion.execution.parquet.data_pagesize_limit

(запись) Максимальный размер страницы данных в байтах.

Значение по умолчанию: 1048576

datafusion.execution.parquet.write_batch_size

(запись) write_batch_size в байтах.

Значение по умолчанию: 1024

datafusion.execution.parquet.writer_version

(запись) Версия parquet writer, допустимыми значениями являются 1.0 и 2.0.

Значение по умолчанию: 1.0

datafusion.execution.parquet.skip_arrow_metadata

(запись) Пропустить кодирование встроенных метаданных arrow в KV_meta. Это аналогично ArrowWriterOptions::with_skip_arrow_metadata. См. https://docs.rs/parquet/53.3.0/parquet/arrow/arrow_writer/struct.ArrowWriterOptions.html#method.with_skip_arrow_metadata

Значение по умолчанию: FALSE

datafusion.execution.parquet.compression

(запись) Устанавливает кодек сжатия parquet по умолчанию. Допустимыми значениями являются: uncompressed, snappy, gzip(уровень), lzo, brotli(уровень), lz4, zstd(уровень) и lz4_raw. Регистр в этих значениях не учитывается. Если значение равно NULL, используется настройка записи parquet по умолчанию. Обратите внимание, что эта настройка по умолчанию отличается от настройки записи parquet по умолчанию.

Значение по умолчанию: zstd(3)

datafusion.execution.parquet.dictionary_enabled

(запись) Включена ли словарная кодировка. Если значение равно NULL, используется параметр записи в parquet по умолчанию

Значение по умолчанию: TRUE

datafusion.execution.parquet.dictionary_page_size_limit

(запись) Максимальный размер страницы словаря в байтах.

Значение по умолчанию: 1048576

datafusion.execution.parquet.statistics_enabled

(запись) Включена ли статистика для любого столбца, допустимыми значениями являются: none, chunk и page. Эти значения не чувствительны к регистру. Если NULL, используется параметр записи в parquet по умолчанию

Значение по умолчанию: page

datafusion.execution.parquet.max_statistics_size

(запись), который устанавливает максимальный размер статистики для любого столбца.

Значение по умолчанию: 4096

datafusion.execution.parquet.max_row_group_size

(запись) Укажите максимальное количество строк в каждой группе строк (по умолчанию - 1 млн строк). Запись больших групп строк требует больше памяти для записи, но позволяет добиться лучшего сжатия и ускорения чтения.

Значение по умолчанию: 1048576

datafusion.execution.parquet.created_by

(запись) Значение для created by (создано с помощью).

Значение по умолчанию: datafusion version 48.0.0

datafusion.execution.parquet.column_index_truncate_length

(запись) Длина усечения индекса столбца.

Значение по умолчанию: 64

datafusion.execution.parquet.statistics_truncate_length

(запись) Длина статического усечения. Если значение равно NULL, используется параметр записи parquet по умолчанию.

Значение по умолчанию: NULL

datafusion.execution.parquet.data_page_row_count_limit

(запись) Максимальное количество строк на странице данных.

Значение по умолчанию: 20000

datafusion.execution.parquet.encoding

(запись) Кодировка по умолчанию для любого столбца. Допустимыми значениями являются: plain, plain_dictionary, rle, bit_packed, delta_binary_packed, delta_length_byte_array, delta_byte_array, rle_dictionary и byte_stream_split. Эти значения не чувствительны к регистру. Если значение равно NULL, используется настройка записи в parquet по умолчанию.

Значение по умолчанию: NULL

datafusion.execution.parquet.bloom_filter_on_write

(запись) Записывать ли bloom-фильтры для всех столбцов при создании файлов parquet

Значение по умолчанию: FALSE

datafusion.execution.parquet.bloom_filter_fpp

(запись) Вероятность ложного срабатывания bloom-фильтра. Если значение равно NULL, используется настройка записи в parquet по умолчанию.

Значение по умолчанию: NULL

datafusion.execution.parquet.bloom_filter_ndv

(запись) Количество различных значений bloom-фильтра. Если значение равно NULL, используется настройка записи parquet по умолчанию.

Значение по умолчанию: NULL

datafusion.execution.parquet.allow_single_file_parallelism

(запись) Пытаться ли ускорить запись файлов parquet путем их параллельной сериализации. Каждый столбец в каждой группе строк в каждом выходном файле сериализуется параллельно, используя максимально возможное количество базовых значений n_filesn_row_groupsn_columns.

Значение по умолчанию: TRUE

datafusion.execution.parquet.maximum_parallel_row_group_writers

(запись) По умолчанию parallel parquet writer настроен на минимальное использование памяти в плане потокового выполнения. Вы можете увидеть увеличение производительности при записи больших файлов parquet за счет увеличения maximum_parallel_row_group_writers и maximum_buffered_record_batches_per_stream, если в вашей системе есть незанятые ядра и она может выдержать дополнительное использование памяти. Увеличение этих значений, вероятно, имеет смысл при записи уже имеющихся в памяти данных, например, из кэшированного фрейма данных.

Значение по умолчанию: 1

datafusion.execution.parquet.maximum_buffered_record_batches_per_stream

(запись) По умолчанию parallel parquet writer настроен на минимальное использование памяти в плане потокового выполнения. Вы можете увидеть увеличение производительности при записи больших файлов parquet за счет увеличения maximum_parallel_row_group_writers и maximum_buffered_record_batches_per_stream, если в вашей системе есть незанятые ядра и она может выдержать дополнительное использование памяти. Увеличение этих значений, вероятно, имеет смысл при записи уже имеющихся в памяти данных, например, из кэшированного фрейма данных.

Значение по умолчанию: 2

datafusion.execution.planning_concurrency

Разветвление при первоначальном физическом планировании. В основном используется для параллельного планирования дочерних элементов UNION. По умолчанию используется количество процессорных ядер в системе.

Значение по умолчанию: 0

datafusion.execution.skip_physical_aggregate_schema_check

Если значение равно true, не выполняется проверка того, что схема, созданная при планировании входных данных LogicalPlan::Aggregate, точно соответствует схеме входного плана. Если установлено значение false, если схема не соответствует в точности (включая возможность обнуления и метаданные), будет выдана ошибка планирования. Это используется для устранения ошибок в планировщике, которые теперь обнаруживаются на этапе проверки новой схемы.

Значение по умолчанию: FALSE

datafusion.execution.sort_spill_reservation_bytes

Объем памяти, зарезервированный для каждой операции сортировки с возможностью переноса, чтобы упростить объединение данных в памяти. Когда операция сортировки переносится на диск, данные в памяти должны быть отсортированы и объединены перед записью в файл. Этот параметр резервирует определенный объем памяти для процесса сортировки/слияния в оперативной памяти. Примечание: Этот параметр не имеет значения, если операция сортировки не может быть выполнена (т.е. если DiskManager не настроен).

Значение по умолчанию: 10485760

datafusion.execution.sort_in_place_threshold_bytes

Порог размера при сортировке, ниже которого данные следует объединять и сортировать в одном наборе записей, а не сортировать пакетами и объединять.

Значение по умолчанию: 1048576

datafusion.execution.meta_fetch_concurrency

Количество файлов для параллельного чтения при выводе схемы и статистики.

Значение по умолчанию: 32

datafusion.execution.minimum_parallel_output_files

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

Значение по умолчанию: 4

datafusion.execution.soft_max_rows_per_output_file

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

Значение по умолчанию: 50000000

datafusion.execution.max_buffered_batches_per_output_file

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

Значение по умолчанию: 2

datafusion.execution.listing_table_ignore_subdirectory

Игнорировать ли вложенные каталоги при сканировании каталогов на наличие файлов данных. По умолчанию установлено значение true (игнорируются подкаталоги), соответствующее Hive. Обратите внимание, что этот параметр не влияет на чтение секционированных таблиц (например, /table/year=2021/month=01/data.parquet).

Значение по умолчанию: TRUE

datafusion.execution.enable_recursive_ctes

Поддерживать ли рекурсивные CTE.

Значение по умолчанию: TRUE

datafusion.execution.split_file_groups_by_statistics

Пытаться ли устранить сортировку, упаковав и отсортировав файлы с непересекающейся статистикой в одни и те же группы файлов. Экспериментальный параметр.

Значение по умолчанию: FALSE

datafusion.execution.keep_partition_by_columns

Сохранять ли столбцы, используемые для partition_by, в выходных пакетах записей.

Значение по умолчанию: FALSE

datafusion.execution.skip_partial_aggregation_probe_ratio_threshold

Коэффициент агрегации (количество отдельных групп / количество входных строк) – пороговое значение для пропуска частичной агрегации. Если значение больше, то при частичной агрегации будет пропущена агрегация для дальнейшего ввода.

Значение по умолчанию: 0.8

Found what you were looking for?
Feedback