アーキテクチャ データベースコンサルタントのノウハウちょい見せ

Oracle RDBMSなどのオラクル製品や各種インフラ技術(OS、ストレージ、ネットワーク)といった話題を取り上げます。著者は小田圭二、「門外不出のOracle現場ワザ」、「絵で見てわかるOracleの仕組み」、「絵で見てわかるOS/ストレージ/ネットワーク」などの著作もあります

ホーム > カテゴリー - アーキテクチャ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --/--/-- --:-- ] スポンサー広告 | トラックバック(-) | コメント(-)

SSDに関しての記事の紹介と、SSDとDBに関して個人的な見解

http://techtarget.itmedia.co.jp/tt/news/1209/18/news06.html にある記事
 ~ 期待した効果が見込めないことも ~ 「SSDを使ってはいけない6つのケース」がためになったので、要約とデータベースを想定して追加考察してみます。
長くない記事なので、良かったらtechtargetの会員になって読んでみることをお勧めします。

記事の要約(一部私の補足も追加しています)
 1 読み込み集約型ではないアプリケーションにはSSDを使ってはいけない・・・書き込みが多いシステムには向かない。
 2 高度かつランダムなデータアクセスではSSDを使ってはいけない・・・ランダム性が高過ぎると向かない。
 3 高度な仮想化環境では汎用SSDを使ってはいけない
 4 ストレージI/Oのボトルネック解消にサーバサイドSSDを使ってはいけない
 5 ネットワークのボトルネック解消にティア0を使ってはいけない
 6 コンシューマグレードのSSDをエンタープライズアプリケーションに使ってはいけない


データベースでSSDを使うのであれば、まず1と2が気になるところじゃないでしょうか。
1は、目安として90%が読み込みであることを説明していますが、おおざっぱな計算をすると、通常のOLTPシステムであれば、90 : 10以下 のselect文 vs DML文であるため、たぶん大丈夫でしょう。危ないのは、バッチ処理やデータロード、洗い替えと呼ばれるデータの入れ換えを行うデータベースでしょうか。
2は、SSDとはいえ、キャッシュメモリのように動作するため、SSDに載っていないデータに関しては結局HDDまでアクセスすることになり、高速にならないというキャッシュメモリとしての当たり前の動作を説明しています。SSDのサイズとDBのサイズの比にもよりますが、多くのDBではあまりこの事象は起きません。というのも、大抵、DBシステムは一部のデータについて頻度高くアクセスするからです。とはいえ、一部の時間帯(例:バッチ処理)といったときには、日ごろアクセスしないデータにわざわざアクセスすることもあり、2に該当する事象が起こりえます。いろんなDBを監視していると気付きますが、Oracleのバッファキャッシュヒット率が下がってしまうような時間帯があります。そういうI/OはおそらくSSDでも救えないでしょう。逆にDBのバッファキャッシュヒット率が高いシステムも、読み込みI/Oの改善にはSSDは貢献しないでしょう(そもそも読み込みI/Oが無いですから)。
以上を分析して見ると、SSDによるDBの性能改善のイメージが多少は湧くのではないでしょうか。

3は、I/Oの多いDBは仮想化に向かないので、DBではそもそも論外でしょう。
4は、統合ストレージに対して多数のクライアントPCが存在するケースを想定しているようです。1台のPCの中でDBを使う分には関係ないでしょう。
5は、ネットワークボトルネックのケースなので、DB内でSSDを使用する場合は関係ないと言えるでしょう(もちろん、ストレージのバスがボトルネックだと同じことが起こります)。
6は、「ケチるな!」ということで良いと思います。

まとめると、「SSDは、そこそこキャッシュヒット率が低いselect文が中心のDBに効果的そう。キャッシュヒット率は低すぎても、高すぎてもSSDの効果は期待しづらいはず」でしょうか。

以上、SSDとDBに関して個人的な見解でした。
スポンサーサイト
[ 2012/10/16 23:55 ] アーキテクチャ | TB(0) | CM(1)

Oracle NoSQL Database 11g

