• ベストアンサー

データベースの「スレッド」とは?

お世話になります。 先日、システムエンジニアの人が、「データベースのスレッド云々」と 口にしていたのですが、どういう意味か解りませんでした。 その後、インターネットで調べてみたのですが、もともとは「糸」や「繊維」 という意味らしいですが、それ以上のことが理解できませんでした。 SQLでいうと、どういった処理内容に該当するのでしょうか? 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>リンクを見てみましたが、さっぱりわかりませんでした。 >知らない用語が次々にオンパレードであったため、 この辺の話は、このサイトの対話形式の話にでてきます。 http://www.atmarkit.co.jp/fdb/rensai/drk08/drk08_3.html http://www.atmarkit.co.jp/fdb/rensai/sqlsvr08rev/sqlsvr08rev01_03.html No1さんが指摘したサイトと同じところですね。SQLServerのカテゴリーで投稿しているので、 >SQLでいうと が「SQLserver」「SQL」どちらを指しているのかわかりませんが、まあ、No1さんの指摘で間に合ってしまうのでしょう。 分かりやすいたとえだと、一人のユーザーが1つのクライアントツール(Webアプリでもいいし、Windowsクライアントでもいい)から2つの検索条件で、2つのクエリーを順番に検索ボタンを押して、検索したとします。 片方は、単独で1分もかからずに結果を表示する物と、もう片方が10分以上かからもの。これを10分物を検索して、から1分物を検索したとします。この場合、検索結果を表示してからではなく、待たずにボタンが押せる状態だとして。 さて、一般の方なら、順番に押したから、順番にかえってくるだろう、と思うのか、いや、1分しかかからない方が先に結果が表示されてしまうと思うのか? どちらが正解でしょうか。 答えは、どちらも正解です(テレビ番組的なひっかけですね)。 それは、DBMSの構築や、設定の問題で、設計側の要望でどうにでもなり、それぞれに意味があります。 この辺の話と、プログラミングのマルチスレッドテクニックとちょっと違う事になりますが、 http://docs.oracle.com/cd/E22054_01/html/821-2495/bkaig.html CPUが一個であった場合、当然、シリアルに処理だけを考えるだけ良かったわけです。しかし、上記のように、一人のユーザーが幾つものジョブを投げてくる場合や、マルチーユーザーで一人が幾つ物ジョブを投げてくる場合、 順番に処理するだけでいいのか? と言う疑問が浮いてきますよね。その場合、先に実行していいものが在るわけです。それを実行してから、他の処理をする。なんて事があってもいいのでは? て、考えるわけです。 当然、これは、DB構築設計者が許可すれば、と言う前提条件が付きます。 では、順番でなければ、どのように順番を決めるかということですが、それは、ジョブに関連性があるのか? と言うだけのキューで後は、実行順番になるわけです。では、今までと違うのでは? そう、CPUが一個であると、CPUが同時実行される計算の数は、CPUによって決まっているので、いくらアプリ側で、同時に又は、順番を決めても、どうにもならないことなのです。 (初期のInetlのペンティアムだと4つぐらいでした。 http://ja.wikipedia.org/wiki/Core%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3 などを参考に(あくまで参考文献です) それまでのIntelのCPUはシスクプロッセサーでしたね(実行した順番に処理されるだけ) ) とすれば、CPU側のやり方で、マルチスレッドと言う、同時に実行してくれる仕組みでプログラミングしてやらないと、いくらアプリ側で順番を決めても、並列処理も、できなくなります。 で、整理すると、DB側でジョブがスケジューリングされます。CPU側でジョブ(実効命令)がスケジューリングされます。 この2つのスケジューリングによって、もし仮に、エンドユーザーが投げかけたSQL文に依存関係があっても、並列に処理され、設計どおりに順番に検索結果が返ってきます。 それを踏まえて、これを読むと http://support.microsoft.com/kb/899556/ja http://msdn.microsoft.com/ja-jp/library/ms345185.aspx あ、そいうことね。と言う事がわかります。Oracle側(RDBMS)の解説書を読むとその辺が良く分かるかと思います。 http://docs.oracle.com/cd/E16338_01/server.112/b56301/manproc001.htm http://search.yahoo.co.jp/search?p=Oracle+%E5%85%B1%E6%9C%89%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC&aq=-1&oq=&ei=UTF-8&fr=ie8sc&n=10&x=wrt そこにも専門用語「ディスパッチャ」なんて意味不明な物がでてきますが、 http://search.yahoo.co.jp/search?b=1&n=10&ei=UTF-8&fr=ie8sc&p=Oracle+%E3%83%87%E3%82%A3%E3%82%B9%E3%83%91%E3%83%83%E3%83%81%E3%83%A3%E3%81%A8%E3%81%AF なんて調べればいいわけですね。 これらは、クライアントからキューがあるたびに1つのプロセス(タスクマネージャーで見るプロセス)を起動します。それを共有サーバーと呼んでいます。 何がいいたいかと言えば、1万人のユーザーが同時にキューを投げれば、1万個のプロセスが起動するということです(実際には、他の設定により、そうはならないがMAX)。 それぞれのプロセスで3、4つのCPU( コアおよびスレッド)を、あますことなく、使ってやるようにマルチスレッドと言うプログラミング技術でコーディングしてやることで、それぞれのプロセスの実行時間が短くなります。 その結果をDB側のエンジン(プログラム)で整理して、クライアントに返すわけです。 で、最初のリンクに戻るわけですが、DBのパフォーマンスアップとか、正確性、整合性を考えると、CPUとかのアーキティクチャーを理解なしでは、とうてい考えられない。それはプログラミングの観点から見ましょう。と言うことです。

