ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Java DB / Apache Derbyコミュの仕様について

  • mixiチェック
  • このエントリーをはてなブックマークに追加
Java DBの基本的な仕様についてのトピックです。

コメント(6)

最大接続数について

java.sql.DatabaseMetaDataの
getMaxConnectionsメソッドの戻り値が0でした。

Javadocには

戻り値:一度に可能なアクティブな接続の最大数。0 は制限がないか、制限が不明であることを示す

とあるので調べてみました。

調べ方が正しいのか自信がないのですが
java.sql.DriverManager.getConnectionという
スタティックメソッドで取得したjava.sql.Connectionを
Vectorに次々と追加してsizeメソッドの戻り値がいくつまでいくか
while分で繰り返しました。

私の使っているPCのスペックでは接続数19557で以下のエラーになりました。

java.sql.SQLTransientConnectionException: 接続が拒否されました: java.lang.OutOfMemoryError

おそらくメモリに余裕がある限り接続数を無限に取得出来る初期設定のようです。
逆に何らかの方法で最大接続数に制限をかける必要があるかもしれません。
Connectionを出力したら以下のようでした。

org.apache.derby.impl.jdbc.EmbedConnection40@19859865 (XID = 1297), (SESSIONID = 0), (DATABASE = minatest), (DRDAID = null)

このXIDとSESSIONIDは次に取得したConnectionではインクリメントされていました。
えっと、接続数とは関係なく、Embeddedモードではアプリケーションと同じプロセスからしか接続できないはずです。

http://db.apache.org/derby/papers/DerbyTut/embedded_intro.html
http://db.apache.org/derby/docs/dev/ja_JP/getstart/cgsquck35643.html
その制約と、接続数上限の話が混ざっているような気がしましたので...

>Nakaさん

ご指摘の通りです。

ネットワークサーバとして構成して接続数を取らないと
本当の最大接続数の調査にはならなさそうですね。


設定方法はこちらでしょうか。
http://db.apache.org/derby/docs/dev/adminguide/tadminconfiguringthenetworkserver.html


以下引用
You can change the maximum number of threads by using the following command:

java org.apache.derby.drda.NetworkServerControl maxthreads <max> [-h <hostname>]
[-p <portnumber>]

You can also use the derby.drda.maxThreads property to assign the maximum value. A <max> value of 0 means that there is no maximum and a new thread will be generated for a connection if there are no current threads available. This is the default. The <max> and <min> values are stored as integers, so the theoretical maximum is 2147483647 (the maximum size of an integer). But the practical maximum is determined by the machine configuration.

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Java DB / Apache Derby 更新情報

Java DB / Apache Derbyのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。