(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024177162
(43)【公開日】2024-12-19
(54)【発明の名称】複数のチェーンを使用した共有キャッシュ内のオブジェクトの管理
(51)【国際特許分類】
G06F 16/28 20190101AFI20241212BHJP
G06F 8/71 20180101ALI20241212BHJP
【FI】
G06F16/28
G06F8/71
【審査請求】有
【請求項の数】14
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024134843
(22)【出願日】2024-08-13
(62)【分割の表示】P 2022546343の分割
【原出願日】2021-01-29
(31)【優先権主張番号】16/779,475
(32)【優先日】2020-01-31
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
2.JAVASCRIPT
(71)【出願人】
【識別番号】506332063
【氏名又は名称】セールスフォース インコーポレイテッド
(74)【代理人】
【識別番号】110004381
【氏名又は名称】弁理士法人ITOH
(72)【発明者】
【氏名】リエラウ,サージ フィリップ
(72)【発明者】
【氏名】ジャン,ルイ
(57)【要約】 (修正有)
【課題】データベースに関連するオブジェクトを管理する方法及びコンピュータ可読媒体を提供する。
【解決手段】データベースオブジェクトの順序をそれぞれ規定する複数のチェーンを含むチェーンセットを使用して、データベースオブジェクトのキャッシュを保持する方法であって、データベースオブジェクトの状態の変化に応じて、対応するチェーンを選択すると、選択したチェーンをロックし、てデータベースオブジェクトの状態を変更し、その後、選択されたチェーンをアンロックする。
【選択図】
図1
【特許請求の範囲】
【請求項1】
共有メモリを管理するために、前記共有メモリに保存されているデータベースオブジェクトの使用をトラッキングする方法であって、
コンピュータシステムが、複数のチェーンを有するチェーンセットを保持することであって、複数のチェーンの各々はキャッシュに保存されたデータベースオブジェクトの使用状況による順序付けを規定することと、
前記コンピュータシステムが、複数のデータベースオブジェクトの各状態をモニターすることと、
一データベースオブジェクトの状態が変化したとの判定に応じて、前記コンピュータシステムが、その一データベースオブジェクトに対応する複数のチェーンのうちの一チェーンを選択することであって、ソフトウェアバージョン情報が前記一チェーンを特定するために使用されることと、
前記コンピュータシステムが、前記一チェーンを更新するが、更新中に前記複数のチェーンのうちの他のチェーンがアクセスされることを妨げないことであって、前記更新することは、
前記一チェーンをロックすることと、
ロックされた前記一チェーンを変更して前記一データベースオブジェクトの変化した状態を反映することと、
更新後に前記一チェーンをアンロックすることとを含み、
前記複数のチェーンのうちの第1のチェーンが、ソフトウェアアプリケーションの第1のリリースに関連付けられた第1の複数のデータベースオブジェクトの順序付けを示し、前記複数のチェーンのうちの第2のチェーンが、前記ソフトウェアアプリケーションの第2のリリースに関連付けられた第2の複数のデータベースオブジェクトの順序付けを示す、
方法。
【請求項2】
最も最近使用されたデータベースオブジェクトが前記チェーン内のテールポジションを占め、前記方法は、さらに、前記共有メモリからの立ち退きのためにテールポジションを占めるデータベースオブジェクトを選択し、このオブジェクトを前記共有メモリから立ち退かせることを含む、請求項1に記載の方法。
【請求項3】
チェーンは、規定された順序で前記データベースオブジェクトをリンクするリンクを含む、請求項1または2のいずれか一項に記載の方法。
【請求項4】
前記チェーンセットが、現在はデータベースオブジェクトが関連付けられていないことを示すヌルオブジェクトを格納する空のチェーンを含む、請求項1ないし3のいずれか一項に記載の方法。
【請求項5】
ロックされた前記一チェーンを変更することは、前記一データベースオブジェクトを前記チェーンに追加することを含む、請求項1ないし4のいずれか一項に記載の方法。
【請求項6】
ロックされた前記一チェーンを変更することは、前記チェーンから前記一データベースオブジェクトを削除することを含む、請求項1ないし4のいずれか一項に記載の方法。
【請求項7】
ロックされた前記一チェーンを変更することは、前記一データベースオブジェクトを前記チェーンの先頭または前記チェーンの先頭に近いポジションに移動することを含む、請求項1ないし4のいずれか一項に記載の方法。
【請求項8】
前記キャッシュに格納されるデータベースオブジェクトの順序付けは、少なくとも部分的には、前記データベースオブジェクトの相対的な使用頻度に基づく、請求項1ないし7のいずれか一項に記載の方法。
【請求項9】
さらに、前記コンピュータシステムが、新しいチェーンが前記チェーンセットに追加されるとの決定に応じて、
前記チェーンセットをロックすることと、
前記新しいチェーンを前記チェーンセットに追加することと、
前記チェーンセットのアンロックすることとを含む、
請求項1ないし8のいずれか一項に記載の方法。
【請求項10】
前記コンピュータシステムが、前記チェーンセットに対するガーベージコレクションの動作を実行することをさらに含み、前記実行することが、前記チェーンセットに含まれるチェーンの数がしきい値より大きいとの判定に応じて行われ、前記ガーベージコレクションが前記チェーンセットをロックした後、前記チェーンセットをアンロックする前に実行される、請求項9に記載の方法。
【請求項11】
前記複数のチェーンの第1のチェーンが、ソフトウェアアプリケーションの第1のリリースによって導入された識別子のセットに関連付けられたデータベースオブジェクトのセットの第1の複数のデータベースオブジェクトの順序付けを規定し、前記複数のチェーンの第2のチェーンが、前記ソフトウェアアプリケーションの第1または第2のリリースによって導入された識別子の異なるセットに関連付けられたデータベースオブジェクトの第2の複数のデータベースオブジェクトの順序付けを規定する、
請求項1ないし10のいずれか一項に記載の方法。
【請求項12】
データベースオブジェクトにアクセスするプロセスが、前記データベースオブジェクトを含む前記チェーンのロックを取得し、前記チェーン内の前記データベースオブジェクトのポジションを変更し、前記ロックは、他のプロセスが前記チェーンにアクセスすることを防止する、請求項1ないし11のいずれか一項に記載の方法。
【請求項13】
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサに請求項1ないし12のいずれか一項に記載の方法を実行させるプログラム命令が格納されたメモリと
を有するコンピュータシステム。
【請求項14】
コンピュータシステムに請求項1ないし12のいずれか一項に記載の方法を実行させることができるプログラミング命令を格納したコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
この開示は一般に、データベースへのアクセスに関し、特にデータベースに関連するオブジェクトの管理に関する。
【背景技術】
【0002】
クラウドアプリケーション開発プラットフォームにより、個々の企業やSaaSベンダーは、堅牢で信頼性が高く、インターネット規模のアプリケーションを開発できる可能性がある。このようなアプリケーションを用いて、データベースにアクセスし、データベースから取得した情報を処理できる。データによっては、生成に計算コストがかかる場合や、変更頻度が低い場合がある。さらに、データによっては、アプリケーションまたは組織全体で複数のユーザによって使用される場合がある。
【0003】
アプリケーションの展開の一環として、展開プラットフォームでは、データベースからの情報の取得と処理を支援するデータベースオブジェクトを作成できる場合がある。このようなデータベースオブジェクトには、多数のレコードに対して実行されるクエリーのパフォーマンスを最適化および向上させるために使用されるクエリープランや、特定のユーザのニーズに合わせてカスタマイズされたファンクションが含まれる場合がある。
【0004】
データベースに関連付けられたオペレーションを実行するプロセスは、データベースオブジェクトを変更または操作できる。他のプロセスがデータベースオブジェクトを使用しようとすると、データベースオブジェクトの現在のバージョンが使用されていない可能性がある。他のプロセスが変更されたデータベースオブジェクトの正しいバージョンに同期してアクセスできるようにするために、データベースオブジェクトを共有メモリ領域に格納することができる。
【図面の簡単な説明】
【0005】
【
図1】共有メモリ内のオブジェクトにアクセスするアプリケーションのブロック図である。
【
図5】マルチテナントデータベースシステムのブロック図である。
【
図6】共有キャッシュ内のオブジェクトを管理する方法の一実施形態を示すフロー図である。
【
図7】共有キャッシュでガーベージコレクションを行う方法の一実施形態を示すフロー図である。
【
図8】共有メモリ内のデータベースオブジェクトにアクセスする2つのプロセスの例を示すブロック図である。
【
図9】テストブローカーアプリケーションを含むコンピュータシステムの一実施形態のブロック図である。
【発明を実施するための形態】
【0006】
本開示は様々な修正や代替形式に影響されやすいが、その具体的な実施形態は図面に例として示されており、ここで詳細に説明する。しかしながら、言うまでもなく、図面及びその詳細な説明は、本開示を例示された特定の形態に限定することを意図したものではなく、逆に、その意図は、添付された請求項によって定義される本開示の精神及び範囲内にあるすべての修正、均等物及び代替物をカバーするものである。ここで使用される見出しは、整理のみを目的としたものであり、説明の範囲を制限するために使用されるものではない。本願全体で使用されるように、「may」という単語は、強制的な意味(すなわち、「must」の意味)ではなく、許容的な意味(すなわち、「可能性を有する」意味)で使用される。同様に、“include”、“including”、“includes”という単語は含むことを意味するが、これに限定されない。
【0007】
さまざまなユニット、回路、またはその他のコンポーネントは、1つまたは複数のタスクを実行するように「構成される」と説明されることがある。このような文脈では、「構成される」とは、一般的に、動作中に一以上のタスクを実行する「回路を有する」ことを意味する構造の広範な言及である。そのため、ユニット/回路/コンポーネントが現在オンになっていない場合でも、そのタスクを実行するようにユニット/回路/コンポーネントを構成できる。一般に、「構成される」に対応する構造を形成する回路は、ハードウェア回路を含んでもよい。同様に、さまざまなユニット/回路/コンポーネントは、説明の便宜上、1つまたは複数のタスクを実行するものとして説明されることがある。このような説明は、「構成される」というフレーズを含むと解釈すべきである。
【0008】
ここで使用される「に基づく」という用語は、決定に影響する一以上の要因を説明するために使用される。この用語は、追加の要因が決定に影響を与える可能性を排除するものではない。つまり、特定の要因のみに基づいて決定することも、特定の要因とその他の不特定の要因に基づいて決定することもできる。「Bに基づいてAを決定する。」というフレーズを考える。このフレーズは、BがAを決定するために使用される、またはAの決定に影響を与える要因であることを特定する。このフレーズは、Aの決定がCのような他の要因にも基づいている可能性を妨げるものではない。このフレーズは、AがBのみに基づいて決定される実施形態をカバーすることも意図している。したがって、「に基づく」というフレーズは、「少なくとも一部には基づく」というフレーズと同義である。
【0009】
アプリケーションにサービスを提供するマルチテナントデータベースシステムでは、アプリケーションの配置に複数のデータベースオブジェクトの生成が含まれる場合がある。このようなデータベースオブジェクトには、個々のユーザのニーズに合わせてカスタマイズされた一以上のファンクションが含まれる場合がある。このようなユーザー定義ファンクションとともに、データベースオブジェクトには、データベースへのアクセスを最適化および整理するために生成されたプランが含まれる場合もある。場合によっては、ユーザー定義アプリケーションや開発プラットフォームに付属するアプリケーションをアップグレードすると、新しいバージョンのファンクションやプランが生成されることがある。
【0010】
一部のマルチテナントデータベースシステムでは、データベースオブジェクトは「共有メモリ」と呼ばれるメインメモリ内の指定された領域に格納される場合がある。ファンクションのコンパイルとクエリープランの生成にはコストがかかる。このようなコンパイル動作中に作成されたデータベースオブジェクトをキャッシュすることで、データベースオブジェクトの再利用が可能となり、オブジェクトの再コンパイルコストを回避できるため、これによりデータベースシステムの効率が向上する。共有メモリに格納されたデータベースオブジェクトは、データベースにアクセスしている複数のプロセスによってアクセスされる可能性があり、これにより、あるプロセスによって行われた特定のデータベースオブジェクトに適用された変更を、他のプロセスによって共有することができる。場合によっては、異なる種類のデータベースオブジェクトが、共有メモリ内に配置されたそれぞれのキャッシュメモリ(または単に「キャッシュ」)に格納されることがある。たとえば、ユーザ定義ファンクションを1つのキャッシュメモリに格納し、プランを別のキャッシュメモリに格納することができる。
【0011】
コンピュータシステムでは、共有メモリはサイズが限られているため、すべてのデータベースオブジェクトが一度に共有メモリに格納されることはない。多くの場合、最近使用したデータベースオブジェクトを共有メモリに格納し、使用頻度の低いデータベースオブジェクトを削除することで、使用可能な共有メモリを効果的に使用できる。この方法で共有メモリを管理するには、共有メモリに格納されているデータベースオブジェクトの使用状況を追跡する必要がある。
【0012】
共有メモリに格納されたデータベースオブジェクトの使用状況を追跡するために、さまざまな手法が採用されることがある。1つの手法として、共有メモリに格納されているデータベースオブジェクトの使用状況により順序を指定するチェーンと呼ばれるデータ構造の維持がある。この順序付けは、共有メモリ内のデータベースオブジェクトがどのくらい最近使用されたかに基づいている場合がある。たとえば、Least Recently Used(「LRU」)チェーンは、最も最近使用されたデータベースオブジェクトがチェーンの初期ポジション(または「ヘッドポジション」)を占め、最も最近使用されたデータベースオブジェクトがチェーンの最後(または「テール」)のポジションを占める順序が指定される。
【0013】
あるデータベースオブジェクトが作成され、共有メモリに追加されると、LRUチェーンの先頭に追加される。データベースオブジェクトがアクセスされると、チェーン内のそれぞれのポジションが変更される。たとえば、あるデータベースオブジェクトが使用されている場合、LRUチェーン内のカレントポジションはチェーン内のヘッドポジションに移動されるため、そのデータベースオブジェクトはチェーンの先頭に向かって進む。データベースオブジェクトのポジションをチェーンの先頭に移動するプロセスは、「データベースオブジェクトをプロモートする」と呼ばれる。頻繁に使用されるデータベースオブジェクトをプロモートすることで、より最近に使用されたオブジェクトはチェーンのヘッド方向に配置され、使用されていないデータベースオブジェクトはチェーンのテール方向に配置されます。
【0014】
共有メモリに新しいデータベースオブジェクトが追加されるたびに、共有メモリの空き領域がチェックされる。新しいデータベースオブジェクトを格納するための空き領域が不足している場合、共有メモリに以前格納されていたデータベースオブジェクトが選択され、共有メモリから削除される。LRUチェーンが維持されているシステムでは、LRUチェーンのテールポジションを占めるデータベースオブジェクトが削除対象として選択される。LRUチェーンの最後にあるデータベースオブジェクトが必要になる可能性は低い。したがって、テールオブジェクトを削除すれば、データベースのパフォーマンスへの影響が最小限に抑えられる。
【0015】
データベースオブジェクトを追加、削除、またはプロモートするためにLRUチェーンを変更する場合、前述の変更を実行するプロセスは、ロックを使用してチェーンへの排他的アクセスを取得して、LRUチェーンへの同期アクセスを提供する必要がある。あるプロセスにLRUチェーンのロックが付与されると、他のプロセスがLRUチェーンにアクセスしてそれぞれの変更を行うことはできなくなる。発明者たちは、LRUチェーンによってトラッキングされる多数のデータベースオブジェクトを考えると、必要な変更を行うためにLRUを走査するのに必要な時間が、他のプロセスがLRUチェーンにアクセスしようとするのを妨害することによって、システムのパフォーマンスを低下させることに気付いた。図面に示され、以下に説明されている実施形態は、システム全体のパフォーマンスを向上させるデータベースオブジェクトの使用状況をトラッキングする技術を提供する。
【0016】
コンピュータシステムの一実施例を
図1に示す。図に示すように、コンピュータシステム100はアプリケーション101を実行してデータベース102にアクセスする。様々な実施形態において、コンピュータシステム100は、複数のユーザがコンピュータネットワークを介してデータベース102にアクセスすることを可能にするマルチテナントデータベースシステムの具体的な実施形態である。
【0017】
データベース102は共有メモリ103を含み、共有メモリ103はキャッシュ104を含む。データベースオブジェクト107を含む複数のデータベースオブジェクトをキャッシュ104に格納できる。ここでいうデータベースオブジェクトとは、アプリケーションがデータベースに対して特定のタスクを実行できるようにするユーザ定義ファンクションやアクセスプランなどを指す。以下でより詳細に説明するように、共有メモリ103のサイズは、データベース102で使用可能なストレージ容量に基づいていてもよい。単一のキャッシュが共有メモリ103に含まれるように描かれているが、他の実施形態では、任意の適切な数のキャッシュを採用することができることに留意されたい。
【0018】
コンピュータシステム100は、チェーンセット105と複数のチェーン106を保持(maintain)し、チェーンセット105の各チェーンは、キャッシュ104に格納されているデータベースオブジェクトの順序を指定する。以下により詳細に説明するように、チェーン106には、指定された順序でデータベースオブジェクトをリンクする複数のリンクが含まれてもよい。
図1では単一セットのチェーンを有する単一チェーンセットのみが描かれているが、他の実施形態では、それぞれが複数セットのチェーンを持つ複数のチェーンセットを採用することができる。
【0019】
チェーンセット105と複数のチェーン106を保持(maintain)することに加えて、コンピュータシステム100はキャッシュ104に格納されたデータベースオブジェクトのそれぞれの状態をモニターする。ここで使用されるように、データベースオブジェクトの状態は、データベースオブジェクトが最後に使用されたとき、データベースオブジェクトがキャッシュに追加されたときなどを指すことがある。たとえば、あるデータベースオブジェクトの状態をモニターする場合、コンピュータシステム100は、そのデータベースオブジェクトがアプリケーションによっていつアクセスされたかをトラッキング(track)してもよい。いくつかの実施例では、コンピュータシステム100は、共有メモリ103の状態に関する追加のメトリック(metrics)を収集することができる。たとえば、コンピュータシステム100は、空でないチェーンの数を追跡し、空でないチェーンの最大数を記録し、チェーンのガーベージコレクションイベントの数を追跡してもよい。
【0020】
データベースオブジェクト107の状態が変化したとの判断に応じて、コンピュータシステム100は、データベースオブジェクト107に対応するチェーン106の一チェーンを選択する。チェーン106のその一チェーンの選択は、少なくとも部分的に、データベースオブジェクト107へのチェーンリンクが存在することに基づいて行うことができる。アプリケーションを複数リリースする場合、異なるリリースのデータベースオブジェクトが対応するチェーンに配置されてもよい。
【0021】
その一チェーンが選択されると、コンピュータシステムは、その一チェーンを更新するが、更新中にチェーン106の他のチェーンがアクセスされるのを防げない。チェーン106の他のチェーンへのアクセスを許可することにより、その一チェーンの更新が完了するのを待たずに、他のチェーンの他のデータベースオブジェクトへの更新を並行して実行することができる。このような並行アクセスは、様々な実施形態において、コンピュータシステム100の性能を向上させることができる。
【0022】
様々な実施形態において、その一チェーンを更新することは、その一チェーンをロックすることを含む。その一チェーンのロックは、更新の進行中に、他のプロセスがその一チェーンにアクセスすることを防ぎ、そのため他のプロセスが更新の途中にその一チェーンにアクセスしないようにする。一旦ロックされると、その一チェーンはその一データベースオブジェクトの状態を反映するように変更される。後述するように、チェーンの変更には、その一チェーンに含まれる一以上のリンクの変更が含まれてもよい。更新が完了すると、その一チェーンがアンロックされ、他のプロセスが更新された情報を使用してチェーンにアクセスできるようになる。
【0023】
図2を参照して、チェーンセット105とそれに関連するハッシュテーブルの一実施形態のブロック図が示されている。図に示すように、チェーン201A-201Cはハッシュテーブル209に格納される。チェーンセット105は、ハッシュテーブル209内に格納されているすべてのチェーンのリストを保持する。このリストには、ヘッドポインタ205とテールポインタ206を介してアクセスできる。
【0024】
新しいチェーンが生成されると、その新しいチェーンがリストのテール(tail)に追加され、それに応じてテールポインタ206が更新される。チェーンセット105によって保持されるリストは、いくつかの実施例では、すべてのチェーンの順次スキャンを容易にすることができ、チェーンセットのチェーンを反復処理することに依存するデータベースオブジェクトの無効化および削除中に使用される。同様の方法で、ガーベージコレクション中にチェーンがリストから削除されると、ヘッドポインタ205とテールポインタ206の一方または両方が更新されてもよい。
【0025】
各チェーン201A-201Cは、キー202A-202Cによって識別されてもよい。各キーは一意的であり、名前空間識別子のソート済み配列であってもよい。ここで使用されるように、名前空間は、ファンクションによって使用されるデータ型が定義されている場所、またはプランによって参照されるテーブルが定義されている場所を指す。このようなデータ型には、様々な実施形態において、引数型、戻り値型、ローカル変数型などが含まれる。名前空間は、アプリケーションのファンクションのコンパイル中に記録されてもよい。場合によっては、データベースオブジェクトに対して許される名前空間の最大数があってもよい。
【0026】
チェーン201A-201Cは、リンクリスト構造を使用して、ハッシュテーブル209内の順方向リンク203A-203C及び逆方向リンク204A-204Cによって二重にリンクされている。リンク203A-203Cはリスト内の次のチェーンを指し、リンク204A-204Cはリスト内の前のチェーンを指していてもよい。なお、ハッシュテーブル209に含まれるチェーンは3つだけであるが、他の実施形態では、任意の適切な数のチェーンを含めることができる。場合によっては、ハッシュテーブル209に含めることができるチェーンの最大数は、少なくとも部分的には、共有メモリ103の使用可能なストレージ量に基づいていてもよい。ハッシュテーブル209内のチェーンの最大数は、共有メモリ103内のキャッシュの初期化中に設定できる。
【0027】
各チェーン201A-201Cは、共有メモリ103に格納された対応するデータベースオブジェクトのセットの順序を指定する。以下でより詳細に説明するように、データベースオブジェクト間のリンクを使用して順序を指定することができる。例えば、チェーン201Aはオブジェクト207Aからオブジェクト207Nまでの順序を指定し、チェーン201Bにはヌルオブジェクト208で示されているようにデータベースオブジェクトが割り当てられておらず、チェーン201Cはオブジェクト209Aからオブジェクト209Nまでの順序を指定する。
【0028】
いくつかの場合には、新しいアプリケーションリリースでは通常新しい名前空間が導入されるため、チェーン201A-201Cのそれぞれがアプリケーションの異なるリリースまたはバージョンに対応してもよい。たとえば、チェーン201Aは、アプリケーションの第1のリリースに関連付けられたデータベースオブジェクトの順序を指定し、チェーン201Bは、アプリケーションの第2の異なるリリースに関連付けられたデータベースオブジェクトの順序を指定できる。
【0029】
新しいデータベースオブジェクトをキャッシュする準備ができたら、新しいデータベースオブジェクトをアタッチするターゲットチェーンを取得するルーチンを実行する。いくつかの実施例では、ターゲットチェーンを取得するファンクションはハッシュテーブル209をチェックする。このターゲットチェーンがハッシュテーブル209内にすでに存在する場合は、新しいデータベースオブジェクトがチェーンに追加される。ただし、ハッシュテーブル209内に使用可能な新しいデータベースオブジェクトに対応するチェーンがない場合は、新しいチェーンを生成する別のルーチンを実行し、新しいデータベースオブジェクトが新しく生成されたチェーンに追加される。
【0030】
後述のように、データベースオブジェクトは不要になったため、チェーンから削除されてもよい。あるチェーンから最後のデータベースオブジェクトが削除されると、そのチェーンは空になる。ただし、空のチェーンはハッシュテーブル209からすぐには削除されない。代わりに、新しいチェーンが作成され、ハッシュテーブル209内のチェーンの総数がしきい値を超えると、ガーベージコレクションルーチンが実行される。ガーベージコレクションルーチンの実行中に、ハッシュテーブル209内に、新しいチェーンに必要なスペースを収容するスペースを解放するため、空のチェーンがハッシュテーブル209から削除さる。チェーンの追加とともにガーベージコレクションを行うことで、チェーンの作成と削除の両方のプログラムコードを1つのルーチンにまとめることができる。そのため、単一ルーチンの実行には、排他的モード(exclusive mode)でチェーンセットロック210を一度だけ取得する必要があり、これにより他のプロセスがチェーンセットにアクセスできなくなる。この方法でチェーンセットをロックすることは、アプリケーションの展開またはリリースが完了し、アプリケーションが安定すると、新しい名前空間が導入されることがまれになるまれなイベントである。チェーンセットへの読み取り専用アクセス、すなわちチェーンセット内のチェーンの一つに含まれる情報を読み出すアクセスの間、チェーンセットロック210は共有モードで保持され、他のプロセスが情報検索のためにアクセスすることを依然として許可する。なお、チェーンセットが共有モードでロックされている場合、排他モードでチェーンセットロックを取得しようとする試みはブロックされる。つまり、プロセスがチェーンセットにアクセスしているときに、同時にチェーンセットを変更することはできない。
【0031】
上記のようなチェーンは、さまざまな方法で実装され得る。チェーンの具体的実施形態を
図3に示す。図に示すように、チェーン300にはキー301、オブジェクト302A-302C、およびロック303が含まれる。留意点として、チェーン300は、チェーン106のいずれか、または201A-201Cに対応してもよい。なお、オブジェクト302A-302Cは、
図1に示すようにデータベースオブジェクト105に対応してもよい。
【0032】
オブジェクト302A-302Cの順序は、リンク304および305によって指定される。場合によっては、オブジェクト302A-302Cに対応する実際のデータベースオブジェクトは、チェーン300に含まれず、実際のデータを含む共有メモリ103に含まれるキャッシュ内の場所へのポインタだけに含まれることがある。同様の方法で、リンク304と305は、オブジェクト302A-302Cに対応する共有メモリ103に含まれるキャッシュ内の場所へのポインタを含むことができる。
【0033】
図に示すように、302A-302Cの各オブジェクトは2つのリンクに関連付けられる。1つは順序内の前のオブジェクトを指し、もう1つは順序内の次のオブジェクトを指す。オブジェクト302A-302Cのそれぞれは2つのリンクに関連付けられているように描かれているが、他の実施形態では、オブジェクトごとに1つのリンクのみを使用することができる。様々な実施形態において、オブジェクト302A-302Cのうちの最も最近使用された一つはヘッドポジション306に位置し、オブジェクト302A-302Cのうちの最も最近使用された一つはテールポジション307に位置していてもよい。留意点として、3の実施形態には3つのオブジェクトしか描かれていないが、他の実施形態では、チェーン300は任意の適切な数のオブジェクトを含むことができる。
【0034】
チェーン300に新しいオブジェクトが追加されると、新しいオブジェクトはヘッドポジション306に追加される。リンク304と305は、新しく追加されたオブジェクトの位置を反映するように調整される。オブジェクトがチェーン300から削除されると、リンク304と305は、新たに削除されたオブジェクトによって空いた位置を中心に、オブジェクト302A-302Cの他のオブジェクトを再リンクするように変更される。オブジェクト302A-302Cの一オブジェクトが使用されると、チェーン300がロックされ、オブジェクト302A-302Cのその一オブジェクトがヘッドポジション306に向かってプロモートされるようにリンク304と305が調整される。
【0035】
様々な実施形態において、チェーンからオブジェクトを除去する必要がある場合、最も古いオブジェクトを除去対象として選択することができる。タイムスタンプベースのエイジ計算スキーム(age calculation scheme)を採用することもできる。グローバル・タイムスタンプ・カウンタは、チェーンセット105により保持されてもよい。このカウンタは、チェーンセット105内の一チェーンに新しいオブジェクトが追加されるとインクリメントされてもよい。オブジェクト自体はローカルタイムスタンプを保持することができ、これはオブジェクトがチェーンに追加されるとき、またはオブジェクトがチェーンのヘッドポジションにプロモート(promote)されるときにグローバル・タイムスタンプ・カウンタの値に設定される。
【0036】
本開示の他の箇所で説明されているように、異なるチェーンはアプリケーションの異なるリリースに対応してもよい。異なるチェーンを区別するために、各チェーンには識別情報を含む識別子が含まれている。図に示すように、チェーン300にはキー301が含まれており、前述のように、オブジェクト302A-302Cによって使用されるテーブルやデータ型などのデータベースオブジェクトの定義を含む名前空間を示すデータが含まれていてもよい。ソフトウェアバージョンまたはリリース情報を使用して個々の(particular)チェーンを識別することができるが、チェーン300の識別を支援する任意の適切なタイプの情報をキー301に含めることが可能であり、検討されている。
【0037】
ロック303には、チェーンがあるプロセスによって現在ロックされているかどうかを示すデータを含めることができる。場合によっては、ロック303には、チェーン300がロックされたことを示すデータだけでなく、ロックが付与されたプロセスを識別するデータも含まれてもよい。チェーン300のロックとアンロック(unlocking)には、チェーン300のロック状態を識別する異なる情報をロック303に格納することを含んでもよい。ロック303はチェーン300に含まれているように描かれているが、他の実施形態では、ロック303はチェーン300の代わりにルックアップテーブルまたは他の適切な構造に格納されていてもよい。
【0038】
前述のように、異なる種類のデータベースオブジェクトは、共有メモリ内の異なるキャッシュに格納されてもよい。複数のキャッシュを有する共有メモリ103の具体例を
図4に示す。図に示すように、共有メモリ103にはファンクションキャッシュ401とプランキャッシュ402が含まれている。
図4の実施形態では2つのキャッシュが描かれているが、他の実施形態では、任意の適切な数のキャッシュを採用することができる点に留意されたい。さらに、ファンクションキャッシュ401とプランキャッシュ402に割り当てられるストレージの量は、少なくとも部分的には、共有メモリ103に関連付けられている使用可能なストレージの量に基づいていてもよい点に留意されたい。場合によっては、ファンクションキャッシュ401とプランキャッシュ402に関連付けられたそれぞれのストレージの量が異なることがある。
【0039】
ファンクションキャッシュ401は、一以上のアプリケーションで使用されるファンクションに対応するデータベースオブジェクトを格納するよう動作可能である。たとえば、ファンクションデータベースオブジェクト403はファンクションキャッシュ401に含まれる。様々な実施形態において、チェーンセット405は、ファンクションキャッシュ401に格納されたデータベースオブジェクトの使用状況をトラッキング(track)するために使用される。チェーンセット405には複数のチェーンを含めることができ、それぞれがアプリケーションの異なるリリースによって導入された一意的な識別子セットに対応する。
【0040】
プランキャッシュ402は、一以上のアプリケーションで使用される構造化クエリー言語(Structured Query Language:「SQL」)クエリープランに対応するデータベースオブジェクトを格納するよう動作可能である。図に示すように、プランデータベースオブジェクト404はプランキャッシュ402に含まれる。チェーンセット406は、様々な実施形態において、プランキャッシュ402に格納されたデータベースオブジェクトの使用状況をトラッキングするために使用される。チェーンセット405と同様に、チェーンセット406には複数のチェーンを含めることができ、それぞれがアプリケーションの異なるリリースによって導入された一意的な識別子セットに対応する。
【0041】
ある種のキャッシュ内に格納されたデータベースオブジェクトを整理するために複数のチェーンを採用することにより、一チェーン(a particular chain)の変更に伴う影響をさらに改善することができる。たとえば、あるプロセス(a given process)がチェーンセット405内のチェーン内のオブジェクトを変更し、それ故このチェーンを排他的にロックしたとき、他のプロセスがチェーンセット405内の他のチェーンに付与(attach)されている他のデータベースオブジェクトを変更またはアクセスすることを妨げないため、データベース操作中の同時実行性とスループットが最大化される。さらに、データベースオブジェクトを複数のチェーンに分散することで、すべてのデータベースオブジェクトが1つのチェーンだけに編成されている場合と比較して、あるチェーン内であるデータベースオブジェクトを検索するために必要な時間が短縮される。
【0042】
図5を参照して、マルチテナントデータベースとキャッシュシステムが実装される可能性のある環境の例を示している。開示されたマルチテナントシステムは、例示の目的で含まれるが、本開示の範囲を制限することを意図していないことに注意されたい。他の実施形態では、様々なクライアント/サーバ環境、クラウドコンピューティング環境、クラスタ化されたコンピュータなどの非マルチテナント環境で同様の技術を実装することができる。
【0043】
図5に示すように、一以上のユーザシステム512A-512Cは、ネットワーク514を介して、マルチテナントデータベースシステム(MTS)500と相互作用してもよい。これらのユーザシステム512A-512Cのユーザは、容量が異なる(in differing capacities)ユーザである場合があり、ユーザシステム512A-512Cの一ユーザシステムの容量(capacity)は、現在のユーザによって決定されてもよい。たとえば、営業担当者がMTS500と対話するためにユーザシステム512A-512Cのうちの一ユーザシステムを使用している場合、その一ユーザシステムはその営業担当者に割り当てられた容量がある可能性がある。ただし、管理者が同じユーザーシステムを使用してMTS500と対話している間は、その管理者に割り当てられた容量がある。
【0044】
ネットワーク514は、LAN(ローカルエリアネットワーク)、WAN(ワイドエリアネットワーク)、ワイヤレスネットワーク、ポイントツーポイントネットワーク、スターネットワーク、トークンリングネットワーク、ハブネットワーク、またはその他の適切な構成であってもよい。大文字の「I」で始まる「インターネット」と呼ばれることが多い複数のネットワークのグローバルなインターネットワークは、ここで説明する多くの例で使用され、TCP/IP(Transfer Control Protocol and Internet Protocol)ネットワークの一例である。しかしながら、言うまでもなく、本発明のネットワークは、他の様々なタイプのネットワークのいずれかを利用することができる。
【0045】
ユーザシステム512A-512Cは、TCP/IPを使用してMTS500と通信でき、より高いネットワークレベルでは、HTTP、FTP、AFS、WAPなどの他の一般的なインターネットプロトコルを使用して通信できる。例として、HTTPが使用されている場合、ユーザシステム512A-512Cには、MTS500のHTTPサーバからHTTPメッセージを送受信するための、一般に「ブラウザ」と呼ばれるHTTPクライアントが含まれていることがある。このようなサーバは、MTS500とネットワーク514の間の唯一のネットワークインターフェイスとして実装される場合があるが、他の技術も同様に使用されるか、代わりに使用される場合がある。一部の実装では、MTS500とネットワーク514の間のインターフェースにロードシェアリング機能が含まれている。たとえば、ラウンドロビンHTTPリクエストディストリビュータは、負荷を分散し、着信HTTP要求を複数のサーバに均等に分散する。複数のサーバのそれぞれが、少なくともサーバにアクセスしているユーザのために、MTSのデータにアクセスできることが望ましい。
【0046】
いくつかの実施例では、
図5に示すシステムは、Webベースの顧客関係管理(CRM)システムを実装している。例えば、いくつかの実施形態では、MTS500は、CRMソフトウェアアプリケーションを実装し実行するだけでなく、関連するデータ、コード、フォーム、Webページおよびその他の情報をユーザシステム512A-512Cとの間で提供し、データベースシステム関連のデータ、オブジェクトおよびWebページコンテンツとの間で格納および取得するように構成されたアプリケーションサーバを含む。マルチテナントシステムの実施形態では、あるテナントのデータが明示的に共有されていない限り、あるテナントのデータが他のテナントのデータにアクセスできないように、他のテナントのデータとは別に保持されるようにテナントデータを配置することが望ましい。
【0047】
MTS500の要素の構成の一例を
図5に示す。これは、ネットワークインターフェイス520、テナントデータ用のストレージ522、MTS500および場合によっては複数のテナントにアクセス可能なシステムデータ用のストレージ524、MTS500のさまざまな機能(例えば、特定のチェーンをロックする)を実装するためのプログラムコード526、アプリケーションサービスの一部としてアプリケーションを実行するなど、MTSシステムプロセスおよびテナント固有のプロセスを実行するためのプロセススペース528を含む。
【0048】
図5に示すシステムのいくつかの要素には、ここで詳細に説明する必要のない、従来のよく知られた要素が含まれる場合がある。たとえば、各ユーザシステム512A-512Cは、デスクトップパソコン、ワークステーション、ラップトップ、PDA、携帯電話、またはインターネットやその他のネットワーク接続に直接または間接的にインターフェースできる任意のWAP対応デバイスやその他のコンピューティングデバイスであってもよい。ユーザシステム512A-512Cは、例えば、MicrosoftのEdge(商標)ブラウザ、GoogleのChrome(商標)ブラウザ、または携帯電話、PDA、その他の無線デバイスなどの場合はWAP対応ブラウザなどのブラウジングプログラムのようなHTTPクライアントを実行して、ユーザシステム512A-512Cのユーザ(例えば、CRMシステムの加入者)がネットワーク514を介してMTS500から利用可能な情報やページにアクセスし、処理し、表示することを可能にする。ユーザシステム512A-512Cのそれぞれは、MTS500または他のシステムまたはサーバによって提供されるページ、フォーム、およびその他の情報と組み合わせて、ディスプレイモニタ画面、LCDディスプレイなどにおいてブラウザが提供するグラフィカルユーザインタフェース(GUI)と対話するための、キーボード、マウス、タッチスクリーン、ペンなどの一以上のユーザインタフェースデバイスを含むことができる。前述のように、本発明は、複数のネットワークの具体的なグローバルなインターネットワークを指すインターネットでの使用に適している。ただし、言うまでもなく、イントラネット、エクストラネット、仮想プライベートネットワーク(VPN)、非TCP/IPベースのネットワーク、任意のLANまたはWANなど、インターネットの代わりに他のネットワークを使用することもできる。
【0049】
いくつかの実施形態では、ユーザシステム512A-512Cとそのコンポーネントは、一以上の処理要素上で実行可能なコンピュータコードを含むブラウザなどのアプリケーションを使用してオペレータが設定可能である。同様に、いくつかの実施形態では、MTS500(及び1より多いMTSの追加インスタンス)とそのコンポーネントは、一以上の処理要素上で実行可能なコンピュータコードを含むアプリケーションを使用してオペレータが設定可能である。したがって、ここで説明するさまざまな動作は、非一時的コンピュータ可読媒体に格納され、一以上の処理要素によって実行されるプログラム命令を実行することによって実行することができる。プログラム命令は、ハードディスクのような不揮発性の媒体に格納することもできるし、ROMやRAMのようなよく知られた他の揮発性または不揮発性のメモリ媒体やデバイスに格納することもできるし、コンパクトディスク(CD)媒体、デジタル多用途ディスク(DVD)媒体、フロッピーディスクなど、プログラムコードを格納できる任意の媒体に提供することもできる。さらに、プログラムコード全体またはその一部は、例えばインターネット上のソフトウェアソースから、またはよく知られているように別のサーバから、またはよく知られているように任意の通信媒体およびプロトコル(例:TCP/IP、HTTP、HTTPS、イーサネットなど)を使用して、よく知られている他の従来のネットワーク接続(例:エクストラネット、VPN、LANなど)を介して送信およびダウンロードすることができる。また、言うまでもなく、本発明の諸側面を実装するためのコンピュータコードは、例えばC、C+、HTML、Java、JavaScript、またはVBScriptのような他の任意のスクリプト言語のような、サーバまたはサーバシステム上で実行可能な任意のプログラミング言語で実装することができる。
【0050】
一実施形態によれば、各MTS500は、MTS500のテナントとしてのユーザシステム512A-512Cによるアクセスをサポートするために、ユーザシステム512A-512CにWebページ、フォーム、アプリケーション、データ、および/またはメディアコンテンツを提供するように構成される。このように、この実施形態では、MTS500は、データが共有されない限り、各テナントのデータを個別に保持するセキュリティメカニズムを提供する。複数のMTSが使用されている場合は、相互に近接して配置されている場合(たとえば、1つの建物またはキャンパス内にあるサーバファーム内)と、相互に離れた場所に分散されている場合(例えば、A市にある一以上のサーバとB市にある一以上のサーバ)がある。ここで使用されるMTSには、ローカルまたは一以上の地理的な場所に分散された一以上の論理的および/または物理的に接続されたサーバーが含まれる場合がある。さらに、「サーバ」という用語は、処理ハードウェアおよび処理スペースを含むコンピュータシステム、ならびに当該技術分野でよく知られている関連するストレージシステムおよびデータベースアプリケーションを含む。また、言うまでもなく、ここでは「サーバシステム」と「サーバ」は同じ意味で使われることが多い。同様に、ここで説明するデータベースは、単一データベース、分散データベース、分散データベースのコレクション、冗長なオンラインまたはオフラインバックアップまたはその他の冗長性を持つデータベースなどとして実装でき、分散データベースまたはストレージネットワークと関連する処理インテリジェンスを含む場合がある。
【0051】
図6を参照して、コンピュータシステムの共有メモリ内のオブジェクトにアクセスする方法の一実施例を示すフロー図を示す。この方法は、コンピュータシステム100を含む様々なコンピュータシステムに適用することができ、ブロック601から始まる。
【0052】
この方法は、コンピュータシステムが、複数のチェーンを有するチェーンセットを保持する。複数のチェーンの各々はキャッシュに保存されたデータベースオブジェクトの順序付けを規定することを含む(ブロック602)。場合によっては、各チェーンが、ソフトウェアアプリケーションの対応するリリースに関連付けられたデータベースオブジェクトのそれぞれの順序を規定してもよい。例えば、複数のチェーンの第1のチェーンは、ソフトウェアアプリケーションの第1のリリースに関連付けられた第1の複数のデータベースオブジェクトの順序を規定し、複数のチェーンの第2のチェーンは、第1のリリースとは異なるソフトウェアアプリケーションの第2のリリースに関連付けられた第2の複数のデータベースオブジェクトの順序を規定することができる。
【0053】
この方法は、コンピュータシステムが、複数のデータベースオブジェクトの各状態をモニターすることも含む(ブロック603)。様々な実施形態において、モニターすることは、特定のデータベースオブジェクトがアプリケーションによって使用されたときのトラッキング(tracking)が含まれてもよい。さらに、モニターすることは、特定のデータベースオブジェクトがキャッシュから削除されたとき、または新しいデータベースオブジェクトがキャッシュに追加されたときに通知することが含まれてもよい。
【0054】
この方法は、さらに、1つのデータベースオブジェクトの状態が変化したとの判定に応じて、コンピュータシステムが、そのデータベースオブジェクトに対応する複数のチェーンのうちの1つのチェーンを選択することを含む(ブロック604)。様々な実施形態において、選択することは、複数のチェーンの各チェーンに関連付けられた識別子をチェックすることを含んでもよい。
【0055】
この方法は、コンピュータシステムが、その1つのチェーンを更新することであって、その更新中に複数のチェーンのうちの他のチェーンがアクセスされることを妨げないことも含む(ブロック605)。データベースオブジェクトの順序は複数のチェーンにわたり管理されるため、ある一チェーンをロックしても、データベースオブジェクト全体のサブセットにしか影響しない。その一チェーンをロックすることで、他のチェーンに関連付けられたデータベースオブジェクトへのアクセスが引き続き可能になり、システム全体のパフォーマンスが向上する。
【0056】
様々な実施形態において、この方法は、その一チェーンをロックすること、ロックされたその一チェーンを変更してその一オブジェクトの変化した状態を反映すること、及び、更新後にその一チェーンをアンロックすることを含む(ブロック606)。様々な実施形態において、その一チェーンをロックすることは、その一チェーンが現在使用されていることを示す値にロックデータフィールドを設定することを含んでもよい。その一チェーンのアンロックには、ロックデータフィールドを、その一チェーンが使用されなくなったことを示す別の値に設定することが含まれてもよい。
【0057】
場合によっては、ロックされた一チェーンの変更には、そのチェーンからその一データベースオブジェクトを削除することが含まれてもよい。または、ロックされた一チェーンの変更には、その一データベースオブジェクトのその一チェーンへの追加が含まれてもよい。場合によっては、ロックされた一チェーンの変更には、ロックされた一チェーンで指定された順序内の一データベースオブジェクトの場所を変更することが含まれてもよい。この方法はブロック607で終わる。
【0058】
場合によっては、チェーンセットに含まれるチェーンに対して、よりグローバルな性質の更新を行う必要がある。このようなグローバル変更中は、チェーンセット自体がロックされるため、特定のグローバル変更が完了するまでチェーンへのアクセスが制限される。たとえば、(「ガーベージコレクション」と呼ばれるプロセスで)チェーンセット内の既存のチェーンが削除されたとき、またはチェーンセットに新しいチェーンが追加されたときに、チェーンセットをロックする必要がある。
【0059】
空のチェーンに割り当てられたストレージは、新しいチェーンが追加されるまで必要ない場合があるため、チェーンが空になっても、関連付けられたチェーンセットからすぐに削除する必要はない。そのため、ガーベージコレクションと新しいチェーンの追加の両方を、チェーンセットの1つのロックを使用して同時に実行できる。新しいチェーンが追加されている間にガーベージコレクションを実行することにより、チェーンセット上のロック競合の可能性を減らすことで、コンピュータシステムの全体的なパフォーマンスを向上させることができる。また、空のチェーンをすぐに削除しないことで、このような削除動作の実行に伴うオーバーヘッドを回避できる。さらに重要なのは、データベースオブジェクトが空のチェーンに追加されると、新しいチェーンの生成に伴うオーバーヘッドが回避され、空のチェーンが効果的に再利用されることである。
【0060】
ガーベージコレクションを実行する方法の一実施形態を示すフロー図を
図7に示す。
図1のコンピュータシステムを含む様々なコンピュータシステムに適用することができる方法はブロック701から始まる。
【0061】
この方法には、新しいチェーンをチェーンセットに追加するとの判断に応じて、チェーンセットをロックし、新しいチェーンをチェーンセットに追加し、チェーンセットをアンロックすることを含む(ブロック702)。さまざまな実施例では、チェーンセットに新しいチェーンを追加することは、アプリケーションへのアップグレードを受け取ることに対応していてもよい。アップグレードされたアプリケーションに関連付けられたデータベースオブジェクトのバージョンは、チェーンセットに追加される共通チェーンにグループ化されてもよい。
【0062】
この方法は、チェーンセットがロックされている間に、チェーンセットに含まれるチェーンの数が閾値より大きいとの判定に応じて、ガーベージコレクションオペレーションを実行することを含む(ブロック703)。様々な実施形態において、しきい値は、少なくとも部分的には、データベースオブジェクトを格納するための使用可能なメモリ量に基づいている。いくつかの実施例では、ガーベージコレクション動作の実行には、チェーンセットから少なくとも空のチェーンを削除することが含まれる。この方法はブロック704で終わる。
【0063】
3つのプロセスが共有メモリ上で同時にデータベースオブジェクトにアクセスする例を
図8に示す。図に示すように、共有メモリ804にはチェーンセット802とキャッシュ806が含まれる。チェーンセット802にはチェーン803Aと803Bが含まれ、キャッシュ806にはデータベースオブジェクト805A-805Cが含まれる。データベースオブジェクト805Aと805Bの使用状況はチェーン803Aによってトラッキングされ、データベースオブジェクト805Cの使用状況はチェーン803Bによってトラッキングされる。なお、様々な実施形態において、共有メモリ804は共有メモリ103に対応し、チェーンセット802はチェーンセット105に対応し、キャッシュ806はキャッシュ104に対応してもよい。さらに、プロセス801A-801Cは、コンピュータシステム上でアプリケーション101が実行された結果であってもよいことに留意されたい。
【0064】
動作中、プロセス801Aは共有メモリ804内のデータベースオブジェクト805Aにアクセスする。アクセスの結果、プロセス801Aは、データベースオブジェクト805Aをチェーン803Aの先頭に近づけるために、チェーン803A内でプロモートする必要がある。データベースオブジェクト805Aのプロモートを実行するために、プロセス801Aはチェーン803Aのロックを取得し、チェーン803A内のデータベースオブジェクト805Aの一を変更するプロセスを開始する。
【0065】
プロセス801Aがチェーン803Aを更新している間、プロセス801Bはデータベースオブジェクト805Bにアクセスする。データベースオブジェクト805Aへのアクセスと同様の方法で、データベースオブジェクト805Bのポジションもチェーン803A内で更新する必要がある。プロセス801Bがチェーン803Aのロックを取得しようとしても、プロセス801Aが現在保持しているロックのために取得できない。プロセス801Aが更新されたチェーン803Aを完了すると、そのロックは解放され、プロセス801Bはチェーン803Aのロックを取得して更新を実行できる。データベースオブジェクト805Aと805Bは同じチェーンによってトラッキングされるため、更新を並行して行うことはできず、一方のプロセスが更新を実行するまで待機する必要がある。
【0066】
対照的に、プロセス801Aがチェーン803Aを更新している間、プロセス801Cはデータベースオブジェクト805Cにアクセスする。データベースオブジェクト805Cの使用状況はチェーン803Bによってトラッキングされているため、プロセス801Cはチェーン803B内のデータベースオブジェクト805Cのポジションを更新するためにチェーン803Cのロックを取得する必要がある。データベースオブジェクト805Cの使用状況は、データベースオブジェクト805Aの使用状況とは別のチェーンを使用してトラッキングされるため、チェーン803Aと803Bの更新を並行して行うことができ、システムのパフォーマンスを向上させることができる。
【0067】
上記の例では、それぞれのチェーン内でのデータベースオブジェクトのプロモート(promotion)を示しているが、他の実施例では、データベース変数の状態における他の変更によって、上記と同様のステップが発生してもよい。たとえば、チェーン803Aは新しいデータベースオブジェクトの追加によってロックされ、チェーン803Bはチェーン803B内のデータベースオブジェクトのプロモートを実行するためにロックされてもよい。
【0068】
図9を参照して、共有メモリを持つデータベースを含むコンピュータシステムの一実施形態のブロック図である。コンピュータシステム900は、902Aから902Dと指定された複数のワークステーションを含む。ワークステーションはネットワーク901を介して互いに結合され、907Aから907Cと指定された複数のストレージに接続される。一実施形態では、各ワークステーション902A-902Dは、例えば、一以上のプロセッサ、任意の種類のランダムアクセスメモリ(RAM)デバイスを含むローカルシステムメモリ、モニター、ネットワーク接続、マウス、キーボード、モニターなどの入力出力(I/O)手段(これらの多くは簡単化のために示されていない)を含む任意のスタンドアロンコンピューティングプラットフォームを代表することができる。一部の実施形態では、ワークステーション902A-902Dは、分散コンピューティング動作の実行に使用するために、サーバーファームまたはその他の計算リソースのコレクションに含まれる場合がある。
【0069】
ただし、
図9の実施形態では共通ネットワークに結合されているように描かれているが、他の実施形態では、ワークステーション902A-902Dは、複数のネットワークを介して互いに結合され、ストレージ907A-ストレージ907Cも同様である。なお、
図9の実施形態では4つのワークステーションを示しているが、他の実施形態では、任意の適切な数のワークステーションを採用することができる。
【0070】
一実施形態では、記憶装置907A-907Cは、ハードディスクシステム、光メディアドライブ、テープドライブ、ラムディスク記憶装置など、あらゆる種類の大容量記憶装置の代表となり得る。そのため、アプリケーション101を構成するプログラム命令は、いずれかのストレージ907A-907C内に格納され、実行中にいずれかのワークステーションのローカルシステムメモリにロードされる。様々な実施形態において、記憶装置907A-907Cは、直接使用することも、コンピュータシステム900から取り外すこともできるポータブル記憶媒体を含むことができる。このようなポータブル記憶媒体、ローカルシステムメモリ、大容量記憶装置は、非一時的なコンピュータ可読記憶媒体と呼ばれることがある。
【0071】
例として、
図9に示すように、アプリケーション101はストレージ907Aに格納され、データベース102はストレージ907Cに格納されていることが示されている。一実施形態では、アプリケーション101は、902A-902Dのいずれかのワークステーションによって実行されてもよい。アプリケーション101に関連するプログラム命令は、ストレージ907Aから直接実行することも、ワークステーション902Aから902Dのいずれかのローカルシステムメモリに転送して、その後実行することもできる。ワークステーション902A-902Dのワークステーション上の一以上のプロセッサは、アプリケーション101に関連付けられたプログラム命令を実行するか、または必要に応じてワークステーション902A-902Dの複数のワークステーション間に分散してプログラム命令を実行することができる。
【0072】
出願の主題の実現には、以下の実施例1-20が含まれるが、これに限定されない。
1. 共有メモリを管理するために、前記共有メモリに保存されているデータベースオブジェクトの使用をトラッキングする方法であって、
コンピュータシステムが、複数のチェーンを有するチェーンセットを保持することであって、複数のチェーンの各々はキャッシュに保存されたデータベースオブジェクトの順序付けを規定する、保持することと、
前記コンピュータシステムが、複数のデータベースオブジェクトの各状態をモニターすることと、
一データベースオブジェクトの状態が変化したとの判定に応じて、前記コンピュータシステムが、その一データベースオブジェクトに対応する複数のチェーンのうちの一チェーンを選択することと、
前記コンピュータシステムが、前記一チェーンを更新するが、更新中に前記複数のチェーンのうちの他のチェーンがアクセスされることを妨げない、更新することであって、前記更新することは、
前記一チェーンをロックすることと、
ロックされた前記一チェーンを変更して前記一データベースオブジェクトの変化した状態を反映することと、
更新後に前記一チェーンをアンロックすることとを含む
方法。
2. ロックされた一チェーンを変更することは、前記チェーンに前記一データベースオブジェクトを追加することを含む、実施例1の方法。
3. ロックされた一チェーンを変更することは、前記チェーンから前記一データベースオブジェクトを削除することを含む、実施例1の方法。
4. キャッシュに格納されるデータベースオブジェクトの順序は、少なくとも部分的に、データベースオブジェクトの相対的な使用頻度に基づく、実施例1の方法。
5. さらに、前記コンピュータシステムが、新しいチェーンが前記チェーンセットに追加されるとの決定に応じて、
前記チェーンセットをロックすることと、
前記新しいチェーンを前記チェーンセットに追加することと、
前記チェーンセットのアンロックすることとを含む、
実施例1の方法。
6. さらに、前記実行することが、前記チェーンセットに含まれるチェーンの数がしきい値より大きいとの判定に応じて行われ、前記ガーベージコレクションが前記チェーンセットをロックした後、前記チェーンセットをアンロックする前に実行される、実施例5の方法。
7. コンピュータシステムに動作を実行させることができるプログラミング命令が格納された、非一時的コンピュータ可読媒体であって、前記動作は、
コンピュータシステムが、複数のチェーンを有するチェーンセットを保持することであって、複数のチェーンの各々はキャッシュに保存されたデータベースオブジェクトの順序付けを規定する、保持することと、
前記コンピュータシステムが、複数のデータベースオブジェクトの各状態をモニターすることと、
一データベースオブジェクトの状態が変化したとの判定に応じて、前記コンピュータシステムが、その一データベースオブジェクトに対応する複数のチェーンのうちの一チェーンを選択することと、
前記コンピュータシステムが、前記一チェーンを更新するが、更新中に前記複数のチェーンのうちの他のチェーンがアクセスされることを妨げない、更新することであって、前記更新することは、
前記一チェーンをロックすることと、
ロックされた前記一チェーンを変更して前記一データベースオブジェクトの変化した状態を反映することと、
更新後に前記一チェーンをアンロックすることとを含む
非一時的コンピュータ可読媒体。
8. ロックされた一チェーンを変更することは、前記チェーンに前記一データベースオブジェクトを追加することを含む、実施例7の非一時的なコンピュータ可読記憶媒体。
9. ロックされた一チェーンを変更することは、前記チェーンから前記一データベースオブジェクトを削除することを含む、実施例7の非一時的なコンピュータ可読記憶媒体。
10. キャッシュに格納されるデータベースオブジェクトの順序は、少なくとも部分的に、データベースオブジェクトの相対的な使用頻度に基づく、実施例7の非一時的なコンピュータ可読記憶媒体。
11. さらに、前記コンピュータシステムが、新しいチェーンが前記チェーンセットに追加されるとの決定に応じて、
前記チェーンセットをロックすることと、
前記新しいチェーンを前記チェーンセットに追加することと、
前記チェーンセットのアンロックすることとを含む、実施例7の非一時的なコンピュータ可読記憶媒体。
12. さらに、前記実行することが、前記チェーンセットに含まれるチェーンの数がしきい値より大きいとの判定に応じて行われ、前記ガーベージコレクションが前記チェーンセットをロックした後、前記チェーンセットをアンロックする前に実行される、実施例11の非一時的なコンピュータ可読記憶媒体。
13. 複数のチェーンの第1のチェーンが、ソフトウェアアプリケーションの第1のリリースによって導入された識別子のセットに関連付けられた第1の複数のデータベースオブジェクトのセットの順序を規定し、複数のチェーンの第2のチェーンが、ソフトウェアアプリケーションの第1または第2のリリースによって導入された異なる識別子のセットに関連付けられた第2の複数のデータベースオブジェクトのセットの順序を規定する、実施例7の非一時的なコンピュータ可読記憶媒体。
14. コンピュータシステムであって、
動作中に命令を記憶する一以上のメモリと
動作中に一以上のメモリから命令を受け取り、その命令を実行してコンピュータシステムに次の動作を実行させる一以上の計算リソースとを有し、前記次の動作は、
コンピュータシステムが、複数のチェーンを有するチェーンセットを保持することであって、複数のチェーンの各々はキャッシュに保存されたデータベースオブジェクトの順序付けを規定する、保持することと、
前記コンピュータシステムが、複数のデータベースオブジェクトの各状態をモニターすることと、
一データベースオブジェクトの状態が変化したとの判定に応じて、前記コンピュータシステムが、その一データベースオブジェクトに対応する複数のチェーンのうちの一チェーンを選択することと、
前記コンピュータシステムが、前記一チェーンを更新するが、更新中に前記複数のチェーンのうちの他のチェーンがアクセスされることを妨げない、更新することであって、前記更新することは、
前記一チェーンをロックすることと、
ロックされた前記一チェーンを変更して前記一データベースオブジェクトの変化した状態を反映することと、
更新後に前記一チェーンをアンロックすることとを含む、
コンピュータシステム。
15. ロックされた一チェーンを変更することは、前記チェーンに前記一データベースオブジェクトを追加することを含む、実施例14のコンピュータシステム。
16. ロックされた一チェーンを変更することは、前記チェーンから前記一データベースオブジェクトを削除することを含む、実施例14のコンピュータシステム。
17. キャッシュに格納されるデータベースオブジェクトの順序は、少なくとも部分的に、データベースオブジェクトの相対的な使用頻度に基づく、実施例14のコンピュータシステム。
18. さらに、前記コンピュータシステムが、新しいチェーンが前記チェーンセットに追加されるとの決定に応じて、
前記チェーンセットをロックすることと、
前記新しいチェーンを前記チェーンセットに追加することと、
前記チェーンセットのアンロックすることとを含む、実施例14のコンピュータシステム。
19. さらに、前記実行することが、前記チェーンセットに含まれるチェーンの数がしきい値より大きいとの判定に応じて行われ、前記ガーベージコレクションが前記チェーンセットをロックした後、前記チェーンセットをアンロックする前に実行される、実施例18のコンピュータシステム。
20. 複数のチェーンの第1のチェーンが、ソフトウェアアプリケーションの第1のリリースによって導入された識別子のセットに関連付けられた第1の複数のデータベースオブジェクトのセットの順序を規定し、複数のチェーンの第2のチェーンが、ソフトウェアアプリケーションの第1または第2のリリースによって導入された異なる識別子のセットに関連付けられた第2の複数のデータベースオブジェクトのセットの順序を規定する、実施例14のコンピュータシステム。
【0073】
特定の実施形態は上述したが、これらの実施形態は、特定の特徴に関して単一の実施形態のみが記載されている場合であっても、本開示の範囲を制限することを意図していない。本開示で提供される特徴の例は、別段の記載がない限り、制限的ではなく説明的であることを意図している。上記の説明は、本開示の利益を有する当業者に明らかなような代替案、修正案、および同等物を網羅することを意図している。
【0074】
本開示の範囲は、ここで(明示的に、または暗黙的に)開示された特徴または特徴の組み合わせ、またはその一般化を含み、それがここで扱われる問題のいずれかまたはすべてを軽減するかどうかは問わない。したがって、この出願(又はその優先権を主張する出願)の手続中に、このような特徴の組み合わせに対して新たなクレームを作成することができる。特に、添付の請求項を参照して、従属請求項の特徴を独立請求項の特徴と組み合わせることができ、それぞれの独立請求項の特徴を、添付の請求項に列挙された特定の組み合わせだけでなく、任意の適切な方法で組み合わせることができる。
【外国語明細書】