分かりやすい日本語記事が出ていました。
http://www.infoq.com/jp/news/2011/10/Oracle-NoSQL-Database
※ここからホワイトペーパー(英語)にもアクセスできます。

基は、Berkeley DB のJava Editionだそうです。

ホワイトペーパーを見ていて、へえーと思ったのが、
consistencyを4つのモードから選べることです。
absoluteもあれば、noneもあるそうです。
そしてdurability(頑丈さ)も選択できるそうです。

アーキテクチャは、client driverと、storage nodesから構成されるそうです。
storage nodesにデータを溜めこんでおくんでしょうね。

Oracle NoSQL ダウンロードURLありますね(ダウンロード開始は10月中旬の模様)。
http://www.oracle.com/technetwork/database/nosqldb/downloads/index.html

触ってみたいなあ。うずうず。

[ 2011/10/12 03:20 ] アーキテクチャ | TB(0) | CM(0)

ITシステムで見られるシーケンス

今回は、ITシステムで見られるシーケンスの紹介です。

「オンラインゲームを支える技術」で紹介されていた3つのシーケンスは、ITシステムでもよく見られます。まずはこれを載せます。

投げっぱなしシーケンス


投げっぱなしのシーケンスは、応答待ちしなくて済むので、楽です。ただし、きちんと処理が終わったか把握することはできません。

三角形シーケンス


三角形は、リクエストに対しての応答の形(例:Webページのリクエストに対するWebページの送信)となるため、イメージしやすいかと思います。処理が完了したかどうかも把握できます。

ぎざぎざシーケンス


ぎざぎざは、三角形の変形のため、割愛します。

●中継方式のシーケンス

中継方式シーケンス

いったんどこかに溜めて、その後、取りだして先の処理を進める方法です。なぜ、このような処理方式にするのかですが、いろんなシステムを経由したり、不安定な通信を経由するような場合には、トランザクションスコープ(トランザクションの範囲)を短くすることが、実は信頼性のためには重要だからです>(それ以外の理由もありますが・・・)。
通常、信頼性を考えると、三角形の形のシーケンスで全部やろうとしてしまいますが、それではどこか一か所で障害が発生すると、とたんに全ての処理が止まってしまいます。それでは社会インフラは困ってしまいます。どうするかというと、まずはDBに格納してデータを保全しておいて、あとでバケツリレーのように処理を進めて行くのです。この方法であれば、データが無くなることもなく、かつ、一時的な障害に対してはリトライもできるので安心です。

このシーケンスは、株取引でも、携帯電話購入後の登録など、いろいろなところで見られます。また、このシーケンスは、DBのスナップショットと言われる機能でもよく見られます。

実装が面倒なことを除けば、いいことづくめに見えますが、実はDB使いから言わせると、いくつか落とし穴があるシーケンスです。

落とし穴1

普段は問題ないものの、ある時、障害になり、DBにリクエストが溜まりすぎて、性能不足(たまったものが掃けるのに時間がかかる)になるケースがあります。

落とし穴2

中継のためにデータを取り出す処理があります。そのDBを検索する際には、「残っているもの全部」という取りだし方が多くなります。テーブルをフルスキャンしてしまうため、一時的にデータが溜まった後は、再編成しないと性能が悪くなることがあります(OracleでいうHWM(ハイウォータマーク)が上がってしまい、スキャンが長くなった状態です)。インデックスで検索するようにしておくか、再編成の手段を用意しておきましょう。

落とし穴3

中継のためにデータを取り出す処理は、定期的にポーリングするプログラムが通常です。数分や数秒といった間隔であれば問題ないかもしれませんが、たまに、「早く処理したいので、数msecが要件です」と言われることがあります。そのような処理では、DBへの問い合わせ回数も多くなり、CPU使用率が高騰しやすくなりますし、性能要件を達成するのも難しいかもしれません。
これイベント処理(インメモリDBやCEP:Complex Event Processingと呼ばれる製品が得意)が最適なケースがあります。

●同期と非同期の組み合わせのシーケンス

