Cassandra の読み取りパフォーマンスを改善するための助けが必要です。カラムファミリーのサイズが大きくなるにつれ、読み取り性能の低下が気になります。単一ノードの Cassandra に関する次の統計があります。
オペレーティング システム: Linux - CentOS リリース 5.4 (最終)
Cassandra バージョン: apache-cassandra-1.1.0
Java バージョン: "1.6.0_14" Java(TM) SE ランタイム環境 (ビルド 1.6.0_14-b08) Java HotSpot(TM) 64 -Bit Server VM (ビルド 14.0-b16、混合モード)
カサンドラ構成: (cassandra.yaml)
- rpc_server_type: hsha
- disk_access_mode: mmap
- 同時読み取り: 64
- 同時書き込み数: 32
プラットフォーム: RAID0 の 4 つのエフェメラル ディスクを備えた Amazon-ec2/Rightscale m1.Xlarge インスタンス。(合計 15 GB のメモリ、4 つの仮想コア、2 つの ECU、合計 ECU = 8)
実験構成: GC でいくつかの実験を試みました
Cassandra 構成:
10 GB RAM が Cassandra Heap に割り当てられ、3500MB が Heap NEW サイズです。
JVM 構成:
JVM_OPTS="$JVM_OPTS -XX:+UseParNewGC"
JVM_OPTS="$JVM_OPTS -XX:+UseConcMarkSweepGC"
JVM_OPTS="$JVM_OPTS -XX:+CMSParallelRemarkEnabled"
JVM_OPTS="$JVM_OPTS -XX:SurvivorRatio=1000"
JVM_OPTS= "$JVM_OPTS -XX:MaxTenuringThreshold=0"
JVM_OPTS="$JVM_OPTS -XX:CMSInitiatingOccupancyFraction=40"
JVM_OPTS="$JVM_OPTS -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCompressedOops"
OpsCenter コミュニティ 2.0 からの結果統計:
読み取り要求 1 秒あたり 208 ~ 240
書き込み要求 1 秒あたり 18 ~ 28
OS
負荷 24.5 ~ 25.85
書き込み要求の遅延 127 ~ 160 マイクロ
読み取り要求の遅延 82202 ~ 94612
マイクロ
2 番目
の OS ディスク キュー サイズ 13 ~ 15
要求 保留中の読み取り要求 25 ~ 32
OS ディスクの待ち時間 48 ~ 56 ミリ秒
OS ディスクの読み取りスループット 4.6 Mb/秒
ディスク IOPs 読み取り 420/秒
IOWait 80 % CPU 平均
アイドル 13 % CPU 平均
行キャッシュが無効になっています。
列ファミリー 私が読んでいるだけの列ファミリーの 1 つは、CLI によって作成されます。
create column family XColFam
with column_type='Standard'
and comparator = CompositeType(BytesType,IntegerType)';"
列ファミリー SSTable サイズ = 7.10 GB、SSTable カウント = 2
XColFam
列ファミリーには 59499904 の番号があります。推定された行キー (ほとんどは mx4jtools を介して推定されたさまざまな長さの utf8 リテラル) と、本質的に薄いような列、値が 0 バイトである.....今.
ほとんどの行には非常に少数の列 (おそらく 1 から 10) が含まれている必要があるため、列名の最初のコンポーネントは約 20 から 30 バイトで、2 番目は 8 バイトの整数です....複合列の 2 番目のコンポーネントは動的に繰り返される可能性がありますしかし、確率は低いです.......第1成分はさまざまに繰り返されますが、行の列数は異なる場合があります。
列ファミリーを圧縮しようとSnappyCompression
しましたが、サイズに変化はありませんでした。
20 スレッドで数時間実行され、この列ファミリに対して複数のキー (現在は要求ごとに 2 つのキー) のランダム読み取り要求を行い、行全体を読み取り、列スライスなどを読み取らないスケジュールされたサービスがあります。
1分間に処理するリクエストが少なすぎるため、パフォーマンスが良くないと思います。カラムファミリーのサイズがそれほど大きくない以前は、うまく機能していました。3~4GBくらいでした。
列ファミリーのサイズが大きくなると、読み取りパフォーマンスが急速に低下するのではないかと心配しています。
また、以前は GC と CPU を大量に使用していたため、いくつかの GC とメモリを微調整しようとしました。データ サイズが小さく、波形の iowait が非常に小さい場合。
Cassandra のパフォーマンスを向上させるにはどうすればよいですか。あなたの提案は高く評価されます。