tobochite
質問者

お礼

ご回答ありがとうございました。 正直、理解するのに想像以上の時間がかかってしまいました。 大変ご丁寧にありがとうございました。

その他の回答 (2)

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.3

ANo.1です。 >リンクを見てみましたが、さっぱりわかりませんでした。 >知らない用語が次々にオンパレードであったため、 >どんどん深みにはまりつつ、今何を自分が調べているか >迷子になってしまいました。 ## う~ん。タブン真剣に調べれば調べるほど泥沼にはまり込んでしまわれるような予感が。 SQL文⇒データベースソフト(この場合はSQL Server)⇒OS上でいくつかのスレッドを使っている⇒OS という関連(正確かといわれるとちょっと違いますが)のイメージをつかんでもらって、 ANo.2の方の回答を見てもらって・・・ と理解していってもらって、どの程度で満足されるかは、お任せします。 というしかないように思えてきました。 ・・・最後は、OS上でアプリケーションがどういう風に動くのか、データベースソフトがどういう つくりになっているのかとかまでいってしまいますので、知らない言葉のオンパレードに ならないはずがないとは思います。 >「データベースのスレッド云々」 の「云々」を細かく書いていただくとその部分のみの説明ということもできますが、 今の質問内容では、全般の話をせざる得ませんので。

tobochite
質問者

お礼

お礼が遅れまして申し訳ありません。 おかげさまで、ある程度の理解ができました。 改めて御礼いたします。

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.1

>SQLでいうと、どういった処理内容に該当するのでしょうか? SQLじゃないです。 直下のサイトの内容を理解してもらう必要はないですが、例えば直下のサイトを見てもらうと。 http://www.atmarkit.co.jp/fdb/rensai/drk09/drk09_1.html --引用-- SQL Serverでは1つのトランザクションが処理される背後で、さまざまな役割のスレッド、例えてみれば舞台の“裏方”のようなスレッドが動いています。 --引用おわり-- というのが書かれています。 この表現でSQL ServerというプログラムがSQLを実行するにあたっていくつものスレッドが OS上で実行されていますということが分かってもらえると思います。 ということで、スレッドというのはDBの用語ではなく、OSの用語ということでした。 で、OS スレッドで検索してみてもらうと Wiki http://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF) kotobank http://kotobank.jp/word/%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89+(OS) 等の説明が見つかると思います。 とりあえず、みてみてください。

tobochite
質問者

お礼

ご回答ありがとうございます。 リンクを見てみましたが、さっぱりわかりませんでした。 知らない用語が次々にオンパレードであったため、 どんどん深みにはまりつつ、今何を自分が調べているか 迷子になってしまいました。 コンピュータって、改めて難しいものですね。

関連するQ&A