MyRocks и Bloom-фильтры
Bloom-фильтры используются для уменьшения увеличения числа чтений. Bloom-фильтры могут быть настроены для каждой семейства столбцов (см. myrocks-column-families).
Параметры Bloom-фильтра
- Сколько бит использовать
- whole_key_filtering=true/false
- Является ли Bloom-фильтр для всего ключа или для префикса. В случае префикса, необходимо посмотреть на определение индекса и вычислить желаемую длину префикса.
Вычисление длины префикса
- Это 4 байта для
index_nr - Затем, для столбцов фиксированной длины (целое число, дата[время], десятичное число) это длина ключа, как показано в
EXPLAIN. Для столбцов VARCHAR определение длины сложно (это зависит от значений, хранящихся в таблице. Обратите внимание, что MyRocks кодирует VARCHAR с форматом "Variable-Length Space-Padded Encoding").
Настройка Bloom-фильтра
Чтобы включить 10-битный Bloom-фильтр для префикса длиной 8 байт для семейства столбцов "cf1", поместите это в my.cnf:
rocksdb_override_cf_options='cf1={block_based_table_factory={filter_policy=bloomfilter:10:false;whole_key_filtering=0;};prefix_extractor=capped:8};'
и перезапустите сервер.
Проверьте, действительно ли семейство столбцов использует Bloom-фильтр:
select *
from information_schema.rocksdb_cf_options
where
cf_name='cf1' and
option_type IN ('TABLE_FACTORY::FILTER_POLICY','PREFIX_EXTRACTOR');
+---------+------------------------------+----------------------------+ | CF_NAME | OPTION_TYPE | VALUE | +---------+------------------------------+----------------------------+ | cf1 | PREFIX_EXTRACTOR | rocksdb.CappedPrefix.8 | | cf1 | TABLE_FACTORY::FILTER_POLICY | rocksdb.BuiltinBloomFilter | +---------+------------------------------+----------------------------+
Проверка полезности Bloom-фильтра
Следите за этими переменными состояния:
show status like '%bloom%'; +-------------------------------------+-------+ | Variable_name | Value | +-------------------------------------+-------+ | Rocksdb_bloom_filter_prefix_checked | 1 | | Rocksdb_bloom_filter_prefix_useful | 0 | | Rocksdb_bloom_filter_useful | 0 | +-------------------------------------+-------+
Другие полезные переменные:
-
rocksdb_force_flush_memtable_now- Bloom-фильтр используется только при чтении данных с диска. Если вы проводите тестирование, сначала запишите данные на диск. -
rocksdb_skip_bloom_filter_on_read- пропуск использования Bloom-фильтра (по умолчанию FALSE).
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/myrocks-and-bloom-filters/