Nhibernate perfilador muestra un montón de mensajes de error sobre el plan de consulta:Diferentes tamaños de parámetros resultan en caché plan de consulta ineficaz
Diferentes tamaños de parámetros resultan en uso de la caché plan de consulta ineficaz
También le lleva a una explicación en http://nhprof.com/Learn/Alerts/UncachedQueryPlan y le advierte sobre el uso del parámetro prepare_sql = true
al construir la sesión. Lo hago de esa manera con fluidez:
.ExposeConfiguration(configuration => configuration
.SetProperty("current_session_context_class", "thread_static")
.SetProperty("prepare_sql", "true")
.SetProperty("generate_statistics", "true")
)
Pero parece que no está funcionando, ya que los mensajes de error todavía están allí. ¿Es eso una limitación en OracleClientConfiguration o lo estoy haciendo mal?
Editar Para proporcionar alguna información más sobre esto ...
En mi repositorio hago esto
session.Query<TEntity>.Where(predicate).ToList();
y esta es la llamada
var value = ParameterRepository.First(p => (p.Pipeline.Id == pipelineId && p.Name == name));
Por ejemplo, las son dos SQL generados a partir de esta llamada y ese perfil de nhibernate muestra como "Diferentes tamaños de parámetros resultan en un plan de consulta ineficiente caché nosotros edad"
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 */
y segundo
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 */
mi humilde opinión, es esta PARAMETER_NAME con 'tapa' y 'período' que está generando diferentes planes de consulta.
gracias de antemano
¿Cuáles son los diferentes planes de ejecución de Oracle? – steve
Ahora no me explico cómo es el plan de consulta de Oracle, pero el escenario es bastante similar en [el señalado en la descripción del problema de ayende] (http://nhprof.com/Learn/Alerts/UncachedQueryPlan). En pocas palabras, dice que nhibernate debe confiured para ejecutar querie en un plan de consulta amigable y, por lo que veo, no funciona. – guillem
bueno, recomendaría un enfoque más analítico, de lo contrario, es de prueba y error. ¿Cuáles son los errores? – steve