TokyoCabinet 64GBの壁
こんにちは、
CyberX エンジニア今井です。
先週から始めたエンジニアブログですが、
今回は自分が担当です。
とはいえ、ブログに何を書くべきか大分悩みました。
悩んだ結果、最近アプリの運用中に起こった
TokyoCabinetの容量が64GBになると、
データが書き込めない件について取り上げたいと思います。
そもそも、64GBもデータを入れることがおかしいって言われると
あれですが…
最近、KVSを使うことも、大分主流になり、
弊社でもTokyoTyrant + TokyoCabinetを利用しております。
自分が知る限りでは、今までトラブルなく運用していたようですが、
先日、TokyoCabinetにデータが書き込めない事象が発生。
原因としては64bit環境で容量64GB以上のTokyoCabinetのデータファイルを扱うには、
HDBTLARGEオプションを指定する必要があるようです。
ちなみに、試しにHDBTLARGEオプションを指定して、64GBの壁を突破できるか検証してみました。
case.1 下記の例のように起動時のオプションに#opts=lを指定し、データベースファイルを作成
例) tt.tch#bnum=10000000#xmsiz=512m#opts=l
検証結果)
見事に64GB以上のデータを格納でき、put,getも正常動作しました。
しかし、メモリサイズが小さいので、64GBに近づくにつれ、
putの処理速度の低下。
case.2 作成済みのデータベースファイルで途中から起動オプション#opts=lを指定→optimizeを実行
→ttserverを再起動
検証結果)
64GBは越えたが、putとgetが正常に動作しない
optimize実行時に-tlオプションをつける必要があるようで、
以下のコマンドで最適化をしたら、読み書きも可能になりました。
tchmgr optimize -nl -tl tt.tch
検証してみて、TokyoCabinetに64GB以上のデータを
格納するよりも、分散するほうがスループットが向上すると
思いました。
(ペンチマークをとったわけではないですが…)
最後に、64GBの壁の対策などをまとめておきます。
■対策
1. TokyoCabinetを分散する。
ディスクI/Oを減らす効果もあるので最も理想的かと。
2. 64GB以上の容量を使用したい場合は、起動オプションに#opts=lをつける
(64bit環境ではつける必要があります)
■一時的な対策
1. TokyoCabinetの最適化をして、容量を減らす。
※この際、不要なデータを削除してから行うと最適
ちなみに、今回はTokyoTyrant + TokyoCabinetでしたが、TokyoCabinetを使用しているKVS
は他にもあるので、注意が必要です。
CyberX エンジニア今井です。
先週から始めたエンジニアブログですが、
今回は自分が担当です。
とはいえ、ブログに何を書くべきか大分悩みました。
悩んだ結果、最近アプリの運用中に起こった
TokyoCabinetの容量が64GBになると、
データが書き込めない件について取り上げたいと思います。
そもそも、64GBもデータを入れることがおかしいって言われると
あれですが…
最近、KVSを使うことも、大分主流になり、
弊社でもTokyoTyrant + TokyoCabinetを利用しております。
自分が知る限りでは、今までトラブルなく運用していたようですが、
先日、TokyoCabinetにデータが書き込めない事象が発生。
原因としては64bit環境で容量64GB以上のTokyoCabinetのデータファイルを扱うには、
HDBTLARGEオプションを指定する必要があるようです。
ちなみに、試しにHDBTLARGEオプションを指定して、64GBの壁を突破できるか検証してみました。
case.1 下記の例のように起動時のオプションに#opts=lを指定し、データベースファイルを作成
例) tt.tch#bnum=10000000#xmsiz=512m#opts=l
検証結果)
見事に64GB以上のデータを格納でき、put,getも正常動作しました。
しかし、メモリサイズが小さいので、64GBに近づくにつれ、
putの処理速度の低下。
case.2 作成済みのデータベースファイルで途中から起動オプション#opts=lを指定→optimizeを実行
→ttserverを再起動
検証結果)
64GBは越えたが、putとgetが正常に動作しない
optimize実行時に-tlオプションをつける必要があるようで、
以下のコマンドで最適化をしたら、読み書きも可能になりました。
tchmgr optimize -nl -tl tt.tch
検証してみて、TokyoCabinetに64GB以上のデータを
格納するよりも、分散するほうがスループットが向上すると
思いました。
(ペンチマークをとったわけではないですが…)
最後に、64GBの壁の対策などをまとめておきます。
■対策
1. TokyoCabinetを分散する。
ディスクI/Oを減らす効果もあるので最も理想的かと。
2. 64GB以上の容量を使用したい場合は、起動オプションに#opts=lをつける
(64bit環境ではつける必要があります)
■一時的な対策
1. TokyoCabinetの最適化をして、容量を減らす。
※この際、不要なデータを削除してから行うと最適
ちなみに、今回はTokyoTyrant + TokyoCabinetでしたが、TokyoCabinetを使用しているKVS
は他にもあるので、注意が必要です。