首页 > 解决方案 > 使用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();

标签: c#sql-server.net-core

解决方案


推荐阅读