NHibernateのプロファイラは、クエリプランに関するエラーメッセージの多くを示しています。異なるパラメータサイズは非効率的なクエリプランのキャッシュになり
異なるパラメータサイズは非効率的なクエリプランのキャッシュの使用状況で結果をまたにあなたを導き
http://nhprof.com/Learn/Alerts/UncachedQueryPlanで説明し、セッションを構築するときにprepare_sql = true
パラメータの使用について警告します。私は流暢にそのように:
しかし、それはエラーメッセージがまだそこにあるように動作していないようです。これはOracleClientConfigurationの制限ですか、それとも間違っていますか?
編集これについていくつかのより多くの情報を提供するために...私のリポジトリで
私はこの
session.Query<TEntity>.Where(predicate).ToList();
行うと、これは、例えばそれらのためにコール
var value = ParameterRepository.First(p => (p.Pipeline.Id == pipelineId && p.Name == name));
ですこの呼び出しから生成された2つのSQLであり、nhibernateプロファイラは「DIEFerentパラメータサイズが非効率なクエリプランのキャッシュをもたらす年齢」
select GUID1_12_,
PARAMETER2_12_,
PARAMETER3_12_,
GUID4_12_
from (select pipelineex0_.GUID_PIPELINE_EXEC_PARAMETER as GUID1_12_,
pipelineex0_.PARAMETER_NAME as PARAMETER2_12_,
pipelineex0_.PARAMETER_VALUE as PARAMETER3_12_,
pipelineex0_.GUID_PIPELINE_TRACKING as GUID4_12_
from FCT_PIPELINE_EXEC_PARAMETER pipelineex0_
where pipelineex0_.GUID_PIPELINE_TRACKING = 'A5916E73CF1E406DA26F65C24BFBF694' /* :p0 */
and pipelineex0_.PARAMETER_NAME = 'lid' /* :p1 */)
where rownum <= 1 /* :p2 */
と第二
select GUID1_12_,
PARAMETER2_12_,
PARAMETER3_12_,
GUID4_12_
from (select pipelineex0_.GUID_PIPELINE_EXEC_PARAMETER as GUID1_12_,
pipelineex0_.PARAMETER_NAME as PARAMETER2_12_,
pipelineex0_.PARAMETER_VALUE as PARAMETER3_12_,
pipelineex0_.GUID_PIPELINE_TRACKING as GUID4_12_
from FCT_PIPELINE_EXEC_PARAMETER pipelineex0_
where pipelineex0_.GUID_PIPELINE_TRACKING = 'A5916E73CF1E406DA26F65C24BFBF694' /* :p0 */
and pipelineex0_.PARAMETER_NAME = 'period' /* :p1 */)
where rownum <= 1 /* :p2 */
私見では 『蓋』と別のクエリ・プランを生成している 『期間』がこのPARAMETER_NAMEです。予め
異なるOracle実行計画は何ですか? – steve
Oracleの問合せ計画はどのようになっているのですか。しかし、このシナリオは[問題の説明に指摘されている](http://nhprof.com/Learn/Alerts/UncachedQueryPlan)と非常によく似ています。簡単に言えば、nhibernateは、親しみやすいクエリプランでクエリーを実行するために、そして、私がうまく動作しないことからクエリーを実行するように確信しなければならないと言います。 – guillem
まあ、私はより分析的なアプローチをお勧めします、そうでなければ試行錯誤です。エラーは何ですか? – steve