SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

オラクル技術エキスパートが紹介する 開発者のためのデータベース完全ガイド

大量データ処理を高速化する並列実行とパーティショニングの関係

オラクル技術エキスパートが紹介する 開発者のためのデータベース完全ガイド 第4回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 この連載では、開発者の皆さまがシステム・アーキテクチャやアプリケーション・コードをより洗練させるのに役立つデータベース・マネジメント・システム(DBMS)の基本を振り返り、実装に合った技術の組み合わせを解説します。今回は、大量のデータ処理を複数のハードウェアに割り当てて高速化する並列実行とその注意点について解説します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 第3回は大量のデータにアクセスする場合に範囲を限定するデータ構造であるパーティショニングについて見ました。今回は分析や集計処理などの大量のデータにアクセスする処理でよく使用される並列実行(パラレル実行、Parallel Execution、Parallel Processing)について解説します。並列実行はパーティショニングと強い関係があります。

 なお、本連載で例として挙げるデータベースはオラクルが提供しているものが多いですが、オラクル製品を使っていない方にも参考にしていただけるように解説していきます。

対象読者

 この連載では以下の読者を想定しています。

  • データ資産を活用する、新しいアプリケーションの構想や設計を担われる方
  • データ基盤の運用を担われている方や、今後検討される方
  • 新たに開発するアプリケーションの、最適なデータベースをお探しの方
  • 目的別データベースから、価値ある情報を素早く引き出す検討をされている方

並列実行とは

 トランザクション系のシステムが生成した何千万件や何十億件ものデータは、後で集計や分析にかけられます。つまり1つの集計・分析処理が大量のデータにアクセスするということが発生します。このような処理は一般的に時間がかかるため、短時間で実行するためによく使用される実装が、第3回で説明したデータのアクセス範囲を限定するパーティショニングと、今回の並列実行の組み合わせです。

 データベース・サーバーは一般的に複数のCPUコアやストレージ・デバイスから構成されています。並列実行の狙いは、処理すべきデータが大量にある場合、これらを分割して複数のCPUコアに割り当て、同時に実行することで全体の処理時間の短縮を期待するものです。最近のCPUは1ソケット当たり数十コアを搭載しており、1台のサーバーでも並列実行による処理時間の大幅な短縮が期待できます。

並列実行
並列実行

 並列実行をシステムに実装する原始的な手段としては、人が処理対象のデータを範囲分割し、複数の処理プログラムに投入するという方法がとられることもあります。しかし多くのDBMSは1つのSQLの処理を自動並列化する機能を持っています。今回はこの1つの処理を自動並列化する実装を見ていきます。

並列実行のプロセス・アーキテクチャ

 並列実行される場合、DBMSのOSプロセスまたはスレッドが複数起動され、これらが複数のCPUスレッドに割り当てられることで同時に処理を行います。複数プロセスによって分担された処理結果は1つのデータベース・クライアントに送り返さないといけないので、1つのプロセスに処理結果を集約し、この1つのプロセスがデータベース・クライアントに送り返します。データベース・クライアントが接続しているプロセスが並列実行の処理を統括しており、一般的にコーディネーター・プロセスと呼ばれます。

 Oracle Databaseの場合、データベース・クライアントがOracleサーバーに接続するとそのコネクションは1つのOracleサーバー・プロセスに接続しています。並列実行される場合はこのOracleサーバー・プロセスがコーディネーター・プロセスの役割を担います。

並列実行のプロセス・アーキテクチャ
並列実行のプロセス・アーキテクチャ

 複数ある並列実行プロセスに処理データを分担させるわけですが、ここでパーティショニングの考え方が出てきます。データの分割と割り当て方法が適切でないと、各並列実行プロセスの処理時間が不均一になってしまいます。また、並列実行プロセス間でデータ交換能力がないと、不適切なデータ分割によっては各並列実行プロセスが返してきた結果をコーディネーター・プロセスが結合する処理が増える、つまり並列化できない部分が増えることになります。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
並列化すれば速くなるのか?

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
オラクル技術エキスパートが紹介する 開発者のためのデータベース完全ガイド連載記事一覧

もっと読む

この記事の著者

日下部 明(日本オラクル株式会社)(クサカベ アキラ)

 日本オラクル株式会社でOracle Databaseを担当するエンジニア。主にOracle Real Application Clustersを中心とする高可用性構成や性能チューニングの問題解決およびコンサルティングに従事。著書に「これは使えるOracle新機能活用術」(翔泳社)。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/14931 2021/10/14 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング