OSC2008 Tokyo/Fall に行ってきた.
初日は業務として行かせてもらえました.感謝.
メモと感想
仮想化環境におけるベンチマーク結果
日本仮想化技術株式会社 CEO 宮原さん
- MacBook 使い
仮想化環境の設計手法
- 設計のポイント
- 目的と優先することを明確化する必要がある
- 性能要因
- Core数と仮想化支援技術があるかどうか
- クロック数はあまり気にしない場合が多い
- メモリ最大搭載容量は多い方が良い
- ストレージなどのI/Oの帯域にボトルネックが発生しやすい
- ストレージコントローラのキャッシュ容量,バス,仮想化支援技術など
- ソフトウェア
- スケジューラの特性によって,得手不得手がある.
- 何を求めるかを考える必要がある.
- スケジューラの特性によって,得手不得手がある.
- 選定ポイント
- CPU は仮想化してもそれほど下がりにくい
- 特に選ばなくてもいい傾向にある
- メモリ容量は仮想マシン数に影響を与える
- 積めるだけ積む
- 高速なI/Oの装備が必須
- これが一番のキーポイント
- I/O仮想化支援技術の搭載かどうかにも気をつける
- CPU は仮想化してもそれほど下がりにくい
- 概算での統合計画だと,統合したいサーバのCPU使用率・メモリ容量の総計で見たりする
- あくまで概算
- ストレージの選定
ベンチマークについて
Citrix XenServerのベンチマーク結果解説
- 目的
- Webサーバ+DBサーバ
- いわゆるWeb系で必要とされるサーバ構成
- 仮想化 != 性能低下の数値的な裏付け
- 性能低下はそれほどではない,もしくは全く低下しない,という裏付けとしてのベンチマーク
- 一般的なラックサーバの構成でやっている.
- Webサーバ+DBサーバ
- SPECweb2005
- 物理サーバのピーク性能と同程度の処理能力が出ている.
- それ以上はApacheのprefork数やメモリ不足など,さらなる性能調査をしてみないと.
- 実際に過負荷になったときに,どういう振る舞いをするのかを調査する必要がある.
- それ以上はApacheのprefork数やメモリ不足など,さらなる性能調査をしてみないと.
- 物理サーバのピーク性能と同程度の処理能力が出ている.
- pgbench
- ストレージ性能が低いと,キャッシュのためか,物理サーバよりも性能が良くなった.
- ストレージがボトルネックになっている.
- ストレージが高性能になると,2VMで物理性能がピークになる.
- 「高I/O要求 + I/Oを要求しない」のような組み合わせがいいのではないだろうか.
- DBサーバとWebサーバの組み合わせなど.
- ストレージ性能が低いと,キャッシュのためか,物理サーバよりも性能が良くなった.
- まとめると
- 仮想化処理はそれほど重くない.むしろ低い.
- DB性能はストレージが一番効く.
- あとメモリ.
MySQLシステム構成〜高可用性構成編〜
データベースインフラ設計
- インフラ設計で考慮すべき項目
- 高可用性設計
- 障害体制や障害時の対策など
- 拡張方式設計(性能/ストレージ)
- 分散対策など
- セキュリティ設計
- 暗号化など
- バックアップ設計
- 監視方式設計
- MySQL Enterprise Monitorなど
- メンテナンス方式設計(データ/ログ/時刻同期)
- データの移動や破棄,バックアップして削除などのデータメンテナンス
- 高可用性設計
高可用性設計
レプリケーション
- master -> slave
- かなり枯れた技術
- 多数のWebでの実績
- 非同期型
- Webアプリは 95% が参照,更新が 5% というケースもある.
- 特徴としては
- 参照性能の向上
- バックアップ用途
- 基本的に一方向だが双方向や循環型もあり得る
- 更新ログ(bin-log)を利用
- 構成パターン
- シングルマスタ -> シングルスレーブ
- シングルマスタ -> マルチスレーブ
- シングルマスタ -> シングルスレーブ(リレーサーバ) -> マルチスレーブ
- そこそこ更新が多い場合
- マルチマスタ(マスタ <-> マスタ)
- アプリケーション側でテーブル・データベースのアクセス分散を行うなど
- 垂直分割をしない場合の解決法かな
- アプリケーション側でテーブル・データベースのアクセス分散を行うなど
- 仕組み
- スケールアウト構成
- Write1台
- Read 複数台
- DRBD
- DRBD + Linux Heartbeat
- Linux Hearbeat で実現
- MySQL + 共有ディスク
- アクティブ・パッシブ構成
- データファイルを共有ディスクに
- 同期型
- 仮想IPによるフェイルオーバー
- MyISAM ならアクティブ・アクティブ構成もあり得る
- レプリケーションマスタの冗長化
- master を DRBD や共有ディスクでデータの冗長化をする場合が多い.
- MySQL Proxy
- MySQL Cluster
- MySQL Cluster Carrier Grade Edition
ディスクデータ冗長化ソフトウェア DRBDの機能と応用例の紹介
- DRBD
- 基本構成
- クラスタマネージャ
- マシン・サービスの死活監視
- 自動・手動でアプリケーションの移動が可能
- Shared-nothing
- Single Point of Failure がない
- 推奨は heartbeat
- バックアップ
- DRBDはバックアップにもなる
- LVMのスナップショットを取る
- もしくは ZFS を使えるとできるかもしれない.
- デモ
- Primary になって初めて mount できる.
- Secondary で中身を見る場合は,Primary で unmount して,Secondary に変更.その後, Secondary で Primary になって,mount する.
- ちょっと面倒だが,Primary/Secondary 構成では仕方ないのかもしれない.
- バックアップの代わりになるのは個人レベルでも使えるかな
- リポジトリのバックアップなどに,利用する方法もある
やっぱりすごい!Memchaced!!〜最新MySQLサポートツールズのご紹介〜
Memcached
MySQL Enterprise Monitor
MySQL Workbench
オープンソースDB性能検証 SMPスケーラビリティを探る
- データベース性能検証会
- セミクローズドで開催中らしい
- アジェンダ
- 背景
- 前回まで
- その後
- UltraSPARC T2
- 議論
背景
- 方針
- テスト項目
- 検証条件
- バージョンにこだわらない
- データとログのディスクを物理的に分ける
- 性能値を見るために I/O が足かせにならないように.
- 逆に言うと,これが性能の足かせになるようだ.
- 性能値を見るために I/O が足かせにならないように.
- 各DB毎にそこそこチューニング
- MySQL は基本 InnoDB
- PostgreSQL は適宜 VACUUM, ANALYZE
前回の結果を簡単に
-
- MySQL
- カラム数が多いと性能が下がる
- カラムのハンドリングに時間がかかるようだ
- ただし他の DB よりは性能劣化は低い
- INSERT と DELETE はほぼ同性能
- SELECT 性能は低いようだ
- 圧倒的に DELETE 性能が低い
- 4つのテーブルの結合だと MySQL の方が高速
- LEFT JOIN だと,PostgreSQL 8.3 との比較で,小接続数では MySQL が高速
- 接続数が多くなると,差は縮まる
- GROUP BY では MySQL はさらに高速
- 更新2:参照8 シナリオテストだと MySQL の方が若干高速
- innodb_thread_concurrency をむやみに大きくしても意味がない
- InnoDB は MyISAM に比べても十分に早い
- JOIN は実は早い*1
- PostgreSQL よりもかなり高速
- SOCKET 接続は非常に早い
- ネットワーク接続でもオーバーヘッドが少ない
- 限界性能を狙うなら UTF-8
- 内部的に変換が入るから,UTF-8 Native がいい.
- ただしレコードサイズが増える・大きくなるので,その分を考慮する必要がある.
- 複雑なクエリだと,PostgreSQL よりも早い
- カラム数が多いと性能が下がる
- PostgreSQL
- Firebird
- MySQL
その後
- Super Smack を捨てた
- Super Smack の問題点
- クライアント単位に違うクエリーを実行できない
- テスト毎に同じ乱数列を使えない
- クライアント内で SELECT でとった値を次のクエリーに使えない
- Super Smack の問題点
UltraSPARC T2 でのテスト
- UltraSPARC T2とは
- 1 Chip 8 Core
- 1 Core 8 Thread
- 1 Chip 64 Thread
- オンラインで Core/Thread を切り替えられる
- Clock は高くないので,1 Thread あたりの性能はそれなり
- テスト方針
- 測定点
- Thread数 1(1 Core 1 Thread), 8(1C8T), 64(8C8T)
- MySQL は 5.0 の 64bit バイナリを使う
- PG 8.3 はビルド
- FB Classic 1.5 は 64bit バイナリ
- テスト項目
- 単純テスト
- 10万レコード,10/50/500 クライアント
- DBT-1もどき
- SELECT 20000 レコード
- INSERT+UPDATE 5000 レコード
- 単純テスト
- 測定点
- テスト結果
- MySQL
- MySQL の方がクライアント数にかかわらずおおむね高速
- 8 Thread で性能は頭打ちになる
- PostgreSQL
- 他接続になると,パフォーマンスが下がる
- 16 Thread で性能は頭打ちになる
- Firebird
- 8 Thread で性能は頭打ちになる
- 現行 DB のスケーラビリティは 8 〜 16 Thread 程度まで.
- MySQL
結論
- 1CPU -> 8CPU まではがつんとあがる
- 8CPU -> 16CPU までは,まあまあ,あがる
- 16CPU -> 64CPU までは,それほど変わらん
- CPU が増えると Context Switch のオーバーヘッドが大きいのかな?
*1:意外だ