Top / .NET備忘録 / 99.小ネタ / 13.ODP.NET の隠しパラメタ

ODP.NET のコネクションプールが開かれると、レギュレータと呼ばれるワーカースレッドが立ち上がり、一定間隔ごとに未使用接続のうち Connection LifeTime を超えた接続を切断します。
この間隔はデフォルトで 180 秒ですので、Connection LifeTime をこれより短くしてもあまり効果がありません。

接続文字列に 「POOL REGULATOR=秒数」 を指定することで、この間隔を変更することが出来ます。

Imports System.Data.Common

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim factory As DbProviderFactory = DbProviderFactories.GetFactory("Oracle.DataAccess.Client")
        Dim csbuilder As DbConnectionStringBuilder = factory.CreateConnectionStringBuilder

        csbuilder("Data Source") = "ORCL"
        csbuilder("User ID") = "SCOTT"
        csbuilder("Password") = "TIGER"
        csbuilder("Connection LifeTime") = 10
        csbuilder("Incr Pool Size") = 1
        csbuilder("Decr Pool Size") = 1
        ' 隠しパラメタなので POOL REGULATOR は受け付けてくれない。 Add も出来ず。
        Dim connectionString As String = csbuilder.ToString() & ";POOL REGULATOR=10"

        Dim db(9) As DbConnection

        For i As Integer = 0 To 9
            db(i) = factory.CreateConnection
            With db(i)
                .ConnectionString = connectionString
                .Open()
            End With
        Next
        For i As Integer = 0 To 9
            db(i).Close()
        Next

    End Sub

End Class

ボタンを押すと接続が 10 作成され 20秒経過後 1 つ消え、以降 10 秒ごとに 1 つずつ消えていきます。
一挙に消したいときは、Decr Pool Size の値を 10 とか 20 とかにすれば良いです。

System.Data.OracleClient の間隔はどうなっているかというと、120秒から240秒の間でランダムになっており、変更は不可能なようです。
間隔を短くしたい場合は OracleConnection.ClearPool メソッドを実行する必要がありますが、この場合、ClearPool メソッドを実行した時点で未使用接続は切断されます。




トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2016-07-20 (水) 11:13:49 (393d)