OLTPはパラレル実行の夢をみるか? データベースコンサルタントのノウハウちょい見せ

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

ホーム > スポンサー広告 > OLTPはパラレル実行の夢をみるか?ホーム > アーキテクチャ > OLTPはパラレル実行の夢をみるか?

スポンサーサイト

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

OLTPはパラレル実行の夢をみるか?

DWH系の処理のパラレル実行というのは、DWHアプライアンス製品などを見ているとメリットがはっきりしているかと思います。今日は、OLTP処理の1処理であっても、それを分解してパラレルに実行できるのか?という想像をしてみたいと思います。DBMS製品として考えるわけではなく、CPUの命令レベルで考えてみたいと思います。

背景として、CPUのクロック速度が頭打ちになりつつあり、各CPUベンダーがマルチコア化を打ち出していることがあります。このままだと、OLTPのレスポンスはなかなか改善しないとも言えます。それは困ります。そして、コンパイラメーカーは、「ソースコードから判断してマルチスレッド化できるところは、マルチスレッド化するぜ!」と書いています。OLTP処理については、同時実行という意味でマルチコアは非常にメリットがあります。私の疑問は、「将来、OLTPの1処理を速くすることはできるのか?」です。結論として、難しいのではないかなあと思います(「DBMSについてもマルチスレッド処理できる」とコンパイラメーカーは明言していないと思います。あしからず)。

パラレルに実行できるには、以下の条件が必要です。
 命令の独立性
 データの独立性
 パラレルに伴うオーバーヘッドを超える性能メリットがあるか

まず、同一トランザクション処理の中では、データを分けてパラレル処理できるようなものは少ないはずです。むしろ、このデータをアクセスしたら、その結果に基づいて次のデータに移るようなものが多く、分担は困難です。命令についても同じで、SQLのネステッドループ処理やインデックスを辿る処理をパラレルに分担するようなイメージは私には湧きません。
ということで、あくまでCPUの命令レベルで考えた結果ですが難しいのだろうなと思っています。

名著「コンピュータアーキテクチャ定量的アプローチ第4版」にも、既存のDBMSのOLTPについては、CPU命令レベルのパラレル処理の抽出は難しい、(粗い「スレッド」レベルでのパラレル処理が向く)と紹介されています(おおざっぱに言うとですけど)。

DWH系処理では、各種メモリの活用が進みそうです。これについては、今後、紹介します。

注:最近のコンパイラは、ソースコードだけでなく、「プロファイル」と呼ばれる情報も最適化に活用できます。プロファイルとは、実際にそのアプリを実行した際に得られた統計情報(実行の偏り具合などを示すデータ)のことです。ソースコードからは、分岐のどちらが多いのかは判断しづらくても、実際に実行したデータを見れば、分岐のクセが分かることがあります。そういった動きまで活用してバイナリを最適化することもできます(コンパイル時のオプションで、プロファイルを使うかどうか選べます)。プロファイルが異なると、性能が異なるという結果になるわけで、ちょっと怖い気もします。

注2:本ブログにおいて示されている見解は、私自身の見解であって、オラクルの見解を必ずしも反映したものではありません。あしからず。
スポンサーサイト
[ 2010/05/06 03:23 ] アーキテクチャ | TB(0) | CM(2)
コンパイラは以前から命令の並列化を最適化オプションで行うように
なっているので各DBMSは既に使ってコンパイルされていますよね。

この投稿で思い出したのですが、Oracle Database ではリリース10.2で
独自にミューテクスを実装し、ロックの粒度を荒くし、そのミューテクス
の活用範囲を広げているのが、OLTPの単一処理を速くすることへつながる
プロセッサーのマルチコアへの対応の一つだと思っています。

これから更にどう変わっていくのか考察をするのは楽しいですね。


なお、プロファイルベースのバイナリ最適化は、どのような動作をした
ときをプロファイリングするかでまったく特性が異なるので、そのプロ
ファイリングした動作ばかりすることに特化できたら有用ですが、他の
動作に対しては適さないようにすることによって成り立つともいえる
ため、コンパイル対象のソースコードにしろ開発環境にしろ実際の実行
環境にしろ適用範囲を最適にしたい条件などを限定して利用されたり、
一定条件下では何が最適化する際の変更される処理に該当するのか調査
や考察目的で利用されたりもします。

Oracle Database 管理者リファレンス
10g リリース2(10.2) for UNIX Systems
B19278-06
F Tru64 UNIXシステムでのOracle Databaseの管理
F.8 Spike最適化ツール
http://otndnld.oracle.co.jp/document/products/oracle10g/102/unix/B19278-06/appf_tru.htm#207561
とかが思い出に変わらない人には試せますので書いてみました(^^;
[ 2010/05/06 08:03 ] [ 編集 ]
私の立場ではなかなか書けないような話をありがとうございます^^;

書ける範囲で書くと・・・ ロックの実装は、各社工夫がこらされています。
粗くしたし、細かくして並列処理度を上げたり、ロックを軽くしたり、
スピンする/スリープする、etc。。。。

ロックについては、(OSなどの)スケジューリングも絡んでくるので、そこも含めた
全体の最適化については、とーっても深い話になります。DBMSのソースコード
だけでは判断できない話になってきます。

こういう実装を追いかけていくと、最後はCPUの命令や、アルゴリズムに
辿りつきます。そういった分野のためには
「どういう勉強するといいの?」と聞かれるのですが、
システムコールを使ったプログラミングの書籍を読む(そしてコードを書く)か、
「コンピュータアーキテクチャ 定量的アプローチ 第4版」のような
OSやCPUのつくりやアルゴリズムを紹介しているような本を読むのがお勧めです。
あとはOSカーネルの本ですね。

> なお、プロファイルベースのバイナリ最適化は、どのような動作をした
> ときをプロファイリングするかでまったく特性が異なるので、そのプロ
> ファイリングした動作ばかりすることに特化できたら有用ですが、他の
> 動作に対しては適さないようにすることによって成り立つともいえる
> ため、コンパイル対象のソースコードにしろ開発環境にしろ実際の実行
> 環境にしろ適用範囲を最適にしたい条件などを限定して利用されたり、
> 一定条件下では何が最適化する際の変更される処理に該当するのか調査
> や考察目的で利用されたりもします。

おっしゃるとおりです。この機能を使うと、良くも悪くもピーキーになる
(おそれがある)ので、うまく使いこなすと面白い機能です。
#これ以上は、割愛します。ほんとは言いたいことも・・・・もごもご。
[ 2010/05/08 01:53 ] [ 編集 ]
コメントの投稿













管理者にだけ表示を許可する
プロフィール

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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。