もう1つ、同期と非同期を組み合わせるケースもあります(「投げっぱなし」と「三角形」の組み合わせですね)。

同期と非同期の組み合わせシーケンス


早くレスポンスを返したいので、時間がかかるものは、あとで非同期で処理するという考え方です。中継方式よりは少ないですが、たまに見ます(ストレージの遅延書き込み等)。

これの注意点は、非同期の部分が障害になっても気づきにくい。性能トラブルやリソーストラブルが起きたときも気づきにくく、サーバー全体に影響がでるほどになって大問題になることがあります。

●まとめ

アーキテクトを目指す方々は、ぜひシーケンスを書くくせをつけて、方式のメリデメに詳しくなることがお勧めです。
[ 2011/05/12 03:25 ] アーキテクチャ | TB(0) | CM(0)

共通基盤やプライベートクラウドの作り方を紹介した記事(コンサルの会話が記事になっています)

前回に続いて、oracletech.jpの記事の紹介です。複数の共通基盤をコンサルした加藤さんのノウハウが多いので、私が載っているのは恐縮なのですが、加藤さんと私がコツ(と言っても概要だけ)を説明しています。

「共通基盤の構築はココでつまずく ~コスト効果を出すには細かな工夫が不可欠。熟練コンサルタントのノウハウも活用せよ~」

共通基盤は、本当に「技術以外」が大事だと思います。この記事でその大切さを気づいていただければと思います(既に知っているという声も多そうですが)。

P.S. 私の写真も載っています。加藤さんの方がいい男ですね! 実物もいい男です。
[ 2011/02/27 01:35 ] アーキテクチャ | TB(0) | CM(0)

接続が多くなることの問題と、システムプログラミング


知り合い(凄腕の人)から、「C10K問題」という記事を教えてもらいました。注:システムプログラミングにある程度、精通している人向けの記事です。

「C10K:クライアント1万台問題」とは、ハードウェアの性能上は問題がなくても、あまりにもクライアントの数が多くなるとサーバがパンクする問題のことです。
接続が多くなると、どんなことが起きるのか、どんなOSのどんなシステムコールがいいのかを解説しています。

前々回の記事で、DBの接続は比較的「重い」接続だと思うと書きましたが、Webのような軽い接続でも、このような問題があります。

上記サイトを読むかどうかは別として、インフラエンジニアにお勧めの技術分野の紹介をしたいと思います。それがシステムプログラミングです。

システムプログラミングって?:いくつかの書籍には、システムプログラミングというタイトルがついています。この定義は明確ではないようですが、システムコールを用いて OS に近いレイヤーで行うプログラミングのことと考えていいはずです。

なぜ、インフラエンジニアにお勧めかと言うと、(接続のような)性能、マルチスレッド、スループット、I/O性能、障害時のタイムアウト、同期I/O、非同期I/Oといった内容は、すべてこのシステムプログラミングの世界から来ているからです。上級者になろうとすれば、避けて通れません。

「システムコールは難しいよ。世の中で有名なシステムコールの本はどれも難解だし」と思う人が多いと思います。そこで、私が「良かった」と思う、初心者向けの本をちょっとご紹介します。「C for UNIX―システムコールの基礎と応用」です。

絶版ですが、Amazonで古本として安く手に入ります。書評にもあるように、簡単なところが売りですが、これだけで実務には耐えられません。システムコールの入門と思ってもらえればと思います。
[ 2010/08/29 21:48 ] アーキテクチャ | TB(0) | CM(1)
プロフィール

odakeiji

Author:odakeiji
小田圭二 日本オラクルのテクノロジーソリューションコンサルティング統括本部においてデータベースのコンサルタントをしている。今までのキャリアでは、社内教育部隊で、データベースやOS、ネットワークを教える経験を5年ほど積んだり、コンサル部門で主にDB(インフラ含む)のコンサルを10年程度経験した。また、コンサルタントとして、主に大規模ミッションクリティカルシステムを担当。社内では”火消し”とも呼ばれ、システムトラブルの火消しをいくつも担当していたこともある。
ポリシーは、「OracleもOS上で動くアプリケーションにすぎない。だから、OS、ストレージ、ネットワークを学ぶべき。アーキテクチャから考えろ」。
スキル面の興味は、アーキテクチャ、DBA、インフラ技術、教育、コンサル手法など。
本ブログのポリシーは「週に1回、DBAやインフラ担当者の役に立つ記事を書きたい」です(守れるだけ、守りたい・・・・)
なお、本ブログにおいて示されている見解は、私自身の見解であって、オラクルの見解を必ずしも反映したものではありません。ご了承ください。

