0

我们正在使用 EF6.1 和 dotConnect for Oracle。

尝试调试为什么我们的开发在其中一个客户服务器上表现不佳,我打开了 DatabaseLogger 拦截器功能以在 DB 中执行查询并尝试改进它们。我发现的一件事是,在某些查询中,在执行查询和关闭连接之间存在几秒钟的延迟。例如:

Connection opened at 17/06/2014 9:47:42 +02:00
SELECT 
    "top". (...)
FROM ( SELECT 
    "Project1". (...)
    FROM ( SELECT 
        "Extent1". (...)
        "Extent2". (...)
        FROM  (...)
        WHERE (...)
    )  "Project1"
    ORDER BY (...)
)  "top"
WHERE  ROWNUM <= 1

-- p__linq__0: '589' (Type = Int32, IsNullable = false)
-- Executing in 17/06/2014 9:47:43 +02:00
-- Completed in 288 ms with result: aj

Connection closed at 17/06/2014 9:47:51 +02:00

正如你所看到的,有很多秒的延迟。这个查询运行了很多次,但延迟并不是在每个实例中都出现,其他的只有 2 或 3 秒的延迟,而其他的则没有。

我真的不知道从哪里开始调查。它与 EF 或 dotConnect Oracle 有关吗?执行查询并关闭连接后完成什么工作?


编辑:这是我用来从数据库中检索信息的代码:

var users = db.USUARIO
    .Where(x => x.COORDENADA.Any(c => c.LATITUD != 0 && c.LONGITUD != 0))
    .OrderBy(x => x.NOMBRE).AsQueryable();

(...)

var list = users.ToList()
           .Select(x => new
            {
                Usuario = x,
                LastCoord = db.COORDENADA
                    .Include(c => c.TIPO)
                    .Where(c => c.USUARIOID == x.USUARIOID && c.LATITUD != 0 && c.LONGITUD != 0)
                    .OrderByDescending(c => c.FECHAHORAPDA)
                    .ThenBy(c => c.TIPO.RUTA).FirstOrDefault()
            })
            .Select(x => new ListItem
            {
                ID = x.LastCoord.COORDENADAID,
                Marcadores = new List<COORDENADA>(new[] { x.LastCoord }),
                Principal = x.Usuario.NOMBRE.ToTitleCase(),
                Inferior1 = x.LastCoord.FECHAHORAPDA.ToString("dd/MM HH:mm"),
                Color = x.LastCoord.TIPO.COLOR
            });

db.COORDENADA... 是我之前公开的查询。

4

0 回答 0