.net - 带有 AspNet Identity / OWIN 的 ASP.NET MVC5 应用程序过于频繁地调用 SQL Server 视图 INFORMATION_SCHEMA.COLUMNS
问题描述
我是一名 SQL Server DBA,负责为一个应用程序存储数据的非常小的数据库,有人告诉我这是一个 ASP.NET MVC 5 应用程序。
该应用程序的用户数量最少,数据库很小,而且我相信该应用程序不包含自定义 SQL。换句话说,所有数据库访问都是由框架驱动的。
应用程序性能很差,简单的操作需要长达 1 分钟的时间。我只能看数据库性能非常好,除了 1 个问题。应用程序每秒发出大约 73 次以下查询。
(@Table nvarchar(11))
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @Table
我强烈怀疑这是导致性能不佳的原因。但是,开发人员不知道该语句在应用程序中的来源。对此有什么想法吗?我已经搜索了一个答案并找到了一个,但开发人员坚持认为它真的很旧并且不适用。
以下是来自开发者的更新:
- .NET MVC 应用程序使用 Entity Framework 6 和 Database First 开发。
- 存储库模式,其中每个实体实例化继承自 IdentityDbContext 的数据库上下文。
- 存储库对象处理 CRUD 操作,以及返回实体域对象(Mvc 中的模型)的更复杂的 Linq to Entity 方法。存储库被注入 (NInject) 到服务中。服务类调用一个或多个存储库,并应用更复杂的业务逻辑来公开控制器调用的方法。域对象被映射(Automapper)到 DTO 对象以在控制器中使用。
- 控制器 (mvC) 注入服务并执行 UI 所需的逻辑,并在大多数情况下返回 ActionResult 对象或 ViewModel,而这些对象又从 cshtml 页面 (mVc) 中调用。
- 我想知道 Context 类中的 OnModelCreating 方法中是否有一些问题,并且以某种方式导致 EF 框架中的某些内容查询 INFORMATION_SCHEMA 以查找正确的列名?
** 已更新 ** 我们发现传递的 nvarchar(11) 参数是 AspNetUsers,它是用于 AspNet Identity 用户登录功能的表名。
因此,这不是 EF 问题,而是这些 SQL 查询是从 Asp.Net Identity 功能或 OWIN 中间件中生成的。
解决方案
推荐阅读
- javascript - 给定一个字符串,将每个单词的第一个字母移动到每个单词的末尾,然后在每个单词的末尾添加“ay”并返回一个新字符串 - JavaScript
- ruby-on-rails - Systemd Rails 启动脚本因 rbenv 失败,(code=exited, status=1/FAILURE)
- c++ - 无法在带有 Clang 的模块中使用对齐的“operator new”
- spring - Intellij 中的模块依赖性 - 无法引用其他项目中的类
- javascript - 如何使用 webdriver.io 点击网页上的所有锚元素
- pandas - 用 groupby 添加两列
- python - 如何根据熊猫中的多列得出分数(排名)
- java - Gradle:无法从 12 确定 Java 版本
- javascript - 无需猜测或蛮力即可在贝塞尔曲线上获得一个点
- python - 如何使用python通过LLDB读写寄存器?