Различные размеры параметров приводят к неэффективному кэшированию плана запроса

Профайлер Nhibernate показывает много сообщений об ошибках плана запроса:

Различные размеры параметров приводят к неэффективному использованию кэша плана запроса

Это также приводит вам объяснение в http://nhprof.com/Learn/Alerts/UncachedQueryPlanи предупреждает вас об использовании параметра prepare_sql = trueпри построении сеанса. Я делаю так с fluent:

.ExposeConfiguration(configuration => configuration
    .SetProperty("current_session_context_class", "thread_static")
    .SetProperty("prepare_sql", "true")
    .SetProperty("generate_statistics", "true")
    )

Но похоже, что это не работает, так как сообщения об ошибках все еще есть. Это ограничение на OracleClientConfiguration или я делаю это неправильно?

ИзменитьЧтобы предоставить дополнительную информацию об этом...

В моем репозитории я делаю это

session.Query.Where(predicate).ToList();

и это вызов

var value = ParameterRepository.First(p => (p.Pipeline.Id == pipelineId && p.Name == name));

Например, это два SQL, сгенерированные из этого вызова, и тот Профилировщик nhibernate показывает, что «РАЗЛИЧНЫЕ размеры параметров приводят к неэффективному использованию кеша плана запросов»

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 с «крышкой» и «периодом», который генерирует разные планы запросов.

заранее спасибо

6
задан guillem 19 March 2012 в 13:51
поделиться