データベースを高速化します。 Bcache

仕事のために、postgresql + postgisデータベースとosm.orgからの惑星全体のデータを使用します。 ディスク上では、約350 Gbを要し、すぐには動作しません。また、RAID-aなしの通常の2Tb 7200rpmハードドライブに保存されます。 なぜなら データベースの負荷が徐々に増加しているため、最小限の費用でディスクサブシステムを高速化することが決定されました。 多くのオプションはありませんでした:



賛否両論を検討し、友人のレビューを尋ねた後、私はbcacheに立ち寄ることに決めました。 彼についてもう少し説明します。



bcacheカーネルを構築する



bcacheを試すには、パッチを適用したカーネル3.9をビルドする必要があります。 プロジェクトは活発に開発されており、そのソースはtar.bz2としても配布されていません。 ダウンロードしたい場合は、リポジトリ(700MBのどこか)をダウンロードしてください。

#       sudo apt-get install kernel-package fakeroot build-essential ncurses-dev bc #    bcache git clone http://evilpiepirate.org/git/linux-bcache.git cd linux-bcache #      bcache     cat /boot/config-`uname -r`>.config make oldconfig
      
      





この手順の後、追加されたカーネルパラメーターに使用するオプションを選択する必要があります。 カーネルモジュールとしてコンパイルされたbcacheのみをデフォルトですべて残しました。 デバッグbcacheキーはオフのままです。

 make-kpkg clean #   -j      . sudo time fakeroot make-kpkg -j8 --initrd kernel_image kernel_headers #  24    .  . sudo dpkg -i ../linux-image-3.9.0+_3.9.0+-10.00.Custom_amd64.deb ../linux-headers-3.9.0+_3.9.0+-10.00.Custom_amd64.deb #    bcache-tools cd .. git clone http://evilpiepirate.org/git/bcache-tools.git cd bcache-tools make sudo make install
      
      





このカーネルが最新バージョンの場合-新しいものがインストールされている場合は自動的に起動します-grub2での起動時に[詳細ブートオプション]メニューでbcacheのカーネルを選択できます。



bcacheを構成する



bcacheを使用するには、ディスクを最初にフォーマットする必要があります。 (データのバックアップを忘れないでください)

 sudo -i umount /dev/sdb4 #   HDD make-bcache -B /dev/sdb4 #  SSD   make-bcache - /dev/sda
      
      





次に、ディスクをカーネルに登録する必要があります。

 echo /dev/sdb4 > /sys/fs/bcache/register echo /dev/sda > /sys/fs/bcache/register
      
      





登録後、ドライブは/ dev / bcache0として表示され、キャッシュは/ sys / fs / bcache / <UDID>として表示されます。 選択したファイルシステムにディスクをフォーマットし、マウントします。

 mkfs.ext4 /dev/bcache0 mount /dev/bcache0 /mnt
      
      





ディスクが動作するキャッシュを認識するためには、キャッシュを接続する必要があります。 キャッシュセットは単一のディスクですが、将来的には、キャッシュセット内の複数のキャッシュデバイスで作業を追加する予定です。 1つのキャッシュセットを複数のディスクに追加できます。これは、複数の低速ディスクがあるシステムに非常に便利です。 キャッシュを接続するには、UDIDが必要です。

 echo <UUID> > /sys/block/bcache0/bcache/attach
      
      





まあ、それだけです。 システムにディスクがあり、writetroughキャッシュが接続されています。 データベースの主な負荷がサンプルであり、データを変更しない場合、このキャッシュモードで十分であり、SSDの寿命は長くなります。 次のコマンドでライトバックを有効にできます。

 echo writeback > /sys/block/bcache0/cache_mode
      
      





bcacheからの印象



キャッシュがいっぱいになると、データベースは数倍速く動作し始めました。 数字を引用するのは難しいです bcacheに切り替える前に、参照要求を行いませんでした。 しかし、おおよその速度比を示すことができます。 したがって、空のキャッシュを使用した球面リクエストは171秒で完了します。 繰り返し3.2秒で実行されます。 データベースキャッシュが処理速度に与える影響をタイムアウトするために、データベースを再起動しました。その後、クエリは4秒で完了しました。 このような速度の向上により、地球全体のデータを処理することは、比較的弱いハードウェアでは不可能な作業ではないように思われます。



bcacheには、統計情報が追加されており、慎重に収集されます。 キャッシュの統計、ミスの数、ヒットの数、ヒットの割合、キャッシュがいっぱいである量、キャッシュに書き込まれた情報の量などを確認できます。 ここに彼が現在私に見せているものがあります:

 $ cd /sys/block/bcache0/bcache/stats_hour $ cat cache_hit_ratio 90 $ cat cache_hits 836233 $ cat cache_misses 91086 $ cd cache/cache0 $ cat btree_written 92.3M $ cat metadata_written 481M $ cat written 41.3G
      
      





ご清聴ありがとうございました。 誤字や不正確をPMで報告し、コメントで質問に答えようとします。

ps bcacheのドキュメントは非常に詳細で、よく書かれていますので、読むことをお勧めします。



All Articles