2026年4月3日金曜日

リモートMCPサーバーのツール実行をリソース・マネージャーで制御する

記事「MCPを話すOracle Databaseを作成する - Autonomous AI Database編」にそって作成した環境で、リモートMCPサーバーのツール実行をリソース・マネージャで制御します。

リソース・マネージャについては、Autonomous AI Databaseでできることとオンプレミス環境でできることは異なります。リポジトリmcp-appのリモートMCPサーバーでは、ツールを実行する際にリソース・コンシューマー・グループを設定できるように実装しています。

Autonomous AI Databaseでのリソース・マネージャを以下の記事にそって設定し、リモートMCPサーバーのツールを呼び出して動作確認します。

Autonomous DatabaseのCS_RESOURCE_MANAGERによるSQLの中断を確認する

データベースSALESADBに管理者ユーザーADMINで接続します。

sql -cloudconfig Wallet_SALESADB.zip admin@salesadb_low

mcp-salesadb % sql -cloudconfig Wallet_SALESADB.zip admin@salesadb_low


SQLcl: 金 4月 03 22:18:03 2026のリリース25.4 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


パスワード (**********?) ****************

Last Successful login time: 金 4月  03 2026 22:18:11 +09:00


接続先:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.31.0.1.0


SQL> 


現状のコンシューマ・グループの設定値を一覧します。

select * from cs_resource_manager.list_current_rules();

SQL> select * from cs_resource_manager.list_current_rules();


CONSUMER_GROUP       ELAPSED_TIME_LIMIT    IO_MEGABYTES_LIMIT    SHARES    CONCURRENCY_LIMIT    DEGREE_OF_PARALLELISM 

_________________ _____________________ _____________________ _________ ____________________ ________________________ 

HIGH                                                                  4                    3                        2 

MEDIUM                                                                2                    2                        2 

LOW                                                                   1                   30                        1 

TP                                                                    8                   30                        1 

TPURGENT                                                             12                   30                          


SQL> 


ツールrun_sqlはコンシューマ・グループTPURGENTに切り替えて実行することにします。コンシューマ・グループTPURGENTの経過時間の上限を5秒に設定します。

CS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVEを呼び出し、コンシューマ・グループTPURGENTelapesed_time_limit5を設定します。
begin
    cs_resource_manager.update_plan_directive(
        consumer_group => 'TPURGENT',
        elapsed_time_limit => 5
    );
end;
/

SQL> begin

  2      cs_resource_manager.update_plan_directive(

  3          consumer_group => 'TPURGENT',

  4          elapsed_time_limit => 5

  5      );

  6  end;

  7* /


PL/SQLプロシージャが正常に完了しました。


SQL> 


SELECT文を再度実行し変更を確認します。コンシューマ・グループTPURGENTELAPSED_TIME_LIMITになっています。

SQL> select * from cs_resource_manager.list_current_rules();


CONSUMER_GROUP       ELAPSED_TIME_LIMIT    IO_MEGABYTES_LIMIT    SHARES    CONCURRENCY_LIMIT    DEGREE_OF_PARALLELISM 

_________________ _____________________ _____________________ _________ ____________________ ________________________ 

HIGH                                                                  4                    3                        2 

MEDIUM                                                                2                    2                        2 

LOW                                                                   1                   30                        1 

TP                                                                    8                   30                        1 

TPURGENT                              5                              12                   30                          


SQL> 


MCP App HelperのAPEXアプリケーションを実行し、ナビゲーション・メニューのToolsを開きます。

一覧にあるrun_sqlを編集します。


Resource Consumer GroupTPURGENTを設定し、変更の適用をクリックします。


以上でツールrun_sqlの実行時にコンシューマ・グループがTPURGENTに切り替わり、SELECT文の経過時間が5秒に達すると切断されるように設定されました。

MCP Inspectorを起動します。

npx @modelcontextprotocol/inspector

リモートMCPサーバーsampleserverに接続し、ツールrun_sqlを呼び出します。


sqlとして以下を記述し、Run Toolを実行します。

select count(*) from all_objects, all_objects

コンシューマ・グループTPURGENTが割当たっているため、経過時間が5秒を超えたところで以下のエラーが発生します。

"ORA-56735: elapsed time limit exceeded - call aborted"


SELECT文実行時に割り当てられているリソース・コンシューマー・グループを、以下のSELECT文を実行して確認します。

select resource_consumer_group from v$session where audsid = sys_context('USERENV','SESSIONID')

Tool Resultから、ツールrun_sqlの実行時にコンシューマ・グループとしてTPURGENTが割り当たっていることが確認できます。


以上のように、リモートMCPサーバーのツール実行時にリソース・コンシューマ・グループを切り替えられることが確認できました。

今回の記事は以上になります。