私の主な著書の紹介です。もしよかったら、お役立てください。他にもオライリーなどがあります

●「絵で見てわかるOS/ストレージ/ネットワーク データベースはこう使っている」小田圭二 著
私のポリシーである”DBMSもOSの動くアプリケーションに過ぎない”に基づいて、OSとDBMSの関係、ストレージとDBMSの関係、ネットワークとDBMSの関係、を解説した珍しい書籍です。DBを学んでひと段落したら、DB使いもインフラ全体を意識しなければなりませんが、そのような人にお勧めです。企業ユーザー向けのIT本としては、2008年度翔泳社No1だとか(最後は出版社談)。

●「絵で見てわかるOracleの仕組み」 小田圭二 著
教育に携わる者としての私の思い「丸暗記するな。アーキテクチャを知るべき。絵で説明すべき」を具体化した、Oracleの入門書です。Oracle初心者向きですが、Oracleの基礎となる部分の動きを解説しているため、バージョンに依存せずに何年先でも使えます。逆に、本書の内容を理解せずに、ひたすら丸暗記すると応用力が身につきません。この本を読むだけで何かできるようになるわけではありませんが、アーキテクチャを身につけて、本当の技術力を身につける第一歩として欲しいと思っています。

●「44のアンチパターンに学ぶDBシステム」 小田圭二 著
本書は、企業のDBシステムの設計/構築から運用管理、プロジェクト管理までの各フェーズにおけるトラブル(失敗)事例について、アンチパターン(べからず集)とその回避策/防止策として解説するものです。チェックリストとして使っていただいても構いません。分かっていてもアンチパターンは避けられないことも多いものです(政治とか)。そういう方には、同じ仲間は多いのだなと再認識していただくための一服の清涼剤としていただければと思います。

●「門外不出のOracle現場ワザ」 小田圭二 他 著
一番最初に出た本です。結構とがった内容を扱っています。
・パフォーマンス分析の考え方(私の担当)
・性能テストや障害テストの仕方、設計の注意点(主に私が執筆)
・コストベースオプティマイザ(10gベース)のアーキテクチャ
・コネクションプーリング
最新のOracleの内容は含んでいませんが、今でも性能の考え方やオプティマイザの考え方は使えるはずです。オプティマイザをここまで解説している本を私は知りません。

●「続・門外不出のOracle現場ワザ」 小田圭二 他 著
「続」の名前の通り、次に出た本です。ちょっと尖り過ぎたかもしれません^^; でも本当に使う内容を選んだつもりです。一流になりたい・他の人と差をつけたい人にお勧めでしょうか。
・性能の良いSQLの書き方
・文字化けの仕組み
・障害(特に性能やハング)の分析・対応方法(私が執筆)
・障害をリアルタイムに分析・対処する方法(私が執筆)
・オプティマイザの使い方ノウハウ
・アップグレードのノウハウ

●「データベース」小田圭二 他 著
私にしては堅い本です。なんせ、共同執筆者が大御所の國友義久先生です。階層型DBMS、ネットワーク型DBMS、リレーショナル型DBMS、XMLDBMS、OO(オブジェクト指向)DBMS、DBMSの持つ機能、DBMSのセキュリティ、データベースの著作権、監査、モデリング、正規化といった内容を網羅しており、深い記述は無いものの、DB技術全体を抑えるのに向いている一冊です。ある程度技術力がついたエンジニアの方が、DB全体を振り返りたい(勉強したい)というときの最初の1冊としてお勧めです。



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。