读 修改 写 基准测试
配置
我们在以下机器上运行基准测试:
- 16 CPUs, HT(Hyper-Threading) enabled (超线程开启) -> 32 vCPUs, Intel Xeon E5-2660 @ 2.20GHz
- LSI 1.8T 闪存卡
- 144GB 内存
- Linux 3.2.45
这些基准测试的目标是演示合并操作符在读写工作负载(例如计数器)上的优势。这两个基准测试都是使用一个线程执行的。
随机更新基准测试
我们运行”update random”基准测试,执行50,000,000次迭代:
1.读取随机key
2.向随机key写入一个新值
每个值为8字节,模拟uint64_t计数器。写前日志被关闭。
以下是我们使用的准确基准参数:
bpl=10485760;overlap=10;mcz=2;del=300000000;levels=6;ctrig=4; delay=8; stop=12; mbc=20; r=50000000;
t=10; vs=8; bs=65536; si=1000000; time ./db_bench --benchmarks=updaterandom --disable_seek_compaction=1 --mmap_read=0
--statistics=1 --histogram=1 --num=$r --threads=$t --value_size=$vs --block_size=$bs --db=/data/sdb/ --disable_wal=1
--stats_interval=$si --max_background_compactions=$mbc --level0_file_num_compaction_trigger=$ctrig --level0_slowdown_writes_trigger=$delay
--level0_stop_writes_trigger=$stop --num_levels=$levels --delete_obsolete_files_period_micros=$del --min_level_to_compress=$mcz --max_grandparent_overlap_factor=$overlap
--stats_per_interval=1 --max_bytes_for_level_base=$bpl --use_existing_db=0
以下是基准测试的结果:
29.852 micros/op 33498 ops/sec; ( updates:50000000 found:45003817)
总时间248分46秒
随机更新合并操作
使用merge操作符,我们可以只使用一个操作符执行read-modify-write。在这个基准测试中,我们执行了50.000.000次迭代:
- 对随机密钥执行 “uint64add” 合并操作符,该操作符向与该密钥关联的值添加1
与之前的基准测试一样,每个值都是8字节,并关闭了Write Ahead日志。
以下是我们使用的准确基准参数:
bpl=10485760;overlap=10;mcz=2;del=300000000;levels=6;ctrig=4; delay=8; stop=12; mbc=20; r=50000000; t=10; vs=8; bs=65536; si=1000000;
time ./db_bench --benchmarks=mergerandom --merge_operator=uint64add --disable_seek_compaction=1 --mmap_read=0 --statistics=1 --histogram=1 --num=$r --threads=$t
--value_size=$vs --block_size=$bs --db=/data/sdb --disable_wal=1 --stats_interval=$si --max_background_compactions=$mbc --level0_file_num_compaction_trigger=$ctrig
--level0_slowdown_writes_trigger=$delay --level0_stop_writes_trigger=$stop --num_levels=$levels --delete_obsolete_files_period_micros=$del --min_level_to_compress=$mcz
--max_grandparent_overlap_factor=$overlap --stats_per_interval=1 --max_bytes_for_level_base=$bpl --use_existing_db=0
以下是基准测试的结果:
9.444 micros/op 105892 ops/sec; ( updates:50000000)
总用时78分钟53秒