ODP.NET からクエリを実行すると、呼び出しごとに V$SQL が PARSE_CALL を実行することがわかります。見る:
select
s.FETCHES,s.PARSE_CALLS,s.sql_Text,s.sql_id
from v$sql s where
sql_Text = 'select 1 from dual /*test2*/'
戻り値:
同じ OracleCommand を再利用して Prepare を呼び出しましたが。
ここに私の.NETコードがあります:
using (var c = connection.CreateCommand())
{
c.CommandText = "select 1 from dual /*test2*/";
c.Prepare();
for (int i = 0; i < 9000; i++)
{
using (var r = c.ExecuteReader())
{
r.Read();
}
}
}
Parse_Calls の数を減らすにはどうすればよいですか? これらすべての繰り返し実行のためにOracleにサーバー側のカーソルを保持させ、コマンドを破棄するときにそれを破棄する方法はありますか?
Oracle.ManagedDataAccess.dll バージョン 4.122.1.20170624 を使用しています