ajuste del rendimiento de rocksdb
1. Parámetros clave
create_if_missing: crear tabla faltante
num_levels: número de niveles, el valor predeterminado es 7. Si el tamaño L0 es 512 MB, la capa 6 puede acomodar 512M 512M 5G 50G 500G 5T Si la configuración es 7, la última capa no se utilizará hasta que el volumen de datos sea menor que los 5T calculados previamente. Si num_levels está configurado como 6, entonces la cantidad de datos en la capa inferior será mayor que 5T
max_background_flushes: la cantidad de subprocesos simultáneos para volcar memtable en sstable. El valor predeterminado es 1. El número de subprocesos es pequeño. Cuando la cantidad de escritura es grande, no será posible escribir.
max_background_compactions: el número de subprocesos simultáneos desde el sst inferior hasta el compacto sst de alto nivel. La compactación concurrente acelerará la compactación. Si la compactación es demasiado lenta, se producirá el bloqueo cuando se alcance soft_pending_compaction_bytes_limit y la escritura se detendrá cuando se alcance hard_pending_compaction_bytes.
max_write_buffer_number: especifica el número total de memtables y memtables inmutables. Cuando la velocidad de escritura es demasiado rápida o el hilo de descarga es lento y el número de memtables excede el tamaño especificado, no se podrá escribir la solicitud
write_buffer_size: el tamaño de una única memtable. memtable alcanza el tamaño especificado, se convertirá automáticamente en una memtable inmutable y creará una nueva memtable
max_bytes_for_level_base: el tamaño total de L1 se recomienda configurar el tamaño de L1 para que sea coherente con el. tamaño de L0 para mejorar la eficiencia de compactación de L0-gt; L1
min_write_buffer_number_to_merge: la memtable inmutable se fusiona antes del vaciado. Por ejemplo, si el parámetro se establece en 2, cuando una memtable se convierte en inmutable. memtable, RocksDB no realizará la operación de descarga hasta que haya al menos 2 antes de realizar la operación de descarga. Aumentar este parámetro puede reducir la cantidad de escrituras en el disco, porque puede haber claves duplicadas en varias tablas de memoria. Fusionar los datos antiguos antes de vaciar puede evitar vaciar el disco; sin embargo, el problema es que cada vez que se buscan los datos, cuando la tabla de memoria está vacía; Sin los datos correspondientes, es posible que RocksDB deba atravesar todas las tablas de memoria inmutables, lo que afectará el rendimiento de lectura.
level0_file_num_compaction_trigger: después de que L0 alcanza el número especificado de sstables, se activa la compactación L0-gt;
Por lo tanto, el tamaño de L0 en el estado estable es write_buffer_size min_write_buffer_number_to_merge level0_file_num_compaction_trigger
estadísticas: estadísticas de rendimiento del sistema e información de rendimiento. Habilitar estadísticas agregará de 5 a 10 gastos generales adicionales
stats_dump_period_sec: estadísticas. intervalo de tiempo de registro de exportación
compression_type: tipo de compresión
bloom_filter_bits: use el filtro Bloom para evitar el acceso innecesario al disco
lru_cache_size: tamaño de caché
max_open_files: identificador máximo de archivos abiertos
skip_stats_update_on_db_open: si se deben omitir las estadísticas al abrir la base de datos. Se recomienda configurarlo en falso
2. Situaciones comunes y soluciones para wirte salll
(1) RocksDB iniciará el mecanismo de autoprotección y retrasará la velocidad de lavado o compactación. Es demasiado tarde para procesar nuevas escrituras. Escribir o desactivar la escritura. Hay varias situaciones principales:
Límite de velocidad de escritura: si max_write_buffer_number es mayor que 3 y las tablas de memoria que se van a vaciar son mayores o iguales que max_write_buffer_number-1, la velocidad de escritura será limitada.
Prohibición de escritura: el número de memtables es mayor o igual que max_write_buffer_number, lo que activa la prohibición de escritura y se permite la escritura una vez completado el vaciado.
Límite de velocidad de escritura: cuando el número de archivos L0 alcanza el nivel0_slowdown_writes_trigger, se activa el límite de velocidad de escritura.
Deshabilitar la escritura: Cuando el número de archivos L0 alcanza el nivel0_stop_writes_trigger, la escritura se deshabilita.
Límite de velocidad de escritura: cuando la cantidad de datos en espera de compactación alcanza soft_pending_compaction_bytes, se activa el límite de velocidad de escritura.
Prohibición de escritura: espere a que la cantidad de datos de compactación alcance hard_pending_compaction_bytes, lo que activa la prohibición de escritura.
(2) Cuando se produce una parada de escritura, los siguientes parámetros se pueden ajustar según el estado específico del sistema:
Aumentar max_background_flushes
Aumentar max_write_buffer_number
Aumentar max_background_compactions
Aumentar write_buffer_size
Aumentar min_write_buffer_number_to_merge
3. Ejemplos de configuración recomendados
Medios de almacenamiento flash
options.options.compaction_style = kCompactionStyleLevel;
options.write_buffer_size = 67108864; // 64 MB
options.max_write_buffer_number = 3;
options.target_file_size_base = 67108864; // 64 MB
options.max_background_compactions = 4;
options.level0_file_num_compaction_trigger = 8
options.level0_slowdown_writes_trigger = 17;
opciones.level0_stop_writes_trigger = 24;
opciones.num_levels = 4;
opciones.max_bytes_for_level_base = 536870912 // 512 MB
opciones.max_bytes_for_level_multiplier = 8;
Memoria llena
options.allow_mmap_reads = true;
BlockBasedTableOptions table_options
table_options.filter_policy.reset(NewBloomFilterPolicy( 10, verdadero));
table_options.no_block_cache = verdadero;
table_options.block_restart_interval = 4;
opciones.table_factory.reset(NewBlockBasedTableFactory(table_options));
opciones.level0_file_num_compaction_trigger = 1;
opciones.max_background_flushes = 8
opciones.max_background_compactions = 8
opciones.max_subcompactions = 4; ;
p>
options.max_open_files = -1;
ReadOptions.verify_checksums = false