1

ファイルを処理するスレッド静的セッションを備えたマルチスレッド アプリケーションがあります。NHを使用してサービスから消費し、Oracle dbで実行していますが、これまでのところ非常に良好です。

すべてのスレッドには、より軽量にするためにステートレス セッションを使用する詳細なログがあります。ところで、いくつかのファイルが処理されると、多くのカーソルがログ セッション用に Oracle で管理されていることがわかります。

たとえば、ログ:

  • 324 SPCログ
  • 310 SPC_ログ
  • 121 SPC_ログ

およびアプリケーション自体:

  • 31 SPC_PRODUCTION_LINE_TEST
  • 27 SPC_PRODUCTION_LINE_TEST
  • 21 SPC_PRODUCTION_LINE_TEST

これにより、Oracle カーソル ORA-01000 が不足します。

誰かがこれを引き起こす原因について考えを持っていますか? カーソルは挿入に関連していますか、それとも更新のみに関連していますか? 私は、その寿命の終わりにあるすべてのスレッドが、通常およびステートレスのすべてのセッションを閉じると思います。

参考までに、私はこのようにログを書いています:

  • イン セッション ファクトリ

    public IStatelessSession GetUserStatelessContext(ConnectionStringSettings connection)
    {
        lock (Padlock)
        {
            string key = GetConnectionKey(connection);
    
            if (StatelessSessions == null)
            {
                StatelessSessions = new Dictionary<string, IStatelessSession>();
            }
    
            if (!StatelessSessions.ContainsKey(key))
            {
                StatelessSessions.Add(key, Factories[connection.ConnectionString].OpenStatelessSession());
            }
    
            return StatelessSessions[key];
        }
    }
    
  • そしてログに書く:

            using (ITransaction tx = this.LogProcessErrorRepository.BeginTransaction())
            {
                this.LogProcessErrorRepository.Add(log);
                if (log.Informations != null)
                {
                    foreach (AdditionalInformation info in log.Informations)
                    {
                        info.Text = this.OracleCLOBHack(info.Text);
    
                        this.AdditionalInformationRepository.Add(info);
                    }
                }
    
                tx.Commit();
            }
    
4

1 に答える 1

1

記録としては、問題の原因は、Oracle Data Provider ( Oracle.DataAccess ) ではなく、MS Oracle Client ( System.Data.OracleClient ) の使用でした。最初のものはOracleClientConfigurationと ODP.Net OracleDataClientConfigurationであるため、MS クライアントが廃止されたことを認識していたため、In fluent は混同しやすいです。

現在、データベースのパフォーマンスは 400% 向上しており、カーソルのリークはまったくありません。したがって、私の観点からは、MS クライアントは決して使用しないでください。

于 2012-12-17T09:17:40.030 に答える