>RSSニフティクラウド活用Tipsユーザーと中の人が語るクラウド活用Tipsを、クラウド女子がお届けします。2011/06/24こんにちは、ちなつです。ニフティクラウドでは来月に向けてあれこれ準備中。なにが始まるのかは来月のお楽しみです。今回は、パフォーマンスチューニングが好きで、特に並列化プログラミングがマイブームなライター・石田健亮氏の記事をご紹介します。(*本記事の最後に石田氏のプロフィールを掲載しています)*********************************************************************はじめまして、ドリーム・アーツの石田です。けの業務アプリケーションをSaaSとして提供しています。流通・小売業の方、ぜひ以下の製品サイトをご参照ください。(別ウィンドウが開きます)以前は、自社で購入したサーバーを使って、データセンターにラックスペースを借りて運用していましたが、現在は運用コストの削減を目的に、ニフティクラウドでのサービス提供を移行しつつあります。今日は、我々がニフティクラウドを採用する際に最も気をつかった仮想サーバー上でのMySQLのパフォーマンスについて書いてみます。ニフティクラウドでMySQL?仮想化には、向いているサーバーと向いていないサーバーがあります。言われるのが、Web系のアプリケーションサーバーは向いていて、データベースサーバーは向いていないというもの。そのとおりで、仮想化環境でデータベースというのはなんとも筋の悪い手です。これは、CPUやメモリといった資源は仮想化されても単に分割されているだけで物理的なリソースをほとんどそのまま利用できるのに対して、データベースの性能が依存するハードディスクは1台のディスクの中で並列に動作できませんから共有する他の仮想サーバーの分性能低下が発生しまうことが原因です。MySQLをニフティクラウドで動かす場合、SELECTなどの参照クエリについては、メモリが8GBや16GBといったメモリリッチなサーバータイプも提供されているため、InnoDBエンジンのバッファープールのサイズを大きめにとっておけば、性能が問題になるケースはほとんど無いと思います。UPDATEの書き込みクエリです。書き込みはトランザクションできちんと書きこまれたことを確認しないといけないので、最終的にディスクの性能に全体の性能が左右されてしまいます。ディスクの話の前にまず少なくとも一般的なMySQLチューニングは施しておいたほうがいいです。MySQLが遅いときは、たいていディスクI/Oがボトルネックになっていますが、あなたのアプリケーションでディスクI/OではなくCPUがボトルネックになっているときは、CPUのコア数が多いインスタンスに変更してお金で解決する前に、アプリが発行しているSQLを見直したほうが安いです。ニフティクラウドのCPUが速いからといって無闇に浪費するのもお金の無駄ですし地球にもやさしくないですからね。Disk100を使うニフティクラウドでは、作成したサーバーに最初から付いてくる30GBのローカルディスクの他に、データ領域用の追加ディスクが提供されています。追加ディスクには、オンライン用途のためのDisk100とアーカイブ用途のためのDisk40があります。最後にベンチマークの結果を載せていますが、MySQLで使うのならばDisk100以外の選択肢はありません。ローカルディスクは一見速そうなんですがこれまでの経験上サーバーによりかなり性能にバラつきがあるのと、Disk40はとてもオンライン用途では利用できないほど遅いからです。いうSCSIディスクとして見えますので、ニフティクラウドのヘルプにある通りに、適当なマウントポイントを作ってそこにマウントします。マウントした場合、そのディスクにMySQLのデータファイルを配置するには、/etc/my.cnfのdatadirの行を以下のように変更します。データファイルを作成します。MySQLの一時ファイルの置き場を変更MySQLはソート処理がソートバッファーメモリに収まらないときなど、ディスク上に一時ファイルを作って処理することがあります。(そもそもそんな処理にならないようにアプリを作るのが鉄則ですが・・・)この一時ファイルの置き場は、MySQLはTMPDIR環境変数を利用するので、/tmpになります。ところが、/tmpは、ニフティクラウドのインスタンスではローカルディスクになりますから、性能が安定しないです。ニフティクラウド上でMySQLを使う場合、この一時ファイル置き場は必ず高速なDisk100領域に作るべきです。作成して、mysqlの実行ユーザーで書き込み可能なようにします。/data/tmpそして、/etc/my.cnfファイルの[mysqld]セクションに、以下のように書いてあげればOKです。ストライピングで物理ディスクを超えるほとんどのアプリケーションは、ここまでの設定で十分な性能が得られるのではないでしょうか。物理ディスクに比べるとI/O性能がイマイチです。高い性能を求めるには複数の仮想ディスクを束ねてストライピングでパフォーマンスを稼ぐことができるはず。ことでストライピングに挑戦してみます。ニフティクラウドの場合、ストレージにはアイシロン社の製品を採用しているとのことですので、作成した仮想ディスクが別のノードに配置されればきっと性能が上がるはずです。今回はCentOS上でのストライピングとしてはもっとも手軽なLVMを使って、2台のDisk100のディスクをまとめて1台のHDDとして利用出来るように構築します。ニフティクラウドのサーバーに2台の同容量の仮想ディスクを接続します。サーバーを起動すると、/dev/sdbと/dev/sdcとして見えるはずです。この2台のディスクをLVMで扱えるようにします。直接ディスク全体を使うのでfdiskは要りません。created次に、この2台のディスクを束ねてボリュームグループを作成します。created2台のディスクを束ねたボリュームグループから、ストライピングされた論理ディスクを切り出します。オプションでストライプサイズを指定します。created最後にこの論理ボリュームにファイルシステムを作成します。/dev/vg0/dataしばらく待つとファイルシステムが出来上がるので、さっそくマウントしてみましょう。/dataこれで、ストライピングしたディスクができました。MySQLからみれば普通のディスクなので使い方は変わりありません。ストライピングで性能が上がるかどうかは、ディスクがどのストレージ装置に収容されるか次第で運によるところがあるかもしれませんので、このあたりはご自身で運試しをしてみてください。いうデータが物理サーバーのものです。どちらのグラフも棒が高いほど性能が高いことを示しています。Disk100を2本ストライピングしたときにようやく物理ディスクと同等以上に並びました。このぐらいの性能があれば普通の物理サーバー向けに作成されたソフトウェアは特に問題なく動きますね。ニフティクラウド上にMySQLなどデータベースサーバーを載せるときはぜひ参考にしてください。#しかしDisk40遅いですね。アーカイブ用途といってもこの速度だとネットワークでAmazonにアーカイブする方が速いかもしれません。株式会社ドリーム・アーツで小売事業者向けSaaS「Shopらん」を企画、開発。メインの仕事はプログラマーだがサーバー管理や営業もこなすユーティリティプレイヤー。最近好きな事はパフォーマンスチューニング。並列化プログラミングがマイブーム。キライなことはデータセンターでの作業。ニフティクラウドでデータセンターに行く必要が無くなったことが本当の利点だと思っている。Cloudニフティクラウドの開発・運営をやってます。普段はクラウド女子、たまにカメラ女子です。好きなことはSQLを書くこと、苦手なことはWordで文書を書くことです。起動時スクリプトでサーバーを自動構築してみた。万年筆やさんで、私に合うペン先を見てもらった。書けば書くほど快感が走る万年筆とは。クラウドに関する記事のまとめ(2020.2.17~2020.2.22)北九州漫画ミュージアム「関谷ひさしとスポーツマンガの時代」5月23日イベントオール私立で大学まで2500万円。ランボルギーニが買えるぜ。やっててよかった資金術とは。Backlogのカンバンボードは末恐ろしいAWSのシェアが落ち、Azureが延びて、4年後にAzureシェア32%、AWSは34%になる件SoftwareDesign3月号ヤマハ特集に執筆参加しました。富士ゼロックスのCocoDesk、溜池山王駅で体験してみたPython海外ニュース紹介第1回「そもそもPythonは誰のために作られたのか?その設計思想とは。「PoC死」の葬り方・後編オルタナティブ・ブログは、専門スタッフにより、企画・構成されています。入力頂いた内容は、アイティメディアの他、オルタナティブ・ブログ、及び本記事執筆会社に提供されます。利用規約プライバシーポリシーお問い合わせアイティメディアからのお知らせプレスリリースメールサービスRSSTwitterITmediaはアイティメディア株式会社の登録商標です。