増やすより減らすほうが難しい
ソフトウェアが使用できるハードウェア・リソースは、増やすよりも減らすほうが実装は難しくなります。
ハードウェア・リソースを増やす場合、空きリソースを追加し、未使用のリソースが使用可能になったらそこを使用するだけです。
しかし、減らす場合は、そのハードウェア領域に存在するデータを安全に退避してからでないと、その領域のデータにアクセスしているプロセスの処理が異常終了してしまいます。

このように、ハードウェア・リソースの増減は数値的には対称ですが、それに必要な実装は全く異なります。
まずは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とメモリーのリソースを動的増減する方法について見ていきます。
