webassembly_udf_input_split_memory_ratio
Доля линейной памяти экземпляра WebAssembly UDF, которую может занимать сериализованный вход одного вызова. Должна быть не менее 0 и не более 1; при значении по умолчанию вторая половина остаётся guest-коду под его собственный working set помимо входного buffer. Именно запас ниже 1 делает батчинг безопасным: собственные данные guest-кода, его stack и allocator используют ту же память и не видны host-окружению. Значение ratio, близкое к 1, не оставляет им ничего, поэтому вызов, размер которого подобран по этому значению, всё равно может завершиться ошибкой в allocator guest-кода. Настройка читается только дляABI BUFFERED_V1 и определяет размер вызовов лишь при webassembly_udf_max_input_block_size, равном 0: ненулевой размер блока вместо этого ограничивает число строк на вызов.
Батч никогда не уменьшается меньше одной строки, поэтому строка, сериализованный размер которой сам превышает бюджет, передаётся отдельно, а строка, слишком большая для линейной памяти модуля, приводит к ошибке в allocator guest-кода.
Установите 0, чтобы не разбивать вход: весь блок конвейера передаётся одним вызовом.
webassembly_udf_max_fuel
Ограничение fuel на одно выполнение экземпляра WebAssembly UDF. Каждая инструкция WebAssembly потребляет некоторое количество fuel. Перед передачей в среду выполнения значение умножается на 1024, поэтомуwebassembly_udf_max_fuel = 1 соответствует примерно 1024 единицам fuel. Установите 0, чтобы снять ограничение. Применяется только к функциям, у которых для настройки webassembly_udf_enable_fuel задано значение true; это значение используется по умолчанию.
webassembly_udf_max_input_block_size
Максимальное число строк, передаваемых в WebAssembly UDF за один вызов. Ненулевое значение ограничивает число строк на вызов и действует для любого ABI. Значение 0 означает, что размер вызовов определяется по их сериализованным входным данным. Это касается толькоABI BUFFERED_V1 — единственного ABI, который сериализует входной блок целиком в память guest: его блоки разбиваются так, чтобы входные данные вызова не превышали долю webassembly_udf_input_split_memory_ratio от линейной памяти модуля. ROW_DIRECT передаёт аргументы как значения WebAssembly, а ASSEMBLYSCRIPT создаёт по одному объекту на строку, поэтому ни у того, ни у другого нет сериализованных входных данных, по которым можно было бы определить размер вызова, и при значении 0 блок конвейера остаётся целым.