Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

353
Visualizações
EF6 SQLQuery muy lento pero la base de datos es muy rápida

Tengo un problema de rendimiento, hemos realizado un montón de análisis y estamos atascados. Esperemos que alguno de ustedes haya visto esto antes.

Llamo a DbContext.Database.SqlQuery , la parte de la base de datos tarda 3 ms, pero la ejecución completa tarda 9 segundos.

Usamos EF Profiler para descubrir esto y también ejecutamos el SQL directamente en SQL Server Management Studio y es instantáneo.

También usamos vislumbrar y no pudimos ver lo suficientemente profundo en el proceso.

El tipo de resultado no es una entidad del modelo y, por lo tanto, estamos seguros de que el seguimiento no está involucrado.

También sabemos que esta no es la primera consulta ejecutada en el contexto, por lo tanto, no estamos pagando el costo de inicio de EF en esta consulta.

Probamos el generador de perfiles .net y tuvimos tantos problemas para ejecutarlo que decidimos preguntar.

¿Algún consejo sobre cómo profundizar y resolver esto?

EDITAR: el conjunto de resultados para esta consulta es 1 fila con 4 columnas (decimal)

La línea de código es simplemente:

 var list=contextInstance.Database.SqlQuery<nonEntityType>(sqstring).ToList();

El SQL en sí no es una cadena muy larga. Usaremos un generador de perfiles más detallado para averiguar en qué parte del proceso esto se está bloqueando.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Hemos utilizado el generador de perfiles EF para descubrir esto y también ejecutamos el SQL directamente en el estudio de administración del servidor SQL y es instantáneo.

Esto no prueba nada. La consulta puede ejecutarse rápidamente, pero los datos pueden generar 100 MB de datos que luego se transportan al cliente y se materializan en objetos. Esto podría tomar más tiempo de lo que piensas.

La consulta en SSMS puede devolverse instantáneamente porque muestra solo una parte de los datos. No dijiste cuáles eran los datos.

Utilice un perfilador de .NET real, como dotTrace o Ants. De esta manera, puede ver dónde se pierde el tiempo exactamente en la línea. EF Prof (o mi propio ORM Profiler: http://www.ormprofiler.com ) le dirá qué parte de la ruta total tomada (ORM->DB->ORM) toma qué tiempo. Incluso el profesor de EF lo hace;)

over 4 years ago · Santiago Trujillo Relatório

0

Si el cliente por alguna razón no puede usar un generador de perfiles como sugiere Frans, tendrá que jugar el juego de adivinanzas y excluir posibilidades.

En primer lugar, creo que falta una pieza crítica de información. ¿Siempre toma alrededor de 9 segundos o varía?

Primer paso:

Decida si el retraso es antes o después de que la consulta llegue a la base de datos. Debería ser posible hacerlo con EF Profiler y mirar las marcas de tiempo en Sql Profiler.

De cualquier forma habrás limitado un poco las posibilidades.

Segundo paso:

Excluir tanto como sea posible

  • Índices (No, la consulta es rápida)
  • Devolviendo demasiados datos (No, según la info que tengas)
  • Compilación de consulta lenta (No, se usa consulta SQL sin formato)
  • Transferencia de datos lenta (No, las otras consultas funcionan bien)
  • Inicialización lenta de DbContext (No, dijiste que no es la primera consulta)
  • Bloqueos de filas o tablas (no es probable, eso probablemente aparecerá como una consulta de ejecución prolongada en el generador de perfiles)
  • Materialización lenta (No, a pocos campos a menos que haya un error grave en el caso extremo)

Tercer paso:

¿Lo que queda? Eso depende de la respuesta al #1 y también si siempre son 9 segundos.

Mis principales sospechosos aquí son algún problema de conexión porque otra llamada está bloqueando, por lo que tiene que esperar una conexión o algún caché de segundo nivel o algo que no funciona bien con esta consulta.

Para excluir algunas alternativas más, intentaría ejecutar la misma consulta usando ADO.NET simple y antiguo. Si el problema persiste, sabe que no es un problema de EF y es muy probable que sea un problema de conexión. Sin embargo, si desaparece, aún podrían ser ambos problemas.

No tanto como una respuesta como algunas diatribas, pero con suerte algo en lo que no hayas pensado ya.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda