(57)【要約】  クエリ負荷の評価および適応的管理に関連付けられるシステム、方法、および他の実施形態が説明される。一実施形態では、方法は、アプリケーションオブジェクトに対してクライアント端末によって呼び出されたクエリが完了の閾値を超える持続時間を有すると判定することを含む。後続のクエリの起動の受信に応答して、当該クエリの統計が得られる。取得された統計は、クエリがアプリケーションオブジェクトに許容できない悪影響を引き起こすか否かを判断するために、分析される。データ構造は、当該分析の結果に基づいて、当該クエリのクラスを複数の異なるクエリのクラスのうちの１つに含むように修正され、将来の呼び出しに応答するクエリの実行は、当該修正されたデータ構造におけるクエリの分類に基づいて制御される。
2021523429.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが実行可能な命令を記憶した非一時的なコンピュータ可読媒体であって、前記命令は、コンピューティングシステムの少なくとも１つのプロセッサによって実行されると、前記コンピューティングシステムに、
少なくとも前記プロセッサが、データベース管理システムによって実行されるクエリが完了閾値を超える実行時間を有すると判定することと、
少なくとも前記プロセッサが、前記クエリに対応するフィンガープリントをデータ構造に格納することと、
少なくとも前記プロセッサが、前記クエリの前記実行期間が前記完了閾値を超えることに応答して、評価のために、フィンガープリントにフラグを立てることと、
前記フィンガープリントに対応する後続のクエリ要求の受信に応答して、かつ、前記フィンガープリントにフラグが立てられていることに基づいて、前記フィンガープリントの統計を分析して、前記後続のクエリ要求の実行が、前記データベース管理システムに許容できない悪影響をもたらすか否かを判断することと、
少なくとも前記プロセッサが、前記分析の結果に基づいて前記フィンガープリントを複数の異なるクエリクラスのうちの１つに分類するために、前記データ構造を修正することと、
少なくとも前記プロセッサが、前記フィンガープリントの分類に基づいて将来のクエリの要求の実行を制御することと、を実行させる、非一時的なコンピュータ可読媒体。
【請求項２】
少なくとも前記プロセッサによって実行されると、前記コンピューティングシステムに、
前記分析の結果に基づいて、前記フィンガープリントを（ｉ）許容されるクエリクラス、または（ｉｉ）ブロックされるクエリクラスに割り当てることによって、フィンガープリントを分類させる命令をさらに含み、
（ｉ）前記フィンガープリントが前記許容されるクエリクラスに割り当てられる場合、前記統計を繰り返し分析することなく、前記将来のクエリは完了するように実行され、（ｉｉ）前記フィンガープリントが前記ブロックされるクエリクラスに割り当てられる場合、前記将来のクエリは実行されないようにブロックされる、請求項１に記載の非一時的なコンピュータ可読媒体。
【請求項３】
少なくとも前記プロセッサによって実行されると、前記コンピューティングシステムに、
評価のためにフラグが立てられている前記フィンガープリントをもたらした前記クエリの実行に応答して、前記フィンガープリントを分類するための前記統計の分析を妨げさせる命令をさらに含む、請求項１に記載の非一時的なコンピュータ可読媒体。
【請求項４】
コンピューティングシステムであって、
少なくとも１つのメモリに接続された少なくとも１つのプロセッサと
非一時的なコンピュータ可読媒体に格納されて命令を含む分析モジュールとを備え、前記命令は、前記少なくとも１つのプロセッサによって実行されると、前記コンピューティングシステムに、
少なくとも前記プロセッサが、データベース管理システムによって実行されるクエリが完了閾値を超える実行時間を有すると判定することと、
少なくとも前記プロセッサが、前記クエリに対応するフィンガープリントをデータ構造に格納することと、
少なくとも前記プロセッサが、前記クエリの前記実行期間が前記完了閾値を超えることに応答して、評価のために、フィンガープリントにフラグを立てることと、
前記フィンガープリントに対応する後続のクエリ要求の受信に応答して、かつ、前記フィンガープリントにフラグが立てられていることに基づいて、前記フィンガープリントの統計を分析して、前記後続のクエリ要求の実行が、前記データベース管理システムに許容できない悪影響をもたらすか否かを判断することと、
少なくとも前記プロセッサが、前記分析の結果に基づいて、前記フィンガープリントを複数の異なるクエリクラスのうちの１つに分類するために、前記データ構造を修正することと、
少なくとも前記プロセッサが、前記フィンガープリントの分類に基づいて、将来のクエリ要求の実行を制御することと、を実行させる、コンピューティングシステム。
【請求項５】
前記分析モジュールは命令をさらに含み、前記命令は、前記少なくとも１つのプロセッサによって実行されると、前記コンピューティングシステムに、
前記分析の結果に基づいて、前記フィンガープリントを（ｉ）許容されるクエリクラス、または（ｉｉ）ブロックされるクエリクラスに割り当てることによって、前記フィンガープリントを分類させ、
（ｉ）前記フィンガープリントが前記許容されるクエリクラスに割り当てられる場合、前記統計を繰り返し分析することなく、前記将来のクエリは完了するように実行され、（ｉｉ）前記フィンガープリントが前記ブロックされるクエリクラスに割り当てられる場合、前記将来のクエリは実行されないようにブロックされる、請求項４に記載のコンピューティングシステム。
【請求項６】
前記統計は、クエリ説明データまたはデータベースサーバハンドラ統計を含む、請求項１または４に記載のコンピューティングシステム。
【請求項７】
分析されるべき前記統計は、取得するためにアクティブでないデータベースリソースの利用を必要とするデータベースパフォーマンス統計を除外する、請求項１または４に記載のコンピューティングシステム。
【請求項８】
前記複数の異なるクエリクラスは、第１のデータベースに対して実行されるクエリに対応するフィンガープリントのための、許容されるクエリクラスを含む、請求項１または４に記載のコンピューティングシステム。
【請求項９】
前記複数の異なるクエリクラスは、前記第１のデータベースとは異なる第２のデータベースに対して実行されるクエリに対応するフィンガープリントのための、リダイレクトされたクエリクラスをさらに含む、請求項８に記載のコンピューティングシステム。
【請求項１０】
少なくとも前記プロセッサによって実行されると、前記コンピューティングシステムに、
前記第１のデータベースに対して前記クエリの実行を引き起こさせ、
前記リダイレクトされたクエリクラスにおける前記フィンガープリントの分類に基づいて、前記第２のデータベースに対する前記将来のクエリの実行を引き起こさせる、命令をさらに含む、請求項９に記載のコンピューティングシステム。
【請求項１１】
前記分析モジュールは命令をさらに含み、当該命令は、前記少なくとも１つのプロセッサによって実行されると、前記コンピューティングシステムに
評価のためにフラグが立てられている前記フィンガープリントをもたらした前記クエリの実行に応答して、前記フィンガープリントを分類するための統計の分析を妨げさせる、請求項４に記載のコンピューティングシステム。
【請求項１２】
コンピュータで実施される方法であって、
データベース管理システムによって実行されるクエリが、完了閾値を超える実行時間を有することを判断することと、
前記クエリに対応するフィンガープリントをデータ構造に格納することと、
前記クエリの実行期間が前記完了閾値を超えることに応答して、評価のために前記フィンガープリントにフラグを立てることと、
前記フィンガープリントに対応する後続のクエリの要求の受信に応答して、かつ、前記フィンガープリントにフラグが立てられていることに基づいて、前記フィンガープリントの統計を分析して、前記後続のクエリの要求の実行が、前記データベース管理システムに許容できない悪影響をもたらすか否かを判断することと、
前記分析の結果に基づいて、前記フィンガープリントを複数の異なるクエリクラスのうちの１つに分類するために、データ構造を修正することと、
前記フィンガープリントの前記分類に基づいて、将来のクエリの要求の実行を制御することと、を含む、方法。
【請求項１３】
前記フィンガープリントは、前記分析の結果に基づいて、当該フィンガープリントを（ｉ）許容されるクエリクラス、または（ｉｉ）ブロックされるクエリクラスに割り当てることによって分類され、
（ｉ）前記フィンガープリントが前記許容されるクエリクラスに割り当てられる場合、前記統計を繰り返し分析することなく、前記将来のクエリは完了するように実行され、（ｉｉ）前記フィンガープリントが前記ブロックされるクエリクラスに割り当てられる場合、前記将来のクエリは実行されないようにブロックされる、請求項１２に記載の方法。
【請求項１４】
前記許可されるクエリクラス内の前記フィンガープリントは、第１のデータベースに対して実行されるクエリに対応し、前記異なるクエリクラスは、前記第１のデータベースとは異なる第２のデータベースに対して実行されるように指定されたクエリに対応するフィンガープリントのためにリダイレクトされたクエリクラスをさらに含む、請求項１３に記載の方法。
【請求項１５】
前記将来のクエリの実行を制御することは、
前記フィンガープリントに対応する前記クエリの実行を前記第１のデータベースに対して完了させることと、
前記リダイレクトされたクエリクラスにおける前記フィンガープリントの前記分類に基づいて、前記フィンガープリントに対応する前記将来のクエリを前記第２のデータベースに対して実行させることとを含む、請求項１４に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
例えば、オラクル・サービス・クラウドのようなクラウドベースのアプリケーションは、リモートクライアント端末のユーザがアプリケーションオブジェクトに対して実行されるカスタムクエリを指定することを可能にするアプリケーションプログラミングインターフェイス（「ＡＰＩ」）を含む。当該リモートクライアント端末がクエリを開始することを可能にする、RightNow Object Query Language（「ＲＯＱＬ」）のようなクエリツールは、ユーザが作成することができるクエリに、ほとんど前向きでないチェックまたは制限を課す。ユーザが定義したクエリに対する前向きの制約の欠如のために、非効率的であるか、または不十分に結合された、問題のあるクエリが定義され、または、呼び出され得る。そのような問題のあるクエリの実行は、かなりのネットワークおよびデータベース管理リソース（ＣＰＵ時間、データベース接続、ネットワーク帯域幅、ネットワーク通信、メモリ等）を消費する。問題のあるクエリを実行するために消費される重要なリソースは、クエリを開始したクライアント端末、およびクラウド環境においてアプリケーションオブジェクトにアクセスする企業エンティティにおける他のクライアント端末に対するアプリケーションオブジェクトのパフォーマンスに悪影響を及ぼす。悪影響は、クラウドアプリケーション環境において影響を受けるリソースを共有する異なるエンティティにおけるクライアント端末にさえ影響を及ぼし得る。
【発明の概要】
【発明が解決しようとする課題】
【０００２】
問題のあるクエリの実行を制限する試みは、許容されるクエリの最大許容ランタイムの確立に関与してきた。完了することなく最大許容ランタイムを超えるランタイムを有する全てのクエリは終了される。そのようなアプローチは、その１つの問題のあるクエリを実行する影響を制限する。しかしながら、パフォーマンスの影響は、問題のあるクエリのランタイムが当該最大許容ランタイムに達するまで、ある期間、依然として経験され得る。同じ問題のあるクエリを繰り返し実行すると、アプリケーションオブジェクトは、当該問題のあるクエリが呼び出された時に当該アプリケーションオブジェクトが最初に経験したのと同じ悪影響を受ける。さらに、当該問題のあるクエリは完了する前に終了されるので、当該クエリを呼び出したクライアント端末は、アプリケーションオブジェクトのパフォーマンスに悪影響を及ぼすにもかかわらず、当該クエリの結果を受信しない。
【課題を解決するための手段】
【０００３】
概要
一実施形態では、非一時的なコンピュータ可読媒体はコンピュータが実行可能な命令を記憶し、当該命令は、コンピューティングシステムの少なくともプロセッサによって実行されると、当該コンピューティングシステムに、少なくともプロセッサによって、データベース管理システムによって実行されるクエリが完了閾値を超える実行時間を有すると判断させ、少なくとも当該プロセッサによって、当該クエリに対応するフィンガープリントをデータ構造に格納させ、少なくとも当該プロセッサによって、クエリの実行期間が完了閾値を超えることに応答して、評価のために、フィンガープリントにフラグを立てさせ、当該フィンガープリントに対応する後続のクエリの要求の受信に応答して、かつ、フラグが立てられているフィンガープリントに基づいて、当該フィンガープリントの統計を分析して、当該後続のクエリの要求の実行が、データベース管理システムに許容できない悪影響をもたらすか否かを判断させ、少なくとも当該プロセッサによって、当該分析の結果に基づいて、当該フィンガープリントを複数の異なるクエリクラスのうちの１つに分類するために、当該データ構造を修正させ、少なくとも当該プロセッサによって、フィンガープリントの分類に基づいて、将来のクエリの要求の実行を制御させる。
【０００４】
別の実施形態によれば、コンピュータが実行可能な命令は、少なくとも前記プロセッサによって実行されると、前記コンピューティングシステムに、分析の結果に基づいて、当該フィンガープリントを（ｉ）許容されるクエリクラス、または（ｉｉ）ブロックされるクエリクラスに割り当てることによって、フィンガープリントを分類させる命令をさらに含む。当該フィンガープリントが許容されるクエリクラスに割り当てられる場合、当該将来のクエリは、統計を繰り返し分析することなく、完了するように実行され、当該フィンガープリントがブロックされるクエリクラスに割り当てられる場合、当該将来のクエリは実行されることからブロックされる。
【０００５】
別の実施形態によれば、当該統計は、クエリ説明データまたはデータベースサーバハンドラ統計を含む。
【０００６】
別の実施形態によれば、分析されるべき統計は、取得するためにアクティブでないデータベースリソースの利用を必要とするデータベースのパフォーマンスの統計を除外する。
【０００７】
別の実施形態によれば、当該複数の異なるクエリクラスは、第１のデータベースに対して実行されるべきクエリに対応するフィンガープリントのための許容されるクエリクラスを含む。
【０００８】
別の実施形態によれば、当該複数の異なるクエリクラスは、当該第１のデータベースとは異なる第２のデータベースに対して実行されるべきクエリに対応するフィンガープリントのためのリダイレクトされたクエリクラスをさらに含む。
【０００９】
別の実施形態によれば、コンピュータが実行可能な命令は少なくとも当該プロセッサによって実行されると、当該コンピューティングシステムに、当該クエリを第１のデータベースに対して実行させ、当該リダイレクトされたクエリクラスにおけるフィンガープリントの分類に基づいて、当該第２のデータベースに対して当該将来のクエリを実行させる命令をさらに含む。
【００１０】
別の実施形態によれば、コンピュータが実行可能な命令少なくとも当該プロセッサによって実行されると、評価のためにフラグが立てられているフィンガープリントをもたらしたクエリの実行に応答して、当該フィンガープリントの分類のために、当該統計の分析を当該コンピューティングシステムに阻止させる命令をさらに含む。
【００１１】
別の実施形態によれば、コンピューティングシステムは、メモリに接続されたプロセッサと、非一時的なコンピュータ可読媒体に格納され、かつ、命令で構成された補正モジュールとを備え、当該命令は、当該プロセッサによって実行されると、当該プロセッサに複数のリモートデバイスからアプリケーションアクティビティデータを受信させ、当該アプリケーションアクティビティデータを分析して、当該複数のリモートデバイスの各々に関連付けられるアプリケーションアクティビティの組を決定させ、当該アプリケーションアクティビティの組を分析して、当該複数のリモートデバイスのうちのリモートデバイスの組に関連付けられる１つまたは複数のチャレンジを決定させ、１つまたは複数のチャレンジの各々に対する修正アクションを決定させ、当該修正アクションに基づいて、一組のリモートデバイスのための修正アクションデータ構造を生成させる。
【００１２】
別の実施形態によれば、コンピューティングシステムは、少なくとも１つのメモリに接続された少なくとも１つのプロセッサと、非一時的なコンピュータ可読媒体に格納され、かつ、命令を含む分析モジュールとを備え、当該命令は、当該少なくとも１つのプロセッサによって実行されると、当該コンピューティングシステムに、少なくともプロセッサによって、データベース管理システムによって実行されるクエリが完了閾値を超える実行時間を有すると判定させ、少なくとも前記プロセッサによって、当該クエリに対応するフィンガープリントをデータ構造に格納させ、少なくとも当該プロセッサによって、当該クエリの実行期間が完了閾値を超えることに応答して、評価のためにフィンガープリントにフラグを立てさせ、当該フィンガープリントに対応する後続のクエリの要求の受信に応答して、かつ、当該フラグが立てられているフィンガープリントに基づいて、当該フィンガープリントの統計を分析して、当該後続のクエリの要求の実行が、当該データベース管理システムに許容できない悪影響をもたらすか否かを判断させ、少なくとも当該プロセッサによって、当該分析の結果に基づいて、当該フィンガープリントを複数の異なるクエリクラスのうちの１つに分類するために、当該データ構造を修正させ、少なくとも当該プロセッサによって、当該フィンガープリントの分類に基づいて、将来のクエリの要求の実行を制御させる。
【００１３】
別の実施形態によれば、分析モジュールは命令をさらに含み、当該命令は、当該少なくとも１つのプロセッサによって実行されると、当該コンピューティングシステムに、分析の結果に基づいてフィンガープリントを（ｉ）許容されるクエリクラス、または（ｉｉ）ブロックされるクエリクラスに割り当てることによって、当該フィンガープリントを分類する。当該フィンガープリントが許容されるクエリクラスに割り当てられる場合、将来のクエリは、統計を繰り返し分析することなく完了するように実行され、当該フィンガープリントがブロックされるクエリクラスに割り当てられる場合、将来のクエリは、実行されることからブロックされる。
【００１４】
別の実施形態によれば、当該統計は、クエリ説明データまたはデータベースサーバハンドラ統計を含む。
【００１５】
別の実施形態によれば、分析されるべき統計は、取得するためにアクティブでないデータベースリソースの利用を必要とするデータベースパフォーマンス統計を除外する。
【００１６】
別の実施形態によれば、当該複数の異なるクエリクラスは、第１のデータベースに対して実行されるべきクエリに対応するフィンガープリントのための許容されるクエリクラスを含む。
【００１７】
別の実施形態によれば、当該複数の異なるクエリクラスは、当該第１のデータベースとは異なる第２のデータベースに対して実行されるべきクエリに対応するフィンガープリントのためのリダイレクトされたクエリクラスをさらに含む。
【００１８】
別の実施形態によれば、当該分析モジュールは命令をさらに含み、当該命令は、当該少なくとも１つのプロセッサによって実行されると、当該コンピューティングシステムに、当該第１のデータベースに対する当該クエリの実行と、当該リダイレクトされたクエリクラスにおけるフィンガープリントの分類に基づいて、当該第２のデータベースに対する当該将来のクエリの実行とを、引き起こさせる。
【００１９】
別の実施形態によれば、当該分析モジュールは命令をさらに含み、当該命令は、当該少なくとも１つのプロセッサによって実行されると、当該コンピューティングシステムに、評価のためにフラグが立てられたフィンガープリントをもたらしたクエリの実行に応答して、当該フィンガープリントを分類するための統計の分析を妨げさせる。
【００２０】
別の実施形態によれば、コンピュータで実施される方法は、データベース管理システムによって実行されるクエリが、完了閾値を超える実行時間を有するということを判断することと、当該クエリに対応するフィンガープリントをデータ構造に格納することと、当該クエリの実行期間が完了閾値を超えることに応答して、評価のためにフィンガープリントにフラグを立てることと、当該フィンガープリントに対応する後続のクエリの要求の受信に応答して、かつ、当該フィンガープリントがフラグを立てられていることに基づいて、当該フィンガープリントの統計を分析して、当該後続のクエリの要求の実行が、当該データベース管理システムに許容できない悪影響をもたらすか否かを判断することと、当該分析の結果に基づいて当該フィンガープリントを複数の異なるクエリクラスのうちの１つに分類するために、当該データ構造を修正することと、当該フィンガープリントの分類に基づいて当該将来のクエリの要求の実行を制御することとを含む。
【００２１】
別の実施形態によれば、フィンガープリントは、当該フィンガープリントを分析の結果に基づいて、（ｉ）許容されるクエリクラス、または、（ｉｉ）ブロックされるクエリクラスに割り当てることによって、分類される。当該フィンガープリントが当該許容されるクエリクラスに割り当てられる場合、当該将来のクエリは、当該統計を繰り返し分析することなく完了するように実行され、当該フィンガープリントが当該ブロックされるクエリクラスに割り当てられる場合、当該将来のクエリは実行されることからブロックされる。
【００２２】
別の実施形態によれば、当該許容されるクエリクラス内のフィンガープリントは、第１のデータベースに対して実行されるべきクエリに対応し、当該異なるクエリクラスは、当該第１のデータベースとは異なる第２のデータベースに対して実行されるように指定されたクエリに対応するフィンガープリントのためのリダイレクトされたクエリクラスをさらに含む。
【００２３】
別の実施形態によれば、当該将来のクエリの実行を制御することは、当該フィンガープリントに対応する当該クエリの実行を当該第１のデータベースに対して完了させることと、当該リダイレクトされたクエリクラスにおける当該フィンガープリントの分類に基づいて、当該第２のデータベースに対して当該フィンガープリントに対応する当該将来のクエリを実行させることとを含む。
【００２４】
上記の概要は、本明細書で説明されるシステムおよび／または方法のいくつかの態様の基本的な理解を提供するために、簡略化された概要を示す。この概要は、本明細書で説明されるシステムおよび／または方法の広範な概観ではない。極めて重要な／必須の要素を識別すること、または、そのようなシステムおよび／または方法の範囲を描写することは意図されていない。その唯一の目的は、後に提示される、より詳細な説明の前置きとして、いくつかの概念を簡略化された形で提示することである。
【図面の簡単な説明】
【００２５】
【図１】効率的に利用される計算リソースおよびネットワークリソースに対するデータベースクエリ負荷を自動的に評価し、適応的に処理するクラウドベースのデータベースシステムの一実施形態を例示する図である。
【図２Ａ】クエリ負荷の評価および適応的処理に関連付けられる方法の一実施形態をグラフで示す流れ図を例示する図である。
【図２Ｂ】クエリ負荷の評価および適応的処理に関連付けられる方法の一実施形態をグラフで示す流れ図を例示する図である。
【図２Ｃ】クエリ負荷の評価および適応的処理に関連付けられる方法の一実施形態をグラフで示す流れ図を例示する図である。
【図２Ｄ】クエリ負荷の評価および適応的処理に関連付けられる方法の一実施形態をグラフで示す流れ図を例示する図である。
【図２Ｅ】クエリ負荷の評価および適応的処理に関連付けられる方法の一実施形態をグラフで示す流れ図を例示する図である。
【図２Ｆ】クエリ負荷の評価および適応的処理に関連付けられる方法の一実施形態をグラフで示す流れ図を例示する図である。
【図３】開示されるシステムおよび／または方法の実施形態で構成されたコンピューティングシステムの一実施形態を例示する図である。
【発明を実施するための形態】
【００２６】
詳細な説明
本明細書に組み込まれ、その一部を構成する添付の図面は、本開示の様々なシステム、方法、および他の実施形態を示す。図面において例示された要素の境界（例えば、ボックス、ボックスのグループ、または他の形状）は、当該境界の一実施形態を表すことが理解されるであろう。ある実施形態では、１つの要素を複数の要素として実施されることができ、または、複数の要素は１つの要素として実施され得る。ある実施形態では、別の要素の内部構成要素として示される要素は、外部構成要素として実施されてもよく、逆もまた同様である。さらに、要素は、一定の縮尺で描かれていない場合がある。
【００２７】
本明細書では、クラウドベースのアプリケーションオブジェクトのパフォーマンスを維持するために、データベースクエリ負荷の自動評価およびクエリの適応処理を提供するシステムおよび方法が説明される。例えば、オラクルサービスクラウドのようなクラウドベースのアプリケーションは、リモートクライアント端末のユーザがアプリケーションオブジェクトに対して実行されるべきカスタムクエリを指定することを可能にするアプリケーションプログラミングインターフェイス（「ＡＰＩ」）を含む。当該リモートクライアント端末がクエリを開始することを可能にする、RightNow Object Query Language（「ＲＯＱＬ」）のようなクエリツールは、ユーザが作成することができるクエリに、前向きのチェックまたは制限を殆ど課さない。結果として、幾つかの問題のあるクエリの実行が、アプリケーションオブジェクトのパフォーマンスに重大な影響を与える大きな負荷をデータベースに与えることは避けられない。
【００２８】
問題のあるクエリをブロックする以前の試みは、実行されることからブロックされるべきクエリのクラスを構成する、問題のあるクエリのいわゆる「ブラックリスト」を定義するデータ構造にそのようなクエリを追加することを伴ってきた。ブラックリストされたクエリの呼び出しは、完了するまでに時間がかかりすぎるため、実行からブロックされることによって処理される。しかしながら、問題のあるクエリが完了するまでに時間を要したという唯一の理由のためにブラックリストにクエリを追加することは、柔軟性に欠け、許容できない数の「誤検出」をもたらす。誤検出は、閾値ランタイムを超えるにもかかわらず、クエリを完了するのに必要な延長されたランタイムの根本原因ではないクエリである。結局、クエリのランタイムが当該閾値ランタイムを超えさせ得るクエリには無関係な多くの要因（例えば、ネットワークトラフィック、同時データベース接続の数など。）がある。
【００２９】
ブラックリストに付加される誤検出の数を低減するための別の以前の試みとして、いわゆる「ホワイトリスト」によって定義される別のクラスの許容されるクエリが作成されている。当該ホワイトリストは、リモートクライアント端末によって呼び出されると完了するまで実行される許容されるクエリの集合を含む。ホワイトリストに追加されるために、クエリは、クエリ自体の態様がアプリケーションオブジェクトのパフォーマンスに許容できない悪影響を与えるか否かを判定するために分析されるべきである。しかしながら、すべてのクエリを分析することは、データベースおよびネットワーク計算リソースを不必要に消費し、そして、緩和されるために求められるパフォーマンスに非常に悪影響をもたらし得る。例えば、一度だけ呼び出されるワンオフクエリは、当該ワンオフクエリをブラックリストまたはホワイトリストに追加すべきか否かを判定するために、分析される。計算およびネットワークリソースは、当該評価を実行するために消費され、したがって、当該アプリケーションオブジェクトのパフォーマンスに悪影響を及ぼす。しかしながら、当該ワンオフクエリは決して再び呼び出されないため、当該分析を実行する利点は、将来の悪影響を弱めるために実現されないであろう。
【００３０】
さらに、従来の態様で柔軟性に欠けたブラックリストおよびホワイトリスト構造を使用することは、当該クエリ自体のパラメータに無関係なデータベースの変更または他の変更に適切に適合し得ない。そのような変更は、当該クエリが以前に分析されホワイトリストに登録されていても、当該アプリケーションオブジェクトのパフォーマンスに対する当該クエリの悪影響を変更し得る。例えば、データベース内のデータが経時的に進化する（例えば、サイズが劇的に増加する）か、またはデータベースのスキーマが変化すると、ホワイトリストに登録されたクエリのその後の呼び出しは、当該アプリケーションオブジェクトに対して許容できない悪影響を引き起こし得る。クエリのそのような将来の呼び出しを処理することに対する適応アプローチは、クエリが分析されて分類された後に生じるそのような変化の影響を認識するべきである。そのような変化を認識することに応答して、当該システムおよび当該方法の適応的な性質は、当該クエリの将来の呼び出しから生じ得るかもしれない悪影響に対処するために、影響を受けたクエリの分類を自動的に更新することができる。
【００３１】
本開示は、データベースクエリを分析するための、および、システムが疑わしいと思うクエリの実行が当該システムに大きな負荷をもたらすことを制御するための、システムおよび方法を含む。一実施形態では、疑わしいと識別されたクエリは、当該システムに悪影響を及ぼすと評価されかつ、見なされるフィンガープリントを有するクエリの次の又は後の実行に応答して、分類される。当該クエリの将来の実行は、当該分類（例えば、ブラックリスト分類）に基づいて制御される。本システムおよび方法は、クエリが完了するためにちょうど経過した時間を超えるメトリックを使用して、そのクエリがブラックリストに入れるか、そうでなければ、分類されるべきか否かを決定する。一実施形態によれば、本システムおよび方法は、クエリが最初に呼び出されるときに当該クエリを実行するのに必要な時間を使用して、クエリに関連付けられたフィンガープリントを有する当該クエリが、適合するフィンガープリントを有するクエリの後の呼び出しに応答して分析されるべきか否かを決定する。そのような分析は、複数の同時のユーザを有し、通信ネットワークを介してアクセス可能なアプリケーションオブジェクトのパフォーマンスに対するフィンガープリントを有するクエリの実行の負荷および影響を評価する。初めて呼び出されたクエリ（または、第２、第３、第４のような呼び出しのような他の早期のインスタンス）の持続時間が完了閾値時間を超える場合、当該クエリフィンガープリントは、データ構造（例えば、分析を保留しているクエリのテーブル）における評価のために指定される。クエリフィンガープリントは、当該クエリフィンガープリントに対応するクエリが実行されることが許可されるか、または、当該クエリの将来の呼び出しに応答してブロックされるべきか否かを決定するために、保留中の評価としてデータ構造においてフラグが立てられ、またはそうでなければ、指定され得る。
【００３２】
ワンオフクエリについてフィンガープリントを分析することに起因するであろうアプリケーションオブジェクトへの悪影響を緩和するために、最初の呼び出しに応答して実行されるクエリは、たとえ当該クエリが完了閾値時間を超えても、完了まで実行される。完全に完了したクエリの結果は達成され得、完了の通知は、任意に、インターネット、プライベートネットワーク、または他の適切な通信ネットワークのような通信ネットワークを介して、クライアント端末に返され得る。しかしながら、アプリケーションオブジェクトまたはシステムのパフォーマンスに対するクエリの影響を判定するための当該クエリフィンガープリントの分析は、当該クエリが呼び出された初回に応答して実行されず、その結果、クエリのフィンガープリントが評価のために指定される。
【００３３】
フラグが立てられたか、さもなければ評価を必要とするとして指定されたフィンガープリントを含む２回目の又は後続のクエリが受信されることに応答して、分析モジュールは、利用可能な情報を使用して、当該フィンガープリントに対応するクエリ負荷を評価する。利用可能な情報は、例えば、クエリ説明データ、および、（本明細書では「ハンドラ統計」と呼ばれる）データベース管理サーバハンドラ統計のような任意の低オーバーヘッドの情報を含み得る。このような利用可能な情報は、データを読み出し、および／または、当該データをデータベースに書き込む目的で、当該データベースの標準的な管理を通じて生成される。当該クエリ説明およびハンドラ統計は、そのようなデータが特に当該データを収集する目的のためにデータベースリソース（例えば、ネットワーク通信、データベースパフォーマンス統計を測定するのに必要な内部機器など）のアクティブ化を必要とすることなく、当該分析モジュールに容易に利用可能であるので、利用できる。データベースパフォーマンスを測定するために、このようなデータベースリソースを特にアクティブ化することは、それ自体が本システムに付加的な負荷を課すことになり、これは緩和されることが求められる。したがって、クエリを実行するためのデータベースの標準動作の結果として利用できない、別々に測定されたデータベースパフォーマンス統計は、任意に、考慮から除外され得る。
【００３４】
動作データベース内のデータの特定の固定されたセットに対するクエリの場合、当該クエリのためのクエリ説明データおよびハンドラ統計は、一般に、当該クエリの経過時間と比較して一定である。クエリの経過時間は、クエリが実行される時点におけるデータベースのロードのような、当該クエリ自体とは無関係な因子に依存して、同じクエリの異なる呼び出しについて異なり得る。したがって、クエリ説明データおよびハンドラ統計は、クエリフィンガープリント自体を利用するクエリによって課される真のリソース負荷を決定するためにクエリフィンガープリントを分析する際に適切な考慮事項であり、したがって、そのようなクエリがアプリケーションオブジェクトに及ぼすであろう影響である。本システムおよび方法は、閾値と比較したクエリの実行の経過時間を、おそらくブラックリストに登録されるべきクエリフィンガープリントを評価するためのトリガとして使用するが、それらの経過時間は、クエリフィンガープリントを実際にブラックリストに登録するべきか否かを決定する際における唯一の決定因子ではない。代わりに、説明データおよびハンドラ統計は、データベースまたは当該データベース内のデータに変更がない場合に当該フィンガープリントについて一貫性がある分析を行うために使用される。分析の結果はまた、クエリが運用データベースに対して又は報告データベースに対して実行されるべきかに関わらず同じとなるであろう。
【００３５】
別の実施形態によれば、クエリによって課される負荷または影響を示す他の情報は、分析の一部と見なされ得る。例えば、MySQLパフォーマンス情報は、クエリの分析中に考慮される因子であり得る。「show profile」またはperformance_schemaは有用な情報を含む。しかし、これらのツールは、クエリを実行するために既に起動されていない内部機器を起動することによってオーバーヘッドを導入するが、データを収集するためにのみ、そのようなデータは、任意に当該分析から除外され得る。
【００３６】
クエリ説明およびハンドラ統計のような利用可能な情報の考慮は、例えば、本システムおよび方法がデータベースの変化に適合することも可能にする。例えば、データボリューム、テーブル統計、インデックスなどに対する変更は、そのような利用可能な情報に反映されるであろう。本システムおよび方法は、クエリの実行における傾向に基づいてそのような変化を検出でき、そして、データ構造において、再評価のために変更されたデータの影響を受けるクエリフィンガープリントを指定することができる。さらに、定義された数の呼び出しが発生した後に更新されなかった古いクエリもまた、データ構造において再評価のためにフラグが立てられるか、またはそうでなければ、指定され得る。本明細書で説明されるクエリフィンガープリントの分析は、アプリケーションオブジェクトに対するクエリの負荷および潜在的な悪影響を再評価するために、再び、変更されたデータに基づいて実行され得る。
【００３７】
クエリフィンガープリントの評価の結果に基づいて、分析モジュールは、クエリフィンガープリントの分類を、複数の異なるクエリクラスのうちの１つに含めるようにデータ構造を修正する。例えば、当該異なるクエリクラスは、少なくとも、（ｉ）後に呼び出されるときに実行のために指定されたクエリを含む許容されるクエリクラス（例えば、ホワイトリスト）、および、（ｉｉ）後に呼び出されるときに実行されないブロックされるクエリクラス（例えば、ブラックリスト）を含む。
【００３８】
システムは、クエリフィンガープリントの分類を少なくとも部分的に使用して、同じまたは同様のクエリがその後に実行のために受信されたことに応答して、そのようなフィンガープリントを有するクエリの実行を制御する。許容されるクエリクラスに分類されたクエリフィンガープリントを有する後続のクエリは、運用データベースに対して実行され得る。ブロックされるクエリクラスに分類されるクエリフィンガープリントを有するクエリは、そのようなクエリの将来の呼び出しに応答して実行からブロックされ得る。例えば、同じまたは同様のクエリ（同じフィンガープリントを含むクエリ）が実行のために提出され、ブロックされたクラスにあると検出された場合、システムはクエリの実行をブロックする。したがって、システムは、ブロックされるクエリを実行することによって使用されるであろう大量のコンピューティングリソースの消費を回避する。
【００３９】
代替の実施形態によれば、クエリフィンガープリントは、本明細書ではリダイレクトされたクエリクラスと呼ばれる第３のクラスに分類され得る。当該リダイレクトされたクエリクラスにクエリフィンガープリントを有するクエリは、アプリケーションオブジェクトに悪影響を及ぼすが、ブロックされるクエリクラスにクエリフィンガープリントを有するクエリによって引き起こされる悪影響ほど厳しい悪影響を及ぼさない。リダイレクトされたクエリクラスにフィンガープリントを有するクエリは、例えば報告データベースのような、動作データベースとは異なる別個の第２のデータベースに対して実行される。したがって、動作データベースのパフォーマンスは、アプリケーションオブジェクトに顕著な悪影響を及ぼすクエリをブロックすることによって維持され得る。リダイレクトされたクエリクラスのクエリフィンガープリントを有するクエリは、その中程度の悪影響にもかかわらず、報告データベースに対して実行され得る。
【００４０】
図１を参照すると、計算リソースおよびネットワークリソースを効率的に利用するためにデータベースのクエリ負荷を自動的に評価し、適応的に取り扱うことに関連付けられるクラウドベースのデータベースシステム１００の一実施形態が示されている。データベースシステム１００は、通信ネットワーク１２０を介して複数のクライアント端末１０５、１１０、１１５と通信するように動作可能に接続されている。クライアント端末１０５、１１０、１１５は、クエリのためのユーザ定義パラメータを受信し、データベース１２５に対して当該クエリをリモートで呼び出すことができる。クエリの呼び出しは、データベースシステム１００が、１または複数のクライアント端末１０５、１１０、１１５によって送信されたクエリの実行に対する要求を受信することを指す。データベース１２５は、データベースシステム１００にホストされるか関連付けられたクラウドベースのアプリケーションオブジェクトにアクセス可能である。
【００４１】
一実施形態によれば、クライアント端末１０５、１１０、１１５またはデータベースシステム１００は、例えば、図３を参照して例示および説明されるように、コンピューティングデバイス３００であり得る。例えば、データベースシステム１００は、クエリ実行エンジン１３０を含む。クエリ実行エンジン１３０は、ユーザが定義したクエリのパラメータを受信して、当該受信したパラメータに基づいて、例えば動作データベース１２５のようなデータベースに対して実行されるべきクエリのための説明プランを生成するように、動作可能である。説明プランは、データベース内のデータにアクセスするために使用される一組の順序付けられた実行ステップを含む。各実行ステップは、選択タイプ（例えば、SIMPLE、PRIMARY、UNIONなど）、結合タイプ（例えば、CONST、REF、RANGEなど）、テーブル名、および、任意に、当該クエリの他の態様に関する情報を有する。実行エンジン１３０は、クエリの実行プランを決定し、「explain」文の呼び出しに応答してのようにそうするように指示されたときに、当該実行プランを説明プランに定義する。
【００４２】
説明プランに含まれる情報は、本明細書において「フィンガープリント」または「クエリフィンガープリント」と称されるクエリの一般的な定義に含まれ得る。クエリのフィンガープリントは、元のクエリの「正規化された」または「包括的な」署名から構成される。例えば、呼び出されたクエリに固有の値は署名から除外され、クエリトークンは小文字に変換され、標準の別名は署名に適用される、等である。結果は、一般的な又は標準化された用語で表される、当該クエリの機能的態様の包括的な記述である。署名の包括的な記述は、呼び出されたクエリに特有ではなく、異なるクエリの構造を表し得る。例えば、以下のクエリ、すなわち、
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）である。説明クエリは、当該クエリフィンガープリントが導出された後に、取得され得る。したがって、クエリのフィンガープリントは、当該クエリの実行中に行なわれる少なくとも包括的な機能に基づいて、クエリの一意な識別子と見なされ得る。
【００４３】
一実施形態では、たとえば、クエリの特定の呼び出しの間にデータがアクセスされるべきデータベース内の特定の位置のようなクエリに固有な情報およびパラメータは、当該フィンガープリントから省略され得る。したがって、フィンガープリントは、第１のクエリの機能的態様を示すことができ、これらの機能的態様は、各クエリの当該クエリに固有のパラメータによって第１のクエリと異なる１つまたは複数の他のクエリと共通して見い出され得る。換言すれば、２つのクエリは、同じフィンガープリントを有し得るが、同じクエリではない。
【００４４】
本明細書におけるクエリの評価への言及は、クエリまたはクエリフィンガープリントの評価を包含する。説明プランに含まれる文のようなクエリ、当該実行プラン、およびクエリのフィンガープリントを特徴付けるために使用される情報のような他の情報に関連付けられる情報は、本明細書では「クエリ説明データ」と称される。データベース１２５に対するクエリ説明データは、データベースシステム１００に提供される動作説明モジュール１３５によって、メモリ内に記憶され得るか、または、メモリから検索され得る。一実施形態では、２つのクエリは、同一のマッチするフィンガープリントを有し得るが、同一のクエリではない。例えば、両方ともフィンガープリントＸＹＺを有するクエリＡおよびＢは、異なる説明プランを有し得るが、最新の（または他の以前の）評価から得られた説明プランは、当該クエリに関連付けられる。
【００４５】
同様に、もし実行されると、アプリケーションオブジェクトのパフォーマンスに悪影響を及ぼすであろうフィンガープリントを有するクエリは、本明細書で説明されているように、報告データベース１４０にリダイレクトされ得、さもなければ、それに対して実行され得る。報告データベース１４０は、動作データベース１２５にも格納されるデータを記憶するように構成され得る。しかしながら、報告データベース１４０は、動作データベース１２５とは異なり、データベースシステム１００によって利用され得る。例えば、動作データベース１２５は、データベースシステム１００を介して、動作データベース１２５からデータを読み取り、または、動作データベース１２５にデータを書き込むためのクライアント端末１０５、１１０、１１５によって繰り返しアクセスされ得る。双方向通信は、概して両方向矢印１４５によって表される。動作データベース１２５によって維持される少なくともいくつかのデータは、矢印１５０によって示されるように、報告データベース１４０内に冗長的に格納され得る。報告データベース１４０へのアクセスは、一方向矢印１５５によって示されるように、読み出し動作に限定され得る。別の実施形態によれば、報告データベース１４０は、動作データベース１２５の役割に対して制限されたアプリケーションオブジェクトに関連付けられた役割を実行し得る。報告データベース１４０のためのクエリ説明データは、データベースシステム１００に提供される報告説明モジュール１６０によって、メモリ内に記憶され得るか、または、メモリから検索され得る。
【００４６】
動作説明モジュール１３５からのクエリ説明データおよび報告説明モジュール１６０からのクエリ説明データは、クエリ説明データ１６５としてデータ構造に格納され得る。クエリ説明データ１６５は、そのクエリ説明データ１６５に対応するそれぞれのクエリにリンクされ、クエリ説明データ１６５に対応するフィンガープリントを有するクエリによってアプリケーションオブジェクトに対する影響を評価するための分析モジュール１７０にアクセス可能である。クエリ説明データ１６５の例は、単一の行に帰着するキーのタイプ、呼び出されたクエリのタイプ、及び、当該呼び出されたクエリの識別子、を含むがこれらに限定されない。
【００４７】
分析モジュール１７０はまた、クエリ実行エンジン１３０によって実行されるクエリについてメモリに記憶されたハンドラ統計値１７５にアクセスし得る。ハンドラ統計値１７５は、データベース１２５内のあるデータがどの程度またはどの頻度で、アクセスされ、読み出され、追加されるかに関連付けられる任意のデータを含み得る。ハンドラ統計の例は、（ｉ）インデックス内の最初のエントリが読み出された回数、（ｉｉ）キーに基づいてテーブル内の行を読み出す要求の数、（ｉｉｉ）インデックス内の最後のキーを読み出す要求の数、（ｉｖ）キー順に次の行を読み出す要求の数、（ｖ）キー順に前の行を読み出す要求の数、（ｖｉ）固定された位置に基づいて行を読み出す要求の数、（ｖｉｉ）データファイルの次の行を読み出す要求の数、および、（ｖｉｉｉ）行をテーブルに挿入する要求の数、を含むが、これらに限定されない。
【００４８】
分析モジュール１７０は、クエリを識別するデータ構造１８０を生成し、かつ、当該クエリの持続時間が、完全に実行された後、完了閾値時間を超える場合、当該クエリにフラグを立て、または、そうでなければ評価を必要としているとして当該フラグを指定するように構成される。例えば、データ構造は、評価を必要とするものとして現在指定された（評価のためにフラグが立てられた）か、または、以前に評価されてクエリの複数の異なるクラスのうちの１つに分類されていたクエリに対応するフィンガープリントを識別するレコードのテーブルを含み得る。各クエリのフィンガープリントは、それらのクエリの最初の呼び出しに応答して、評価を必要とするものとして、データ構造において任意に指定され得る。評価は、クエリ自体がアプリケーションオブジェクトに対する許容できない悪影響の実質的な原因であるか否かを決定するために、行われる。この評価は、フィンガープリントを利用するクエリがその後呼び出されるまで遅延され得る。評価を遅らせることによって、当該クエリが最初に呼び出されたことに応答した、それは当該フィンガープリントが評価のために指定されたときである、評価は、実行されない。その結果、クエリがワンオフクエリである場合、システムおよびネットワークリソースは、再び呼び出されないクエリに対応するフィンガープリントを不必要に評価するために消費されない。したがって、フィンガープリントを有する少なくとも２つのクエリは、当該フィンガープリントが評価される前にシステムによって受信される必要がある。
【００４９】
図１に示されるデータベースシステム１００の実施形態は、企業組織のためのアプリケーションまたは分散アプリケーションオブジェクトの集合を含むコンピューティング／データ処理システムであり得る。アプリケーションオブジェクトおよびデータベースシステム１００は、クラウドベースのネットワーキングシステム、サービス型ソフトウェア（「ＳａａＳ」）アーキテクチャ、または、他のタイプのネットワーク化されたコンピューティングソリューションで作動するように構成され得る。一実施形態では、データベースシステム１００は、クライアント端末１０５、１１０、１１５のうちの１つまたは複数にコンテンツを提供し、受信者クライアント端末１０５、１１０、１１５が、クエリパラメータを受信すること、および、データベース１２５に対するクエリを呼び出すことに関して、少なくとも本明細書で開示される機能を実行することを可能にする。データベースシステム１００は、通信ネットワーク１２０を介して（例えば、サーバとして機能する）データベースシステム１００と通信する別個の、リモートに位置するコンピューティングデバイス／端末として、多くのクライアント端末１０５、１１０、１１５によって同時にアクセスされ得る。
【００５０】
一実施形態では、本明細書で説明されるデータベースシステム１００の構成要素または態様のうちの１つまたは複数は、非一時的なコンピュータ可読媒体に記憶されたプログラムモジュールとして構成され得る。プログラムモジュールは、少なくとも１つのプロセッサによって実行されると、データベースシステム１００の１つまたは複数のコンピューティングデバイスに、本明細書で説明されるような対応する機能を実行させる格納された命令で構成されている。
【００５１】
図２Ａ〜２Ｆは、アプリケーションオブジェクトの所望のパフォーマンスを維持するために、クエリ負荷を自動的に評価し、それらのクエリ負荷を適応的に処理するデータベースシステム１００に関連付けられる方法２００の一実施形態を示す。本方法は、実行されると、データベースシステム１００またはアプリケーションオブジェクトに課されるクエリの負荷を評価するために、クエリ説明データ１６５およびハンドラ統計値１７５に基づいてクエリのフィンガープリントを評価することを含む。このような負荷の評価は、以下、「クエリコスト」の評価または決定と称される。「高価な（expensive）」または「コストがかかる（costly）」クエリのフィンガープリントは、（たとえば、閾値に基づいて）望ましくない量のコンピューティングリソースを消費する重大な負荷をデータベースシステム１００に課す。したがって、コストがかかるクエリは、当該クエリが設定された閾値量を超える量のリソースを使用すると、アプリケーションオブジェクトのパフォーマンスおよび／またはシステムに許容できない悪影響を与えると考えられる。コンピューティングリソースは、ＣＰＵ時間、データベース接続、ネットワーク帯域幅、ネットワーク通信、メモリ、および／または、クエリの処理に使用される他のリソースを含み得るが、これらに限定されない。一実施形態では、コストのかかるクエリは、クライアント端末１０５、１１０、１１５によって経験されるアプリケーションオブジェクトの不十分なパフォーマンスを緩和するために、同じまたは同様のクエリの将来の呼び出しを検出することに応答して実行からブロックされる。反対に、「低費用」を伴う「低コストな」または「高価でない」クエリに対するフィンガープリントは、一般に許容可能であると考えられ、同じまたは同様の低コストなクエリの将来の呼び出しを検出することに応答して、実行される。
【００５２】
図２Ａにおいて、クライアント端末１０５による実行のために提出されたクエリ要求は、ブロック２０２において、分析モジュール１７０によって受信される。一実施形態では、クエリ要求は、クエリの実行が前述したように制御されるか否かをシステムが決定することを可能にするために、当該クエリが実行される前に、分析モジュール１７０によってインターセプトされる。クエリ要求は、通信ネットワーク１２０を介して受信され、クエリの実行中に行なわれるべき１つまたは複数の動作を定義する１つまたは複数の文を含む。クエリ要求の一部として受信される文は、クエリの一部として実行されるべき動作の組み合わせを一意に識別するために分析モジュール１７０が使用するクエリのフィンガープリントを定義する。ブロック２０４において、受信されたクエリのフィンガープリントは、同じフィンガープリントを有する別のクエリ要求が以前に受信されているか否かを決定するために、以前に受信されたクエリについてのフィンガープリント情報を含むデータ構造１８０内のエントリと比較される。
【００５３】
受信されたクエリ要求のフィンガープリントについての既存のレコードが存在しない場合、ブロック２０６において、当該クエリは完了まで実行され、返されたエラーコードが得られる。当該エラーコードは、クエリの実行が完了閾値時間を越えたか否かを示す情報を含む。例えば、返されたエラーコードは「ＯＫ」であり得、これは、当該クエリの完全な実行が完了閾値時間より短くなったことを示す。エラーコードは、「ＤＩＶＥＲＴ」または「ＴＯＯ ＬＯＮＧ」であり得、その各々は、当該クエリの持続時間が完了閾値時間を超えたことを示す。エラーコード「ＴＯＯ ＬＯＮＧ」は、動作データベース１２５または報告データベース１４０のいずれかに対するクエリの将来の呼び出しの実行が阻止されるべきであるほど、クエリ実行の持続時間が長かったことを示し得る。エラーコード「ＤＩＶＥＲＴ」は、クエリの実行期間が完了閾値時間を越えたことを示し得、したがって、費用がかかり得るが、当該クエリは、動作データベース１２５の代わりに報告データベース１４０に対して依然として実行され得る。
【００５４】
ブロック２０８で、返されたエラーコードに基づいて、分析モジュール１７０は、クエリが完了閾値時間を越えたか否かを決定する。そうでない場合、ブロック２１０において、分析モジュール１７０は、例えばクエリのフィンガープリントのような当該クエリに関する情報と、この時点で評価を必要としないクエリの指定とを含むデータ構造１８０（図１）を任意に生成できる。代わりに、クエリのフィンガープリントは、ホワイトリストに割り当てられたクエリを含む「許容される」クエリクラスに分類される。ホワイトリストに登録されたクエリは、アプリケーションオブジェクトに著しい悪影響を与えず、また、将来の呼び出しに応答して動作データベース１２５に対して実行可能であると見なされる。さらに、ホワイトリストに登録されたクエリの悪影響は、同じフィンガープリントを有するクエリの２回目またはその後の呼び出しに応答して説明データおよびハンドラ統計に基づくクエリのさらに他の評価が、それらのクエリを分類するために必要とされないようなものである。
【００５５】
システムパフォーマンスをさらに改善するために、クエリのフィンガープリントをホワイトリストに追加するための、ブロック２１０におけるデータ構造１８０の生成（またはデータ構造の他の修正）は、任意に省略され得る。ホワイトリストに登録されたクエリのライブラリを維持するために、かなりの記憶コストが生じる。ホワイトリストに登録されたクエリのライブラリを維持する代わりに、本明細書に記載するようにブラックリストされておらず、さもなければ分類されていないフィンガープリントに関連付けられるクエリは、そのようなクエリが呼び出されたときに、動作データベース１２５に対して単に実行され得る。
【００５６】
ブロック２０８において、分析モジュール１７０がクエリの実行は完了時間閾値を超えたと決定した場合、分析モジュール１７０は、ブロック２１２においてデータ構造１８０を生成する。データ構造１８０は、クエリに関する情報を含むように生成され、クエリのフィンガープリントが評価のためにフラグ付けされていることを示すために、対応するフラグビットまたは当該クエリのフィンガープリントの他のタイプのステータス指定を設定する。クエリがフラグ付けられたのは初めてであるので、当該クエリは、動作データベース１２５に対して完全に実行される。
【００５７】
しかしながら、データ構造１８０において評価のためにフラグがつけられて指定された後、クエリがその後に再び実行のために提出される場合、同じまたは同様のクエリが評価される。例えば、クエリのフィンガープリントは、将来、同じフィンガープリントを有するクエリの２回目またはその後の呼び出しに応答して説明データおよびハンドラ統計に基づいて分析されることになる。この追加の分析は、クエリのフィンガープリントが「ブロックされた」クエリクラスに分類されるべきか否かを決定する。ブロックされたクエリクラスは、ブラックリストされたクエリに対するフィンガープリントを含む。分析モジュール１７０によるそのような分類は、同じまたは同様のクエリがその後クライアント端末１０５、１１０、１１５による実行のために提出または呼び出されるときに、ブラックリストされたクエリのフィンガープリントを有するクエリが動作データベース１２５および／または報告データベース１４０に対して実行されるのを防ぐように、クエリ実行エンジン１３０の動作を制御する。
【００５８】
図２Ｂのブロック２１４において、分析モジュール１７０は、受信されたクエリ要求に対応するクエリのフィンガープリントが既存のデータ構造に含まれ、「保留評価」として指定されたと判断する。「保留評価」として指定されることは、当該クエリが、その後、フィンガープリントを有する別のクエリ要求を将来受信することに応答して、評価のために前もってフラグ付けされていることを意味する。クエリ実行エンジン１３０は、ブロック２１６においてハンドラ統計値を取得し、クエリを評価する準備をする。クエリ実行エンジン１３０によって収集されるハンドラ統計は、セッション値およびグローバル値の両方を含む。この１つの特定のクエリを実行するためのハンドラ統計値を得るために、クエリ実行エンジン１３０は、例えば、当該クエリの前後に収集されるべき統計値の差を決定することができる。
【００５９】
別の実施形態によれば、セッションカウンタは、例えばクエリの実行前に「FLUSH STATUS」のような適切なコマンドを使用してゼロにリセットされ得る。クエリの実行後に収集されるハンドラ統計値は、この特定のクエリの実行に起因するもののみを含む。ハンドラ統計値を得るために使用されるアプローチに関係なく、クエリキャッシュは、正確なハンドラ統計値を得ると見なされるべきではない。クエリキャッシュが同一のクエリを含む場合、クエリ実行エンジンは、現在の特定のクエリの実行のための結果の代わりにキャッシュされた結果を返す。したがって、セッションクエリキャッシュは、現在の検索のための現在のハンドラ統計値を得るために一時的にオフにされるべきである。
【００６０】
適切な準備が行われた後、クエリ実行エンジン１３０は、ブロック２１８において、受信されたクエリの実行を開始し、返されるエラーコードを取得する。上述したように、返されるエラーコードは、クエリの実行が完了するまでに要した時間の量を示す。エラーコードは、クエリの実行が完了閾値時間を超えなかったこと（例えば「ＯＫ」）、完了閾値時間を著しく超えたこと（例えば「ＴＯＯ ＬＯＮＧ」）、または、許容可能であると定義される限られたマージンだけ完了閾値時間を超えたこと（例えば「ＤＩＶＥＲＴ」）、を示すことができる。
【００６１】
ブロック２２０において、分析モジュール１７０は、ブロック２２０における現在のクエリについてクエリ実行エンジン１３０によって取得されたハンドラ統計値１７５を検索し、受信し、または、そうでなければアクセスする。同様に、分析モジュール１７０は、ブロック２２２でクエリ説明データ１６５にアクセスする。アクセスされたハンドラ統計値１７５およびクエリ説明データ１６５は、現在の評価のために分析モジュール１７０に結合されたメモリに一時的に記憶され、更新された評価が要求される度に更新され得る。
【００６２】
ブロック２２４において分析モジュール１７０によって実行される評価は、返されるエラーコード、ハンドラ統計値１７５、および、現在呼び出されているクエリに関する説明データ１６５に基づく。クエリまたはクエリのフィンガープリントの評価は、クエリまたはフィンガープリントを、複数の異なるクラスのうちの１つに属するものとして分類する。例えば、クエリは、以下のように４つのクラスのうちの１つに分類され得る：
単純なクエリ
ブロック２２６において、分析モジュール１７０は、クエリのフィンガープリントが単純なクエリに対応するか否かを判断する。単純なクエリは、主にコストに基づかず、最小コストで単一の行に帰着する一定または一意のキーのみを使用して定義される。従って、ハンドラ統計値１７５とは無関係に、単純なクエリのテストは、クエリ説明データ１６５に基づいて行なわれ得る。「単純な」クエリをテストするために、クエリ説明データの行または他の部分が検査され得る。単純なクエリの一実施形態は、以下を必要とする：
【００６３】
（１）第１セレクトＩＤの第１行は、join_typeが“system”"または“const”で、rows=１でなければならない。
【００６４】
（２）第１セレクトＩＤの後続の行は、join_type“eq_ref”を有さなければならない。
【００６５】
（３）最初の選択後の各セレクトＩＤについて、
【００６６】
（ａ）select_typeが“UNION”でない場合、セレクトＩＤの全ての行は、join_type“eq_ref”を有さなければならない。
【００６７】
（ｂ）select_typeが“UNION”である場合:
【００６８】
（ｉ）セレクトＩＤの最初の行は“system”または“const”でなければならず、rows=１である。
【００６９】
（ｉｉ）セレクトＩＤの後続の行は、join_type“eq_ref”を有さなければならない。
【００７０】
具体例として、「select objet by ID」というフィンガープリントを有するクエリは、単純なクエリである。ブロック２２６で識別された単純なクエリのフィンガープリントは、ブロック２２８で許容されるクエリクラスに分類され（例えば、ホワイトリストに追加され）、これは、クエリ実行エンジン１３０が将来の呼び出しに応答してフィンガープリントを利用してクエリを実行することを意味する。この許容されるクエリのデータ構造１８０はまた、ブロック２２８において、このクエリが評価を必要とすることを示すフラグまたは他の指定を除去するように修正される。結果として、当該許容されるクエリのフィンガープリントの将来の呼び出しは、クエリ実行エンジン１３０に、クエリのフィンガープリントを許容されると分類するために実行された評価を実行することなく、対応するクエリを実行させる。
【００７１】
許容されるクエリ
ブロック２２６でクエリが単純ではないと判定された場合、ブロック２３０で当該クエリが少なくとも許容可能であるか否かを決定するためにクエリのコストに基づいて評価が行われる。このようなコストは、本実施形態に従う重み付けされたハンドラ統計値の和として求められ得る。クエリに対するクエリ説明データを使用して、個々のハンドラ統計値１７５に割り当てられる重みを変化させることができる。しかしながら、別の実施形態によると、静的な重みは、異なるハンドラ統計値の各々に割り当てられ得る。例えば、重みは、各ハンドラ統計値に関連付けられるコストを示すためにハンドラ統計値に割り当てられ得る。インデックス内の最初のエントリが読み出される回数（handler_read_first）のようなハンドラ統計値は、“２”の重みを割り当てられ得る。キー順序で次の行を読み出す要求の数（handler_read_next）のような順次動作の統計値は、“１”の重みを割り当てられ得る。handler_read_firstの動作は、handler_read_nextの統計値よりも、行情報をロードするために、より頻繁にデータブロック読み出しを必要とするので、handler_read_nextの統計値と比較して比較的コストのかかる重みに対する余裕がある。重みが“１”であるhandler_read_nextのような項目は、順次アクセスされ、行の値だけがインクリメントされる必要がある。反対に、handler_read_firstは、テーブル内の次の行の位置を特定する代わりに、関連付けられるデータを有する行の位置を特定することを含むことができ、より計算コストが高い。
【００７２】
許容されるクエリは、単純ではない（例えば、単純なクエリより高いコストを有する）クエリであるが、許容される閾値コストを超えないコストを有する。許容される閾値コストは、重み付けられたハンドラ統計値に基づいて、データベースの比較的低い負荷の期間中に当該データベースに対してＸ秒未満で完全に実行され得るクエリにおおまかに対応する。例えば、Ｘは、０より大きく３０より小さい任意の整数（例えば、１秒、５秒、１０秒など）であり得る。Ｘの特定の例は、本明細書では例示目的で使用されるが、本開示の範囲から逸脱することなく、他の値がＸに割り当てられ得る。
【００７３】
ブロック２３０における評価に基づいてクエリが許容されると見なされる場合、クエリの分類はまた、クエリの実行の結果として返されるエラーコードに依存する。ブロック２３２で、分析モジュール１７０は、返されたエラーコードが「ＯＫ」または「ＤＩＶＥＲＴ」であったか否かを判定する。もしそうである場合、ブロック２３４において、クエリのフィンガープリントは許容される（例えば、ホワイトリストに登録される）として分類され、データ構造１８０は、この分類を反映してクエリが評価を必要とするフラグまたは他の指定を除去するように修正される。その結果、クエリのフィンガープリントを利用するクエリの将来の呼び出しは、当該評価を繰り返すことなくクエリ実行エンジン１３０によって実行され得る。
【００７４】
ブロック２３２において、分析モジュール１７０が、クエリの現在の呼び出しに対して返されたエラーコードが「ＴＯＯ ＬＯＮＧ」のような任意の他のコードであると判定した場合、データ構造１８０は、ブロック２３６（図２Ｃ）において、リダイレクトされたクエリクラスにおけるクエリのフィンガープリントの分類を反映するように修正される。クエリの将来の呼び出しは実行され得るが、動作データベース１２５に対してではなく報告データベース１４０に対してクエリ実行エンジン１３０によってリダイレクトされるべきである。
【００７５】
あまり重要でないクエリ
ブロック２３０（図２Ｂ）において、クエリが許容されないと判定された場合、ブロック２３８（図２Ｄ）において、当該クエリがあまり重要でないか否かを決定する評価が行われる。クエリがあまり重要でないとして識別するために行われるコスト評価は、許容されるクエリを識別するために記載されるコスト評価に類似する。しかしながら、あまり重要でないクエリのコストは、許容されるクエリのコストよりも高い。許容される閾値コストは、おおよそ、データベースの比較的低い負荷の期間中に当該データベースに対してＸ秒未満で完全に実行され得るクエリに対応することを想起されたい。許容されるクエリに対するＸの値は、３０未満である任意の正の整数であると定義された。しかしながら、あまり重要でないクエリであるために、Ｘの値は、同等のデータベースの負荷条件下で、少なくとも３０秒であり得るが、６０秒未満であり得る。Ｘの特定の例は、本明細書では例示目的で使用されるが、本開示の範囲から逸脱することなく、他の値がＸに割り当てられ得る。
【００７６】
ブロック２３８で評価に基づいてクエリが少なくともあまり重要ではないと見なされない場合、ブロック２４０で、クエリのフィンガープリントはブロックされるクエリクラスに分類される（例えば、ブラックリストに登録される）。分析モジュール１７０によるそのような分類は、クエリ実行エンジン１３０に、クエリの将来の呼び出しに応答して、動作データベース１２５または報告データベース１４０のいずれかに対してクエリが実行されることを妨げさせる。ブロックされるクエリは、実行するのに計算上高くつくと考えられ、もし実行されると、アプリケーションオブジェクトのパフォーマンスに著しい悪影響を与える。
【００７７】
ブロック２３８における評価に基づいてクエリのフィンガープリントがあまり重要でないと見なされる場合、クエリの分類は、次に、当該クエリの現在の実行の結果として返されるエラーコードに依存する。ブロック２４２において、分析モジュール１７０は、返されるエラーコードが「ＯＫ」であったか否かを判断する。もしそうである場合、ブロック２４４において、クエリのフィンガープリントは許容される（例えば、ホワイトリストに登録される）として分類され、データ構造１８０は、この分類を反映して、フラグまたはクエリが評価を必要とするという他の指定を除去するように修正される。その結果、クエリのフィンガープリントの将来の呼び出しは、それらの呼び出しに応答して分類評価を繰り返すことなく、クエリ実行エンジン１３０によってクエリのために実行され得る。
【００７８】
ブロック２４２において、分析モジュール１７０が、クエリの現在の呼び出しに対して返されたエラーコードが「ＤＩＶＥＲＴ」または「ＴＯＯ ＬＯＮＧ」のような任意の他のコードであると判定した場合、データ構造１８０は、ブロック２４６において、リダイレクトされたクエリクラスにおけるクエリのフィンガープリントの分類を反映するように修正される。その結果、クエリの将来の呼び出しは実行され得るが、動作データベース１２５の代わりに報告データベース１４０に対して実行するためにクエリ実行エンジン１３０によってリダイレクトされるべきである。
【００７９】
上記の説明は、クエリのためのデータ構造１８０内のフラグまたは他の指定が、評価は必要であるということを示すシナリオに対処する。フラグまたは指定を設定することは、クエリが呼び出された最初の時点で、クエリの長い持続時間に応答してトリガされ得る。クエリが上述のように評価および分類されると、フラグまたは他の指定がデータ構造１８０からクリアされる。ブロック２１４（図２Ｂ）での決定を再び参照すると、本システムおよび方法は、クエリの分類の変更をもたらし得る、動作データベース１２５または報告データベース１４０の変更に適応し得る。例えば、クエリのフィンガープリントが分類されたので、動作データベース１２５または報告データベース１４０内のデータ量の実質的な増加があったかもしれない。変更は、通信ネットワーク１２０において実施され得る。例えば、相当数の追加のクライアント端末が、動作データベース１２５または報告データベース１４０を利用する企業に追加されているかもしれない。これらのような因子は、分類されてから変化していないクエリのフィンガープリントとは無関係であり、そのクエリのフィンガープリントの適切な分類に影響を及ぼし得る。例えば、許容されるクエリクラスに以前に分類されたフィンガープリントは、今や、動作データベース１２５内のデータの量の増加のため、動作データベース１２５に対して実行されるには高価すぎるかもしれない。
【００８０】
ブロック２１４において、呼び出されたクエリに対応するクエリフィンガープリントが保留中の評価ではないと分析モジュール１７０が決定した場合、分析モジュール１７０は、ブロック２４８において、当該クエリがブロックされた（例えば、ブラックリストに登録された）クエリクラスに以前に分類されているか否かを判断する。もしそうであれば、分析モジュール１７０は、データ構造１８０における分類に基づいてブロック２５０でクエリ実行エンジン１３０の動作を制御し、動作データベース１２５または報告データベース１４０に対するクエリの実行を阻止する。クエリが許可されていないことを示す通知は、データベースシステム１００によって任意に送信され得、クエリが実行されなかったことをクライアント端末１０５、１１０、１１５に通知することができる。
【００８１】
ブロック２４８において決定されたように、呼び出されたクエリがブロックされない場合、ブロック２５２（図２Ｅ）において、当該クエリは、データ構造１８０における対応するクエリのフィンガープリントの分類に従って実行される。例えば、対応するクエリのフィンガープリントの分類が「許容可能」である場合、当該クエリは、そのクエリの現在の呼び出しに応答して、上述の評価を行うことなく、動作データベース１２５に対して実行される。そうでなければ、対応するクエリのフィンガープリントの分類が「ＤＩＶＥＲＴ」である場合、クエリは実行されるが、動作データベース１２５の代わりに報告データベース１４０に対して実行されるようにリダイレクトされる。再び、クエリは、当該クエリの現在の呼び出しに応答して、上記の評価を行うことなく実行され得る。
【００８２】
実行されたクエリに関するデータ構造１８０は、ブロック２５４において、当該クエリに関するフィンガープリントが最初に単純なクエリであるか、または許容される（例えば、ホワイトリストに登録された）クエリであるかを決定するために、分析モジュール１７０によって分析される。そうである場合、分析モジュール１７０は、クエリのフィンガープリントに関するデータ構造１８０における分類が、少なくとも部分的に、（ｉ）対応するクエリの現在の呼び出しのために返されたエラーコード、および（ｉｉ）クエリのフィンガープリントの現在の分類に基づいて、再評価される必要があり得るか否かを決定する。
【００８３】
ブロック２５６において、分析モジュール１７０は、クエリの実行時間が完了閾値時間を越えたか否かを判断する。もしそうであれば、以前に「許容可能」と分類されたフィンガープリントを有するクエリの実行時間は、今度は完了閾値時間を超える。この条件の結果として、クエリのフィンガープリントの構造に無関係な変化が発生し、データ構造１８０に格納されたクエリのフィンガープリントの分類の変更を保証し得る。同様に、ブロック２５４において、分析モジュール１７０は、実行されたクエリが単純または許容されるクエリではなく（例えば、ホワイトリストに登録されていない）、代わりにダイバート（ＤＩＶＥＲＴ）クエリクラスに分類されたクエリであると判定し得る。しかしながら、現在呼び出しているクエリは、ブロック２６４で判定されるように「ＯＫ」エラーが返される結果となり得る。「ＯＫ」のエラーコードの返答は、ダイバート（ＤＩＶＥＲＴ）クエリクラスに分類されるクエリよりも単純または許容されるクエリをいっそう示す。ここでも、対応するクエリのフィンガープリントの構造に無関係な変更が発生し、データ構造１８０におけるクエリのフィンガープリントの分類の変更を保証し得る。
【００８４】
分類が修正されるべきか否かを決定するために、クエリの現在の呼び出しに関する説明データは、分析モジュール１７０によって取得される。分析モジュール１７０は、ブロック２５８で、現在の呼び出しについて得られた説明データを、データ構造１８０に格納されたクエリのフィンガープリントの既存の分類に対応する説明データと比較する。ブロック２６０において、比較が、現在の呼び出しに対するクエリのフィンガープリントに対応する説明データは、分類をもたらしたクエリの呼び出しに対する説明データと異なるということを明らかにした場合、ブロック２６２において、フラグまたは他の指定は、リセットされ得る。データ構造１８０内のフラグまたは他の指定をリセットすることは、クエリのフィンガープリントが再び評価を必要とすることを示す。リセットされたフラグまたは他の指定は、分析モジュール１７０に、次のまたは他の後続の呼び出しに応答して、ブロック２１４（図２Ｂ）においてクエリのフィンガープリントが評価を必要とするということを判定させる。この判定は、分析モジュール１７０に、対象のクエリのフィンガープリントを有するクエリの将来の呼び出しに応答して、本明細書で説明される評価プロセスを開始させる。発展したトリガイベントに応答して評価のためにクエリのフィンガープリントを繰り返し指定することは、たとえクエリのフィンガープリント自体が変更されなくても、データベース環境への変更から生じ得るクエリ負荷の適応処理を可能にする。
【００８５】
ブロック２５６における判定は、クエリの実行時間が、許容されるクエリの予想された通り、完了閾値時間を越えなかったことを示し得る。同様に、ダイバートされたクエリクラスにおけるクエリのために返されたエラーコードは、同様に予想された通り、そのクエリの実行時間がブロック２６４で完了閾値時間を超えたことを示し得る。そのようなクエリが予想された通りに実行されたとしても、これらのクエリの各々に対応するクエリのフィンガープリントは、アプリケーションオブジェクトのパフォーマンスを改善するために再評価のために依然としてうってつけであり得る。
【００８６】
現在呼び出されているクエリは、トリガイベントとしてのクエリの単一の呼び出しの結果の代わりに、クエリを伴う傾向に基づいて再評価されるべきクエリのフィンガープリントを有し得る。例えば、クエリのフィンガープリントのためのデータ構造１８０は、カウンタフィールドを含み得る。実行されるクエリの各呼び出しは、リターンコードを、対応するクエリのフィンガープリントに対して返させる。クエリのフィンガープリントのために返されるエラーコードの実行中の総数は、カウンタフィールドに記憶されることができ、各エラーコードがブロック２６６（図２Ｆ）で返されるにつれてインクリメントされ得る。クエリのフィンガープリントに対して規定された数のエラーコードが戻されると、エラーコードの傾向は、クエリのフィンガープリントが再評価されるべきか否かを決定するために、分析され得る。そのような分析の一部として、ブロック２６８において、分析モジュール１７０は、クエリのフィンガープリントの返されたエラーコードの総数の少なくともタイムアウト閾値パーセントがＴＯＯ  ＬＯＮＧであったか否かを判断する。そうである場合、分析モジュール１７０は、ブロック２７０において、現在実行されているクエリのクエリフィンガープリントのコストが、少なくとも限界クエリと同じコストであるか否かを判断する。そうである場合、ブロック２７２において、ブロックされるクエリクラスにおいてクエリのフィンガープリントを分類するために、そして、クエリのフィンガープリントが評価を必要とすることを示すフラグまたは他の指定を設定するために、ブロック２７２において、クエリのフィンガープリントのデータ構造１８０が修正される。
【００８７】
ブロック２６８において、返されたエラーコードのタイムアウト閾値パーセンテージが満たされない場合、分析モジュール１７０は、ブロック２７４において、ＤＩＶＥＲＴエラーコードとＴＯＯ ＬＯＮＧエラーコードの組み合わされた数が、全ての返されたエラーコードの少なくとも組み合わされた閾値パーセンテージを構成するか否かを判断する。そうである場合、かつ、ブロック２７６において、現在実行されているクエリのクエリフィンガープリントのコストが、少なくとも限界クエリと同じコストであると判断された場合、ブロック２７８において、クエリのフィンガープリントに関するデータ構造１８０が修正される。ブロック２７８において、データ構造１８０は、クエリのフィンガープリントをリダイレクトクエリクラスに分類するように修正され、クエリのフィンガープリントが評価を必要とすることを示すフラグまたは他の指定が設定される。
【００８８】
クエリのフィンガープリントについて定義された数のエラーコードが戻された後に、全ての戻されたエラーコードのブロック２６８におけるタイムアウト閾値パーセンテージもブロック２７４における組み合わせ閾値パーセンテージも満たされない場合、データ構造１８０もまた修正され得る。例えば、ブロック２８０において、データ構造１８０は、許容されるクエリクラスにおいて現在実行されているクエリに対応するクエリのフィンガープリントを分類するように修正され得る。対応するクエリの将来の呼び出しに応答してクエリのフィンガープリントが評価を必要とすることを示すフラグまたは他の指定もまた、ブロック２８０でセットされ得る。
【００８９】
ブロック２８０における同様の修正は、異なるクエリの傾向に応答して行なわれ得る。例えば、クエリのフィンガープリントについて定義された数のエラーコードが戻された後、ブロック２６８においてタイムアウト閾値パーセンテージが満たされていない場合、クエリのフィンガープリントのコストは、分析され得る。ブロック２７０において、現在実行されているクエリに対応するクエリのフィンガープリントのコストが、限界クエリよりも低コストであると判定された場合、データ構造１８０は、許容されるクエリクラスにおいて現在実行されているクエリに対応するクエリのフィンガープリントを分類するように修正され得る。そのようなシナリオは、以前に分類された、アプリケーションオブジェクトのパフォーマンスに及ぼす影響を低減する傾向を示すクエリを示す。対応するクエリの将来の呼び出しに応答してクエリのフィンガープリントが評価を必要とするということを示すフラグまたは他の指定もまた、ブロック２８０でセットされ得る。
【００９０】
別の例として、クエリのフィンガープリントに対して定義された数のエラーコードが戻された後、（ｉ）タイムアウト閾値パーセンテージがブロック２６８において満たされず、（ｉｉ）組み合わせられた閾値パーセンテージがブロック２７４において満たされず、かつ、（ｉｉｉ）現在実行されているクエリに対応するクエリのフィンガープリントのコストがブロック２７６において限界クエリよりも低コストであると判断された場合、ブロック２８０において、データ構造１８０は修正され得る。データ構造１８０は、許容されるクエリクラスにおいて現在実行されているクエリに対応するクエリのフィンガープリントを分類するように修正され得る。そのようなシナリオはまた、以前に分類された、アプリケーションオブジェクトのパフォーマンスに対する影響を少なくする傾向を示すクエリを示す。対応するクエリの将来の呼び出しに応答してクエリのフィンガープリントが評価を必要とするということを示すフラグまたは他の指定もまた、ブロック２８０でセットされ得る。
【００９１】
コンピューティングデバイスの実施形態
図３は、本明細書で説明されるシステムおよび方法例、および／または、同等物のうちの１つまたは複数を用いて構成および／またはプログラムされる例示的なコンピューティングデバイスを示す。例示的なコンピューティングデバイスは、プロセッサ３２０と、メモリ３３５と、バス３２５によって動作可能に接続された入出力ポート３４５とを含むコンピュータ３００であり得る。一例では、コンピュータ３００は、クエリ実行エンジン１３０と、図１に示されるデータベースシステム１００と同様のクエリ負荷の評価およびクエリ負荷の適応処理を容易にするように構成された分析モジュール１７０とを定義する論理回路を含み得る。異なる例では、論理回路１３０，１７０は、ハードウェアで、格納された命令を有する非一時的なコンピュータ可読媒体３０５で、ファームウェアで、および／または、それらの組み合わせで実装され得る。論理回路１３０，１７０は、バス３２５に取り付けられたハードウェアコンポーネントとして示されているが、他の実施形態では、論理回路１３０，１７０は、プロセッサ３２０内に実装され、メモリ３３５内に記憶され、または、ディスク３５５内に記憶され得ることが理解される。
【００９２】
一実施形態では、論理回路１３０，１７０またはコンピューティングデバイス３００は、説明された動作を実行するための手段（例えば、構造、すなわち、ハードウェア、非一時的なコンピュータ可読媒体、ファームウェア）である。ある実施形態では、コンピューティングデバイスは、クラウドコンピューティングシステム、サービス型ソフトウェア（ＳａａＳ）アーキテクチャ内に構成されたサーバ、スマートフォン、ラップトップ、タブレットコンピューティングデバイスなどで作動するサーバであり得る。
【００９３】
手段は、例えば、アプリケーションオブジェクトのパフォーマンスに対する悪影響を軽減するためにクエリ負荷を評価して適応的に取り扱うようにプログラムされたＡＳＩＣとして実施され得る。当該手段はまた、メモリ３３５に一時的に格納され、その後プロセッサ３２０によって実行されるデータ３１０としてコンピューティングデバイス３００に提示される、格納されたコンピュータ実行可能命令として実施され得る。
【００９４】
モジュール１３０，１７０の論理はまた、クエリ負荷の評価および適応処理を行うための手段（例えば、ハードウェア、実行可能な命令を記憶する非一時的なコンピュータ可読媒体、ファームウェア）を提供し得る。
【００９５】
コンピュータ３００の例示的な構成を概して説明すると、プロセッサ３２０は、デュアルマイクロプロセッサおよび他のマルチプロセッサアーキテクチャを含む種々様々なプロセッサであり得る。メモリ３３５は、揮発性メモリおよび／または不揮発性メモリを含み得る。不揮発性メモリは、例えば、ＲＯＭ、ＰＲＯＭなどを含み得る。揮発性メモリは、例えば、ＲＡＭ、ＳＲＡＭ、ＤＲＡＭ等を含み得る。
【００９６】
ストレージディスク３５５は、例えば、入力／出力（Ｉ／Ｏ）インターフェイス（例えば、カード、デバイス）３４０および入力／出力ポート３４５を介してコンピューティングデバイス３００に動作可能に接続され得る。ディスク３５５は、例えば、磁気ディスク装置、ソリッドステートディスクドライブ、フロッピー（登録商標）ディスクドライブ、テープドライブ、Ｚｉｐドライブ、フラッシュメモリカード、メモリスティックなどであり得る。また、ディスク３５５は、ＣＤ−ＲＯＭドライブ、ＣＤ−Ｒドライブ、ＣＤ−ＲＷドライブ、ＤＶＤ  ＲＯＭ等であり得る。メモリ３３５は、例えば、プロセスおよび／又はデータ３１０を記憶できる。ディスク３５５および／またはメモリ３３５は、コンピューティングデバイス３００のリソースを制御して割り当てるオペレーティングシステムを記憶できる。
【００９７】
コンピューティングデバイス３００は、Ｉ／Ｏコントローラ３３０によってバス３２５に接続されるＩ／Ｏインターフェイス３４０および入出力ポート３４５を介して入出力（Ｉ／Ｏ）デバイスと相互作用し得る。入力／出力デバイスは、例えば、キーボード、マイクロフォン、ポインティングおよび選択デバイス、カメラ、ビデオカード、ディスプレイ、ディスク３５５、ネットワークデバイス３５０などであり得る。入出力ポート３４５は、例えば、シリアルポート、パラレルポート、ＵＳＢポートを含み得る。
【００９８】
コンピューティングデバイス３００は、ネットワーク環境において作動でき、したがって、Ｉ／Ｏインターフェイス３４０および／またはＩ／Ｏポート３４５を介してネットワークデバイス３５０に接続され得る。ネットワークデバイス３５０を通じて、コンピューティングデバイス３５０は、ネットワークと相互作用し得る。ネットワークを介して、コンピューティングデバイス３００は、クライアント端末１０５，１１０，１１５のような遠隔コンピュータに論理的に接続され得る。コンピューティングデバイス３００が相互作用し得るネットワークは、ＬＡＮ、ＷＡＮ、およびその他のネットワークを含み得るが、これらに限定されない。
【００９９】
定義および他の実施形態
別の実施形態では、説明される方法および／またはそれらの均等物は、コンピュータ実行可能命令で実施され得る。したがって、一実施形態では、非一時的なコンピュータ可読／記憶媒体は、機械によって実行されると当該機械（および／または関連するコンポーネント）に方法を実行させるアルゴリズム／実行可能なアプリケーションの格納されたコンピュータ実行可能命令で構成される。例示的な機械は、プロセッサ、コンピュータ、クラウドコンピューティングシステムにおいて作動するサーバ、サービス型ソフトウェア（ＳａａＳ）アーキテクチャにおいて構成されたサーバ、スマートフォン等を含み得るが、これらに限定されない。一実施形態では、コンピューティングデバイスは、開示される方法のいずれかを実行するように構成された１つまたは複数の実行可能なアルゴリズムを用いて実施される。
【０１００】
１つまたは複数の実施形態において、開示される方法またはそれらの均等物は、以下のいずれかによって実施される：当該方法を実行するように構成されたコンピュータハードウェア、または、非一時的なコンピュータ可読媒体に記憶されたモジュール内に具現化されたコンピュータ命令であって、当該命令は、コンピューティングデバイスの少なくともプロセッサによって実行されると、当該方法を実行するように構成された実行可能なアルゴリズムとして構成される、コンピュータ命令。
【０１０１】
説明を簡単にするために、図で例示された方法は、アルゴリズムの一連のブロックとして示され、説明されるが、その方法は、ブロックの順序によって限定されないことが理解されるべきである。いくつかのブロックは、図示および説明されたものとは異なる順序で、および／または他のブロックと同時に発生し得る。さらに、すべての例示されたブロックよりも少ないブロックが例示的な方法を実施するために使用され得る。ブロックは、組み合わされてもよく、または、複数の動作／構成要素に分離されてもよい。さらに、追加のおよび／または代替の方法は、ブロックには示されていない追加の動作を使用することができる。
【０１０２】
以下は、本明細書で使用される選択された用語の定義を含む。定義は、用語の範囲内にあり、実施のために使用され得る、構成要素の様々な例および／または形態を含む。実施例は、限定することを意図していない。用語の単数形および複数形の両方が、定義の範囲内であり得る。
【０１０３】
「一実施形態」、「ある実施形態」、「一例」、「ある例」などへの言及は、そのように記載される実施形態または例が、特定の特徴、構造、特性、性質、要素、または限定を含み得るが、全ての実施形態または例が必ずしもその特定の特徴、構造、特性、性質、要素、または限定を含むものではないことを示す。さらに、「一実施形態では」という語句の繰り返しの使用は、必ずしも同じ実施形態を指すわけではないが、そうであってもよい。
【０１０４】
本明細書で使用される「データ構造」は、メモリ、記憶装置、または他のコンピュータ化されたシステムに格納されるコンピューティングシステム内のデータの組織である。データ構造は、例えば、データフィールド、データファイル、データ配列、データレコード、データベース、データテーブル、グラフ、ツリー、リンクされたリスト等のいずれか１つであり得る。データ構造は、多くの他のデータ構造（例えば、データベースは、多くのデータレコードを含む）から形成され、それを含み得る。他の実施形態によれば、データ構造の他の例も同様に可能である。
【０１０５】
本明細書で使用される「コンピュータ可読媒体」または「コンピュータ記憶媒体」は、実行されると開示された機能のうちの１つまたは複数を実行するように構成された命令および／またはデータを記憶する非一時的媒体を指す。データは、ある実施形態では、命令として機能し得る。コンピュータ可読媒体は、これらに限定されないが、不揮発性媒体および揮発性媒体を含む形態をとり得る。不揮発性媒体は、例えば、光ディスク、磁気ディスクなどを含み得る。揮発性媒体は、例えば、半導体メモリ、ダイナミックメモリなどを含み得る。コンピュータ可読媒体の一般的な形態は、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、他の磁気媒体、特定用途向け集積回路（ＡＳＩＣ）、プログラマブルロジックデバイス、コンパクトディスク（ＣＤ）、他の光媒体、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、メモリチップまたはカード、メモリスティック、ソリッドステートストレージデバイス（ＳＳＤ）、フラッシュドライブ、および、コンピュータ、プロセッサ、または他の電子デバイスが機能し得る他の媒体を含み得るが、これらに限定されない。一実施形態において実装のために選択される場合、媒体の各タイプは、開示された、および／または権利主張される機能のうちの１つまたは複数を実行するように構成されたアルゴリズムの格納された命令を含み得る。
【０１０６】
本明細書で使用される「論理」は、コンピュータもしくは電気ハードウェア、実行可能なアプリケーションもしくはプログラムモジュールの格納された命令を有する非一時的媒体、および／または、本明細書で開示された機能もしくは動作のいずれかを実行するための、および／または、本明細書で開示されたように別の論理、方法、および／またはシステムからの機能もしくは動作を実行させるために、これらの組み合わせで実施される構成要素を表す。同等の論理回路は、ファームウェア、アルゴリズムでプログラムされたマイクロプロセッサ、ディスクリート論理回路（例えばＡＳＩＣ）、少なくとも１つの回路、アナログ回路、デジタル回路、プログラムされた論理回路デバイス、アルゴリズムの命令を含むメモリデバイス等を含み得、これらのうちのいずれかは、開示された機能のうちの１つまたは複数を実行するように構成され得る。一実施形態では、論理回路は、１つまたは複数のゲート、ゲートの組み合わせ、または開示された機能のうちの１つまたは複数を実行するように構成された他の回路構成要素を含み得る。複数の論理回路が説明される場合、当該複数の論理回路を１つの論理回路に組み込むことが可能であり得る。同様に、単一の論理回路が説明される場合、当該単一の論理回路を複数の論理回路間で分配することが可能であり得る。一実施形態では、これらの論理のうちの１つまたは複数は、開示されたおよび／または権利主張された機能を実行することに関連付けられる対応する構造である。実装するための論理回路のいずれかのタイプの選択は、所望のシステム条件または仕様に基づき得る。例えば、より高い速度が考慮事項である場合、ハードウェアが機能を実現するために選択され得る。より低いコストが考慮事項である場合、格納された命令／実行可能アプリケーションが当該機能を実現するために選択され得る。
【０１０７】
「動作可能な接続」、またはエンティティが「動作可能に接続される」接続は、信号、物理通信、および／または論理通信が送信および／または受信され得る接続である。動作可能な接続は、物理的インターフェイス、電気的インターフェイス、および／またはデータインターフェイスを含み得る。動作可能な接続は、動作可能な制御を可能にするのに十分なインターフェイスおよび／または接続の異なる組み合わせを含み得る。例えば、２つのエンティティは、直接、または、１つまたは複数の中間エンティティ（例えば、プロセッサ、オペレーティングシステム、論理回路、非一時的なコンピュータ可読媒体）を介して信号を互いに通信するように動作可能に接続され得る。論理通信チャネルおよび／または物理通信チャネルを使用して、動作可能な接続を作成することができる。
【０１０８】
本明細書で使用される「ユーザ」は、１人または複数の人、コンピュータまたは他のデバイス、またはこれらの組み合わせを含むが、これらに限定されない。
【０１０９】
開示された実施形態をかなり詳細に図示され説明されたが、添付の特許請求の範囲をそのような詳細に限定する、または多少なりとも制限する意図はない。もちろん、主題のさまざまな態様を説明する目的で、構成要素または方法の考えられる全ての組み合わせを説明することは可能ではない。したがって、本開示は、図示および説明される特定の詳細または例示的な例に限定されない。したがって、本開示は、添付の特許請求の範囲内に入る変更、修正、および変形を包含することを意図している。
【０１１０】
用語「含む（includes）」または「含んでいる（including）」が、詳細な説明または特許請求の範囲において使用される限り、その用語が、特許請求の範囲において遷移語として使用される場合に解釈される場合、「備える（comprising）」という用語と同様に包括的であることが意図される。
【０１１１】
用語「又は」が詳細な説明又は特許請求の範囲で使用される限り（例えば、ＡまたはＢ）、「ＡまたはＢ又はその両方」を意味することが意図される。本出願人が「ＡまたはＢだけであるが両方ではない」を示すことを意図する場合、「ＡまたはＢだけであるが両方ではない」という語句が使用される。したがって、本明細書における用語「または」の使用は包括的であり、排他的使用ではない。
【図１】
2021523429.tif 000003
【図２Ａ】
2021523429.tif 000004
【図２Ｂ】
2021523429.tif 000005
【図２Ｃ】
2021523429.tif 000006
【図２Ｄ】
2021523429.tif 000007
【図２Ｅ】
2021523429.tif 000008
【図２Ｆ】
2021523429.tif 000009
【図３】
2021523429.tif 000010
【国際調査報告】
2021523429.tif 000011
2021523429.tif 000012
2021523429.tif 000013