付録C マシンのチューニング

Oracle NoSQL Databaseソフトウェアに使用できるデフォルトのチューニング・パラメータは、通常は本番システムで受入可能な状態である必要があるため、チューニングは不要です。ただし、基になるオペレーティング・システムでは、ストアのインストールに最適なパフォーマンスを実現するために、様々なカーネル・パラメータのデフォルト値が使用されます。

この付録では、本番ストアをインストールする際に管理する必要があるカーネル・パラメータについて説明します。これは、パフォーマンスがクリティカルとみなされるストアを意味します。ラボ環境にインストールされる評価システムを使用してストアのパフォーマンスを測定する場合を除き、そのようなシステムでこのレベルのチューニングが必要とされることはほとんどありません。

注意

Oracle NoSQL DatabaseはLinuxシステムに最も多くインストールされるため、この付録ではそこに重点を置いています。

Linuxのページ・キャッシュのチューニング

OSが可能なときに非同期にディスクに書き込めるようにページ・キャッシュをチューニングします。これにより、fsyncなどのシリアル書込み操作による遅延を最小限にするバックグラウンド書込みが可能になります。ファイル・システム・キャッシュが満杯で、新しい書込み用の場所を用意するためにディスクにフラッシュする必要がある場合に発生する書込みのストールにも役立ちます。これらのパラメータを次に説明するようにチューニングした場合、挿入量が多いベンチマークでは大幅な加速(15-20%)が観測されています。

次のコマンドを/etc/sysctl.confに配置します。次のコマンドを実行し、

sysctl -p

新しい設定をロードすることで、マシンを再起動しなくても設定が有効になります。

# Set vm.dirty_background_bytes to 10MB to ensure that on a 40MB/sec
# hard disk a fsync never takes more than 250ms and takes just 125ms
# on average.  Increase for faster SSDs or I/O subsytems with higher
# throughput
vm.dirty_background_bytes=10485760

# IO calls effectively become synchronous(waiting for the underlying
# device to complete them). This setting helps minimize the
# possibility of a write request stalling in JE while holding the
# write log latch. 
vm.dirty_ratio=40 

# Ensures that data does not hang around in memory longer than
# necessary. Given JE's append-only style of writing, there is
# typically little benefit from having an intermediate dirty page
# hanging around, because it is never going to be modified. By
# evicting the dirty page earlier, its associated memory is readily
# available for reading or writing new pages, should that become
# necessary.
vm.dirty_expire_centisecs=1000 

以前のバージョンのLinuxカーネルでは、vm.dirty_background_bytesがサポートされていない可能性があります。これらの古いカーネルでは、かわりにvm.dirty_background_ratioを使用できます。10MBに最も近い割合を選択します。メモリーが多いシステムでは、この構成ノブに関連する粒度が大きいため、これは存在しない可能性があります。その他の障害としては、割合5は一部のカーネルの最小有効値であるという点です。

vm.dirty_background_ratio=5

ここで説明しているパラメータが予定どおりに設定されていることを検証するには、sysctl -aを使用します。