JP2005508033A - 動的かつ自動的なメモリ管理 - Google Patents
動的かつ自動的なメモリ管理 Download PDFInfo
- Publication number
- JP2005508033A JP2005508033A JP2003539417A JP2003539417A JP2005508033A JP 2005508033 A JP2005508033 A JP 2005508033A JP 2003539417 A JP2003539417 A JP 2003539417A JP 2003539417 A JP2003539417 A JP 2003539417A JP 2005508033 A JP2005508033 A JP 2005508033A
- Authority
- JP
- Japan
- Prior art keywords
- memory
- value
- operator
- estimate
- amount
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Executing Machine-Instructions (AREA)
Abstract
Description
【0001】
背景
典型的なデータベースシステムでは、ユーザは、Oracleなどのデータベースアプリケーションにコマンドをサブミットすることで、情報を記憶、更新および検索する。トランザクションを実行するとき、データベースアプリケーションは情報をメモリおよびディスク上に記憶する。最高の性能のためには、できるだけ多くの情報をディスク上ではなくメモリに記憶しなければならない。しかしながら、メモリ資源は限られており、データベースアプリケーションはメモリの割当を調整しなければならない。このことは、データベースアプリケーションによって使用される構造に利用可能なメモリを配分することを伴う。
【背景技術】
【0002】
オラクルコーポレイション(Oracle Corporation)からおよびインターネットのhttp://oradoc.photo.net/ora81/DOC/server.815/a67781/toc.htmで入手可能な「Oracle8iの概念(“Oracle8i Concepts”)」と題される本に説明されるように(この本の全体をここに引用により援用する)、データベースアプリケーションOracleによって使用される構造の2つは、システムグローバルエリア(System Global Area;SGA)およびプログラムグローバルエリア(program Global Area;PGA)と呼ばれるメモリのエリアである。SGAは、Oracleプロセスがアクセスする必要のあるデータベースおよびインスタンスの状態についての一般的な情報を含む。ユーザデータはSGAには記憶されない。SGAのサイズはOracleのスタートアップ時に決定される。たいていのシステムでは最適な性能のため、SGA全体が現実のメモリに収まることが必要である。データベースアドミニストレータ(DBA)は、SQLステートメント“SHOW SGA.”を発行することで、どれだけ多くのメモリがSGAに割当てられているかを見ることができ、内部構造の各々を見ることができる。
【発明の開示】
【発明が解決しようとする課題】
【0003】
PGAは、プロセスが開始されるときに、データを保持するために作られ、各プロセスの情報を制御する。そのようなPGAは共有メモリにあってもよいが、PGAはOracle内の各プロセスに対してプライベートである。PGAの当初のサイズは対応するプロセスのスタートアップ時に固定され、オペレーティングシステムに特有である。現在、Oracle8iでは、DBAは、SORT_AREA_SIZE、HASH_AREA_SIZE、BITMAP_MERGE_AREA_SIZE、CREATE_BITMAP_AREA_SIZEなどのさまざまなパラメータを使用してPGAのメモリの使用を制御することができる。そのようなパラメータについてさらに情報が必要な場合は、http://oradoc.photo.net/ora81/DOC/server.815/a67775/toc.htmで入手可能な「Oracle8iの調整(“Oracle8i Tuning”)」と題される書籍を参照されたい(この書籍の全体をここに引用により援用する)。
【0004】
「割当てられた値またはしきい値に従ってソート動作からのデータを記憶するためにプライベートまたは共有バッファメモリを割当てるための方法(“Method for allocating either private or shared buffer memory for string data from sort operations in accordance with an assigned value of threshold value”)」と題されるCohenらに付与された米国特許第5,799,210号、「連続的に再使用可能な実行メモリ(“Serially reusable execution memory”)」と題されるJasujaらに付与された米国特許第5,987,580号、「ある数のプロセスに非常に大きなサイズの物理的メモリバッファのアクセスを提供するためのアドレス指定方法およびシステム(“Addressing method and system for providing access of a very large size physical memory buffer to a number of processes”)」と題されるFrankらに付与された米国特許第5,860,144号、および「ビットマップインデックスを使用するコンピュータ内での動的なメモリの割当(“Dynamic memory allocation in a computer using a bit map index”)」と題されるMcMahonらに付与された米国特許第5,784,699号も参照されたい。これらはすべてデータベースプロセスによるメモリの使用に関する。
【0005】
さらに情報として、ネットワークおよび情報システム(Networking and Information Systems)1(6):629-652(1998)に発表された「大きな照会実行のための動的なメモリの割当(“Dynamic Memory Allocation for Large Query Execution”)」と題される、Luc Bouganim、Olga Kapitskaia、Patrick Valduriezによる文献を参照されたい。さらに、Association for Computing Machinery, Inc.によって発行された、情報および知識管理会議1998の議事録(Proceedings of Conference on Information and Knowledge Management, 1998)の105頁〜115頁の上述の同じ3人の著者らによる「大きな照会実行のためのメモリ適合スケジューリング(“Memory-Adaptive Scheduling for Large Query Execution”)」と題される文献も参照されたい。さらにこの分野には、Diane L DavisonおよびGoetz Graefeによる「複数ユーザの照会実行のための動的な資源調停(“Dynamic Resource Brokering for Multi-User Query Execution”)」と題される、SIGMOD Conference 1995:281-292に発表された文献もある。
【課題を解決するための手段】
【0006】
概要
この発明に従ってプログラムされたコンピュータは、データベースなどのアプリケーションによって使用されるメモリの合計量を規定する値に応答する。一例では、データベースアドミニストレータ(DBA)はそのような値(「外部で設定されるグローバルな値」とも呼ばれる)を提供する。別の例では、外部で設定されるグローバルな値は、たとえば、現在システム内で利用可能なメモリの量に基づいて自動的に判定される。その後、コンピュータは、外部で設定されるグローバルな値から(全体的にまたは少なくとも部分的に)導かれた量のメモリ(たとえば、データベース照会によって使用される)を割当てる。
【0007】
プログラムされたコンピュータの一実施例は、外部で設定されるグローバルな値から、アプリケーションのためのメモリ(たとえば、データベース照会を実現するオペレータによって必要とされるメモリ)の割当で使用される内部の値(「メモリの境界」と呼ばれる)を導く。メモリの境界は、たとえばデータベースを実現するプロセスおよび構造に応じて、当業者に明らかな態様であればどのように行なってもよい。
【0008】
一実施例では、プログラムされたコンピュータは、行なわれているメモリの割当に基づいて動的にメモリの境界を改め、フィードバックループを形成する。任意で、メモリの境界の判定において、プログラムされたコンピュータはアプリケーション外の情報(たとえば、データベースでないプロセスによって割当てられるメモリの量など)に応答してもよく、こうすればコンピュータ内の限られたメモリが有効に使用される。
【発明を実施するための最良の形態】
【0009】
詳細な説明
この発明に従ってソフトウェアを用いてプログラムされると、コンピュータは、データベースなどのアプリケーションによって使用されるメモリの合計量を規定する値11(図1A)に応答する。なお、以下の説明ではデータベースアプリケーションを参照するが、実施例によっては、ここに記載される態様で他のアプリケーションをプログラムしてもよい。値11(「外部で設定されるグローバルな値」とも呼ばれる)は、たとえば、データベースアドミニストレータ(DBA)によって提供されてもよいし、または、たとえばコンピュータで現在利用可能なメモリに基づいて自動的に判定してもよい。実施例に応じて、外部で設定されるグローバルな値11は、アプリケーションによって(超えてはならない)限界として使用してもよいし、または(時々到達されることもあれば到達されないこともある、たとえばたいていの場合に到達されないかまたは超えられる)ターゲットとして使用してもよい。
【0010】
一実施例では、データベースシステム10(図1A)は、たとえば、照会を実行するために、アプリケーションのプロセスに利用可能でないメモリの量12(図1A)を勘案してデータベースソフトウェアの内部の値14(以降は「グローバルな内部の値」)を計算する(論理13を参照)。具体的には、論理13(図1A)は、割当てられているが使用されていないメモリ(「フリーなメモリ」と呼ばれる)、および照会を実現するオペレータ(ソート、ハッシュ結合およびビットマップマージなど)に関係のないメモリ(「その他のメモリ」と呼ばれる)を勘案する。
【0011】
実施例に応じて、データベースシステム10(図1A)はグローバルな値14を使用して別の内部の値17(「メモリの境界」とも呼ばれる)を計算し(論理15を参照)、これは各オペレータに対するメモリの割当で使用される。メモリの境界17はオペレータレベルの値であり、各オペレータのワークエリアに対して各プロセス18によって割当てられ得るメモリの量を規定する。各プロセス18はメモリの境界17をオペレータによって必要とされるメモリの量20と比較して、割当てるメモリの量21を判定し、その後、適切なメモリの量を割当てる。しかしながら、データベースの種類(たとえば、階層的)および/またはデータベースを実現する構造およびプロセスに応じて、メモリの境界は外部で設定されるグローバルな値から直接的に、すなわち、上述のグローバルな内部の値14を計算することなく導いてもよい。さらに、代替の実施例では、オペレータレベルの値17は使用されず、その代わりに各プロセスがメモリの使用についての統計値を勘案してフィードバックループを実現しつつ、グローバルな内部の値14または外部で設定されるグローバルな値11(実現例による)に基づいてオペレータに割当てられるメモリの量を判定する。
【0012】
そのような一実施例では、データベースシステム10(図1A)は次のようにフィードバックループを実現する。データベースシステム10によって現在割当てられるメモリの合計が外部で設定されるグローバルな値を超えているとき、データベースシステム10はメモリの境界を低減して(またはその逆)、データベースシステム10によって割当てられるメモリの合計が上述のようにターゲットまたは限界としての外部で設定されるグローバルな値11に近づくようにする。メモリの境界が使用されない場合、そのような実施例は、値11が変更されない場合でもグローバルな内部の値14を変更してもよい。
【0013】
上述の動作は、この開示を読めば当業者に明らかとなるような態様であればどのように行なってもよい。たとえば、フィードバックループは定期的または非同期的もしくは両方でメモリの境界17(および/またはグローバルな内部の値14)を改めることに基づいてもよい。一実施例では、データベースシステム10は、メモリの使用に関する統計値に基づいて定期的に(たとえば、3秒ごとに)メモリの境界17を改める。データベースシステム10は、メモリを割当てるとき、たとえばデータベースシステム10によって割当てられるメモリの合計が外部で設定されるグローバルな値11をある予め定められた量(たとえばゼロ、または値11の10%であってもよい)だけ超える場合に、メモリの境界17を非同期的に改めてもよい。また、割当てられるメモリの量21は、必要な量20であってもよいし、メモリの境界17であってもよいし、またはこれらの1つまたは両方から導かれる何らかの量であってもよく、そのオペレータが他のオペレータよりも優先順位が高いと思われる場合は、たとえば複数のメモリの境界または複数の推定量であってもよい。説明したばかりの例では、各オペレータは優先順位の代わりにある量の「貨幣」を割当てられ、メモリの境界17はメモリを「購入する」ために貨幣を使用して支払われる価格であってもよい。そのような場合、各オペレータに割当てられる「貨幣」の量はオペレータが受取るメモリの量を決定する。
【0014】
一実施例では、データベースシステム10は、上述のメモリの境界17を計算する命令のシーケンス(以降は「メモリブローカ」)22を含む。メモリブローカ22は、データベース照会を実現するプロセスとは別の異なるプロセスとして実現してもよい。この場合、データベース照会プロセス18はメモリの境界17を1つまたは複数の推定値と比較して、適切なメモリの量を割当てる。メモリブローカ22とデータベース照会プロセス18との間の情報の転送は、メッセージまたは共有メモリを通じて実現してもよい。
【0015】
代替の実施例では、メモリブローカ命令シーケンスは別のプロセスとしてセットアップされず、それの代わりにデータベース照会プロセスの各々がファンクションコードを用いてこれらの命令を呼出す。したがって、(後述するように、「ソート」および「ハッシュ」オペレータに対する異なる関数の代わりに)共通の関数を使用してすべてのオペレータにメモリを割当ててもよい。そのような共通の関数を使用するとき、各プロセスは、(これも上述の)外部で設定されるグローバルな値を直接的に使用してこれから割当てられるメモリの量を導く。
【0016】
ある実施例の特徴が別の実施例に組合されると、メモリブローカは(上述の)グローバルな内部の値14を単に計算し、各照会プロセスはグローバルな内部の値14を使用してオペレータに対して割当てられるメモリの量を導く。その実施例に応じて、メモリの境界17は、たとえば、優先順位の高い照会はメモリの境界の2倍または3倍までメモリを割当ててもよく、普通の優先順位の照会はメモリの境界までメモリを割当ててもよいというように、各オペレータにメモリを割当てるときに異なる使われ方をしてもよい。したがって、オペレータに対する限界は、この例では、オペレータを実行しようとしている特定の照会の優先順位によって異なる。別の例では、メモリの境界は「限界」ではなく、「価格」として作用する。さらに、すべてのオペレータ(たとえば、通常の優先順位の照会)に対して共通なメモリの境界17を有する代わりに、オペレータの各種類に対して1つずつ、いくつかのメモリの境界を使用してもよい。
【0017】
一実施例では、オペレータによって必要とされるワークエリアメモリは、メモリを割当てるときに各プロセスによって推定され、オペレータの動作するモード、たとえば(1)ディスクアクセスのない最適モード、(2)ディスクアクセスが行なわれるがディスク上のデータを通るのに1回のパスしか必要とされないワンパスモード、および(3)ディスク上のデータにわたって複数のパスが必要とされる最小モードなどのモードに応じて1つの実現でいくつかの推定値がつくられる。照会を実行するのにオペレータによって必要とされる時間は実行のモードによって異なり、たとえば、図6に示されるように、最適モードでは必要とされる時間が最も少なく、最小モードでは最も長い時間が必要とされ、ワンパスに必要な時間は最大と最小との間である。なお、同じオペレータについて、そのような推定値は入力データのサイズに応じて異なる照会に対して異なり得る。その後、この実現例では、各プロセスはこれら推定値およびメモリの境界に応じてそのオペレータにある量のメモリを割当てる。
【0018】
たとえば、「ソート」オペレータを呼出すプロセスは、最適メモリ推定値がメモリの境界より小さい場合には最適メモリ推定値、メモリの境界が最適メモリ推定値とワンパスメモリ推定値との間である場合にはワンパスメモリ推定値、メモリの境界がワンパスメモリ推定値よりも小さい場合には最小メモリ推定値というように、割当てられるワークエリアメモリ(「ソートエリア」とも呼ばれる)の量を判定する。
【0019】
この特定の例では、「ハッシュ結合」オペレータを呼出すプロセスは、最適メモリ推定値がメモリの境界より小さい場合には最適メモリ推定値、メモリの境界が最適メモリ推定値と最小メモリ推定値との間である場合にはメモリの境界、メモリの境界が最小メモリ推定値よりも小さい場合には最小メモリ推定値というように、割当てられるワークエリアメモリ(「ハッシュエリア」とも呼ばれる)の量を判定する。これは、ハッシュ結合オペレータは余分なメモリの利益を受けるが、ソートオペレータは利益を受けないためである。この例では、メモリの境界が最小メモリ推定値を下回る場合、一実施例ではすべてのオペレータはそれぞれの最小メモリ推定値を受取るが、別の実施例ではそのようなオペレータは(メモリの境界が最小メモリ推定値より増やされるまで)待ち行列に入れられる。
【0020】
したがって、データベースシステム10は、先行技術のデータベースを使用するときに手動では調整が難しいパラメータをDBAが調整するのを可能にする。具体的には、割当てられるメモリの量の調節は、オペレータの相対的な使用頻度、各オペレータに対するメモリ要件、およびシステム内で同時にアクティブであるオペレータのセットに依存するべきである。これらの条件は1日の中で大きく変化する可能性があり、特にその場限りの環境に対してはそうである。出願人に既知の先行技術のパラメータは自動的に調節されないため、それらはシステムでのメモリの使用の大小を補償しない。また、出願人に既知の先行技術のパラメータは照会が使用するメモリの最大量を制御しないため、メモリの過剰割当を悪化させる傾向があり、しばしばメモリの枯渇によるスラッシングを引起す。最後に、そのような先行技術のパラメータはPGAメモリをしばしば浪費するが、これは受容可能な性能を得るのに必要とされるよりも多くのメモリが割当てられるためである。先行技術で使用されないそのようなメモリは、上述の外部で設定されるグローバルな値11を使用するときに他の照会または他のアプリケーションによって使用されるようにするのがよい。
【0021】
上述の動作を実現する一実施例のコンピュータ100(図1B)は、オペレーティングシステム101、ビジネス論理102、ネットワークアプリケーション103およびデータベースアプリケーション110などのある数のソフトウェアプログラムを実行する。コンピュータ100はどのようなコンピュータでもよく、IBM personal Computer(PC)などのコンピュータ、またはUltra SparcII Computer 100などのSunワークステーションであってもよく、命令を実行するための1つまたは複数の中央処理ユニット(CPU)、データおよび命令を保持するための不揮発性メモリ(ディスクなど)、および実行中にデータおよび命令を一時的に保持するための揮発性メモリ(たとえば、DRAM)を含む。コンピュータ100はCPUとメモリとを相互に接続するバスも含む。コンピュータ100は、情報をユーザに表示するための表示装置(たとえば、ブラウン管)、およびユーザからのコマンドを受取るための1つまたは複数の入力装置(キーボードおよび/またはマウスなど)を含んでもよい。
【0022】
以下の説明では、明白に示されていない場合でも、そのようなコンピュータ100の使用が本質的に必要とされる。データベースアプリケーション110はさまざまな種類の照会を実行して、データベース(たとえば、リレーショナルデータベースであってもよい)へ情報を記憶し、そこから情報を検索する。各照会は、通常の態様で、ソート、ハッシュ結合およびビットマップマージなどの1つまたは複数のオペレータを介して実行されてもよい。各照会の実行中、コンピュータ100は以下に説明するようにメモリを割当てる。割当は、(データベースパラメータPGA_AGGREGATE_TARGETの値によって表わされる)外部で設定されるグローバルな値11に直接的または間接的に基づいてもよい。この特定の実施例では、値11は、データベース照会を実行するプロセス(「サーバプロセス」と呼ばれることがある)によって内部で使用するために割当てられるメモリの合計に対するターゲットとして使用される。一実施例では、ユーザインターフェイス111(図1B)はデータベースアドミニストレータからグローバルな値11を受取り(動作112を参照)、共有メモリにその値を記憶する(動作113を参照)。各プロセスは共有メモリから読出された値11に(少なくとも部分的に)基づいてその内部使用のためのメモリを割当てる。
【0023】
データベース110の一実施例は命令のシーケンス(以降は「メモリブローカ)115を含み、これはグローバルな値11および任意で現在のメモリの使用についての統計値から内部の値を導き(図1Bの動作116を参照)、メモリを割当てるときにサーバプロセスによって使用するためにその内部の値を記憶する(動作117を参照)。その実現例に応じて、内部の値はすべてのプロセス120A〜120Zによって割当てられるメモリに当てはまるグローバルな内部の値14であってもよいし、またはオペレータに対して割当てられているメモリにのみ当てはまるオペレータレベルのメモリの境界17であってもよい。メモリの使用の統計値に基づいて、メモリブローカ115はサーバプロセス120A〜120Zによるメモリの割当に応答して内部の値を動的に改める(ここでA≦I≦Zであり、Zはプロセスの現在の数であり、フィードバックループを形成する(図1Bの枝118によって示される)。
【0024】
実施例に応じて、サーバプロセス120Aは、外部で設定されるグローバルな値または内部の値14および17のうちの1つを使用して割当てられるメモリを判定し、その後、メモリを割当てる(動作121を参照)。次に、プロセス120Aはメモリの使用についての統計値を更新し(たとえば、割当てられたメモリの量を示すため)、通常の態様で照会の実行を進める。照会の処理が完了すると、プロセス120Aは以前に割当てられたメモリの割当を取消し(動作123を参照)、メモリの使用の統計値を更新する(動作124を参照)。
【0025】
上述のように、メモリブローカ115は動作116においてメモリ使用の統計値を使用し、実施例に応じて内部の値14および17のどちらかまたは両方を改める。たとえば、メモリブローカ115が、プロセスが多くあり過ぎ、割当てられているメモリの合計が外部で設定されるグローバルな値を大きく超えるかもしれないと考えると、この場合、メモリブローカ115は内部の値14および17のどちらかまたは両方を低減するため、(現在の量より)少ない量のメモリがプロセスによって今後割当てられる。メモリブローカ115が、プロセスが少な過ぎ、割当てられているメモリの合計が外部で設定されるグローバルな値11を大きく下回ると考えると、メモリブローカ115は内部の値14および17のどちらかまたは両方を増加させて、より多くの量のメモリがプロセスによって今後割当てられるようにすることがある。この実施例では、外部で設定されるグローバルな値11および内部の値14ならびに17は、ある範囲内へのターゲットを満たそうとするデータベースアプリケーション110によってターゲットとして扱われる。
【0026】
この実施例のメモリブローカ115は、定期的(たとえば、3秒ごと)に動作して、メモリを割当てるためにプロセス120A〜120Zによって使用されている内部のターゲットを改める。しかしながら、サーバプロセス120Iは、たとえば、割当てられるメモリの合計が外部で設定されるグローバルな値11をある予め定められた量だけ超えた場合にメモリブローカ115を呼出してもよい。具体的には、一実施例では、プロセス120Aは、プロセス120A〜120Zのすべてによって割当てられるメモリの合計と外部で設定されるグローバルな値11との差(以降は「ドリフト」)を計算する(図1Aの動作125を参照)。具体的な一実現例では、「ドリフト」は、メモリの境界17の最後の計算からの増分の割当または割当の解除を示す符号付きの数である。この具体的な実現例は、メモリの境界17が再計算されるたびにドリフトをゼロに設定する。その後、オペレータに対してメモリを割当てる各プロセス120Iは、割当てられたメモリの量だけドリフトを増分する(同様に、メモリが解放されると、ドリフトは解放されたメモリの量だけ減分される)。
【0027】
割当の後、プロセス120Aは、ドリフトが、たとえば外部で設定されるグローバルな値11の10%を超えているかをチェックし、そうであればメモリブローカ115を呼出す。呼出されると、メモリブローカ115は上述の態様で内部の値14および17のどちらかまたは両方を改める。プロセス120Aはドリフトも計算し(図1Bの動作126を参照)、メモリの割当を解除するときにメモリブローカ115に警告を与えてもよい。
【0028】
実施例に応じて、メモリブローカ115はグローバルな内部の値14を使用してオペレータレベルで適用される別の内部の限界17を計算してもよい。具体的には、そのようなオペレータレベルの限界(「メモリの境界」と呼ばれる)141(図2)は共有メモリ140に保持され、各照会内の各オペレータに対して、サーバプロセス12Aによって割当てられるメモリに対する限界(またはターゲット)を示す。したがって、サーバプロセス120A〜120Zは、メモリの境界141を(たとえば、ワンパスモードで動作するのにオペレータにとって)必要なメモリの推定値142Iと比較して、割当てられるメモリを判定し、その後、適切な量のメモリを割当てる(または実現例応じて待ち行列に入れられる)。なお、この実現例では、同じメモリの境界141を使用してすべてのオペレータにメモリを割当てるが、別の実現例では、オペレータの各種類に対して異なるメモリの境界を使用してもよい(たとえば、ハッシュ結合はソートに対する対応する境界と異なる境界を有してもよい)。
【0029】
推定値142A〜142Pの各々は、メモリが割当てられるオペレータのプロファイル143Jに保持される。一実現例では、ある数のプロファイル143A〜143Vの各々は共有メモリ140に保持される。この実現例では、プロセス120A〜120Zは、最適モード、ワンパスモードおよび最小モードの各々で動作するのに必要とされるメモリの3つの推定値を含む対応するプロファイル143Jを共有メモリ140に作ることによって、各オペレータを登録する(図1Bの動作127を参照)。「最適」モードは「キャッシュ」モードとも称される。なぜなら、実行中にオペレータによってディスクアクセスが必要とされないためである。
【0030】
その後、プロセス120Iは、最適メモリ推定値142Pがメモリの境界141よりも小さい場合には最適メモリ推定値142P(図3の動作151〜152を参照)、メモリの境界141が最適メモリ推定値142Pとワンパスメモリ推定値142I(図2)との間である場合にはワンパスメモリ推定値142I(図3の動作153〜154を参照)、メモリの境界141が最小メモリ推定値142I(図2)より小さい場合には最小メモリ推定値142A(図3の動作155を参照)のように、データベースアプリケーション内のソートオペレータに対して割当てるメモリの量を判定する。ソートオペレータは、ワンパス推定値からキャッシュ推定値へのメモリの増加の利益をあまり受けないため(最適からワンパスへのメモリの増加と比較して)、この説明したばかりの割当が使用される。
【0031】
他のところで述べるように、これから割当てられるメモリの量の判定の具体的な方法はプロセスの属性(たとえば、優先順位)またはオペレータなどのいくつかの要因によって異なる。図1Bの動作127は任意であり、共有メモリ140にオペレータのプロファイルを登録する必要はなく、その代わりに他の実現例では、そのようなプロファイルは各プロセス120Aによってそれ自身の内部のメモリに個々に維持される。
【0032】
なお、最小メモリ推定値142Aは一部のオペレータに対してメモリの境界141より大きくてもよく、1つの実施例ではそのようなプロセスは待ち行列に入れられず、最小メモリ推定値142Aを割当てることを許可されるため、照会が実行される。そのような場合に、他のプロセスが過少に割当てる場合、すなわちメモリの境界141よりも少なく割当てる場合、アプリケーションによって割当てられるメモリの合計は外部で設定されるグローバルな値11を下回ることがある。しかしながら、メモリの境界141より多くのメモリを割当てるプロセス120A〜120Zは過少に割当てるプロセスを上回ることがあり、割当てられるメモリの合計が外部で設定されるグローバルな値11を超え、グローバルな内部の値14が(メモリブローカ115によって)低減され、メモリの境界141が(これもメモリブローカ115によって)低減されることがある。その後、プロセス120A〜120Zは、値11が変更されないままであれば割当てたであろう量よりも少ない量のメモリを割当てさせられる。このように、プロセス120A〜120Zの間ではある妥協が行なわれるため、外部で設定されるグローバルな値11が達成される。プロセス120A〜120Zの合計数が過剰な場合、たとえばすべてのプロセスに対する最小メモリ推定値142A〜142Zの和が値11を超える場合、どのプロセスに対しても付加的なメモリは割当てられず、その代わりにメモリの要求は待ち行列に入れられる。
【0033】
一実施例では、プロセス120A〜120Zは、図1Aに関して述べたように、メモリが割当てられるかまたは割当が解除されるたびにメモリの使用についての統計値160(図2)の更新も行なう。具体的には、統計値160は割当てられているが使用されていないメモリ(「フリーなメモリ」と呼ばれる)161(図2および図4)の量を含む。たとえば、プロセス120Iは1MBを割当てる必要があり得るが、オペレーティングシステム101が4MBの増分でのみメモリを提供する場合(たとえば、これがページサイズであるため)、3MBはフリーなメモリであり、4MBは割当てられたメモリであり、1MBは使用されるメモリである。フリーなメモリ161(図4)は、通常他のプロセス120Jには利用できない。
【0034】
プロセス120A〜120Zは、統計値160において、照会を実現するオペレータ(たとえば、ソート、ハッシュ結合およびビットマップマージなど)に関連しないメモリ(「その他のメモリ」と呼ばれる)162(図2および図4)の量も更新する。たとえば、プロセス120Iは、照会実現オペレータに関連せずかつメモリ162が使用されるPL/SQLまたはJAVA(R)命令シーケンスを含んでもよい。通常、その他のメモリ162は、オペレータが機能する態様(たとえば、ワンパス対マルチパスなど)を変更することで変更することはできない。
【0035】
プロセス120A〜120Zは、統計値160において、オペレータによって実際に使用されるメモリ(「ワークエリアメモリ」と呼ばれる)の量163も維持する。プロセス120A〜120Zによる統計値160の維持は、一実施例では「マロック(malloc)」および「フリー(free)」を呼出すラッパー関数で実現される。さらに、統計値160は個々のプロセス120A〜120Zの各々に対して別々に維持してもよく、またはこれに代えて、各統計値の総合計(すべてのプロセス120A〜120Zにわたる)を維持してもよい。
【0036】
一実施例では、メモリブローカ115は上述の統計値160を使用してグローバルな内部の値14を以下のように計算する(図5にTiとして示され、これは以下の態様でワークエリアメモリ163の量に対するターゲットとして使用される。具体的には、メモリブローカ115はまず、使用されるメモリ164(図5にUmとして示される)とワークエリアメモリ163(図5にWmとして示される)との差であるその他のメモリ162(図5にOmとして示される)を計算する。次に、メモリブローカ115は外部で設定されるグローバルな値11(「PGA AGGREGATE TARGET」とも呼ばれ、図5にTpgaとして示される)がその他のメモリ162より小さいかをチェックし(図5の動作172を参照)、そうであれはTiがTpgaの6%になるように設定する。
【0037】
したがって、あり得る最悪の場合、その他のメモリ162のメモリが大きすぎると、Tpgaのある最小値(たとえば、6%)がグローバルな内部の値14として使用される。これは、その他のメモリ162のサイズがメモリブローカ115の制御を超越しているためである。その他のメモリ162がTpgaより小さい場合、動作174で、メモリブローカ115はグローバルな内部の値14をTpgaとOmとの差の90%に設定し、動作175に進む。これは、メモリブローカ115の2つの連続する動作間の時間に割当てられるメモリの変化を勘案するための「安全策」として行なわれる(一例では、割当てられたメモリは3秒で10%より速く大きくなるとは予想されない)。
【0038】
次に、動作175では、メモリブローカ115は割当てられたメモリ(図5にAmとして示される)がTpgaより大きいかをチェックし、そうであれば動作176に進み(過剰割当に対処するため)、または動作177に進む(過小割当に対処するため)。動作176では、メモリブローカ115は、比率Wm/(Om+Wm)として係数Fwa(「ワークエリア割当係数」とも呼ばれる)を計算し、さらに比率(Am−Tpga)/Amとして別の係数Foa(「過剰割当係数」とも呼ばれる)を計算し、現在の限界Tiを(1−Fwa*Foa)で乗じたものが新しい限界Tiだと判定する。
【0039】
動作177では、メモリブローカ115はAmの90%がTpgaより小さいか、およびすべての最適メモリ割当の和がTpgaより大きいかもチェックし、そうであれば、Tiには変更は行なわれない。またこれに代えて、メモリブローカ115は動作179に進み、上述のワークエリア割当係数Fwaを計算する。次に、動作180では、メモリブローカ115は比率(Tpga−Am)/Tpgaとして過小割当係数Fua(「ブースティング係数」とも呼ばれる)を計算する。次に、メモリブローカ115は現在の限界Tiを(1+Fwa*Fua)で乗じたものを新しい限界Tiとして計算する。次に、メモリブローカ115は(動作182で)新たに計算された限界TiまたはTpgaの6%のどちらか大きい方をグローバルな内部の値14として設定し、これはここに記載されるように使用される。
【0040】
具体的には、今後、新たに計算されたグローバルな内部の値14がさまざまなオペレータによって必要とされるメモリを割当てるために使用される。他のところに記載されるように、そのようなグローバルな内部の値14は、(各個々のオペレータに対してメモリを割当てている)プロセスによって直接的に使用してもよいし、またはそのようなプロセスによって使用されるメモリの境界17を計算するために使用してもよい。1つの具体的な実施例では、メモリの境界17は添付の付録の擬似コードに説明されるようにグローバルな内部の値14から計算される。
【0041】
ここに記載されるメモリの自動的かつ動的な割当は、たとえば、2つの値AUTOおよびMANUALの1つに設定され得る“WORKAREA_SIZE_POLECY”と呼ばれ得るデータベースパラメータを使用することで、先行技術の手動のメカニズムと組合せて使用してもよい。このパラメータをAUTOに設定すると自動的かつ動的な割当が呼出される。また、(上述の)別のデータベースパラメータPGA_AGGREGATE_TARGETを実現してもよく、データベースアドミニストレータによって設定されるとき、パラメータWORKAREA_SIZE_POLICYのデフォルト値は自動的にAUTOに設定される。
【0042】
またはこれに代えて、パラメータWORKAREA_SIZE_POLICYの値は、PGA_AGGREGATE_TARGETが設定されていないときに自動的にMANUALに設定される。パラメータWORKAREA_SIZE_POLICYがMANUALに設定されている場合、PGA_AGGREGATE_TARGETはこの実施例では使用されず、その代わりにデータベースは先行技術のメカニズムを使用する(たとえば、各オペレータに対してメモリ上でデータベースアドミニストレータによって設定された個々のターゲットを使用することによって)。
【0043】
自動および手動のメカニズムは、たとえば後方互換性を維持するために組込んでもよく、一部のオペレータは手動のメカニズムを使用し、一部は自動のメカニズムを使用してもよい。そのような組合せの動作の場合、グローバルな内部の値14は、手動のメカニズムによって使用されるメモリを収容するために自動的に低減される。
【0044】
メモリの使用に応じて、メモリブローカ115はオペレータがメモリを割当てるとすぐ、たとえば、動作する照会の数に急激な増加がある場合にメモリの境界17を低減することがある。逆に、メモリの低下の要求がある場合にはメモリの境界17を増加させてもよい。メモリの境界17に対する新しい内部の値が計算されると、値17は1つの具体的な実施例では、メモリを割当てようとしている新しいオペレータにのみ計算後に適用される。代替の実施例では、メモリの境界17のそのような新しい値は、以前にメモリを割当てかつ現在実行しているオペレータによっても使用され、これによって実行中にそれらの以前に割当てられたメモリが低減(または増加)される。
【0045】
メモリの境界17の変化に対するオペレータの応答性は、ある所与の間隔内でメモリブローカ115がメモリの境界17を再計算する回数、および/またはメモリの境界17での変化の量に影響し得る。たとえば、現在実行しているオペレータが応答性に欠けるかまたは応答が遅い場合(メモリブローカ115の応答性と比較して)、メモリブローカ115はグローバルな内部の値14およびメモリの境界17を繰返し低減し、割当てられるメモリの合計が外部で設定されるグローバルな値11のターゲットに近づくようにする。
【0046】
メモリの割当の後のメモリの境界17の変化に応答するため、オペレータ(ソートおよびハッシュ結合など)は、それらの実行中の都合のよい時点でメモリの境界17(またはグローバルな内部の値14)に変化がないかをチェックしてもよい。メモリの境界17(またはグローバルな内部の値14)の変化がチェックされる点は、同期的(たとえば、毎秒ごと)または非同期的(たとえば、オペレータの実行中に1つまたは複数の動作が行なわれた後)にセットアップしてもよい。両方の実施例において、オペレータは、メモリブローカ115によって行なわれる決定によって、たとえば最適からワンパス、またはワンパスから最小へとモードを変更し、そのためそれらの割当てられるメモリも変化する。さらに、そのような実施例のオペレータは、それらの実行中にメモリ要件の推定値を動的に改めてもよい。モードの変更および割当てられたメモリの変更を実行中に実現するためのハッシュ結合オペレータおよびソートオペレータに対する修正は以下に簡単に述べる。
【0047】
一実施例では、(上述の)AUTOバージョンのハッシュ結合オペレータはそのワークエリアについての情報を登録する(たとえば、最適モード、ワンパスモードおよび最小モードの3つのモードの各々で必要とされるメモリの推定値を記憶する)。この実施例では、各オペレータに対する「モード」と呼ばれる変数(SGAにある)は、オペレータの動作の現在のモードを示し、そのメモリの使用を示す。この実施例では、各オペレータに対する「モード」変数はこの実施例のオペレータによってのみ変更される(別の実施例ではメモリブローカ115がそのような変更を行なってもよい)。
【0048】
メモリの境界17が十分に大きい限り、ハッシュ結合オペレータは最適で動作し、ハッシュ結合オペレータはメモリの当初の量を割当て、そのメモリを(最適モード推定値まで)動的に増加させて入力行を記憶する。しかしながら、最適モードで動作しているときでも、ハッシュ結合オペレータはワンパス要件に基づいて入力データを分割し、メモリの境界17が低減された場合にワンパスモードへと切換わるのを可能にする。この実施例では、メモリでのビルドのときに、メモリの境界17が最適からワンパスへのモードの変更を引起こすのに十分に低減された場合、ハッシュ結合オペレータは適切な量のデータをディスクにフラッシュすることによって、そのワークエリアをワンパス要件へとサイズを変更する。
【0049】
(ビルド局面での)ワンパスモード中、ハッシュ結合オペレータは通常の態様で働く。しかしながら、ワークエリアは1つのビルドパーティション、および付加的なパーティション当たり1つまたは複数のIOスロットを含むようにサイズを決められる(非同期的な入出力をサポートするため)。この局面中、ワークエリアは入力が予想よりもはるかに大きい場合でもサイズ変更されない。ハッシュ結合オペレータは、ビルドが開始されたときにワンパスモードに対して推定された量のメモリのみを使用する。
【0050】
一旦最初のワンパスビルド(最初のビルド)が終わると、ビルドの各パーティションのサイズがわかる。最も大きいパーティションの実際のサイズが各パーティションに対して予想される共通のサイズ(たとえば、ワンパスサイズ)より2倍(またはそれ以上)大きい場合、ハッシュ結合オペレータは、最初のビルドからの行を使用して再ビルドする。再ビルドの動作は正確なサイズを使用してビルドパーティションの理想的な数を判定し、したがってワークエリアメモリのより正確な推定値を判定する。
【0051】
2回目のビルドは(たいていの場合)最初のビルドよりも速い。なぜなら、再ビルド中の入力データサイズはもともとのデータサイズよりも小さく、ビルド時間は一般にプローブ時間と比較して非常に小さいためである。また、余分な再ビルド時間は、ハッシュ結合オペレータの全体的な実行時間と比較すればとるに足りないものである。なぜなら、プローブ時間の方がずっと大きいためである。しかしながら、そのような再ビルドからセーブされるメモリは巨大な場合がある(推定値にエラーがある場合、入力サイズは重要である)。
【0052】
メモリの境界17が「キャッシュ」(「最適」とも呼ばれる)モードでの実行を可能にするほど大きい限り、ハッシュ結合はメモリでプローブする。境界17が「ワンパス」へのモードの変更を引き起こすほど十分に低減されると、ハッシュ結合はハッシュエリアのサイズを変更することでワンパスプローブへと切換わる。そのとき、パーティションのサブセットがディスクへとフラッシュされ、メモリに残っているパーティションとともにプローブはワンパスモードで進む。後に、メモリの境界17がワンパス推定値よりも小さく改められた場合、現在メモリに残っているすべてのビルドパーティションはディスクへとフラッシュされる。プローブは最小要件(たとえば、パーティション当たり2スロット)に基づいて分割される。
【0053】
ビルド/プローブパーティションの各対に対して、ハッシュ結合オペレータは、2つのパーティションの最も小さいものをメモリにキャッシュするために十分なメモリを割当てる。あり得る余分なビルド局面のため、消費されるメモリは入力サイズの測定値が不正確な場合でも理想的なワンパスメモリ要件に近いべきである。
【0054】
「AUTO」バージョン(上述)で動作しているときにソートオペレータに行なわれる修正は、ハッシュ結合オペレータに行なわれるものと類似である。ソートオペレータはどの時点でも最適モードからワンパスモードへと切換わることができる。ソートオペレータは入力サイズの不良な測定値を勘案するために、各ソートのランのサイズを徐々に増加させる。このようにして、ソートオペレータは常にメモリの小幅な増加を用いてワンパスマージを行なう。
【0055】
一実施例では、ソートオペレータによって推定されるワークエリアがある予め定められた値(128KBなど)を超えた場合、ソートオペレータはそのワークエリアプロファイル(推定値を含む)を登録する。予め定められた値に等しいかそれより小さい推定値は登録されず、オンライントランザクション処理(OLTP)環境におけるメモリブローカ115の使用の影響が限られる。ソートオペレータへの入力は、多くの場合、他の環境と比較して非常に小さい。したがって、メモリブローカ115の小さなワークエリアに対する関与は避けられる。
【0056】
ソートオペレータの最適モードはMANUAL(上述)バージョンのソートオペレータに類似である。下にある行ソースからフェッチされた行はソートオペレータのワークエリアに加えられる。ワークエリアのサイズは怠惰な態様で増加される。どこかの時点でメモリ要件が最適メモリ推定値よりも大きい場合(たとえば、入力が予想よりも大きい場合)、3つの測定値のうちの1つまたは複数が更新される。メモリの境界17が現在の実行に対して最適メモリ推定値の割当を可能にするのに十分に大きい限り、ソートオペレータは、ソートが開始されたときに作られた当初の最適メモリ推定値よりも要件が大きい場合でもそのワークエリアを拡張し続ける。
【0057】
どこかの時点でメモリの境界17が最適からワンパスへのモードの変更を引き起こすのに十分に低減された場合、ソートオペレータは現在および最初のソートのランをディスクへとフラッシュする。次に、ソートオペレータは現在のワンパスメモリ推定値へとワークエリアを縮小する、その時点で、ソートオペレータはワンパスモードへと切換わる。
【0058】
ワンパスモードでは、ソートオペレータは入力サイズの不良な測定値を勘案するためそのワークエリアを動的に拡張する。たとえば、実際の入力サイズが、予想されるサイズの100MBではなく、800MBであると仮定する(8倍離れている)。ソートオペレータがソートのランの最初のセットを生成するとき、推定された100MBの入力サイズに基づいてワークエリアのサイズを決める。このことによって、64KB入出力サイズを仮定して当初のワークエリアサイズは2.5MBとなる。100MBの入力が一旦消費されると、これは40のランに対応し、ソートオペレータはより多くの行をソートする必要があると気づく。その時点で、ソートオペレータは推定入力サイズが2倍離れていることを前提とし、100MBでなく200MBの新しい推定値を仮定する。この新しい推定値に基づいて、ワークエリアは、その実際のサイズを係数sqrt(2)で乗じることでサイズを変更される。なぜなら、ワンパスに必要とされるメモリは入力サイズの平方根として変化するためである。入力からのすべての行が消費されるまで、同じ技術が繰返される。
【0059】
この例では、最初の100MBに対して各々2.5MBの40のランがあり、次の100MBに対して各々3.5MBの29のランがあり、次の200MBに対して各々5MBの40のランがあり、最後の400MBに対して各々7MBの56のランがあってもよい。ソートオペレータの最初の局面の終了時で、入力サイズが800MBであると最初からわかっていれば得られたであろう「理想的な」回数の114のランではなく、合計165のランがある。これらのランは10.3MB(165×64KB)のマージエリアを使用してワンパス動作でマージされる。これは、128である理想的なランの回数のワンパスマージに必要とされる8MB(128×64KB)よりもわずかに大きいメモリである。
【0060】
一般に、ソートオペレータへの入力の推定されるサイズSestimは理想的な入力サイズSと比較して最大で係数2nだけ離れている(すなわち、2n-1S<Sestim<=2nS)。ソートランの最終的な回数Nfinalは次のように表わすことができる。
【0061】
【数1】
【0062】
ここで、Nは実際のサイズSに対する理想的なランの回数である(すなわち、N=sqrt(S/C))。上述の例では、8倍離れているので、nは3である。上述の式を使用すると、当業者はソートオペレータが理想的なワンパスのランの回数の1.45倍を生成すると計算できる。それはワンパスマージ局面が理想的なワンパスメモリの1.45倍消費することを意味する。nが1であるとき(2倍離れている)、この係数は1.2であり、n
が無限であるとき、この係数は1/(2−sqrt(2))に集束し、1.7である。このため、最悪の場合、余分なメモリの消費はマージ局面中、理想の要件の1.7倍に制限される(既知の入力サイズを仮定して)。また、ソートオペレータ全体でのメモリ消費が考慮される場合、それはわずかに小さい。なぜなら、ランは理想的なメモリよりも少ないメモリを使用して生成されるためである。
【0063】
この技術がなければ、ワンパスマージを行なうと、ワンパスマージに対するメモリよりも2n多いメモリが必要となる。メモリの消費の面では、これよりさらに悪い。なぜなら、マージパスの継続時間はランの回数に比例するからである。動的にワークエリアのサイズを適合しないと、ソートオペレータは(小さな)多くのランを生成し、マージ局面の継続時間を増加させる。
【0064】
この開示を見れば、当業者にはここに記載される実施例および実現例のさまざまな修正および適合が明らかとなるであろう。たとえば、照会の実行の完了後、その照会に特有な統計値を保存して、その同じ照会を(たとえば、別のプロセスによって)再び実行する必要があるときに推定値を作るのに使用してもよい。
【0065】
すべてのアクティブなオペレータがそれらの最小のメモリを用いて動作することができる場合で、より多くのメモリが利用可能であると仮定すると、メモリブローカはメモリの増加の利益を最も受けるオペレータにまずメモリを割当ててもよい。たとえば、より多くのメモリをハッシュ結合オペレータに与えてその応答時間が5分から1分へと低減されるように(5倍の高速化)メモリブローカをプログラムしてもよいし、対して同じ量のメモリを別のハッシュ結合オペレータに与えてその応答時間が1時間から30分に低減されるようにしてもよい(たった2倍の高速化)。したがって、一実施例は応答時間の高速化を考慮し、絶対的な時間の改善は考慮していない。さらに、メモリの境界はここに記載するように(プライベートなメモリでなく)共有メモリのオペレータによって必要とされるすべてのメモリを割当てるデータベースで使用することができる。
【0066】
したがって、ここに記載される実施例および実現例のさまざまな修正および適合は特許請求の範囲に含まれる。
【0067】
付録
【図面の簡単な説明】
【0068】
【図1A】この発明に従ってプログラムされたコンピュータのデータおよび論理を示すデータフロー図である。
【図1B】図1Aに示される種類のコンピュータでアプリケーションによって行なわれる動作を示す図である。
【図2】図1Bに示される種類の複数のサーバプロセスによる共有メモリの使用を示す高レベルなブロック図である。
【図3】図1Bのサーバプロセスによって行なわれる比較動作の一実施例で行なわれる動作のフローチャートである。
【図4】図1Bの1つまたは複数のサーバプロセスに割当てられるメモリをともに形成するさまざまな構成要素のベン図である。
【図5】内部のターゲットを判定する動作の一実施例で図1Bのメモリブローカによって行なわれる動作のフローチャートである。
Claims (43)
- コンピュータ内のデータベースに関連する複数のプロセスにメモリを割当てる方法であって、
前記プロセスに割当てられるメモリの合計の量の第1の値を記憶するステップと、
前記第1の値に基づいて、前記プロセスの少なくとも1つにおいて少なくとも1つのオペレータによって割当てられるメモリの量の第2の値を導くステップとを含む、方法。 - 第2の値の量のメモリを割当てるステップと、
前記第2の値に基づいて前記第1の値を変更するステップと、
前記第1の値を変更するステップの後に、導く動作を繰返すステップとをさらに含む、請求項1に記載の方法。 - 第2の値の量のメモリを割当てるステップと、
前記第1の値を変更することなく、導く動作を繰返すステップとをさらに含む、請求項1に記載の方法。 - 前記プロセスのすべては前記コンピュータ内の共有メモリへのアクセスを有し、
前記方法は前記第2の値を前記共有メモリに記憶するステップを含む、請求項1に記載の方法。 - 1つのオペレータによって使用されるメモリの推定値を前記共有メモリに記憶するステップをさらに含む、請求項4に記載の方法。
- 前記推定値は前記1つのオペレータによって必要とされるメモリについてのものである、請求項5に記載の方法。
- 各プロセスは、各オペレータに対して前記共有メモリに、
最適モードに必要とされるメモリの第1の推定値と、
ワンパスモードに必要とされるメモリの第2の推定値と、
最小モードに必要とされるメモリの第3の推定値とを記憶するステップをさらに含む、請求項4に記載の方法。 - 前記第2の値を前記推定値の少なくとも1つと比較するステップと、
前記比較するステップの結果に基づいてオペレータに割当てられるメモリの量を判定するステップとをさらに含む、請求項7に記載の方法。 - 前記第2の値に基づいて各プロセスがメモリを割当てるステップと、
各プロセスが前記プロセスに割当てられるメモリの量を前記共有メモリに記憶するステップとをさらに含む、請求項4に記載の方法。 - 各プロセスが前記プロセスにおいて各オペレータによって使用されるメモリの量、前記プロセスの他の部分によって使用されるメモリの量、および割当てられているが前記プロセスによって使用されないメモリの量を前記共有メモリに記憶するステップをさらに含む、請求項9に記載の方法。
- 前記コンピュータは値によって制約されない付加的なプロセスを含む、請求項1に記載の方法。
- 前記第2の値は前記プロセスのすべてにおいて前記オペレータのすべてに共通である、
請求項1に記載の方法。 - 判定する動作を定期的に繰返すステップをさらに含む、請求項1に記載の方法。
- 前記第1の値が前記複数のプロセスに割当てられたメモリによってある予め定められた量だけ超過されたことに応答して、判定する動作を繰返すステップをさらに含む、請求項1に記載の方法。
- 複数の命令のシーケンスを記憶したコンピュータ読取可能な媒体であって、前記複数の命令のシーケンスは、コンピュータによって実行されると前記コンピュータに請求項1に記載の方法を実行させる命令のシーケンスを含む、コンピュータ読取可能な媒体。
- 搬送波媒体で実現されかつ複数の命令のシーケンスで符号化される信号であって、前記複数の命令のシーケンスは、コンピュータによって実行されると前記コンピュータに請求項1に記載の方法を実行させる命令のシーケンスを含む、信号。
- コンピュータ内のデータベースに関連する複数のプロセスにメモリを割当てる方法であって、
オペレータに割当てられるメモリの予め定められた値を、オペレータの最適な実行に必要とされるメモリの第1の推定値、オペレータのワンパス実行に必要とされるメモリの第2の推定値、およびオペレータの最小の実行に必要とされるメモリの第3の推定値の3つの推定値のうちの少なくとも1つと比較するステップと、
比較するステップの結果に基づいて前記オペレータに割当てられるメモリの量を導くステップとを含む、方法。 - 前記量は、前記第1の推定値が前記予め定められた値よりも小さい場合に前記第1の推定値であると判定される、請求項17に記載の方法。
- 前記量は、前記予め定められた値が前記第1の推定値と前記第2の推定値との間である場合に少なくとも前記第2の推定値から導かれる、請求項17に記載の方法。
- 前記量は、その他のプロセスに対する前記プロセスの優先順位からも導かれる、請求項19に記載の方法。
- 前記量は、前記予め定められた値が前記第1の推定値と前記第3の推定値との間である場合に少なくとも前記予め定められた値から導かれる、請求項17に記載の方法。
- 前記量は、前記予め定められた値が前記第3の推定値より小さい場合に前記第3の推定値から導かれる、請求項17に記載の方法。
- 比較する動作の前に、
前記プロセスに割当てられるメモリの合計に基づいて前記予め定められた値を判定するステップをさらに含む、請求項17に記載の方法。 - コンピュータ内の複数のプロセスにメモリを割当てる方法であって、
各プロセスが前記プロセスによって必要とされるメモリの量の推定値を前記コンピュータの共有メモリに記憶するステップと、
各プロセスが前記推定値を前記共有メモリから検索された値と比較するステップと、
各プロセスが前記比較するステップの結果に基づいてメモリを割当てるステップとを含む、方法。 - 各プロセスはデータベースに関連し、
前記推定値および前記値はデータベース照会を実現するオペレータに対するものである、請求項24に記載の方法。 - 各プロセスは対応する前記オペレータの複数の実行のモードに対して複数の推定値を記憶し、
割当の動作で割当てられるメモリは、前記第1の推定値が前記値よりも小さい場合に第1の推定値であると判定される、請求項25に記載の方法。 - 前記オペレータはソートであり、
前記割当の動作で割当てられるメモリは、前記値が前記第1の推定値と中間の推定値との間である場合に前記中間の推定値であると判定され、前記中間の推定値は前記第1の推定値と前記第2の推定値との間にある、請求項26に記載の方法。 - 前記オペレータはハッシュ結合であり、
前記割当の動作で割当てられるメモリは、前記値が前記第1の推定値と中間の推定値との間である場合に前記値であると判定され、前記中間の推定値は前記第1の推定値と前記第2の推定値との間にある、請求項26に記載の方法。 - コンピュータ内の複数のプロセスにメモリを割当てる方法であって、
各プロセスがデータベース照会を実現するオペレータによって必要とされるメモリの推定値をある予め定められた数と比較するステップと、
各プロセスが比較の結果に基づいてメモリを割当てるステップとを含む、方法。 - 前記予め定められた数は割当に利用可能なメモリを示し、前記方法は、
前記予め定められた数が前記推定値を超えたときに前記割当てるステップを行なうステップと、
前記推定値が前記予め定められた数を超えた場合にプロセスを待ち行列に入れるステップとをさらに含む、請求項29に記載の方法。 - 前記推定値は前記オペレータの最小モードに必要とされるメモリに関するものであり、
前記割当てるステップは前記推定値が前記予め定められた数を超えたときでも行なわれる、請求項29に記載の方法。 - コンピュータ内の複数のプロセスにメモリを割当てる方法であって、
前記プロセスに割当てられるメモリの合計に関連する第1の値を記憶するステップと、
前記第1の値から第2の値を導くステップと、
プロセスに対してメモリを割当てるために前記第2の値を使用するステップと、
前記使用するステップの後に前記第2の値を改めるステップとを含む、方法。 - 前記改めるステップは改められた第2の値を提供し、前記方法は、
別のプロセスに対してメモリを割当てるために前記改められた第2の値を使用するステップをさらに含む、請求項32に記載の方法。 - 前記改められた第2の値は前記第2の値および前記第1の値の各々から導かれる、請求項33に記載の方法。
- 前記改めるステップは定期的に行なわれる、請求項32に記載の方法。
- メモリの割当および割当の解除の際に各プロセスがメモリの使用についての統計値を更新するステップと、
前記統計値を前記第1の値および前記第2の値の少なくとも1つと比較するステップとを含み、前記改めるステップは前記比較するステップの結果に基づく、請求項32に記載の方法。 - 各プロセスは前記比較するステップを行ない、前記結果に応答して前記改めるステップを起動する、請求項36に記載の方法。
- データベースに関連する複数のプロセスを実行するコンピュータであって、
前記プロセスに割当てられるメモリの合計の量の第1の値を記憶するための手段と、
前記第1の値に基づいて、前記プロセスの少なくとも1つにおいて少なくとも1つのデータベースオペレータによって割当てられるメモリの量の第2の値を導くための手段とを含む、コンピュータ。 - 第2の値の量のメモリを割当てるための手段と、
前記第2の値に基づいて前記第1の値を変更するための手段とをさらに含む、請求項38に記載のコンピュータ。 - データベースに関連する複数のプロセスを実行するコンピュータであって、
データベースオペレータに割当てられるメモリの予め定められた値を、前記データベースオペレータの最適な実行に必要とされるメモリの第1の推定値、前記データベースオペレータのワンパスの実行に必要とされるメモリの第2の推定値、および前記データベースオペレータの最小の実行に必要とされるメモリの第3の推定値の3つの推定値の少なくとも1つと比較するための手段と、
前記データベースオペレータに割当てられるメモリの量を導き、比較の結果を受取るために前記比較するための手段に結合される手段とを含む、コンピュータ。 - 前記3つの推定値を記憶するメモリをさらに含み、
前記導くための手段は、第1の推定値が前記値よりも小さい場合に前記第1の推定値を選択するための手段を含む、請求項40に記載のコンピュータ。 - そこで実行する複数のプロセスにメモリを割当てるコンピュータであって、
前記プロセスに割当てられるメモリの合計に関連する第1の値を記憶するための手段と、
前記第1の値から第2の値を導くための手段と、
前記プロセスにメモリを割当てるために前記第2の値を使用するための手段と、
前記使用の後に前記第2の値を改めるための手段と、
別のプロセスにメモリを割当てるために前記改められた第2の値を使用するための手段とを含む、コンピュータ。 - メモリの割当および割当の解除の際にメモリの使用についての統計値を更新するための手段と、
前記統計値を前記第1の値および前記第2の値の少なくとも1つと比較するための手段とをさらに含む、請求項42に記載のコンピュータ。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/969,290 US7409517B2 (en) | 2001-10-01 | 2001-10-01 | Dynamic and automatic memory management |
PCT/US2002/031223 WO2003029982A2 (en) | 2001-10-01 | 2002-09-30 | Dynamic and automatic memory management |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2005508033A true JP2005508033A (ja) | 2005-03-24 |
JP2005508033A5 JP2005508033A5 (ja) | 2006-01-05 |
Family
ID=25515390
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003539417A Pending JP2005508033A (ja) | 2001-10-01 | 2002-09-30 | 動的かつ自動的なメモリ管理 |
Country Status (9)
Country | Link |
---|---|
US (1) | US7409517B2 (ja) |
EP (1) | EP1444577B1 (ja) |
JP (1) | JP2005508033A (ja) |
CN (1) | CN1300692C (ja) |
AU (1) | AU2002362400B2 (ja) |
CA (1) | CA2462094C (ja) |
DE (1) | DE60224432T2 (ja) |
HK (1) | HK1063359A1 (ja) |
WO (1) | WO2003029982A2 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015075856A1 (en) * | 2013-11-25 | 2015-05-28 | International Business Machines Corporation | Cross-platform workload processing |
US9626226B2 (en) | 2013-11-25 | 2017-04-18 | International Business Machines Corporation | Cross-platform workload processing |
Families Citing this family (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6799260B1 (en) * | 2001-03-30 | 2004-09-28 | Intransa, Inc. | Dynamic storage management |
US7409517B2 (en) | 2001-10-01 | 2008-08-05 | Oracle International Corporation | Dynamic and automatic memory management |
US7539608B1 (en) * | 2002-05-10 | 2009-05-26 | Oracle International Corporation | Techniques for determining effects on system performance of a memory management parameter |
US7669189B1 (en) | 2002-06-26 | 2010-02-23 | Oracle International Corporation | Monitoring memory accesses for computer programs |
US7240115B2 (en) * | 2002-12-10 | 2007-07-03 | International Business Machines Corporation | Programmatically allocating memory among competing services in a distributed computing environment |
EP1489507A1 (en) * | 2003-06-19 | 2004-12-22 | Texas Instruments Incorporated | Memory preallocation |
US7310719B2 (en) * | 2003-07-24 | 2007-12-18 | Sap Aktiengesellschaft | Memory management tile optimization |
US20050081210A1 (en) * | 2003-09-25 | 2005-04-14 | International Business Machines Corporation | Dynamic adjustment of system resource allocation during query execution in a database management system |
GB2414821A (en) * | 2004-06-01 | 2005-12-07 | Leslie Thomas Jones | Computer application for uploading files from a client computer to a server |
FR2883390A1 (fr) * | 2005-03-15 | 2006-09-22 | Gemplus Sa | Gestion du placement de structure de donnees en memoire basee sur une langage de programmation dedie |
US7711746B2 (en) * | 2005-12-17 | 2010-05-04 | International Business Machines Corporation | System and method for deploying an SQL procedure |
US7552293B2 (en) * | 2006-02-28 | 2009-06-23 | Red Hat, Inc. | Kernel and application cooperative memory management |
US8122450B2 (en) * | 2006-03-30 | 2012-02-21 | International Business Machines Corporation | Method and apparatus for distributing memory in a data processing system |
US9031826B2 (en) * | 2006-03-30 | 2015-05-12 | International Business Machines Corporation | Method and apparatus for simulating operation in a data processing system |
GB0617115D0 (en) * | 2006-08-31 | 2006-10-11 | Ibm | Efficient enforced resource consumption rate limits |
US8099577B2 (en) * | 2007-03-20 | 2012-01-17 | Oracle International Corporation | Managing memory in a system that includes a shared memory area and a private memory area |
KR100964374B1 (ko) * | 2007-12-17 | 2010-06-17 | 한국전자통신연구원 | 전파식별 태그의 메모리 관리 장치 및 방법 |
US8516450B2 (en) * | 2010-03-19 | 2013-08-20 | Oracle International Corporation | Detecting real-time invalid memory references |
US8903805B2 (en) | 2010-08-20 | 2014-12-02 | Oracle International Corporation | Method and system for performing query optimization using a hybrid execution plan |
US9418109B2 (en) * | 2011-03-18 | 2016-08-16 | Emc Corporation | Memory quota |
US8495107B2 (en) | 2011-06-23 | 2013-07-23 | Oracle International Corporation | System and method for use with garbage collected languages for enabling the allocated heap memory to be updated at runtime |
CN105094977B (zh) * | 2014-04-30 | 2018-11-16 | 广州市动景计算机科技有限公司 | 基于域名调整应用程序占用内存的方法及装置 |
CN106155911B (zh) * | 2015-03-30 | 2019-04-12 | 华为技术有限公司 | 一种请求远程内存的方法和装置 |
CN106055407B (zh) * | 2016-05-25 | 2020-02-07 | 努比亚技术有限公司 | 进程资源调整装置及方法 |
GB2554083A (en) * | 2016-09-16 | 2018-03-28 | Siemens Rail Automation Holdings Ltd | Method for operating a computer, method for controlling a railway network and computer program product |
US10740332B2 (en) | 2017-01-20 | 2020-08-11 | Futurewei Technologies, Inc. | Memory-aware plan negotiation in query concurrency control |
US10691695B2 (en) | 2017-04-12 | 2020-06-23 | Oracle International Corporation | Combined sort and aggregation |
US10732853B2 (en) | 2017-04-12 | 2020-08-04 | Oracle International Corporation | Dynamic memory management techniques |
US10824558B2 (en) | 2017-04-26 | 2020-11-03 | Oracle International Corporation | Optimized sorting of variable-length records |
US10359947B2 (en) | 2017-07-25 | 2019-07-23 | Ca, Inc. | Reclaiming memory pages |
KR102059807B1 (ko) | 2018-06-27 | 2019-12-27 | 주식회사 티맥스 소프트 | 서비스 지향 아키텍쳐 상에서 메모리 관리를 위한 기법 |
US20240020223A1 (en) * | 2022-07-18 | 2024-01-18 | Micron Technology, Inc. | Center allocation data structure |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0581050A (ja) * | 1991-09-20 | 1993-04-02 | Toshiba Corp | 計算機のシステム資源サイズ設定装置 |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5274805A (en) | 1990-01-19 | 1993-12-28 | Amalgamated Software Of North America, Inc. | Method of sorting and compressing data |
US5594889A (en) | 1992-01-03 | 1997-01-14 | Digital Equipment Corporation | Memory resource allocation look ahead system and method |
JPH06511582A (ja) * | 1992-07-24 | 1994-12-22 | マイクロソフト コーポレイション | メモリを割り当てそして解放するコンピュータ方法及びシステム |
US5787300A (en) | 1993-11-10 | 1998-07-28 | Oracle Corporation | Method and apparatus for interprocess communications in a database environment |
US5832475A (en) | 1996-03-29 | 1998-11-03 | International Business Machines Corporation | Database system and method employing data cube operator for group-by operations |
US5799210A (en) | 1996-04-18 | 1998-08-25 | Oracle Corporation | Method for allocating either private or shared buffer memory for storing data from sort operations in accordance with an assigned value or threshold value |
US5784699A (en) | 1996-05-24 | 1998-07-21 | Oracle Corporation | Dynamic memory allocation in a computer using a bit map index |
US5765157A (en) | 1996-06-05 | 1998-06-09 | Sun Microsystems, Inc. | Computer system and method for executing threads of execution with reduced run-time memory space requirements |
US5826082A (en) * | 1996-07-01 | 1998-10-20 | Sun Microsystems, Inc. | Method for reserving resources |
US5860144A (en) | 1996-08-09 | 1999-01-12 | Oracle Corporation | Addressing method and system for providing access of a very large size physical memory buffer to a number of processes |
US5835958A (en) | 1996-10-29 | 1998-11-10 | Sun Microsystems, Inc. | Method and apparatus for dynamically sizing non-contiguous runtime stacks |
US5987580A (en) | 1997-04-04 | 1999-11-16 | Oracle Corporation | Serially reusable execution memory |
US6192460B1 (en) | 1997-12-16 | 2001-02-20 | Compaq Computer Corporation | Method and apparatus for accessing data in a shadow set after a failed data operation |
US6272486B1 (en) | 1998-04-16 | 2001-08-07 | International Business Machines Corporation | Determining the optimal number of tasks for building a database index |
JP2000242484A (ja) | 1999-02-24 | 2000-09-08 | Hitachi Ltd | 制御プログラムの変更方法 |
CN1149786C (zh) * | 1999-05-10 | 2004-05-12 | 华为技术有限公司 | 用户接入网维护与管理方法 |
US6625709B2 (en) * | 2000-10-30 | 2003-09-23 | Microsoft Corporation | Fair share dynamic resource allocation scheme with a safety buffer |
US6757802B2 (en) | 2001-04-03 | 2004-06-29 | P-Cube Ltd. | Method for memory heap and buddy system management for service aware networks |
EP1251460A1 (en) | 2001-04-19 | 2002-10-23 | TELEFONAKTIEBOLAGET L M ERICSSON (publ) | Adaptive method for allocation of random access memory |
WO2003009144A1 (en) * | 2001-07-19 | 2003-01-30 | Wind River Systems, Inc. | Memory management system |
US7409517B2 (en) | 2001-10-01 | 2008-08-05 | Oracle International Corporation | Dynamic and automatic memory management |
-
2001
- 2001-10-01 US US09/969,290 patent/US7409517B2/en not_active Expired - Lifetime
-
2002
- 2002-09-30 DE DE60224432T patent/DE60224432T2/de not_active Expired - Lifetime
- 2002-09-30 CN CNB028194438A patent/CN1300692C/zh not_active Expired - Lifetime
- 2002-09-30 JP JP2003539417A patent/JP2005508033A/ja active Pending
- 2002-09-30 EP EP02800401A patent/EP1444577B1/en not_active Expired - Lifetime
- 2002-09-30 WO PCT/US2002/031223 patent/WO2003029982A2/en active IP Right Grant
- 2002-09-30 CA CA2462094A patent/CA2462094C/en not_active Expired - Lifetime
- 2002-09-30 AU AU2002362400A patent/AU2002362400B2/en not_active Expired
-
2004
- 2004-08-11 HK HK04106051A patent/HK1063359A1/xx not_active IP Right Cessation
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0581050A (ja) * | 1991-09-20 | 1993-04-02 | Toshiba Corp | 計算機のシステム資源サイズ設定装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015075856A1 (en) * | 2013-11-25 | 2015-05-28 | International Business Machines Corporation | Cross-platform workload processing |
US9626226B2 (en) | 2013-11-25 | 2017-04-18 | International Business Machines Corporation | Cross-platform workload processing |
US9652294B2 (en) | 2013-11-25 | 2017-05-16 | International Business Machines Corporation | Cross-platform workload processing |
US11311722B2 (en) | 2013-11-25 | 2022-04-26 | International Business Machines Corporation | Cross-platform workload processing |
Also Published As
Publication number | Publication date |
---|---|
WO2003029982A2 (en) | 2003-04-10 |
CN1300692C (zh) | 2007-02-14 |
US7409517B2 (en) | 2008-08-05 |
WO2003029982A3 (en) | 2004-06-03 |
AU2002362400B2 (en) | 2009-04-23 |
CN1561486A (zh) | 2005-01-05 |
EP1444577B1 (en) | 2008-01-02 |
HK1063359A1 (en) | 2004-12-24 |
CA2462094C (en) | 2013-01-22 |
EP1444577A2 (en) | 2004-08-11 |
DE60224432T2 (de) | 2008-12-24 |
DE60224432D1 (de) | 2008-02-14 |
US20040073763A1 (en) | 2004-04-15 |
CA2462094A1 (en) | 2003-04-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2005508033A (ja) | 動的かつ自動的なメモリ管理 | |
AU2002362400A1 (en) | Dynamic and automatic memory management | |
US7499960B2 (en) | Adaptive memory allocation | |
US7757063B2 (en) | Systems for dynamically resizing memory pools | |
US8166479B2 (en) | Optimizing data analysis through directional dependencies of a graph including plurality of nodes and attributing threading models and setting status to each of the nodes | |
US5675797A (en) | Goal-oriented resource allocation manager and performance index technique for servers | |
US20130132405A1 (en) | Dynamically Associating Different Query Execution Strategies with Selective Portions of a Database Table | |
US5852826A (en) | Parallel merge sort method and apparatus | |
US5926807A (en) | Method and system for effectively representing query results in a limited amount of memory | |
US7694102B2 (en) | Systems and methods for self-tuning memory | |
US9195599B2 (en) | Multi-level aggregation techniques for memory hierarchies | |
US20120036134A1 (en) | Performing concurrent rehashing of a hash table for multithreaded applications | |
US20140115291A1 (en) | Numa optimization for garbage collection of multi-threaded applications | |
US8954969B2 (en) | File system object node management | |
JP2000242551A (ja) | メモリ管理のための方法および装置 | |
US20030046294A1 (en) | Symmetrical database data set allocation | |
JP6823626B2 (ja) | データベース管理システム及び方法 | |
Deligiannis et al. | Adaptive memory management scheme for MMU-less embedded systems | |
US7908268B2 (en) | Predictive database pool preparation | |
US20090320036A1 (en) | File System Object Node Management | |
CN112148792A (zh) | 一种基于HBase的分区数据调整方法、系统及终端 | |
Zanotti Siviero | A Memory Contention Responsive Hash Join Algorithm Design and Implementation on Apache AsterixDB | |
US11681705B2 (en) | Trie data structure with subtrie data structures | |
US20110283294A1 (en) | Determining multi-programming level using diminishing-interval search | |
US12061592B1 (en) | Lock-free read access to hash map data structures |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050929 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050929 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20080815 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080826 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20081125 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20081202 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20081216 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20091222 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20100319 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20100329 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20100622 |