SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

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

データベースを止めずにリソースを変更するには? CPUとメモリーを動的に増減させる仕組み

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

増やすより減らすほうが難しい

 ソフトウェアが使用できるハードウェア・リソースは、増やすよりも減らすほうが実装は難しくなります。

 ハードウェア・リソースを増やす場合、空きリソースを追加し、未使用のリソースが使用可能になったらそこを使用するだけです。

 しかし、減らす場合は、そのハードウェア領域に存在するデータを安全に退避してからでないと、その領域のデータにアクセスしているプロセスの処理が異常終了してしまいます。

 このように、ハードウェア・リソースの増減は数値的には対称ですが、それに必要な実装は全く異なります。

 まずは1つのOS上で稼働するデータベース・エンジンのCPUとメモリーのリソースを増減させるスケール・アップ/ダウンについてみていきましょう。

OS環境のスケール・アップ/ダウン

 OS環境のスケール・アップ/ダウンの技術は、歴史的には1台の物理マシン上で複数のOS環境を動作させるところから来ています。有限の物理マシン・リソースを複数のOS環境で分け合うため、あるOS環境のリソースを増加させたいときに別のOS環境のリソースを減らさなけらばならない場合もあります。ソフトウェアが認識するハードウェア・リソースの量をどの階層で制御するかというのは歴史の長いテーマであり、様々な実装があります。

 OSが認識するCPU数とメモリー容量の割り当てを変更する技術は、2000年代ではRISC CPU+商用UNIXのハードウェア・レベルの動的パーティショニングがよく使用されていました。このころはまだストレージ・デバイスにフラッシュ・メモリーは一般化しておらず、事実上ハードディスク一択でした。また、サーバー・マシンに搭載できるDRAMの容量の上限も2桁ギガバイト程度であり、低速なハードディスクの性能をカバーするためにキャッシュ・メモリーとして使用するDRAMはデータベース・サーバーに積めば積んだだけデータベースの性能が上がるという状況でした。そのため、4Gバイトまでしかアドレッシングできない32bitアーキテクチャよりも64bitアーキテクチャのCPUのほうがデータベース・サーバーとしては圧倒的な優位性を持っていました。Intel x86系CPUがデータベース・サーバー用途として台頭してきたのは2003年に64bit化されて4Gバイトを超えるアドレッシングができるようになってからです。

 Intel x86系CPUにはハードウェア・パーティショニング機能がないため、複数のOS環境を実装するにはソフトウェア・ハイパーバイザーによる仮想マシンが使用されます。ソフトウェア・ハイパーバイザーは物理マシンのCPUを仮想マシンの論理CPUにスケジューリングします。また、普及し始めた当初は仮想マシンのCPU数とメモリー容量の割り当てを稼働させたまま動的に変更することができなかったため、変更する場合は仮想マシンの再起動が必須でした。

 また、ハードウェアや仮想マシンのレベルでCPU数とメモリー容量割り当てを変更できたとして、その上で稼働するOSカーネルがそれに追従できる必要もあります。RISC CPU+商用UNIXの組み合わせはハードウェアとOSを同一のベンダーが開発しており、動的パーティショニング機能に力を入れていたため、OSカーネルもCPUとメモリーの動的変更に対応できるように設計されていました。

 Intel x86系CPUのソフトウェア・ハイパーバイザーによる仮想マシン技術でCPU数を動的に変更できるようになったのはかなり後になってからであり、そのためIntel x86系CPUをOSカーネル開発の主力としていたOSでは、OSカーネルが認識するリソースの動的変更機能の安定性に商用UNIXよりも少し遅れをとっています。

 パブリック・クラウドのデータベース・サービスでもCPUやメモリーの割り当てを変更するのに仮想マシンのインスタンスを再起動しなければならないものがあるのはこのような背景があります。

 ですが、サーバー側で使用されるプラットフォームとして大きな勢力となった64bit Intel x86系CPUとLinuxプラットフォームでは、仮想マシンより上の階層であるOS上のプロセス空間を区別するコンテナ技術が普及しだしました。

 コンテナ技術はOSカーネルがもともと持っている、プロセスにCPUリソースとメモリーを割り当てる資源管理機能を拡張したものです。そのため、仮想マシンよりもコンテナ技術のほうがCPU数とメモリー容量の割り当て変更がやりやすくなっています。しかし実際の使われ方は、1つのコンテナが使用するリソースは固定してコンテナ・オーケストレーション・プラットフォームと組み合わせてコンテナ数を増減させるスケール・アウトが中心です。

 OS環境のCPU数とメモリー容量の割り当てを増減させることができたとしても、データベース・エンジンがそれに追従できなければ、動的なスケール・アップ/ダウンはできません。ここからはデータベース・エンジンがCPUとメモリーのリソースを動的増減する方法について見ていきます。

次のページ
CPUのリソースを動的増減する方法

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/19000 2024/03/21 11:00

イベント

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

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

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

メールバックナンバー