Oracleデータベースへの接続の最大許容数を確認するにはどうすればよいですか?


89

SQLを使用して、Oracleデータベースに許可されている最大接続数を確認する最良の方法は何ですか?最後に、現在のセッション数と許可されている合計数を示したいと思います。たとえば、「現在、80接続のうち23接続が使用されています」。

回答:


120

Oracleデータベースがサポートする接続数の決定には、いくつかの異なる制限があります。最も簡単な方法は、SESSIONSパラメータとV $ SESSIONを使用することです。

データベースが許可するように構成されたセッションの数

SELECT name, value 
  FROM v$parameter
 WHERE name = 'sessions'

現在アクティブなセッションの数

SELECT COUNT(*)
  FROM v$session

ただし、前述したように、データベースレベルとオペレーティングシステムレベルの両方で、共有サーバーが構成されているかどうかによって、他にも潜在的な制限があります。共有サーバーが無視される場合、SESSIONSパラメータの制限に達する前に、PROCESSESパラメータの制限に達する可能性があります。また、各セッションには一定量のRAMが必要なため、オペレーティングシステムの制限に達する可能性があります。


申し訳ありませんが、このクエリを実行するにはどうすればよいですか?「SELECT COUNT(*)FROM v $ session」の「テーブルまたはビューが存在しません」というメッセージが表示されます
村人

3
@ yin03-これは、使用しているOracleユーザーがv$sessionビューに対する権限を持っていないことを意味します。DBAにその権限を付与するよう依頼する必要があります。ほとんどの場合、そのオブジェクトのみの役割または直接付与も機能するが、select any dictionary特権が必要ですselect_catalog_role
Justin Cave

35

セッションから導出されたパラメータのプロセスのパラメータと、あなたが最大プロセス数を変更したときにそれに応じて変化します。詳細については、Oracleのドキュメントを参照してください。

セッションに関する情報のみを取得するには:

    select current_utilization, limit_value 
    from v$resource_limit 
    where resource_name='sessions';
CURRENT_UTILIZATION LIMIT_VALUE
------------------- -----------
                110 792

これを試して、両方の情報を表示します。

    select resource_name, current_utilization, max_utilization, limit_value 
    from v$resource_limit 
    where resource_name in ('sessions', 'processes');
RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION LIMIT_VALUE
------------- ------------------- --------------- --- --------
プロセス96 309 500
セッション104 323 792

34

このソースに基づいて、これはうまくいくと思いました。

SELECT
  'Currently, ' 
  || (SELECT COUNT(*) FROM V$SESSION)
  || ' out of ' 
  || DECODE(VL.SESSIONS_MAX,0,'unlimited',VL.SESSIONS_MAX) 
  || ' connections are used.' AS USAGE_MESSAGE
FROM 
  V$LICENSE VL

しかし、ジャスティンの洞窟は正しいです。このクエリはより良い結果をもたらします:

SELECT
  'Currently, ' 
  || (SELECT COUNT(*) FROM V$SESSION)
  || ' out of ' 
  || VP.VALUE 
  || ' connections are used.' AS USAGE_MESSAGE
FROM 
  V$PARAMETER VP
WHERE VP.NAME = 'sessions'

申し訳ありませんが、このクエリを実行するにはどうすればよいですか?「SELECT COUNT(*)FROM v $ session」の「テーブルまたはビューが存在しません」というメッセージが表示される
村人

2
@ yin03 Oracleまたは別のタイプのデータベースを使用していますか?Oracleの場合、権限の問題である可能性があります。
JosephStyons

1
完璧なクエリ@JosephStyons!
Gaurav

@guarav、私はあなたがそれが便利だと思って嬉しいです!
JosephStyons

4

注:これは質問の一部にのみ回答します。

許可されているセッションの最大数を知りたいだけの場合は、sysplusとしてsqlplusで実行できます。

SQL> show parameter sessions

これにより、次のような出力が得られます。

    NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
java_max_sessionspace_size           integer     0
java_soft_sessionspace_limit         integer     0
license_max_sessions                 integer     0
license_sessions_warning             integer     0
sessions                             integer     248
shared_server_sessions               integer

sessionsパラメータは必要なものです。


4

クラスタ全体のセッションの合計数を取得する場合は、RACにgv $ sessionを使用します。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.