まっちゅーのチラ裏スマートフォン用の表示で見るまっちゅーのチラ裏2013-01-20Tuningathon1/19(土)のTuningathonに友人の@murahumと参加したのでうろ覚えですが詳細をまとめました。単一スレッドで5つのクエリを走らせ、どれだけ早く処理できるかを競いました。状況確認CPU、メモリともかなり潤沢。Large】インスタンスが配布されていたようです。最初にベンチを取ると140秒近くかかってました。poolにDBを全て載せれば早くなるだろうと推測し採用innodbは業務でも使用したことがあるので、ベンチ取りながら知っているパラメータを試してみようと考えてました。参照しているテーブルはpage,revisionのみだったので確認すると色々INDEXが貼られていました。相棒と話し合った結果、取り敢えず全部消して、1から貼り直そうという話になりました。・ここから実機のMySQL5.5を5.6にバージョンアップしようと試みるがソースコンパイル久方ぶり過ぎて不安になり断念。・page,revisionに通常のINDEXを貼っていく。貼れば貼るほど遅くなる。なにこれ・・・MySQLは一つのクエリにつき、一つのINDEXしか使用できないので複数ある場合はあまり効率のよい動きはしないみたい。そこで複合INDEXを採用してみることにして適当にぺたぺた10秒⇛17秒に!!!なぜにwwww泣く泣くrevisionのINDEXのみ削除。page(page_is_redirect,page_namespace,page_touched);17秒⇛9秒に終盤ここからは試行錯誤で色々やりましたが中々効果がでず。運営からは6秒台とのアナウンスもあって焦る焦る。revision(rev_user,rev_page,rev_timestamp(6));9秒⇛7秒に※【SUBSTRING(rev_timestamp,1,6)】の部分で6バイト目までしか参照しないのでINDEXもそこで止めてます。これによりCardinality値を下げる効果ああります。groupbyにINDEXが効くのは知識として知っていましたが、INDEXを6バイト目で止める部分は自分も考えつかなかった。revision(rev_user,rev_page,rev_timestamp);でも測定値はあまり変わらなかったそうです。以下によると一意なら参照も早くなったかもですが、timestampは一意ではなかったのであまり変化はなかった模様。カラム全体から作成されたインデックスよりも遅くは無いはずです。操作を早くする事ができます。最後にmysqldにniceかけてログの出力を全て止めてタイムアップ結果なんと「7.32306790352」で総合三位でした!!!!イケメン相棒のINDEXが素敵だったのが勝因でしたwwwあざすwwwそして、沖縄勢が10位以内を4つの枠を占める大健闘!考察&反省点1位との差は5つ目のクエリの部分だったと思います。5つめのクエリをEXPLAINしたらtypeがALLになっていたのは気づいていたのですが全然手が思い浮かびませんでした。インタビューでは主キーを変更したといっていたのでインスタンスが生きているうちにちょろっと調べてみたところ、rev_pageを主キーに指定することができました。rev_pageが一意な値だったとは。うっかりして主キーに変更後のベンチをとれなかった。poolは5GB割り当てその他のbuffer_sizeたちはあまり多く割り当てすぎると若干遅くなった気がしたので以下のようにしてます。一応、単一スレッドの処理速度を計る今回の競技には全く関係ありませんがdefaultのmax_connections150きても耐えうる感じにはしてみました。pool以外は効果薄だったかも。Areasort_buffer_size=16Mread_rnd_buffer_size=16Mmax_allowed_packet=16Mjoin_buffer_size=8Mkey_buffer_size=8M[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pidということで大分ふわふわした道筋でしたが、3位だったので大満足です!運営の方お疲れ様でした。次回も参加したいと思いますのでよろしくお願いいたします。追記:運営よりAMIが公開されたので主キーを張り替えて試してみました。結果「6.32319498062」で優勝には届かず。他にオーバーヘッドがないか確認し、pageのINDEXを以下のように張り替えたら「5.8722589016」がでました。sahara先輩ハマったメモChef-solo導入〜簡単な設定までruby2.0.0インストール月別アーカイブはてなブログをはじめよう!ma2k8さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。