(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-10-18
(45)【発行日】2023-10-26
(54)【発明の名称】自動データベースクエリ負荷評価および適応処理
(51)【国際特許分類】
G06F 16/2453 20190101AFI20231019BHJP
【FI】
G06F16/2453
(21)【出願番号】P 2020549707
(86)(22)【出願日】2019-03-08
(86)【国際出願番号】 US2019021287
(87)【国際公開番号】W WO2019221806
(87)【国際公開日】2019-11-21
【審査請求日】2022-02-16
(32)【優先日】2018-05-15
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】シェルドン,スティーブン・ピィ
【審査官】三橋 竜太郎
(56)【参考文献】
【文献】特開2009-211588(JP,A)
【文献】特開2016-071837(JP,A)
【文献】特開2001-084257(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
コンピューティングシステムであって、
少なくとも1つのメモリに接続された少なくとも1つのプロセッサと
非一時的なコンピュータ可読媒体に格納されて命令を含む分析モジュールとを備え、前記命令は、前記少なくとも1つのプロセッサによって実行されると、前記コンピューティングシステムに、
少なくとも前記プロセッサが、データベース管理システムによって実行されるクエリが完了閾値を超える実行時間を有すると判定することと、
少なくとも前記プロセッサが、前記クエリに対応するフィンガープリントをデータ構造に格納することと、
少なくとも前記プロセッサが、前記クエリの前記実行
時間が前記完了閾値を超えることに応答して、評価のために、フィンガープリントにフラグを立てることと、
前記フィンガープリントに対応する後続のクエリ要求の受信に応答して、かつ、前記フィンガープリントにフラグが立てられていることに基づいて、前記フィンガープリントの統計を分析して、前記後続のクエリ要求の実行が、前記データベース管理システムに許容できない悪影響をもたらすか否かを判断することと、
少なくとも前記プロセッサが、前記分析の結果に基づいて、前記フィンガープリントを複数の異なるクエリクラスのうちの1つに分類するために、前記データ構造を修正することと、
少なくとも前記プロセッサが、前記フィンガープリントの分類に基づいて、将来のクエリ要求の実行を制御することと、を実行させる、コンピューティングシステム。
【請求項2】
前記分析モジュールは命令をさらに含み、前記命令は、前記少なくとも1つのプロセッサによって実行されると、前記コンピューティングシステムに、
前記分析の結果に基づいて、前記フィンガープリントを(i)許容されるクエリクラス、または(ii)ブロックされるクエリクラスに割り当てることによって、前記フィンガープリントを分類させ、
(i)前記フィンガープリントが前記許容されるクエリクラスに割り当てられる場合、前記統計を繰り返し分析することなく、前記将来のクエリは完了するように実行され、(ii)前記フィンガープリントが前記ブロックされるクエリクラスに割り当てられる場合、前記将来のクエリは実行されないようにブロックされる、請求項1に記載のコンピューティングシステム。
【請求項3】
前記統計は、クエリ説明データまたはデータベースサーバハンドラ統計を含む、請求項1または2に記載のコンピューティングシステム。
【請求項4】
分析されるべき前記統計は、取得するためにアクティブでないデータベースリソースの利用を必要とするデータベースパフォーマンス統計を除外する、請求項1または2に記載のコンピューティングシステム。
【請求項5】
前記複数の異なるクエリクラスは、第1のデータベースに対して実行されるクエリに対応するフィンガープリントのための、許容されるクエリクラスを含む、請求項1~4のいずれかに記載のコンピューティングシステム。
【請求項6】
前記複数の異なるクエリクラスは、前記第1のデータベースとは異なる第2のデータベースに対して実行されるクエリに対応するフィンガープリントのための、リダイレクトされたクエリクラスをさらに含む、請求項5に記載のコンピューティングシステム。
【請求項7】
少なくとも前記プロセッサによって実行されると、前記コンピューティングシステムに、
前記第1のデータベースに対して前記クエリの実行を引き起こさせ、
前記リダイレクトされたクエリクラスにおける前記フィンガープリントの分類に基づいて、前記第2のデータベースに対する前記将来のクエリの実行を引き起こさせる、命令をさらに含む、請求項6に記載のコンピューティングシステム。
【請求項8】
前記分析モジュールは命令をさらに含み、当該命令は、前記少なくとも1つのプロセッサによって実行されると、前記コンピューティングシステムに、
評価のためにフラグが立てられている前記フィンガープリントをもたらした前記クエリの実行に応答して、前記フィンガープリントを分類するための統計の分析を妨げさせる、請求項1~7のいずれかに記載のコンピューティングシステム。
【請求項9】
コンピュータで実施される方法であって、
データベース管理システムによって実行されるクエリが、完了閾値を超える実行時間を有することを判断することと、
前記クエリに対応するフィンガープリントをデータ構造に格納することと、
前記クエリの実行
時間が前記完了閾値を超えることに応答して、評価のために前記フィンガープリントにフラグを立てることと、
前記フィンガープリントに対応する後続のクエリの要求の受信に応答して、かつ、前記フィンガープリントにフラグが立てられていることに基づいて、前記フィンガープリントの統計を分析して、前記後続のクエリの要求の実行が、前記データベース管理システムに許容できない悪影響をもたらすか否かを判断することと、
前記分析の結果に基づいて、前記フィンガープリントを複数の異なるクエリクラスのうちの1つに分類するために、データ構造を修正することと、
前記フィンガープリントの前記分類に基づいて、将来のクエリの要求の実行を制御することと、を含む、方法。
【請求項10】
前記フィンガープリントは、前記分析の結果に基づいて、当該フィンガープリントを(i)許容されるクエリクラス、または(ii)ブロックされるクエリクラスに割り当てることによって分類され、
(i)前記フィンガープリントが前記許容されるクエリクラスに割り当てられる場合、前記統計を繰り返し分析することなく、前記将来のクエリは完了するように実行され、(ii)前記フィンガープリントが前記ブロックされるクエリクラスに割り当てられる場合、前記将来のクエリは実行されないようにブロックされる、請求項9に記載の方法。
【請求項11】
前記
許容されるクエリクラス内の前記フィンガープリントは、第1のデータベースに対して実行されるクエリに対応し、前記異なるクエリクラスは、前記第1のデータベースとは異なる第2のデータベースに対して実行されるように指定されたクエリに対応するフィンガープリントのためにリダイレクトされたクエリクラスをさらに含む、請求項10に記載の方法。
【請求項12】
前記将来のクエリの実行を制御することは、
前記フィンガープリントに対応する前記クエリの実行を前記第1のデータベースに対して完了させることと、
前記リダイレクトされたクエリクラスにおける前記フィンガープリントの前記分類に基づいて、前記フィンガープリントに対応する前記将来のクエリを前記第2のデータベースに対して実行させることとを含む、請求項11に記載の方法。
【請求項13】
請求項8~12のいずれかに記載の方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【背景技術】
【0001】
例えば、オラクル・サービス・クラウドのようなクラウドベースのアプリケーションは、リモートクライアント端末のユーザがアプリケーションオブジェクトに対して実行されるカスタムクエリを指定することを可能にするアプリケーションプログラミングインターフェイス(「API」)を含む。当該リモートクライアント端末がクエリを開始することを可能にする、RightNow Object Query Language(「ROQL」)のようなクエリツールは、ユーザが作成することができるクエリに、ほとんど前向きでないチェックまたは制限を課す。ユーザが定義したクエリに対する前向きの制約の欠如のために、非効率的であるか、または不十分に結合された、問題のあるクエリが定義され、または、呼び出され得る。そのような問題のあるクエリの実行は、かなりのネットワークおよびデータベース管理リソース(CPU時間、データベース接続、ネットワーク帯域幅、ネットワーク通信、メモリ等)を消費する。問題のあるクエリを実行するために消費される重要なリソースは、クエリを開始したクライアント端末、およびクラウド環境においてアプリケーションオブジェクトにアクセスする企業エンティティにおける他のクライアント端末に対するアプリケーションオブジェクトのパフォーマンスに悪影響を及ぼす。悪影響は、クラウドアプリケーション環境において影響を受けるリソースを共有する異なるエンティティにおけるクライアント端末にさえ影響を及ぼし得る。
【発明の概要】
【発明が解決しようとする課題】
【0002】
問題のあるクエリの実行を制限する試みは、許容されるクエリの最大許容ランタイムの確立に関与してきた。完了することなく最大許容ランタイムを超えるランタイムを有する全てのクエリは終了される。そのようなアプローチは、その1つの問題のあるクエリを実行する影響を制限する。しかしながら、パフォーマンスの影響は、問題のあるクエリのランタイムが当該最大許容ランタイムに達するまで、ある期間、依然として経験され得る。同じ問題のあるクエリを繰り返し実行すると、アプリケーションオブジェクトは、当該問題のあるクエリが呼び出された時に当該アプリケーションオブジェクトが最初に経験したのと同じ悪影響を受ける。さらに、当該問題のあるクエリは完了する前に終了されるので、当該クエリを呼び出したクライアント端末は、アプリケーションオブジェクトのパフォーマンスに悪影響を及ぼすにもかかわらず、当該クエリの結果を受信しない。
【課題を解決するための手段】
【0003】
概要
一実施形態では、非一時的なコンピュータ可読媒体はコンピュータが実行可能な命令を記憶し、当該命令は、コンピューティングシステムの少なくともプロセッサによって実行されると、当該コンピューティングシステムに、少なくともプロセッサによって、データベース管理システムによって実行されるクエリが完了閾値を超える実行時間を有すると判断させ、少なくとも当該プロセッサによって、当該クエリに対応するフィンガープリントをデータ構造に格納させ、少なくとも当該プロセッサによって、クエリの実行期間が完了閾値を超えることに応答して、評価のために、フィンガープリントにフラグを立てさせ、当該フィンガープリントに対応する後続のクエリの要求の受信に応答して、かつ、フラグが立てられているフィンガープリントに基づいて、当該フィンガープリントの統計を分析して、当該後続のクエリの要求の実行が、データベース管理システムに許容できない悪影響をもたらすか否かを判断させ、少なくとも当該プロセッサによって、当該分析の結果に基づいて、当該フィンガープリントを複数の異なるクエリクラスのうちの1つに分類するために、当該データ構造を修正させ、少なくとも当該プロセッサによって、フィンガープリントの分類に基づいて、将来のクエリの要求の実行を制御させる。
【0004】
別の実施形態によれば、コンピュータが実行可能な命令は、少なくとも前記プロセッサによって実行されると、前記コンピューティングシステムに、分析の結果に基づいて、当該フィンガープリントを(i)許容されるクエリクラス、または(ii)ブロックされるクエリクラスに割り当てることによって、フィンガープリントを分類させる命令をさらに含む。当該フィンガープリントが許容されるクエリクラスに割り当てられる場合、当該将来のクエリは、統計を繰り返し分析することなく、完了するように実行され、当該フィンガープリントがブロックされるクエリクラスに割り当てられる場合、当該将来のクエリは実行されることからブロックされる。
【0005】
別の実施形態によれば、当該統計は、クエリ説明データまたはデータベースサーバハンドラ統計を含む。
【0006】
別の実施形態によれば、分析されるべき統計は、取得するためにアクティブでないデータベースリソースの利用を必要とするデータベースのパフォーマンスの統計を除外する。
【0007】
別の実施形態によれば、当該複数の異なるクエリクラスは、第1のデータベースに対して実行されるべきクエリに対応するフィンガープリントのための許容されるクエリクラスを含む。
【0008】
別の実施形態によれば、当該複数の異なるクエリクラスは、当該第1のデータベースとは異なる第2のデータベースに対して実行されるべきクエリに対応するフィンガープリントのためのリダイレクトされたクエリクラスをさらに含む。
【0009】
別の実施形態によれば、コンピュータが実行可能な命令は少なくとも当該プロセッサによって実行されると、当該コンピューティングシステムに、当該クエリを第1のデータベースに対して実行させ、当該リダイレクトされたクエリクラスにおけるフィンガープリントの分類に基づいて、当該第2のデータベースに対して当該将来のクエリを実行させる命令をさらに含む。
【0010】
別の実施形態によれば、コンピュータが実行可能な命令少なくとも当該プロセッサによって実行されると、評価のためにフラグが立てられているフィンガープリントをもたらしたクエリの実行に応答して、当該フィンガープリントの分類のために、当該統計の分析を当該コンピューティングシステムに阻止させる命令をさらに含む。
【0011】
別の実施形態によれば、コンピューティングシステムは、メモリに接続されたプロセッサと、非一時的なコンピュータ可読媒体に格納され、かつ、命令で構成された補正モジュールとを備え、当該命令は、当該プロセッサによって実行されると、当該プロセッサに複数のリモートデバイスからアプリケーションアクティビティデータを受信させ、当該アプリケーションアクティビティデータを分析して、当該複数のリモートデバイスの各々に関連付けられるアプリケーションアクティビティの組を決定させ、当該アプリケーションアクティビティの組を分析して、当該複数のリモートデバイスのうちのリモートデバイスの組に関連付けられる1つまたは複数のチャレンジを決定させ、1つまたは複数のチャレンジの各々に対する修正アクションを決定させ、当該修正アクションに基づいて、一組のリモートデバイスのための修正アクションデータ構造を生成させる。
【0012】
別の実施形態によれば、コンピューティングシステムは、少なくとも1つのメモリに接続された少なくとも1つのプロセッサと、非一時的なコンピュータ可読媒体に格納され、かつ、命令を含む分析モジュールとを備え、当該命令は、当該少なくとも1つのプロセッサによって実行されると、当該コンピューティングシステムに、少なくともプロセッサによって、データベース管理システムによって実行されるクエリが完了閾値を超える実行時間を有すると判定させ、少なくとも前記プロセッサによって、当該クエリに対応するフィンガープリントをデータ構造に格納させ、少なくとも当該プロセッサによって、当該クエリの実行期間が完了閾値を超えることに応答して、評価のためにフィンガープリントにフラグを立てさせ、当該フィンガープリントに対応する後続のクエリの要求の受信に応答して、かつ、当該フラグが立てられているフィンガープリントに基づいて、当該フィンガープリントの統計を分析して、当該後続のクエリの要求の実行が、当該データベース管理システムに許容できない悪影響をもたらすか否かを判断させ、少なくとも当該プロセッサによって、当該分析の結果に基づいて、当該フィンガープリントを複数の異なるクエリクラスのうちの1つに分類するために、当該データ構造を修正させ、少なくとも当該プロセッサによって、当該フィンガープリントの分類に基づいて、将来のクエリの要求の実行を制御させる。
【0013】
別の実施形態によれば、分析モジュールは命令をさらに含み、当該命令は、当該少なくとも1つのプロセッサによって実行されると、当該コンピューティングシステムに、分析の結果に基づいてフィンガープリントを(i)許容されるクエリクラス、または(ii)ブロックされるクエリクラスに割り当てることによって、当該フィンガープリントを分類する。当該フィンガープリントが許容されるクエリクラスに割り当てられる場合、将来のクエリは、統計を繰り返し分析することなく完了するように実行され、当該フィンガープリントがブロックされるクエリクラスに割り当てられる場合、将来のクエリは、実行されることからブロックされる。
【0014】
別の実施形態によれば、当該統計は、クエリ説明データまたはデータベースサーバハンドラ統計を含む。
【0015】
別の実施形態によれば、分析されるべき統計は、取得するためにアクティブでないデータベースリソースの利用を必要とするデータベースパフォーマンス統計を除外する。
【0016】
別の実施形態によれば、当該複数の異なるクエリクラスは、第1のデータベースに対して実行されるべきクエリに対応するフィンガープリントのための許容されるクエリクラスを含む。
【0017】
別の実施形態によれば、当該複数の異なるクエリクラスは、当該第1のデータベースとは異なる第2のデータベースに対して実行されるべきクエリに対応するフィンガープリントのためのリダイレクトされたクエリクラスをさらに含む。
【0018】
別の実施形態によれば、当該分析モジュールは命令をさらに含み、当該命令は、当該少なくとも1つのプロセッサによって実行されると、当該コンピューティングシステムに、当該第1のデータベースに対する当該クエリの実行と、当該リダイレクトされたクエリクラスにおけるフィンガープリントの分類に基づいて、当該第2のデータベースに対する当該将来のクエリの実行とを、引き起こさせる。
【0019】
別の実施形態によれば、当該分析モジュールは命令をさらに含み、当該命令は、当該少なくとも1つのプロセッサによって実行されると、当該コンピューティングシステムに、評価のためにフラグが立てられたフィンガープリントをもたらしたクエリの実行に応答して、当該フィンガープリントを分類するための統計の分析を妨げさせる。
【0020】
別の実施形態によれば、コンピュータで実施される方法は、データベース管理システムによって実行されるクエリが、完了閾値を超える実行時間を有するということを判断することと、当該クエリに対応するフィンガープリントをデータ構造に格納することと、当該クエリの実行期間が完了閾値を超えることに応答して、評価のためにフィンガープリントにフラグを立てることと、当該フィンガープリントに対応する後続のクエリの要求の受信に応答して、かつ、当該フィンガープリントがフラグを立てられていることに基づいて、当該フィンガープリントの統計を分析して、当該後続のクエリの要求の実行が、当該データベース管理システムに許容できない悪影響をもたらすか否かを判断することと、当該分析の結果に基づいて当該フィンガープリントを複数の異なるクエリクラスのうちの1つに分類するために、当該データ構造を修正することと、当該フィンガープリントの分類に基づいて当該将来のクエリの要求の実行を制御することとを含む。
【0021】
別の実施形態によれば、フィンガープリントは、当該フィンガープリントを分析の結果に基づいて、(i)許容されるクエリクラス、または、(ii)ブロックされるクエリクラスに割り当てることによって、分類される。当該フィンガープリントが当該許容されるクエリクラスに割り当てられる場合、当該将来のクエリは、当該統計を繰り返し分析することなく完了するように実行され、当該フィンガープリントが当該ブロックされるクエリクラスに割り当てられる場合、当該将来のクエリは実行されることからブロックされる。
【0022】
別の実施形態によれば、当該許容されるクエリクラス内のフィンガープリントは、第1のデータベースに対して実行されるべきクエリに対応し、当該異なるクエリクラスは、当該第1のデータベースとは異なる第2のデータベースに対して実行されるように指定されたクエリに対応するフィンガープリントのためのリダイレクトされたクエリクラスをさらに含む。
【0023】
別の実施形態によれば、当該将来のクエリの実行を制御することは、当該フィンガープリントに対応する当該クエリの実行を当該第1のデータベースに対して完了させることと、当該リダイレクトされたクエリクラスにおける当該フィンガープリントの分類に基づいて、当該第2のデータベースに対して当該フィンガープリントに対応する当該将来のクエリを実行させることとを含む。
【0024】
上記の概要は、本明細書で説明されるシステムおよび/または方法のいくつかの態様の基本的な理解を提供するために、簡略化された概要を示す。この概要は、本明細書で説明されるシステムおよび/または方法の広範な概観ではない。極めて重要な/必須の要素を識別すること、または、そのようなシステムおよび/または方法の範囲を描写することは意図されていない。その唯一の目的は、後に提示される、より詳細な説明の前置きとして、いくつかの概念を簡略化された形で提示することである。
【図面の簡単な説明】
【0025】
【
図1】効率的に利用される計算リソースおよびネットワークリソースに対するデータベースクエリ負荷を自動的に評価し、適応的に処理するクラウドベースのデータベースシステムの一実施形態を例示する図である。
【
図2A】クエリ負荷の評価および適応的処理に関連付けられる方法の一実施形態をグラフで示す流れ図を例示する図である。
【
図2B】クエリ負荷の評価および適応的処理に関連付けられる方法の一実施形態をグラフで示す流れ図を例示する図である。
【
図2C】クエリ負荷の評価および適応的処理に関連付けられる方法の一実施形態をグラフで示す流れ図を例示する図である。
【
図2D】クエリ負荷の評価および適応的処理に関連付けられる方法の一実施形態をグラフで示す流れ図を例示する図である。
【
図2E】クエリ負荷の評価および適応的処理に関連付けられる方法の一実施形態をグラフで示す流れ図を例示する図である。
【
図2F】クエリ負荷の評価および適応的処理に関連付けられる方法の一実施形態をグラフで示す流れ図を例示する図である。
【
図3】開示されるシステムおよび/または方法の実施形態で構成されたコンピューティングシステムの一実施形態を例示する図である。
【発明を実施するための形態】
【0026】
詳細な説明
本明細書に組み込まれ、その一部を構成する添付の図面は、本開示の様々なシステム、方法、および他の実施形態を示す。図面において例示された要素の境界(例えば、ボックス、ボックスのグループ、または他の形状)は、当該境界の一実施形態を表すことが理解されるであろう。ある実施形態では、1つの要素を複数の要素として実施されることができ、または、複数の要素は1つの要素として実施され得る。ある実施形態では、別の要素の内部構成要素として示される要素は、外部構成要素として実施されてもよく、逆もまた同様である。さらに、要素は、一定の縮尺で描かれていない場合がある。
【0027】
本明細書では、クラウドベースのアプリケーションオブジェクトのパフォーマンスを維持するために、データベースクエリ負荷の自動評価およびクエリの適応処理を提供するシステムおよび方法が説明される。例えば、オラクルサービスクラウドのようなクラウドベースのアプリケーションは、リモートクライアント端末のユーザがアプリケーションオブジェクトに対して実行されるべきカスタムクエリを指定することを可能にするアプリケーションプログラミングインターフェイス(「API」)を含む。当該リモートクライアント端末がクエリを開始することを可能にする、RightNow Object Query Language(「ROQL」)のようなクエリツールは、ユーザが作成することができるクエリに、前向きのチェックまたは制限を殆ど課さない。結果として、幾つかの問題のあるクエリの実行が、アプリケーションオブジェクトのパフォーマンスに重大な影響を与える大きな負荷をデータベースに与えることは避けられない。
【0028】
問題のあるクエリをブロックする以前の試みは、実行されることからブロックされるべきクエリのクラスを構成する、問題のあるクエリのいわゆる「ブラックリスト」を定義するデータ構造にそのようなクエリを追加することを伴ってきた。ブラックリストされたクエリの呼び出しは、完了するまでに時間がかかりすぎるため、実行からブロックされることによって処理される。しかしながら、問題のあるクエリが完了するまでに時間を要したという唯一の理由のためにブラックリストにクエリを追加することは、柔軟性に欠け、許容できない数の「誤検出」をもたらす。誤検出は、閾値ランタイムを超えるにもかかわらず、クエリを完了するのに必要な延長されたランタイムの根本原因ではないクエリである。結局、クエリのランタイムが当該閾値ランタイムを超えさせ得るクエリには無関係な多くの要因(例えば、ネットワークトラフィック、同時データベース接続の数など。)がある。
【0029】
ブラックリストに付加される誤検出の数を低減するための別の以前の試みとして、いわゆる「ホワイトリスト」によって定義される別のクラスの許容されるクエリが作成されている。当該ホワイトリストは、リモートクライアント端末によって呼び出されると完了するまで実行される許容されるクエリの集合を含む。ホワイトリストに追加されるために、クエリは、クエリ自体の態様がアプリケーションオブジェクトのパフォーマンスに許容できない悪影響を与えるか否かを判定するために分析されるべきである。しかしながら、すべてのクエリを分析することは、データベースおよびネットワーク計算リソースを不必要に消費し、そして、緩和されるために求められるパフォーマンスに非常に悪影響をもたらし得る。例えば、一度だけ呼び出されるワンオフクエリは、当該ワンオフクエリをブラックリストまたはホワイトリストに追加すべきか否かを判定するために、分析される。計算およびネットワークリソースは、当該評価を実行するために消費され、したがって、当該アプリケーションオブジェクトのパフォーマンスに悪影響を及ぼす。しかしながら、当該ワンオフクエリは決して再び呼び出されないため、当該分析を実行する利点は、将来の悪影響を弱めるために実現されないであろう。
【0030】
さらに、従来の態様で柔軟性に欠けたブラックリストおよびホワイトリスト構造を使用することは、当該クエリ自体のパラメータに無関係なデータベースの変更または他の変更に適切に適合し得ない。そのような変更は、当該クエリが以前に分析されホワイトリストに登録されていても、当該アプリケーションオブジェクトのパフォーマンスに対する当該クエリの悪影響を変更し得る。例えば、データベース内のデータが経時的に進化する(例えば、サイズが劇的に増加する)か、またはデータベースのスキーマが変化すると、ホワイトリストに登録されたクエリのその後の呼び出しは、当該アプリケーションオブジェクトに対して許容できない悪影響を引き起こし得る。クエリのそのような将来の呼び出しを処理することに対する適応アプローチは、クエリが分析されて分類された後に生じるそのような変化の影響を認識するべきである。そのような変化を認識することに応答して、当該システムおよび当該方法の適応的な性質は、当該クエリの将来の呼び出しから生じ得るかもしれない悪影響に対処するために、影響を受けたクエリの分類を自動的に更新することができる。
【0031】
本開示は、データベースクエリを分析するための、および、システムが疑わしいと思うクエリの実行が当該システムに大きな負荷をもたらすことを制御するための、システムおよび方法を含む。一実施形態では、疑わしいと識別されたクエリは、当該システムに悪影響を及ぼすと評価されかつ、見なされるフィンガープリントを有するクエリの次の又は後の実行に応答して、分類される。当該クエリの将来の実行は、当該分類(例えば、ブラックリスト分類)に基づいて制御される。本システムおよび方法は、クエリが完了するためにちょうど経過した時間を超えるメトリックを使用して、そのクエリがブラックリストに入れるか、そうでなければ、分類されるべきか否かを決定する。一実施形態によれば、本システムおよび方法は、クエリが最初に呼び出されるときに当該クエリを実行するのに必要な時間を使用して、クエリに関連付けられたフィンガープリントを有する当該クエリが、適合するフィンガープリントを有するクエリの後の呼び出しに応答して分析されるべきか否かを決定する。そのような分析は、複数の同時のユーザを有し、通信ネットワークを介してアクセス可能なアプリケーションオブジェクトのパフォーマンスに対するフィンガープリントを有するクエリの実行の負荷および影響を評価する。初めて呼び出されたクエリ(または、第2、第3、第4のような呼び出しのような他の早期のインスタンス)の持続時間が完了閾値時間を超える場合、当該クエリフィンガープリントは、データ構造(例えば、分析を保留しているクエリのテーブル)における評価のために指定される。クエリフィンガープリントは、当該クエリフィンガープリントに対応するクエリが実行されることが許可されるか、または、当該クエリの将来の呼び出しに応答してブロックされるべきか否かを決定するために、保留中の評価としてデータ構造においてフラグが立てられ、またはそうでなければ、指定され得る。
【0032】
ワンオフクエリについてフィンガープリントを分析することに起因するであろうアプリケーションオブジェクトへの悪影響を緩和するために、最初の呼び出しに応答して実行されるクエリは、たとえ当該クエリが完了閾値時間を超えても、完了まで実行される。完全に完了したクエリの結果は達成され得、完了の通知は、任意に、インターネット、プライベートネットワーク、または他の適切な通信ネットワークのような通信ネットワークを介して、クライアント端末に返され得る。しかしながら、アプリケーションオブジェクトまたはシステムのパフォーマンスに対するクエリの影響を判定するための当該クエリフィンガープリントの分析は、当該クエリが呼び出された初回に応答して実行されず、その結果、クエリのフィンガープリントが評価のために指定される。
【0033】
フラグが立てられたか、さもなければ評価を必要とするとして指定されたフィンガープリントを含む2回目の又は後続のクエリが受信されることに応答して、分析モジュールは、利用可能な情報を使用して、当該フィンガープリントに対応するクエリ負荷を評価する。利用可能な情報は、例えば、クエリ説明データ、および、(本明細書では「ハンドラ統計」と呼ばれる)データベース管理サーバハンドラ統計のような任意の低オーバーヘッドの情報を含み得る。このような利用可能な情報は、データを読み出し、および/または、当該データをデータベースに書き込む目的で、当該データベースの標準的な管理を通じて生成される。当該クエリ説明およびハンドラ統計は、そのようなデータが特に当該データを収集する目的のためにデータベースリソース(例えば、ネットワーク通信、データベースパフォーマンス統計を測定するのに必要な内部機器など)のアクティブ化を必要とすることなく、当該分析モジュールに容易に利用可能であるので、利用できる。データベースパフォーマンスを測定するために、このようなデータベースリソースを特にアクティブ化することは、それ自体が本システムに付加的な負荷を課すことになり、これは緩和されることが求められる。したがって、クエリを実行するためのデータベースの標準動作の結果として利用できない、別々に測定されたデータベースパフォーマンス統計は、任意に、考慮から除外され得る。
【0034】
動作データベース内のデータの特定の固定されたセットに対するクエリの場合、当該クエリのためのクエリ説明データおよびハンドラ統計は、一般に、当該クエリの経過時間と比較して一定である。クエリの経過時間は、クエリが実行される時点におけるデータベースのロードのような、当該クエリ自体とは無関係な因子に依存して、同じクエリの異なる呼び出しについて異なり得る。したがって、クエリ説明データおよびハンドラ統計は、クエリフィンガープリント自体を利用するクエリによって課される真のリソース負荷を決定するためにクエリフィンガープリントを分析する際に適切な考慮事項であり、したがって、そのようなクエリがアプリケーションオブジェクトに及ぼすであろう影響である。本システムおよび方法は、閾値と比較したクエリの実行の経過時間を、おそらくブラックリストに登録されるべきクエリフィンガープリントを評価するためのトリガとして使用するが、それらの経過時間は、クエリフィンガープリントを実際にブラックリストに登録するべきか否かを決定する際における唯一の決定因子ではない。代わりに、説明データおよびハンドラ統計は、データベースまたは当該データベース内のデータに変更がない場合に当該フィンガープリントについて一貫性がある分析を行うために使用される。分析の結果はまた、クエリが運用データベースに対して又は報告データベースに対して実行されるべきかに関わらず同じとなるであろう。
【0035】
別の実施形態によれば、クエリによって課される負荷または影響を示す他の情報は、分析の一部と見なされ得る。例えば、MySQLパフォーマンス情報は、クエリの分析中に考慮される因子であり得る。「show profile」またはperformance_schemaは有用な情報を含む。しかし、これらのツールは、クエリを実行するために既に起動されていない内部機器を起動することによってオーバーヘッドを導入するが、データを収集するためにのみ、そのようなデータは、任意に当該分析から除外され得る。
【0036】
クエリ説明およびハンドラ統計のような利用可能な情報の考慮は、例えば、本システムおよび方法がデータベースの変化に適合することも可能にする。例えば、データボリューム、テーブル統計、インデックスなどに対する変更は、そのような利用可能な情報に反映されるであろう。本システムおよび方法は、クエリの実行における傾向に基づいてそのような変化を検出でき、そして、データ構造において、再評価のために変更されたデータの影響を受けるクエリフィンガープリントを指定することができる。さらに、定義された数の呼び出しが発生した後に更新されなかった古いクエリもまた、データ構造において再評価のためにフラグが立てられるか、またはそうでなければ、指定され得る。本明細書で説明されるクエリフィンガープリントの分析は、アプリケーションオブジェクトに対するクエリの負荷および潜在的な悪影響を再評価するために、再び、変更されたデータに基づいて実行され得る。
【0037】
クエリフィンガープリントの評価の結果に基づいて、分析モジュールは、クエリフィンガープリントの分類を、複数の異なるクエリクラスのうちの1つに含めるようにデータ構造を修正する。例えば、当該異なるクエリクラスは、少なくとも、(i)後に呼び出されるときに実行のために指定されたクエリを含む許容されるクエリクラス(例えば、ホワイトリスト)、および、(ii)後に呼び出されるときに実行されないブロックされるクエリクラス(例えば、ブラックリスト)を含む。
【0038】
システムは、クエリフィンガープリントの分類を少なくとも部分的に使用して、同じまたは同様のクエリがその後に実行のために受信されたことに応答して、そのようなフィンガープリントを有するクエリの実行を制御する。許容されるクエリクラスに分類されたクエリフィンガープリントを有する後続のクエリは、運用データベースに対して実行され得る。ブロックされるクエリクラスに分類されるクエリフィンガープリントを有するクエリは、そのようなクエリの将来の呼び出しに応答して実行からブロックされ得る。例えば、同じまたは同様のクエリ(同じフィンガープリントを含むクエリ)が実行のために提出され、ブロックされたクラスにあると検出された場合、システムはクエリの実行をブロックする。したがって、システムは、ブロックされるクエリを実行することによって使用されるであろう大量のコンピューティングリソースの消費を回避する。
【0039】
代替の実施形態によれば、クエリフィンガープリントは、本明細書ではリダイレクトされたクエリクラスと呼ばれる第3のクラスに分類され得る。当該リダイレクトされたクエリクラスにクエリフィンガープリントを有するクエリは、アプリケーションオブジェクトに悪影響を及ぼすが、ブロックされるクエリクラスにクエリフィンガープリントを有するクエリによって引き起こされる悪影響ほど厳しい悪影響を及ぼさない。リダイレクトされたクエリクラスにフィンガープリントを有するクエリは、例えば報告データベースのような、動作データベースとは異なる別個の第2のデータベースに対して実行される。したがって、動作データベースのパフォーマンスは、アプリケーションオブジェクトに顕著な悪影響を及ぼすクエリをブロックすることによって維持され得る。リダイレクトされたクエリクラスのクエリフィンガープリントを有するクエリは、その中程度の悪影響にもかかわらず、報告データベースに対して実行され得る。
【0040】
図1を参照すると、計算リソースおよびネットワークリソースを効率的に利用するためにデータベースのクエリ負荷を自動的に評価し、適応的に取り扱うことに関連付けられるクラウドベースのデータベースシステム100の一実施形態が示されている。データベースシステム100は、通信ネットワーク120を介して複数のクライアント端末105、110、115と通信するように動作可能に接続されている。クライアント端末105、110、115は、クエリのためのユーザ定義パラメータを受信し、データベース125に対して当該クエリをリモートで呼び出すことができる。クエリの呼び出しは、データベースシステム100が、1または複数のクライアント端末105、110、115によって送信されたクエリの実行に対する要求を受信することを指す。データベース125は、データベースシステム100にホストされるか関連付けられたクラウドベースのアプリケーションオブジェクトにアクセス可能である。
【0041】
一実施形態によれば、クライアント端末105、110、115またはデータベースシステム100は、例えば、
図3を参照して例示および説明されるように、コンピューティングデバイス300であり得る。例えば、データベースシステム100は、クエリ実行エンジン130を含む。クエリ実行エンジン130は、ユーザが定義したクエリのパラメータを受信して、当該受信したパラメータに基づいて、例えば動作データベース125のようなデータベースに対して実行されるべきクエリのための説明プランを生成するように、動作可能である。説明プランは、データベース内のデータにアクセスするために使用される一組の順序付けられた実行ステップを含む。各実行ステップは、選択タイプ(例えば、SIMPLE、PRIMARY、UNIONなど)、結合タイプ(例えば、CONST、REF、RANGEなど)、テーブル名、および、任意に、当該クエリの他の態様に関する情報を有する。実行エンジン130は、クエリの実行プランを決定し、「explain」文の呼び出しに応答してのようにそうするように指示されたときに、当該実行プランを説明プランに定義する。
【0042】
説明プランに含まれる情報は、本明細書において「フィンガープリント」または「クエリフィンガープリント」と称されるクエリの一般的な定義に含まれ得る。クエリのフィンガープリントは、元のクエリの「正規化された」または「包括的な」署名から構成される。例えば、呼び出されたクエリに固有の値は署名から除外され、クエリトークンは小文字に変換され、標準の別名は署名に適用される、等である。結果は、一般的な又は標準化された用語で表される、当該クエリの機能的態様の包括的な記述である。署名の包括的な記述は、呼び出されたクエリに特有ではなく、異なるクエリの構造を表し得る。例えば、以下のクエリ、すなわち、
SELECT i.id FROM incidents i WHERE due_date > "11-MAY-2018" AND queue_id = 3、はクエリ署名となることができ:
select t1.id from incidents t1 where t1.due_date > ?date and t1.queue_id = ?number
および、当該フィンガープリントは、当該クエリ署名の固定されたサイズのハッシュ(例えば、6f9d069c301dce23bae834f08795a110766de334)である。説明クエリは、当該クエリフィンガープリントが導出された後に、取得され得る。したがって、クエリのフィンガープリントは、当該クエリの実行中に行なわれる少なくとも包括的な機能に基づいて、クエリの一意な識別子と見なされ得る。
【0043】
一実施形態では、たとえば、クエリの特定の呼び出しの間にデータがアクセスされるべきデータベース内の特定の位置のようなクエリに固有な情報およびパラメータは、当該フィンガープリントから省略され得る。したがって、フィンガープリントは、第1のクエリの機能的態様を示すことができ、これらの機能的態様は、各クエリの当該クエリに固有のパラメータによって第1のクエリと異なる1つまたは複数の他のクエリと共通して見い出され得る。換言すれば、2つのクエリは、同じフィンガープリントを有し得るが、同じクエリではない。
【0044】
本明細書におけるクエリの評価への言及は、クエリまたはクエリフィンガープリントの評価を包含する。説明プランに含まれる文のようなクエリ、当該実行プラン、およびクエリのフィンガープリントを特徴付けるために使用される情報のような他の情報に関連付けられる情報は、本明細書では「クエリ説明データ」と称される。データベース125に対するクエリ説明データは、データベースシステム100に提供される動作説明モジュール135によって、メモリ内に記憶され得るか、または、メモリから検索され得る。一実施形態では、2つのクエリは、同一のマッチするフィンガープリントを有し得るが、同一のクエリではない。例えば、両方ともフィンガープリントXYZを有するクエリAおよびBは、異なる説明プランを有し得るが、最新の(または他の以前の)評価から得られた説明プランは、当該クエリに関連付けられる。
【0045】
同様に、もし実行されると、アプリケーションオブジェクトのパフォーマンスに悪影響を及ぼすであろうフィンガープリントを有するクエリは、本明細書で説明されているように、報告データベース140にリダイレクトされ得、さもなければ、それに対して実行され得る。報告データベース140は、動作データベース125にも格納されるデータを記憶するように構成され得る。しかしながら、報告データベース140は、動作データベース125とは異なり、データベースシステム100によって利用され得る。例えば、動作データベース125は、データベースシステム100を介して、動作データベース125からデータを読み取り、または、動作データベース125にデータを書き込むためのクライアント端末105、110、115によって繰り返しアクセスされ得る。双方向通信は、概して両方向矢印145によって表される。動作データベース125によって維持される少なくともいくつかのデータは、矢印150によって示されるように、報告データベース140内に冗長的に格納され得る。報告データベース140へのアクセスは、一方向矢印155によって示されるように、読み出し動作に限定され得る。別の実施形態によれば、報告データベース140は、動作データベース125の役割に対して制限されたアプリケーションオブジェクトに関連付けられた役割を実行し得る。報告データベース140のためのクエリ説明データは、データベースシステム100に提供される報告説明モジュール160によって、メモリ内に記憶され得るか、または、メモリから検索され得る。
【0046】
動作説明モジュール135からのクエリ説明データおよび報告説明モジュール160からのクエリ説明データは、クエリ説明データ165としてデータ構造に格納され得る。クエリ説明データ165は、そのクエリ説明データ165に対応するそれぞれのクエリにリンクされ、クエリ説明データ165に対応するフィンガープリントを有するクエリによってアプリケーションオブジェクトに対する影響を評価するための分析モジュール170にアクセス可能である。クエリ説明データ165の例は、単一の行に帰着するキーのタイプ、呼び出されたクエリのタイプ、及び、当該呼び出されたクエリの識別子、を含むがこれらに限定されない。
【0047】
分析モジュール170はまた、クエリ実行エンジン130によって実行されるクエリについてメモリに記憶されたハンドラ統計値175にアクセスし得る。ハンドラ統計値175は、データベース125内のあるデータがどの程度またはどの頻度で、アクセスされ、読み出され、追加されるかに関連付けられる任意のデータを含み得る。ハンドラ統計の例は、(i)インデックス内の最初のエントリが読み出された回数、(ii)キーに基づいてテーブル内の行を読み出す要求の数、(iii)インデックス内の最後のキーを読み出す要求の数、(iv)キー順に次の行を読み出す要求の数、(v)キー順に前の行を読み出す要求の数、(vi)固定された位置に基づいて行を読み出す要求の数、(vii)データファイルの次の行を読み出す要求の数、および、(viii)行をテーブルに挿入する要求の数、を含むが、これらに限定されない。
【0048】
分析モジュール170は、クエリを識別するデータ構造180を生成し、かつ、当該クエリの持続時間が、完全に実行された後、完了閾値時間を超える場合、当該クエリにフラグを立て、または、そうでなければ評価を必要としているとして当該フラグを指定するように構成される。例えば、データ構造は、評価を必要とするものとして現在指定された(評価のためにフラグが立てられた)か、または、以前に評価されてクエリの複数の異なるクラスのうちの1つに分類されていたクエリに対応するフィンガープリントを識別するレコードのテーブルを含み得る。各クエリのフィンガープリントは、それらのクエリの最初の呼び出しに応答して、評価を必要とするものとして、データ構造において任意に指定され得る。評価は、クエリ自体がアプリケーションオブジェクトに対する許容できない悪影響の実質的な原因であるか否かを決定するために、行われる。この評価は、フィンガープリントを利用するクエリがその後呼び出されるまで遅延され得る。評価を遅らせることによって、当該クエリが最初に呼び出されたことに応答した、それは当該フィンガープリントが評価のために指定されたときである、評価は、実行されない。その結果、クエリがワンオフクエリである場合、システムおよびネットワークリソースは、再び呼び出されないクエリに対応するフィンガープリントを不必要に評価するために消費されない。したがって、フィンガープリントを有する少なくとも2つのクエリは、当該フィンガープリントが評価される前にシステムによって受信される必要がある。
【0049】
図1に示されるデータベースシステム100の実施形態は、企業組織のためのアプリケーションまたは分散アプリケーションオブジェクトの集合を含むコンピューティング/データ処理システムであり得る。アプリケーションオブジェクトおよびデータベースシステム100は、クラウドベースのネットワーキングシステム、サービス型ソフトウェア(「SaaS」)アーキテクチャ、または、他のタイプのネットワーク化されたコンピューティングソリューションで作動するように構成され得る。一実施形態では、データベースシステム100は、クライアント端末105、110、115のうちの1つまたは複数にコンテンツを提供し、受信者クライアント端末105、110、115が、クエリパラメータを受信すること、および、データベース125に対するクエリを呼び出すことに関して、少なくとも本明細書で開示される機能を実行することを可能にする。データベースシステム100は、通信ネットワーク120を介して(例えば、サーバとして機能する)データベースシステム100と通信する別個の、リモートに位置するコンピューティングデバイス/端末として、多くのクライアント端末105、110、115によって同時にアクセスされ得る。
【0050】
一実施形態では、本明細書で説明されるデータベースシステム100の構成要素または態様のうちの1つまたは複数は、非一時的なコンピュータ可読媒体に記憶されたプログラムモジュールとして構成され得る。プログラムモジュールは、少なくとも1つのプロセッサによって実行されると、データベースシステム100の1つまたは複数のコンピューティングデバイスに、本明細書で説明されるような対応する機能を実行させる格納された命令で構成されている。
【0051】
図2A~2Fは、アプリケーションオブジェクトの所望のパフォーマンスを維持するために、クエリ負荷を自動的に評価し、それらのクエリ負荷を適応的に処理するデータベースシステム100に関連付けられる方法200の一実施形態を示す。本方法は、実行されると、データベースシステム100またはアプリケーションオブジェクトに課されるクエリの負荷を評価するために、クエリ説明データ165およびハンドラ統計値175に基づいてクエリのフィンガープリントを評価することを含む。このような負荷の評価は、以下、「クエリコスト」の評価または決定と称される。「高価な(expensive)」または「コストがかかる(costly)」クエリのフィンガープリントは、(たとえば、閾値に基づいて)望ましくない量のコンピューティングリソースを消費する重大な負荷をデータベースシステム100に課す。したがって、コストがかかるクエリは、当該クエリが設定された閾値量を超える量のリソースを使用すると、アプリケーションオブジェクトのパフォーマンスおよび/またはシステムに許容できない悪影響を与えると考えられる。コンピューティングリソースは、CPU時間、データベース接続、ネットワーク帯域幅、ネットワーク通信、メモリ、および/または、クエリの処理に使用される他のリソースを含み得るが、これらに限定されない。一実施形態では、コストのかかるクエリは、クライアント端末105、110、115によって経験されるアプリケーションオブジェクトの不十分なパフォーマンスを緩和するために、同じまたは同様のクエリの将来の呼び出しを検出することに応答して実行からブロックされる。反対に、「低費用」を伴う「低コストな」または「高価でない」クエリに対するフィンガープリントは、一般に許容可能であると考えられ、同じまたは同様の低コストなクエリの将来の呼び出しを検出することに応答して、実行される。
【0052】
図2Aにおいて、クライアント端末105による実行のために提出されたクエリ要求は、ブロック202において、分析モジュール170によって受信される。一実施形態では、クエリ要求は、クエリの実行が前述したように制御されるか否かをシステムが決定することを可能にするために、当該クエリが実行される前に、分析モジュール170によってインターセプトされる。クエリ要求は、通信ネットワーク120を介して受信され、クエリの実行中に行なわれるべき1つまたは複数の動作を定義する1つまたは複数の文を含む。クエリ要求の一部として受信される文は、クエリの一部として実行されるべき動作の組み合わせを一意に識別するために分析モジュール170が使用するクエリのフィンガープリントを定義する。ブロック204において、受信されたクエリのフィンガープリントは、同じフィンガープリントを有する別のクエリ要求が以前に受信されているか否かを決定するために、以前に受信されたクエリについてのフィンガープリント情報を含むデータ構造180内のエントリと比較される。
【0053】
受信されたクエリ要求のフィンガープリントについての既存のレコードが存在しない場合、ブロック206において、当該クエリは完了まで実行され、返されたエラーコードが得られる。当該エラーコードは、クエリの実行が完了閾値時間を越えたか否かを示す情報を含む。例えば、返されたエラーコードは「OK」であり得、これは、当該クエリの完全な実行が完了閾値時間より短くなったことを示す。エラーコードは、「DIVERT」または「TOO LONG」であり得、その各々は、当該クエリの持続時間が完了閾値時間を超えたことを示す。エラーコード「TOO LONG」は、動作データベース125または報告データベース140のいずれかに対するクエリの将来の呼び出しの実行が阻止されるべきであるほど、クエリ実行の持続時間が長かったことを示し得る。エラーコード「DIVERT」は、クエリの実行期間が完了閾値時間を越えたことを示し得、したがって、費用がかかり得るが、当該クエリは、動作データベース125の代わりに報告データベース140に対して依然として実行され得る。
【0054】
ブロック208で、返されたエラーコードに基づいて、分析モジュール170は、クエリが完了閾値時間を越えたか否かを決定する。そうでない場合、ブロック210において、分析モジュール170は、例えばクエリのフィンガープリントのような当該クエリに関する情報と、この時点で評価を必要としないクエリの指定とを含むデータ構造180(
図1)を任意に生成できる。代わりに、クエリのフィンガープリントは、ホワイトリストに割り当てられたクエリを含む「許容される」クエリクラスに分類される。ホワイトリストに登録されたクエリは、アプリケーションオブジェクトに著しい悪影響を与えず、また、将来の呼び出しに応答して動作データベース125に対して実行可能であると見なされる。さらに、ホワイトリストに登録されたクエリの悪影響は、同じフィンガープリントを有するクエリの2回目またはその後の呼び出しに応答して説明データおよびハンドラ統計に基づくクエリのさらに他の評価が、それらのクエリを分類するために必要とされないようなものである。
【0055】
システムパフォーマンスをさらに改善するために、クエリのフィンガープリントをホワイトリストに追加するための、ブロック210におけるデータ構造180の生成(またはデータ構造の他の修正)は、任意に省略され得る。ホワイトリストに登録されたクエリのライブラリを維持するために、かなりの記憶コストが生じる。ホワイトリストに登録されたクエリのライブラリを維持する代わりに、本明細書に記載するようにブラックリストされておらず、さもなければ分類されていないフィンガープリントに関連付けられるクエリは、そのようなクエリが呼び出されたときに、動作データベース125に対して単に実行され得る。
【0056】
ブロック208において、分析モジュール170がクエリの実行は完了時間閾値を超えたと決定した場合、分析モジュール170は、ブロック212においてデータ構造180を生成する。データ構造180は、クエリに関する情報を含むように生成され、クエリのフィンガープリントが評価のためにフラグ付けされていることを示すために、対応するフラグビットまたは当該クエリのフィンガープリントの他のタイプのステータス指定を設定する。クエリがフラグ付けられたのは初めてであるので、当該クエリは、動作データベース125に対して完全に実行される。
【0057】
しかしながら、データ構造180において評価のためにフラグがつけられて指定された後、クエリがその後に再び実行のために提出される場合、同じまたは同様のクエリが評価される。例えば、クエリのフィンガープリントは、将来、同じフィンガープリントを有するクエリの2回目またはその後の呼び出しに応答して説明データおよびハンドラ統計に基づいて分析されることになる。この追加の分析は、クエリのフィンガープリントが「ブロックされた」クエリクラスに分類されるべきか否かを決定する。ブロックされたクエリクラスは、ブラックリストされたクエリに対するフィンガープリントを含む。分析モジュール170によるそのような分類は、同じまたは同様のクエリがその後クライアント端末105、110、115による実行のために提出または呼び出されるときに、ブラックリストされたクエリのフィンガープリントを有するクエリが動作データベース125および/または報告データベース140に対して実行されるのを防ぐように、クエリ実行エンジン130の動作を制御する。
【0058】
図2Bのブロック214において、分析モジュール170は、受信されたクエリ要求に対応するクエリのフィンガープリントが既存のデータ構造に含まれ、「保留評価」として指定されたと判断する。「保留評価」として指定されることは、当該クエリが、その後、フィンガープリントを有する別のクエリ要求を将来受信することに応答して、評価のために前もってフラグ付けされていることを意味する。クエリ実行エンジン130は、ブロック216においてハンドラ統計値を取得し、クエリを評価する準備をする。クエリ実行エンジン130によって収集されるハンドラ統計は、セッション値およびグローバル値の両方を含む。この1つの特定のクエリを実行するためのハンドラ統計値を得るために、クエリ実行エンジン130は、例えば、当該クエリの前後に収集されるべき統計値の差を決定することができる。
【0059】
別の実施形態によれば、セッションカウンタは、例えばクエリの実行前に「FLUSH STATUS」のような適切なコマンドを使用してゼロにリセットされ得る。クエリの実行後に収集されるハンドラ統計値は、この特定のクエリの実行に起因するもののみを含む。ハンドラ統計値を得るために使用されるアプローチに関係なく、クエリキャッシュは、正確なハンドラ統計値を得ると見なされるべきではない。クエリキャッシュが同一のクエリを含む場合、クエリ実行エンジンは、現在の特定のクエリの実行のための結果の代わりにキャッシュされた結果を返す。したがって、セッションクエリキャッシュは、現在の検索のための現在のハンドラ統計値を得るために一時的にオフにされるべきである。
【0060】
適切な準備が行われた後、クエリ実行エンジン130は、ブロック218において、受信されたクエリの実行を開始し、返されるエラーコードを取得する。上述したように、返されるエラーコードは、クエリの実行が完了するまでに要した時間の量を示す。エラーコードは、クエリの実行が完了閾値時間を超えなかったこと(例えば「OK」)、完了閾値時間を著しく超えたこと(例えば「TOO LONG」)、または、許容可能であると定義される限られたマージンだけ完了閾値時間を超えたこと(例えば「DIVERT」)、を示すことができる。
【0061】
ブロック220において、分析モジュール170は、ブロック220における現在のクエリについてクエリ実行エンジン130によって取得されたハンドラ統計値175を検索し、受信し、または、そうでなければアクセスする。同様に、分析モジュール170は、ブロック222でクエリ説明データ165にアクセスする。アクセスされたハンドラ統計値175およびクエリ説明データ165は、現在の評価のために分析モジュール170に結合されたメモリに一時的に記憶され、更新された評価が要求される度に更新され得る。
【0062】
ブロック224において分析モジュール170によって実行される評価は、返されるエラーコード、ハンドラ統計値175、および、現在呼び出されているクエリに関する説明データ165に基づく。クエリまたはクエリのフィンガープリントの評価は、クエリまたはフィンガープリントを、複数の異なるクラスのうちの1つに属するものとして分類する。例えば、クエリは、以下のように4つのクラスのうちの1つに分類され得る:
単純なクエリ
ブロック226において、分析モジュール170は、クエリのフィンガープリントが単純なクエリに対応するか否かを判断する。単純なクエリは、主にコストに基づかず、最小コストで単一の行に帰着する一定または一意のキーのみを使用して定義される。従って、ハンドラ統計値175とは無関係に、単純なクエリのテストは、クエリ説明データ165に基づいて行なわれ得る。「単純な」クエリをテストするために、クエリ説明データの行または他の部分が検査され得る。単純なクエリの一実施形態は、以下を必要とする:
【0063】
(1)第1セレクトIDの第1行は、join_typeが“system”"または“const”で、rows=1でなければならない。
【0064】
(2)第1セレクトIDの後続の行は、join_type“eq_ref”を有さなければならない。
【0065】
(3)最初の選択後の各セレクトIDについて、
【0066】
(a)select_typeが“UNION”でない場合、セレクトIDの全ての行は、join_type“eq_ref”を有さなければならない。
【0067】
(b)select_typeが“UNION”である場合:
【0068】
(i)セレクトIDの最初の行は“system”または“const”でなければならず、rows=1である。
【0069】
(ii)セレクトIDの後続の行は、join_type“eq_ref”を有さなければならない。
【0070】
具体例として、「select objet by ID」というフィンガープリントを有するクエリは、単純なクエリである。ブロック226で識別された単純なクエリのフィンガープリントは、ブロック228で許容されるクエリクラスに分類され(例えば、ホワイトリストに追加され)、これは、クエリ実行エンジン130が将来の呼び出しに応答してフィンガープリントを利用してクエリを実行することを意味する。この許容されるクエリのデータ構造180はまた、ブロック228において、このクエリが評価を必要とすることを示すフラグまたは他の指定を除去するように修正される。結果として、当該許容されるクエリのフィンガープリントの将来の呼び出しは、クエリ実行エンジン130に、クエリのフィンガープリントを許容されると分類するために実行された評価を実行することなく、対応するクエリを実行させる。
【0071】
許容されるクエリ
ブロック226でクエリが単純ではないと判定された場合、ブロック230で当該クエリが少なくとも許容可能であるか否かを決定するためにクエリのコストに基づいて評価が行われる。このようなコストは、本実施形態に従う重み付けされたハンドラ統計値の和として求められ得る。クエリに対するクエリ説明データを使用して、個々のハンドラ統計値175に割り当てられる重みを変化させることができる。しかしながら、別の実施形態によると、静的な重みは、異なるハンドラ統計値の各々に割り当てられ得る。例えば、重みは、各ハンドラ統計値に関連付けられるコストを示すためにハンドラ統計値に割り当てられ得る。インデックス内の最初のエントリが読み出される回数(handler_read_first)のようなハンドラ統計値は、“2”の重みを割り当てられ得る。キー順序で次の行を読み出す要求の数(handler_read_next)のような順次動作の統計値は、“1”の重みを割り当てられ得る。handler_read_firstの動作は、handler_read_nextの統計値よりも、行情報をロードするために、より頻繁にデータブロック読み出しを必要とするので、handler_read_nextの統計値と比較して比較的コストのかかる重みに対する余裕がある。重みが“1”であるhandler_read_nextのような項目は、順次アクセスされ、行の値だけがインクリメントされる必要がある。反対に、handler_read_firstは、テーブル内の次の行の位置を特定する代わりに、関連付けられるデータを有する行の位置を特定することを含むことができ、より計算コストが高い。
【0072】
許容されるクエリは、単純ではない(例えば、単純なクエリより高いコストを有する)クエリであるが、許容される閾値コストを超えないコストを有する。許容される閾値コストは、重み付けられたハンドラ統計値に基づいて、データベースの比較的低い負荷の期間中に当該データベースに対してX秒未満で完全に実行され得るクエリにおおまかに対応する。例えば、Xは、0より大きく30より小さい任意の整数(例えば、1秒、5秒、10秒など)であり得る。Xの特定の例は、本明細書では例示目的で使用されるが、本開示の範囲から逸脱することなく、他の値がXに割り当てられ得る。
【0073】
ブロック230における評価に基づいてクエリが許容されると見なされる場合、クエリの分類はまた、クエリの実行の結果として返されるエラーコードに依存する。ブロック232で、分析モジュール170は、返されたエラーコードが「OK」または「DIVERT」であったか否かを判定する。もしそうである場合、ブロック234において、クエリのフィンガープリントは許容される(例えば、ホワイトリストに登録される)として分類され、データ構造180は、この分類を反映してクエリが評価を必要とするフラグまたは他の指定を除去するように修正される。その結果、クエリのフィンガープリントを利用するクエリの将来の呼び出しは、当該評価を繰り返すことなくクエリ実行エンジン130によって実行され得る。
【0074】
ブロック232において、分析モジュール170が、クエリの現在の呼び出しに対して返されたエラーコードが「TOO LONG」のような任意の他のコードであると判定した場合、データ構造180は、ブロック236(
図2C)において、リダイレクトされたクエリクラスにおけるクエリのフィンガープリントの分類を反映するように修正される。クエリの将来の呼び出しは実行され得るが、動作データベース125に対してではなく報告データベース140に対してクエリ実行エンジン130によってリダイレクトされるべきである。
【0075】
あまり重要でないクエリ
ブロック230(
図2B)において、クエリが許容されないと判定された場合、ブロック238(
図2D)において、当該クエリがあまり重要でないか否かを決定する評価が行われる。クエリがあまり重要でないとして識別するために行われるコスト評価は、許容されるクエリを識別するために記載されるコスト評価に類似する。しかしながら、あまり重要でないクエリのコストは、許容されるクエリのコストよりも高い。許容される閾値コストは、おおよそ、データベースの比較的低い負荷の期間中に当該データベースに対してX秒未満で完全に実行され得るクエリに対応することを想起されたい。許容されるクエリに対するXの値は、30未満である任意の正の整数であると定義された。しかしながら、あまり重要でないクエリであるために、Xの値は、同等のデータベースの負荷条件下で、少なくとも30秒であり得るが、60秒未満であり得る。Xの特定の例は、本明細書では例示目的で使用されるが、本開示の範囲から逸脱することなく、他の値がXに割り当てられ得る。
【0076】
ブロック238で評価に基づいてクエリが少なくともあまり重要ではないと見なされない場合、ブロック240で、クエリのフィンガープリントはブロックされるクエリクラスに分類される(例えば、ブラックリストに登録される)。分析モジュール170によるそのような分類は、クエリ実行エンジン130に、クエリの将来の呼び出しに応答して、動作データベース125または報告データベース140のいずれかに対してクエリが実行されることを妨げさせる。ブロックされるクエリは、実行するのに計算上高くつくと考えられ、もし実行されると、アプリケーションオブジェクトのパフォーマンスに著しい悪影響を与える。
【0077】
ブロック238における評価に基づいてクエリのフィンガープリントがあまり重要でないと見なされる場合、クエリの分類は、次に、当該クエリの現在の実行の結果として返されるエラーコードに依存する。ブロック242において、分析モジュール170は、返されるエラーコードが「OK」であったか否かを判断する。もしそうである場合、ブロック244において、クエリのフィンガープリントは許容される(例えば、ホワイトリストに登録される)として分類され、データ構造180は、この分類を反映して、フラグまたはクエリが評価を必要とするという他の指定を除去するように修正される。その結果、クエリのフィンガープリントの将来の呼び出しは、それらの呼び出しに応答して分類評価を繰り返すことなく、クエリ実行エンジン130によってクエリのために実行され得る。
【0078】
ブロック242において、分析モジュール170が、クエリの現在の呼び出しに対して返されたエラーコードが「DIVERT」または「TOO LONG」のような任意の他のコードであると判定した場合、データ構造180は、ブロック246において、リダイレクトされたクエリクラスにおけるクエリのフィンガープリントの分類を反映するように修正される。その結果、クエリの将来の呼び出しは実行され得るが、動作データベース125の代わりに報告データベース140に対して実行するためにクエリ実行エンジン130によってリダイレクトされるべきである。
【0079】
上記の説明は、クエリのためのデータ構造180内のフラグまたは他の指定が、評価は必要であるということを示すシナリオに対処する。フラグまたは指定を設定することは、クエリが呼び出された最初の時点で、クエリの長い持続時間に応答してトリガされ得る。クエリが上述のように評価および分類されると、フラグまたは他の指定がデータ構造180からクリアされる。ブロック214(
図2B)での決定を再び参照すると、本システムおよび方法は、クエリの分類の変更をもたらし得る、動作データベース125または報告データベース140の変更に適応し得る。例えば、クエリのフィンガープリントが分類されたので、動作データベース125または報告データベース140内のデータ量の実質的な増加があったかもしれない。変更は、通信ネットワーク120において実施され得る。例えば、相当数の追加のクライアント端末が、動作データベース125または報告データベース140を利用する企業に追加されているかもしれない。これらのような因子は、分類されてから変化していないクエリのフィンガープリントとは無関係であり、そのクエリのフィンガープリントの適切な分類に影響を及ぼし得る。例えば、許容されるクエリクラスに以前に分類されたフィンガープリントは、今や、動作データベース125内のデータの量の増加のため、動作データベース125に対して実行されるには高価すぎるかもしれない。
【0080】
ブロック214において、呼び出されたクエリに対応するクエリフィンガープリントが保留中の評価ではないと分析モジュール170が決定した場合、分析モジュール170は、ブロック248において、当該クエリがブロックされた(例えば、ブラックリストに登録された)クエリクラスに以前に分類されているか否かを判断する。もしそうであれば、分析モジュール170は、データ構造180における分類に基づいてブロック250でクエリ実行エンジン130の動作を制御し、動作データベース125または報告データベース140に対するクエリの実行を阻止する。クエリが許可されていないことを示す通知は、データベースシステム100によって任意に送信され得、クエリが実行されなかったことをクライアント端末105、110、115に通知することができる。
【0081】
ブロック248において決定されたように、呼び出されたクエリがブロックされない場合、ブロック252(
図2E)において、当該クエリは、データ構造180における対応するクエリのフィンガープリントの分類に従って実行される。例えば、対応するクエリのフィンガープリントの分類が「許容可能」である場合、当該クエリは、そのクエリの現在の呼び出しに応答して、上述の評価を行うことなく、動作データベース125に対して実行される。そうでなければ、対応するクエリのフィンガープリントの分類が「DIVERT」である場合、クエリは実行されるが、動作データベース125の代わりに報告データベース140に対して実行されるようにリダイレクトされる。再び、クエリは、当該クエリの現在の呼び出しに応答して、上記の評価を行うことなく実行され得る。
【0082】
実行されたクエリに関するデータ構造180は、ブロック254において、当該クエリに関するフィンガープリントが最初に単純なクエリであるか、または許容される(例えば、ホワイトリストに登録された)クエリであるかを決定するために、分析モジュール170によって分析される。そうである場合、分析モジュール170は、クエリのフィンガープリントに関するデータ構造180における分類が、少なくとも部分的に、(i)対応するクエリの現在の呼び出しのために返されたエラーコード、および(ii)クエリのフィンガープリントの現在の分類に基づいて、再評価される必要があり得るか否かを決定する。
【0083】
ブロック256において、分析モジュール170は、クエリの実行時間が完了閾値時間を越えたか否かを判断する。もしそうであれば、以前に「許容可能」と分類されたフィンガープリントを有するクエリの実行時間は、今度は完了閾値時間を超える。この条件の結果として、クエリのフィンガープリントの構造に無関係な変化が発生し、データ構造180に格納されたクエリのフィンガープリントの分類の変更を保証し得る。同様に、ブロック254において、分析モジュール170は、実行されたクエリが単純または許容されるクエリではなく(例えば、ホワイトリストに登録されていない)、代わりにダイバート(DIVERT)クエリクラスに分類されたクエリであると判定し得る。しかしながら、現在呼び出しているクエリは、ブロック264で判定されるように「OK」エラーが返される結果となり得る。「OK」のエラーコードの返答は、ダイバート(DIVERT)クエリクラスに分類されるクエリよりも単純または許容されるクエリをいっそう示す。ここでも、対応するクエリのフィンガープリントの構造に無関係な変更が発生し、データ構造180におけるクエリのフィンガープリントの分類の変更を保証し得る。
【0084】
分類が修正されるべきか否かを決定するために、クエリの現在の呼び出しに関する説明データは、分析モジュール170によって取得される。分析モジュール170は、ブロック258で、現在の呼び出しについて得られた説明データを、データ構造180に格納されたクエリのフィンガープリントの既存の分類に対応する説明データと比較する。ブロック260において、比較が、現在の呼び出しに対するクエリのフィンガープリントに対応する説明データは、分類をもたらしたクエリの呼び出しに対する説明データと異なるということを明らかにした場合、ブロック262において、フラグまたは他の指定は、リセットされ得る。データ構造180内のフラグまたは他の指定をリセットすることは、クエリのフィンガープリントが再び評価を必要とすることを示す。リセットされたフラグまたは他の指定は、分析モジュール170に、次のまたは他の後続の呼び出しに応答して、ブロック214(
図2B)においてクエリのフィンガープリントが評価を必要とするということを判定させる。この判定は、分析モジュール170に、対象のクエリのフィンガープリントを有するクエリの将来の呼び出しに応答して、本明細書で説明される評価プロセスを開始させる。発展したトリガイベントに応答して評価のためにクエリのフィンガープリントを繰り返し指定することは、たとえクエリのフィンガープリント自体が変更されなくても、データベース環境への変更から生じ得るクエリ負荷の適応処理を可能にする。
【0085】
ブロック256における判定は、クエリの実行時間が、許容されるクエリの予想された通り、完了閾値時間を越えなかったことを示し得る。同様に、ダイバートされたクエリクラスにおけるクエリのために返されたエラーコードは、同様に予想された通り、そのクエリの実行時間がブロック264で完了閾値時間を超えたことを示し得る。そのようなクエリが予想された通りに実行されたとしても、これらのクエリの各々に対応するクエリのフィンガープリントは、アプリケーションオブジェクトのパフォーマンスを改善するために再評価のために依然としてうってつけであり得る。
【0086】
現在呼び出されているクエリは、トリガイベントとしてのクエリの単一の呼び出しの結果の代わりに、クエリを伴う傾向に基づいて再評価されるべきクエリのフィンガープリントを有し得る。例えば、クエリのフィンガープリントのためのデータ構造180は、カウンタフィールドを含み得る。実行されるクエリの各呼び出しは、リターンコードを、対応するクエリのフィンガープリントに対して返させる。クエリのフィンガープリントのために返されるエラーコードの実行中の総数は、カウンタフィールドに記憶されることができ、各エラーコードがブロック266(
図2F)で返されるにつれてインクリメントされ得る。クエリのフィンガープリントに対して規定された数のエラーコードが戻されると、エラーコードの傾向は、クエリのフィンガープリントが再評価されるべきか否かを決定するために、分析され得る。そのような分析の一部として、ブロック268において、分析モジュール170は、クエリのフィンガープリントの返されたエラーコードの総数の少なくともタイムアウト閾値パーセントがTOO LONGであったか否かを判断する。そうである場合、分析モジュール170は、ブロック270において、現在実行されているクエリのクエリフィンガープリントのコストが、少なくとも限界クエリと同じコストであるか否かを判断する。そうである場合、ブロック272において、ブロックされるクエリクラスにおいてクエリのフィンガープリントを分類するために、そして、クエリのフィンガープリントが評価を必要とすることを示すフラグまたは他の指定を設定するために、ブロック272において、クエリのフィンガープリントのデータ構造180が修正される。
【0087】
ブロック268において、返されたエラーコードのタイムアウト閾値パーセンテージが満たされない場合、分析モジュール170は、ブロック274において、DIVERTエラーコードとTOO LONGエラーコードの組み合わされた数が、全ての返されたエラーコードの少なくとも組み合わされた閾値パーセンテージを構成するか否かを判断する。そうである場合、かつ、ブロック276において、現在実行されているクエリのクエリフィンガープリントのコストが、少なくとも限界クエリと同じコストであると判断された場合、ブロック278において、クエリのフィンガープリントに関するデータ構造180が修正される。ブロック278において、データ構造180は、クエリのフィンガープリントをリダイレクトクエリクラスに分類するように修正され、クエリのフィンガープリントが評価を必要とすることを示すフラグまたは他の指定が設定される。
【0088】
クエリのフィンガープリントについて定義された数のエラーコードが戻された後に、全ての戻されたエラーコードのブロック268におけるタイムアウト閾値パーセンテージもブロック274における組み合わせ閾値パーセンテージも満たされない場合、データ構造180もまた修正され得る。例えば、ブロック280において、データ構造180は、許容されるクエリクラスにおいて現在実行されているクエリに対応するクエリのフィンガープリントを分類するように修正され得る。対応するクエリの将来の呼び出しに応答してクエリのフィンガープリントが評価を必要とすることを示すフラグまたは他の指定もまた、ブロック280でセットされ得る。
【0089】
ブロック280における同様の修正は、異なるクエリの傾向に応答して行なわれ得る。例えば、クエリのフィンガープリントについて定義された数のエラーコードが戻された後、ブロック268においてタイムアウト閾値パーセンテージが満たされていない場合、クエリのフィンガープリントのコストは、分析され得る。ブロック270において、現在実行されているクエリに対応するクエリのフィンガープリントのコストが、限界クエリよりも低コストであると判定された場合、データ構造180は、許容されるクエリクラスにおいて現在実行されているクエリに対応するクエリのフィンガープリントを分類するように修正され得る。そのようなシナリオは、以前に分類された、アプリケーションオブジェクトのパフォーマンスに及ぼす影響を低減する傾向を示すクエリを示す。対応するクエリの将来の呼び出しに応答してクエリのフィンガープリントが評価を必要とするということを示すフラグまたは他の指定もまた、ブロック280でセットされ得る。
【0090】
別の例として、クエリのフィンガープリントに対して定義された数のエラーコードが戻された後、(i)タイムアウト閾値パーセンテージがブロック268において満たされず、(ii)組み合わせられた閾値パーセンテージがブロック274において満たされず、かつ、(iii)現在実行されているクエリに対応するクエリのフィンガープリントのコストがブロック276において限界クエリよりも低コストであると判断された場合、ブロック280において、データ構造180は修正され得る。データ構造180は、許容されるクエリクラスにおいて現在実行されているクエリに対応するクエリのフィンガープリントを分類するように修正され得る。そのようなシナリオはまた、以前に分類された、アプリケーションオブジェクトのパフォーマンスに対する影響を少なくする傾向を示すクエリを示す。対応するクエリの将来の呼び出しに応答してクエリのフィンガープリントが評価を必要とするということを示すフラグまたは他の指定もまた、ブロック280でセットされ得る。
【0091】
コンピューティングデバイスの実施形態
図3は、本明細書で説明されるシステムおよび方法例、および/または、同等物のうちの1つまたは複数を用いて構成および/またはプログラムされる例示的なコンピューティングデバイスを示す。例示的なコンピューティングデバイスは、プロセッサ320と、メモリ335と、バス325によって動作可能に接続された入出力ポート345とを含むコンピュータ300であり得る。一例では、コンピュータ300は、クエリ実行エンジン130と、
図1に示されるデータベースシステム100と同様のクエリ負荷の評価およびクエリ負荷の適応処理を容易にするように構成された分析モジュール170とを定義する論理回路を含み得る。異なる例では、論理回路130,170は、ハードウェアで、格納された命令を有する非一時的なコンピュータ可読媒体305で、ファームウェアで、および/または、それらの組み合わせで実装され得る。論理回路130,170は、バス325に取り付けられたハードウェアコンポーネントとして示されているが、他の実施形態では、論理回路130,170は、プロセッサ320内に実装され、メモリ335内に記憶され、または、ディスク355内に記憶され得ることが理解される。
【0092】
一実施形態では、論理回路130,170またはコンピューティングデバイス300は、説明された動作を実行するための手段(例えば、構造、すなわち、ハードウェア、非一時的なコンピュータ可読媒体、ファームウェア)である。ある実施形態では、コンピューティングデバイスは、クラウドコンピューティングシステム、サービス型ソフトウェア(SaaS)アーキテクチャ内に構成されたサーバ、スマートフォン、ラップトップ、タブレットコンピューティングデバイスなどで作動するサーバであり得る。
【0093】
手段は、例えば、アプリケーションオブジェクトのパフォーマンスに対する悪影響を軽減するためにクエリ負荷を評価して適応的に取り扱うようにプログラムされたASICとして実施され得る。当該手段はまた、メモリ335に一時的に格納され、その後プロセッサ320によって実行されるデータ310としてコンピューティングデバイス300に提示される、格納されたコンピュータ実行可能命令として実施され得る。
【0094】
モジュール130,170の論理はまた、クエリ負荷の評価および適応処理を行うための手段(例えば、ハードウェア、実行可能な命令を記憶する非一時的なコンピュータ可読媒体、ファームウェア)を提供し得る。
【0095】
コンピュータ300の例示的な構成を概して説明すると、プロセッサ320は、デュアルマイクロプロセッサおよび他のマルチプロセッサアーキテクチャを含む種々様々なプロセッサであり得る。メモリ335は、揮発性メモリおよび/または不揮発性メモリを含み得る。不揮発性メモリは、例えば、ROM、PROMなどを含み得る。揮発性メモリは、例えば、RAM、SRAM、DRAM等を含み得る。
【0096】
ストレージディスク355は、例えば、入力/出力(I/O)インターフェイス(例えば、カード、デバイス)340および入力/出力ポート345を介してコンピューティングデバイス300に動作可能に接続され得る。ディスク355は、例えば、磁気ディスク装置、ソリッドステートディスクドライブ、フロッピー(登録商標)ディスクドライブ、テープドライブ、Zipドライブ、フラッシュメモリカード、メモリスティックなどであり得る。また、ディスク355は、CD-ROMドライブ、CD-Rドライブ、CD-RWドライブ、DVD ROM等であり得る。メモリ335は、例えば、プロセスおよび/又はデータ310を記憶できる。ディスク355および/またはメモリ335は、コンピューティングデバイス300のリソースを制御して割り当てるオペレーティングシステムを記憶できる。
【0097】
コンピューティングデバイス300は、I/Oコントローラ330によってバス325に接続されるI/Oインターフェイス340および入出力ポート345を介して入出力(I/O)デバイスと相互作用し得る。入力/出力デバイスは、例えば、キーボード、マイクロフォン、ポインティングおよび選択デバイス、カメラ、ビデオカード、ディスプレイ、ディスク355、ネットワークデバイス350などであり得る。入出力ポート345は、例えば、シリアルポート、パラレルポート、USBポートを含み得る。
【0098】
コンピューティングデバイス300は、ネットワーク環境において作動でき、したがって、I/Oインターフェイス340および/またはI/Oポート345を介してネットワークデバイス350に接続され得る。ネットワークデバイス350を通じて、コンピューティングデバイス350は、ネットワークと相互作用し得る。ネットワークを介して、コンピューティングデバイス300は、クライアント端末105,110,115のような遠隔コンピュータに論理的に接続され得る。コンピューティングデバイス300が相互作用し得るネットワークは、LAN、WAN、およびその他のネットワークを含み得るが、これらに限定されない。
【0099】
定義および他の実施形態
別の実施形態では、説明される方法および/またはそれらの均等物は、コンピュータ実行可能命令で実施され得る。したがって、一実施形態では、非一時的なコンピュータ可読/記憶媒体は、機械によって実行されると当該機械(および/または関連するコンポーネント)に方法を実行させるアルゴリズム/実行可能なアプリケーションの格納されたコンピュータ実行可能命令で構成される。例示的な機械は、プロセッサ、コンピュータ、クラウドコンピューティングシステムにおいて作動するサーバ、サービス型ソフトウェア(SaaS)アーキテクチャにおいて構成されたサーバ、スマートフォン等を含み得るが、これらに限定されない。一実施形態では、コンピューティングデバイスは、開示される方法のいずれかを実行するように構成された1つまたは複数の実行可能なアルゴリズムを用いて実施される。
【0100】
1つまたは複数の実施形態において、開示される方法またはそれらの均等物は、以下のいずれかによって実施される:当該方法を実行するように構成されたコンピュータハードウェア、または、非一時的なコンピュータ可読媒体に記憶されたモジュール内に具現化されたコンピュータ命令であって、当該命令は、コンピューティングデバイスの少なくともプロセッサによって実行されると、当該方法を実行するように構成された実行可能なアルゴリズムとして構成される、コンピュータ命令。
【0101】
説明を簡単にするために、図で例示された方法は、アルゴリズムの一連のブロックとして示され、説明されるが、その方法は、ブロックの順序によって限定されないことが理解されるべきである。いくつかのブロックは、図示および説明されたものとは異なる順序で、および/または他のブロックと同時に発生し得る。さらに、すべての例示されたブロックよりも少ないブロックが例示的な方法を実施するために使用され得る。ブロックは、組み合わされてもよく、または、複数の動作/構成要素に分離されてもよい。さらに、追加のおよび/または代替の方法は、ブロックには示されていない追加の動作を使用することができる。
【0102】
以下は、本明細書で使用される選択された用語の定義を含む。定義は、用語の範囲内にあり、実施のために使用され得る、構成要素の様々な例および/または形態を含む。実施例は、限定することを意図していない。用語の単数形および複数形の両方が、定義の範囲内であり得る。
【0103】
「一実施形態」、「ある実施形態」、「一例」、「ある例」などへの言及は、そのように記載される実施形態または例が、特定の特徴、構造、特性、性質、要素、または限定を含み得るが、全ての実施形態または例が必ずしもその特定の特徴、構造、特性、性質、要素、または限定を含むものではないことを示す。さらに、「一実施形態では」という語句の繰り返しの使用は、必ずしも同じ実施形態を指すわけではないが、そうであってもよい。
【0104】
本明細書で使用される「データ構造」は、メモリ、記憶装置、または他のコンピュータ化されたシステムに格納されるコンピューティングシステム内のデータの組織である。データ構造は、例えば、データフィールド、データファイル、データ配列、データレコード、データベース、データテーブル、グラフ、ツリー、リンクされたリスト等のいずれか1つであり得る。データ構造は、多くの他のデータ構造(例えば、データベースは、多くのデータレコードを含む)から形成され、それを含み得る。他の実施形態によれば、データ構造の他の例も同様に可能である。
【0105】
本明細書で使用される「コンピュータ可読媒体」または「コンピュータ記憶媒体」は、実行されると開示された機能のうちの1つまたは複数を実行するように構成された命令および/またはデータを記憶する非一時的媒体を指す。データは、ある実施形態では、命令として機能し得る。コンピュータ可読媒体は、これらに限定されないが、不揮発性媒体および揮発性媒体を含む形態をとり得る。不揮発性媒体は、例えば、光ディスク、磁気ディスクなどを含み得る。揮発性媒体は、例えば、半導体メモリ、ダイナミックメモリなどを含み得る。コンピュータ可読媒体の一般的な形態は、フロッピー(登録商標)ディスク、フレキシブルディスク、ハードディスク、磁気テープ、他の磁気媒体、特定用途向け集積回路(ASIC)、プログラマブルロジックデバイス、コンパクトディスク(CD)、他の光媒体、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、メモリチップまたはカード、メモリスティック、ソリッドステートストレージデバイス(SSD)、フラッシュドライブ、および、コンピュータ、プロセッサ、または他の電子デバイスが機能し得る他の媒体を含み得るが、これらに限定されない。一実施形態において実装のために選択される場合、媒体の各タイプは、開示された、および/または権利主張される機能のうちの1つまたは複数を実行するように構成されたアルゴリズムの格納された命令を含み得る。
【0106】
本明細書で使用される「論理」は、コンピュータもしくは電気ハードウェア、実行可能なアプリケーションもしくはプログラムモジュールの格納された命令を有する非一時的媒体、および/または、本明細書で開示された機能もしくは動作のいずれかを実行するための、および/または、本明細書で開示されたように別の論理、方法、および/またはシステムからの機能もしくは動作を実行させるために、これらの組み合わせで実施される構成要素を表す。同等の論理回路は、ファームウェア、アルゴリズムでプログラムされたマイクロプロセッサ、ディスクリート論理回路(例えばASIC)、少なくとも1つの回路、アナログ回路、デジタル回路、プログラムされた論理回路デバイス、アルゴリズムの命令を含むメモリデバイス等を含み得、これらのうちのいずれかは、開示された機能のうちの1つまたは複数を実行するように構成され得る。一実施形態では、論理回路は、1つまたは複数のゲート、ゲートの組み合わせ、または開示された機能のうちの1つまたは複数を実行するように構成された他の回路構成要素を含み得る。複数の論理回路が説明される場合、当該複数の論理回路を1つの論理回路に組み込むことが可能であり得る。同様に、単一の論理回路が説明される場合、当該単一の論理回路を複数の論理回路間で分配することが可能であり得る。一実施形態では、これらの論理のうちの1つまたは複数は、開示されたおよび/または権利主張された機能を実行することに関連付けられる対応する構造である。実装するための論理回路のいずれかのタイプの選択は、所望のシステム条件または仕様に基づき得る。例えば、より高い速度が考慮事項である場合、ハードウェアが機能を実現するために選択され得る。より低いコストが考慮事項である場合、格納された命令/実行可能アプリケーションが当該機能を実現するために選択され得る。
【0107】
「動作可能な接続」、またはエンティティが「動作可能に接続される」接続は、信号、物理通信、および/または論理通信が送信および/または受信され得る接続である。動作可能な接続は、物理的インターフェイス、電気的インターフェイス、および/またはデータインターフェイスを含み得る。動作可能な接続は、動作可能な制御を可能にするのに十分なインターフェイスおよび/または接続の異なる組み合わせを含み得る。例えば、2つのエンティティは、直接、または、1つまたは複数の中間エンティティ(例えば、プロセッサ、オペレーティングシステム、論理回路、非一時的なコンピュータ可読媒体)を介して信号を互いに通信するように動作可能に接続され得る。論理通信チャネルおよび/または物理通信チャネルを使用して、動作可能な接続を作成することができる。
【0108】
本明細書で使用される「ユーザ」は、1人または複数の人、コンピュータまたは他のデバイス、またはこれらの組み合わせを含むが、これらに限定されない。
【0109】
開示された実施形態をかなり詳細に図示され説明されたが、添付の特許請求の範囲をそのような詳細に限定する、または多少なりとも制限する意図はない。もちろん、主題のさまざまな態様を説明する目的で、構成要素または方法の考えられる全ての組み合わせを説明することは可能ではない。したがって、本開示は、図示および説明される特定の詳細または例示的な例に限定されない。したがって、本開示は、添付の特許請求の範囲内に入る変更、修正、および変形を包含することを意図している。
【0110】
用語「含む(includes)」または「含んでいる(including)」が、詳細な説明または特許請求の範囲において使用される限り、その用語が、特許請求の範囲において遷移語として使用される場合に解釈される場合、「備える(comprising)」という用語と同様に包括的であることが意図される。
【0111】
用語「又は」が詳細な説明又は特許請求の範囲で使用される限り(例えば、AまたはB)、「AまたはB又はその両方」を意味することが意図される。本出願人が「AまたはBだけであるが両方ではない」を示すことを意図する場合、「AまたはBだけであるが両方ではない」という語句が使用される。したがって、本明細書における用語「または」の使用は包括的であり、排他的使用ではない。