db_の使用bench rocksdbの性能圧力測定


rocksdbはbenchmarkツールを提供して、自身の性能に対して全方位の各緯度の評価を行って、順序の読み書き、ランダムな読み書き、ホットスポットの読み書き、削除、合併、検索、検査などの性能の評価を含んで、とても使いやすいです.
ツールコンパイル
ここではcmake方式を用いているが,主に自分のユーザの下で対応するサードパーティライブラリのパス(glfagsなど)を指定し,rocksdb自身の圧縮アルゴリズムコンパイルを開くかどうかを指定するためである.そうでなければ直接make原生のMakefile問題が多くdb_benchに依存するライブラリの一部は自動的にリンクできません(zstd,snappyなどの圧縮アルゴリズムはデフォルトでdb_benchにコンパイルされません)
もしあなたのdb_benchツールがインストールされており、現在の手順をスキップできます.
基本手順は次のとおりです.
  • rocksdbソース
    git clone https://github.com/facebook/rocksdb.git
    
    をダウンロード対応するバージョンを指定する必要がある場合は、ダウンロード後にgit branch xxxを実行して対応するバージョンのブランチ
  • に切り替えることができる.
  • サードパーティライブラリのコンパイル実装a.gflags
    a. git clone https://github.com/gflags/gflags.git
    b. cd gflags
    c. mkdir build && cd build
    
    #  DCMAKE_INSTALL_PREFIX                ,   root             ,        prefix  ,BUILD_SHARED_LIBS        gflags    ,          
    d. cmake .. -DCMAKE_INSTALL_PREFIX=/xxx -DBUILD_SHARED_LIBS=1 -DCMAKE_BUILD_TYPE=Release 
    
    e. make && make install	
    
    #  gflags include   lib          ,        ,        
    #/usr/local/gflags
    f.         bashrc,      :
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/xxx/gcc-5.3/lib64:/xxx/gflags/lib
    export LIBRARY_PATH=$LIBRARY_PATH:/xxx/gflags/include
    
    b.実装snappy sudo yum install snappy snappy-devel c.実装zlib d.実装yum install zlib zlib-devel bzip2 e.実装yum install bzip2 bzip2-devel e.実装lz4 yum install lz4-devel f.実装zstardard
    wget https://github.com/facebook/zstd/archive/v1.1.3.tar.gz
    mv v1.1.3.tar.gz zstd-1.1.3.tar.gz
    tar zxvf zstd-1.1.3.tar.gz
    cd zstd-1.1.3
    make && sudo make install
    
  • .
  • makefile
    cd rocksdb && mkdir build
    
    #   prefix        gflags prefix  ,            gflags  
    #  cmake     ,  cmake3
    #DWITH_xxx                ,    db_bench rocksdb                 
    cmake .. -DCMAKE_PREFIX_PATH=/xxx -DWITH_SNAPPY=1 -DWITH_LZ4=1 -DWITH_ZLIB=1 -DWITH_ZSTD=1 -DCMAKE_BUILD_TYPE=Release=release
    
  • を生成する.
  • 以上の上位ディレクトリを通過するCMakeListをコンパイルする.txtは現在のディレクトリでMakefileを生成し、最終的にコンパイル
    make -j
    
  • を実行する.
    成功すると、db_benchツールが現在のディレクトリで生成されます.
    せいのうあつりょくそくてい
    db_のためbenchツールのオプションが多すぎます.ここでコミュニティを直接抽出するテスト方式の核心はbenchmarkです.今回のテストで使用した圧力測定方式を表しています.benchmarkのリストは以下の通りです.
    fillseq       -- write N values in sequential key order in async mode
    fillseqdeterministic       -- write N values in the specified key order and keep the shape of the LSM tree
    fillrandom    -- write N values in random key order in async mode
    filluniquerandomdeterministic       -- write N values in a random key order and keep the shape of the LSM tree
    overwrite     -- overwrite N values in random key order in async mode
    fillsync      -- write N/100 values in random key order in sync mode
    fill100K      -- write N/1000 100K values in random order in async mode
    deleteseq     -- delete N keys in sequential order
    deleterandom  -- delete N keys in random order
    readseq       -- read N times sequentially
    readtocache   -- 1 thread reading database sequentially
    readreverse   -- read N times in reverse order
    readrandom    -- read N times in random order
    readmissing   -- read N missing keys in random order
    readwhilewriting      -- 1 writer, N threads doing random reads
    readwhilemerging      -- 1 merger, N threads doing random reads
    readrandomwriterandom -- N threads doing random-read, random-write
    prefixscanrandom      -- prefix scan N times in random order
    updaterandom  -- N threads doing read-modify-write for random keys
    appendrandom  -- N threads doing read-modify-write with growing values
    mergerandom   -- same as updaterandom/appendrandom using merge operator. Must be used with merge_operator
    readrandommergerandom -- perform N random read-or-merge operations. Must be used with merge_operator
    newiterator   -- repeated iterator creation
    seekrandom    -- N random seeks, call Next seek_nexts times per seek
    seekrandomwhilewriting -- seekrandom and 1 thread doing overwrite
    seekrandomwhilemerging -- seekrandom and 1 thread doing merge
    crc32c        -- repeated crc32c of 4K of data
    xxhash        -- repeated xxHash of 4K of data
    acquireload   -- load N*1000 times
    fillseekseq   -- write N values in sequential key, then read them by seeking to each key
    randomtransaction     -- execute N random transactions and verify correctness
    randomreplacekeys     -- randomly replaces N keys by deleting the old version and putting the new version
    timeseries            -- 1 writer generates time series data and multiple readers doing random reads on id
    
  • はdbを作成し、いくつかのデータ./db_bench --benchmarks="fillseq"に書き込むが、より多くの有効なメタ情報
    DB path: [/tmp/rocksdbtest-1001/dbbench]
    fillseq      :       2.354 micros/op 424867 ops/sec;   47.0 MB/s
    
  • は印刷されない.
  • はdbを作成し、いくつかのメタ情報./db_bench --benchmarks="fillseq,stats" --benchmarksはテストの順序を表し、持続的なオーバーラップをサポートする.今回は、順番に書いてdbの状態情報を印刷します.これにより、dbに関するstats情報が印刷され、dbのstat情報とcompactionのstat情報
    DB path: [/tmp/rocksdbtest-1001/dbbench]
    #           
    fillseq      :       2.311 micros/op 432751 ops/sec;   47.9 MB/s
    
    
    ** Compaction Stats [default] **
    Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      L0      1/0   28.88 MB   0.2      0.0     0.0      0.0       0.0      0.0       0.0   1.0      0.0     60.6      0.48              0.31         1    0.477       0      0
     Sum      1/0   28.88 MB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   1.0      0.0     60.6      0.48              0.31         1    0.477       0      0
     Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   1.0      0.0     60.6      0.48              0.31         1    0.477       0      0
    
    ** Compaction Stats [default] **
    Priority    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    High      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0     60.6      0.48              0.31         1    0.477       0      0
    Uptime(secs): 2.3 total, 2.3 interval
    Flush(GB): cumulative 0.028, interval 0.028
    AddFile(GB): cumulative 0.000, interval 0.000
    AddFile(Total Files): cumulative 0, interval 0
    AddFile(L0 Files): cumulative 0, interval 0
    AddFile(Keys): cumulative 0, interval 0
    Cumulative compaction: 0.03 GB write, 12.34 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.5 seconds
    Interval compaction: 0.03 GB write, 12.50 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.5 seconds
    Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count
    
    ** File Read Latency Histogram By Level [default] **
    
    ** DB Stats **
    Uptime(secs): 2.3 total, 2.3 interval
    Cumulative writes: 1000K writes, 1000K keys, 1000K commit groups, 1.0 writes per commit group, ingest: 0.12 GB, 53.39 MB/s
    Cumulative WAL: 1000K writes, 0 syncs, 1000000.00 writes per sync, written: 0.12 GB, 53.39 MB/s
    Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent
    Interval writes: 1000K writes, 1000K keys, 1000K commit groups, 1.0 writes per commit group, ingest: 124.93 MB, 54.06 MB/s
    Interval WAL: 1000K writes, 0 syncs, 1000000.00 writes per sync, written: 0.12 MB, 54.06 MB/s
    Interval stall: 00:00:0.000 H:M:S, 0.0 percent
    
    より多くのmeta operation動作が以下のようになる.
  • compactデータベース全体を統合する
  • stats印刷dbの状態情報
  • resetstatsリセットdbの状態情報
  • levelstats印刷各層のファイル数と各層の占有空間サイズ
  • sstables印刷sstファイルの情報
  • 対応するsstablesとlevelstatsの表示情報は以下の
    --- level 0 --- version# 2 ---
     7:30286882[1 .. 448148]['00000000000000003030303030303030' \
     seq:1, type:1 .. '000000000006D6933030303030303030' seq:448148, type:1](0)
    --- level 1 --- version# 2 ---
    --- level 2 --- version# 2 ---
    --- level 3 --- version# 2 ---
    --- level 4 --- version# 2 ---
    --- level 5 --- version# 2 ---
    --- level 6 --- version# 2 ---
    
    
    Level Files Size(MB)
    --------------------
      0        1       29
      1        0        0
      2        0        0
      3        0        0
      4        0        0
      5        0        0
      6        0        0
    
    である.
  • 単独でランダムにテストに関連するパラメータを書くことは自分で構成することができ、ここでは一部のパラメータだけが./db_bench --helpを通じて自分で所望の構成パラメータを見ることができ、もちろん構成前に各パラメータに対して一定の理解が必要である
    ./db_bench  \
    --benchmarks="fillrandom,stats,levelstats" \
    --enable_write_thread_adaptive_yield=false \
    --disable_auto_compactions=false \
    --max_background_compactions=32 \
    --max_background_flushes=4 \
    --write_buffer_size=536870912 \
    --min_write_buffer_number_to_merge=2 \
    --max_write_buffer_number=6 \
    --target_file_size_base=67108864 \
    --max_bytes_for_level_base=536870912 \
    --num=500000000 \ #         ,       30    
    --duration=30 \ #  IO    30 
    --threads=1000\ #  1000   
    --value_size=8192\ #value size 8K
    --key_size=16 \ #key size 16B
    --enable_pipelined_write=true \
    --db=./db_bench_test \ #    db   
    --wal_dir=./db_bench_test \ #    wal   
    --allow_concurrent_memtable_write=true \ #     memtable
    --disable_wal=false \
    --batch_size=1 \
    --sync=false   \ #    sync
    --block_cache_trace_file=/readable_trace_path\
    --block_cache_trace_max_trace_file_size_in_bytes=1073741824 \
    --block_cache_trace_sampling_frequency=1
    
  • .
  • ランダムに読み書きし、dbの状態情報を印刷し、さらにランダムに
    ./db_bench \
    --benchmarks="fillseq,stats,readrandom,stats"
    --enable_write_thread_adaptive_yield=false \
    --disable_auto_compactions=false \
    --max_background_compactions=32 \
    --max_background_flushes=4 \
    --write_buffer_size=536870912 \
    --min_write_buffer_number_to_merge=2 \
    --max_write_buffer_number=6 \
    --target_file_size_base=67108864 \
    --max_bytes_for_level_base=536870912 \
    --num=500000000 \ #         ,       30    
    --duration=30 \ #  IO    30 
    --threads=1000\ #  1000   
    --value_size=8192\ #value size 8K
    --key_size=16 \ #key size 16B
    --enable_pipelined_write=true \
    --db=./db_bench_test \ #    db   
    --wal_dir=./db_bench_test \ #    wal   
    --allow_concurrent_memtable_write=true \ #     memtable
    --disable_wal=false \	
    
    ホットスポット読み取りをテストする場合は、生成したkeyの範囲が100000の範囲内であることを示すパラメータ--key_id_range=100000を指定することができ、このテストはbenchmarkにtimeseries
  • を追加する必要がある