未解決
Community Manager
•
3.1K メッセージ
0
1757
【Coffee Break】DBのベンチマークをしたい、と言われたら?
この投稿は「ちょっとしたストレージ関連技術のTIPSを思いついたら書いてみる」というコンセプトで、デル・テクノロジーズ社内のTeamsグループ/チームでゆる~く運営されている「Coffee Break」からの情報抜粋です。今回は社内DBスペシャリストからの投稿です。
たまにお客さんに言われませんか?DBの性能はどれくらいでるの?PoCで性能を見せてよ とか。。。このときの「DBの性能」について考えてみたいと思います。
データベースも、通常はサーバOS上で稼働するアプリケーションの一つです。つまり、データベースの性能評価をするということは、アプリケーションの性能評価をする、ということです
すなわち、ストレージだけ、サーバだけ、IOだけ の単体の問題ではなく、「アプリケーション」が稼働する環境を用意することが必要です。登場人物が多ければボトルネックもあちこちに現れます。アプリサーバ、ネットワーク、DBサーバ、ストレージ…
特定箇所がボトルネックになってしまい、DBとして全然性能が出ない、なんてことも普通に起こります。
例:
・DBに負荷をかけるためのアプリサーバが先にネックになり、DBに全然負荷がかからない。IOも出ない
(Swingbenchを使った時のあるあるです)
通常はDBで何らかの処理を流して、それが遅いか速いか、単位時間あたりどれだけ数をこなせたか? といったあたりを判断することになりますが、ではその「処理」とは? 業界標準的なベンチマークを使うか、あるいは顧客指定のアプリケーション、というのが落とし所でしょうか?
DBの性能を見るときに必要なもの例
- そもそも何を実行するか?
- データベースやOSの選定
- DBの構成
- Oracleだったら、ASMにしようか、ファイルシステムか。RACかスタンドアローンか等、どういう構成にするか具体的にする
- テストの機材を調達に影響する
- ソフトウェアをインストール
- データベースを作成
- 表、インデックスなどを設計・作成する
- テストに必要な量のデータを準備・登録
- 大量のデータの登録には長時間かかることも。あるテスト用のデータの登録だけで3日かかった経験があります。All Flash Storage使ってましたが、やはりIOだけの問題じゃないこともあるので
- テストにふさわしい内容と量、多重度のトランザクションを発生させる
- ある一定時間、あるいは一定回数継続して実施
とまぁ、楽じゃありません。IO測定ツールのノリで考えると大変なことになりますので、慎重に対応をお願いします。
環境はともかく、ベンチマークツールをイチから作るのはあまり現実的ではないと思いますので、なんとか出来合いのものが利用できないか考えたいところです。
■公開されているベンチマーク結果
http://www.tpc.org/
TPC-CとかTPC-Hとかの結果を公開しています。Dellも出してます。まずはこれを参照するだけで済ませられないか考えたいところです
■Oracleでよく出てくる試験ツール: Oracle純正
- ORION : (現在は実質利用不能)
- 単体で稼働するIO性能測定ツール。Oracle純正で、OracleのIOを真似する。従来Oracle社のサイトからダウンロードできていたが、2020年以降は単体ツールとしての提供が打ち切られた(DBを買うとついてくるが、DBをインストールしないと展開されない。。。DBをインストールせずに単体ツールとして使えるのが便利だったのに、本末転倒です。缶切りは缶詰に入ってるよ、と言われてるような感じを受けます)
- CALIBRATE_IO() :
- Oracle DBをインストールすると自動的に導入される、PL/SQLのストアドプロシージャ。中味はブラックボックスで何をしているか詳細不明だが、オラクル社出身のDBAはこれを好む傾向(筆者経験上)。実際に社内で試したときには、READ 100% のIOのみを発生させていた
- RAT (Real Application Testing) :要ライセンスのためハードルあり
- Oracle DBを繰り返しテストするための追加機能。アプリケーション側から実行されたSQL文をOracle DBがキャプチャする。それを後から「再生」することにより何度も同じ処理を繰り返し実行できる。
- 例:HWをテックリフレッシュしたあとに、性能低下が無いか調べる。DBのチューニングのために、パラメータや設定を変更するごとに同じテストを流す、など
■Oracleでよく出てくる試験ツール: 3rd party & Free
- HammerDB : https://hammerdb.com/index.html
- OracleだけでなくSQL Server や PostgreSQLなど幅広く使える。TPC-C(OLTP)っぽいテストや、TPC-H(Analysis)っぽいテストが実施可能。テーブルやデータの生成、負荷かけ、測定など一通り実施可能
- Swingbench : http://dominicgiles.com/swingbench.html
- Oracle用。TPC-Cっぽいテスト(OE)と、TPC-Hっぽいテスト(SH)が実施可能。アプリサーバの負荷が高くなるので、アプリサーバにリソースを多めに割り振らないと、DBまで負荷がかけられない。GUIの見栄えは良いが、大量のIOを出す用途には向かない(使用した経験上)。テーブルやデータの生成、負荷かけ、測定など一通り実施可能
- SLOB : https://kevinclosson.net/slob/
- CPUとメモリの消費を低く押さえ、DBに対して大量のIOを発生させられるよう設計されている。アプリサーバも不要で、DBサーバのみで実行できる。IOを発生させることに特化したシンプルなツール。Dellが公開するストレージのホワイトペーパーでもよく利用されている。作成者のKevinさんは、一時期EMCでXtremIOのチームにいた。その前はOracleでExadataの開発に携わっていたとのこと。GUIはなくシンプルなCLIで実行する
※途中 TPC-Cっぽい とか「っぽい」と書いているのは、厳密にはTPC-Cではないためです。TPC-Cはテスト仕様が厳密に定められており仕様書を読むだけで一苦労です。決まった種類のトランザクションを決まった比率で決まった時間以上実行しなければならないとか、中には8時間連続運転テストとか、これをまともにやろうとするとかなりの労力になります。上に挙げたツールでは、TPC-Cと同じようなスキーマや同じようなトランザクションをあまり細かくこだわらずに実行する、という簡易的なものとお考えください。