[DBチューニングコンテスト とんがりナレッジ] 優勝への道① ハードウェア選定+OS構築編
2015/9/25に行われた、社内DBチューニングコンテストに優勝しました!!
今回はその時の話を書いていきます。
まず、競争条件について。
最初に聞いた条件は以下の通りでした。
【競争条件】 <測定ツール> - HammerDBを使用 <決勝> (1) TPC-H 4セッション(Scale Factor=10 ) <予選> (1) TPC-C 20セッション(1セッションごとに100万トランザクション) (2) TPC-H 4セッション(Scale Factor=1) 上記の合計24セッションが終わった時間で競う。(同時性は問わない) <パーツ条件> ・予算 10万円以内 ※ただし、超えた場合は自己負担も可 ・電源(中古品禁止) ※Bronze以上 ・マザーボード(中古品禁止) <禁止事項> ・作成されるデータはいじってはいけない ・DB起動時にデータをメモリ上に乗せてはいけない
予算10万円でどんなPCが組めるか??
構成案としては下記で考えました。
【構成案】 1. Memory : 全データがメモリに乗り(32GB以上)、なるべく高速なもの( DDR-3以上) 2. CPU : なるべく性能のいいもの 3. Disk : なるべく高速なディスク (SSD、容量 : 100GB以上) 4. マザーボード : 上記性能を発揮できて、なるべく安いもの 5. 電源 : なるべく安いもの ※数字は優先順位
メモリはそこまで悩まずに価格感だけ確認して、最初に悩んだのはCPUでした。
PassMarkを参考にしたところ、二つの選択肢が出てきました。
<CPUの選択肢>
・Interl Core i7 4790K (Average CPU Mark : 11,237)
・AMD FX-9590 (Average CPU Mark : 10,282)
それぞれCPUについて調べていると、AMD FX-9590が爆熱で空冷だと厳しいとの噂を確認しました。
空冷の代わりに、水冷を使って冷やすとのこと。
水冷使ったことないし、面白そう!!
結果、水冷にしてみたいという単純な好奇心が勝ってしまいました。(後で後悔しましたが。。。)
ディスクは、本当に速度が出るものを選びたかったため、
ベンチマークサイトに載っているシーケンシャルリードが500MB以上のものという条件で探しました。
マザーボードは対応している記載はなかったんですが、
「Socket AM3+ / AM3 」の記載があるし大丈夫だろうと安易な考えで選んでしまいました。
※対応していない結果、ファームを最新に上げると起動できなくなるという問題にはまってかなり焦りました。。。
最後に電源は、電源容量だけ気にしただけだったので、そこまで悩みませんでした。
※600Wにしたのは、AMD FX-9590の TDPが220Wだったので少し余裕を見た結果です。
以下が、最終的に決定したPCの構成です。
【構成パーツ】 CPU : AMD FX 8-Core Black Edition FX-9590 水冷クーラー付属 MEMORY : F3-1866C10Q-32GZM SSD : SDSSDHII-120G-J25 マザーボード : 990FX Killer 電源 : KEIAN BullMAX ATX電源 600W 80PLUS BRONZE取得 KT-F600-12A
また、OS関連は下記で構成しました。
【OS+DB】 OS : Oracle Linux Server release 7.1 Oracle : 12.1.0.2.0 ※理由 : 基本的に最新のもののほうが速いため <Disk性能と設定> RAID : RAID0 ファイルシステム : ext4 : ブロックサイズ : 32KB
ちなみに、Diskの速度を測定したところ、想定通り、1GB出ているので問題ありませんでした。
<iostatの結果> Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn sda 4213.00 526.62 0.00 526 0 sdb 4215.00 526.75 0.01 526 0 dm-0 8432.00 1053.50 0.01 1053 0
あとは、下記のカーネルパラメータを変更しておきました。
vm.swappiness = 0 ※予期せぬSWAPを防ぐため
【PCパーツ選定時の間違いポイント】 TPC-C(warehouse:1)は、チューニングすればするほど、1行の行ロックを全セッション(CPUコア)が待つ状態になる、CPUネックの状態になりました。 メモリやディスクの待ちがほぼない状態にした後で、行ロックをいかに速く外すかを考えた時、結局シングルコアの速度差が効いているように感じました。 なので、実はシングルコアの速度も気にしないといけませんでした。 <シングルコアの速度> ・Interl Core i7 4790K (Single Thread Rating : 2,531) ・AMD FX-9590 (Single Thread Rating : 1,724) 【コンテスト終了後】 Interl 4790K環境にて同等の設定を入れた結果、TPC-Cの実行時間は、ほぼSingle Thread Ratingのスコア通りの違いになりました。 TPC-Hでも同様の確認をしましたが、Average CPU Mark通りの結果差でした。 TPC-Cの場合、warehouseの行数がコア数未満の場合は、シングルコアの速度を気にしていないと痛い目を見るという簡単な考慮漏れに深く反省しました。