Профилировщик Nhibernate показывает множество сообщений об ошибках относительно плана запроса:
Различные размеры параметров приводят к неэффективному использованию кэша плана запроса
Это также приводит к объяснениюв http://nhprof.com/Learn/Alerts/UncachedQueryPlan и предупреждает вас об использовании параметра prepare_sql = true
при построении сеанса.Я делаю это так свободно:
.ExposeConfiguration(configuration => configuration
.SetProperty("current_session_context_class", "thread_static")
.SetProperty("prepare_sql", "true")
.SetProperty("generate_statistics", "true")
)
Но похоже, что это не работает, так как сообщения об ошибках все еще там.Это ограничение для OracleClientConfiguration или я делаю это неправильно?
Редактировать Чтобы предоставить дополнительную информацию об этом ...
В моем хранилище я делаю это
session.Query<TEntity>.Where(predicate).ToList();
и это вызов
var value = ParameterRepository.First(p => (p.Pipeline.Id == pipelineId && p.Name == name));
Например, это два SQL, сгенерированных из этого вызова, и что профилировщик nhibernate показывает как «Размеры параметров DIfferent приводят к неэффективному использованию кэша плана запроса»
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 с 'крышкой' и 'периодом', который генерирует разные планы запросов.
заранее спасибо