c# - 使用nolock读取的sql server导致等待并行执行的相同查询
问题描述
实际上,我在主页上显示的一些数据面临性能问题。
我有一个使用 CTE 运行一些选择的查询,并且我为每个表添加了一个 WITH (NOLOCK) 以确保读取不会阻止任何内容。
我的查询在 4-5 秒内执行,但如果我在后端 API(.NET Core 2.2)上打开 4 swagger 并运行查询,则需要 17-19 秒......
我不明白在哪里寻找。为什么使用 nolock 的读取操作无法并行运行?我正在访问相同的数据。这通常是一种常见的情况,不是吗?同时访问您网站的用户的相同数据仪表板...
我使用 DMV 查询来检查并行查询期间的状态:
session_id status command
57 running SELECT
59 runnable SELECT
60 running SELECT
64 running SELECT
66 running SELECT
67 runnable SELECT
75 runnable SELECT
78 runnable SELECT
任何想法?
为查询添加 DMV 统计信息:
ExecCount CpuPerExec CpuTotal IOPerExec IOTotal AvgElapsedTime AvgWaitTime AvgRowCount
9 2000898 18008084 13935 125422 2534106 533208 330
编辑(有关连接的其他信息)
我正在使用以下代码打开我的连接
SqlConnection con = new SqlConnection(ConnectionStringBuilder(dbName));
await con.OpenAsync(cancellationToken);
con.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted).Commit();
解决方案
推荐阅读
- android - 如何知道相机拍摄的照片的方向?
- javascript - PDF 文件中的 Blob
- excel - VBA Sub从函数返回输出
- php - 如何使用codeigniter中的onclick函数将id传递给控制器
- javascript - 你如何使 Skype webcontrol 工作?
- java - 移除/替换碎片
- c++ - 我怎么知道作为参数的 size_t 在函数中是否有效?
- javascript - 如何使用 indexOf('EXAMPLE.com') 选择多个标准 - 如何包含更多示例以供选择?
- email - 如何使用谷歌脚本通过电子邮件从电子表格发送数据
- typescript - 如何正确模拟使用本机代码的 React Native 模块?