Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc SQL Server:在存储过程中使用临时表时的并发性_Asp.net Mvc_Sql Server 2008_Asp.net Mvc 4_Iis_Web Garden - Fatal编程技术网

Asp.net mvc SQL Server:在存储过程中使用临时表时的并发性

Asp.net mvc SQL Server:在存储过程中使用临时表时的并发性,asp.net-mvc,sql-server-2008,asp.net-mvc-4,iis,web-garden,Asp.net Mvc,Sql Server 2008,Asp.net Mvc 4,Iis,Web Garden,我在IIS服务器上发布了一个ASP.NET MVC应用程序。我在这里使用web园艺,我的意思是,应用程序池有多个工作进程来处理传入的请求。这个应用程序也被很多用户和客户使用 此应用程序调用使用一些本地临时表的SP(例如)。例如: BEGIN if OBJECT_ID(N'tempdb..#MyTempTable') IS NOT NULL BEGIN DROP TABLE #MyTempTable END CREATE TABLE #MyTempTable ( someField

我在IIS服务器上发布了一个ASP.NET MVC应用程序。我在这里使用web园艺,我的意思是,应用程序池有多个工作进程来处理传入的请求。这个应用程序也被很多用户和客户使用

此应用程序调用使用一些本地临时表的SP(例如)。例如:

BEGIN

if OBJECT_ID(N'tempdb..#MyTempTable') IS NOT NULL
BEGIN
  DROP TABLE #MyTempTable
END

CREATE TABLE #MyTempTable
(
   someField int,
   someFieldMore nvarchar(50)
)

... Use of temp table here
... And then drop table again at the end..

DROP TABLE #MyTempTable

END
我担心并发性,例如,如果一个用户客户端调用存储过程,而另一个前一个调用正在同时运行,会发生什么情况?这里可能存在并发问题?

在IIS(包括大多数web服务器)中,使用线程处理请求。每个请求将在应用程序池中创建的新线程中执行。除非共享资源,否则线程不会相互影响

本地临时对象由会话分隔。如果有两个查询同时运行,那么它们显然是两个完全独立的会话,您无需担心。登录不重要。如果您正在使用连接池,这也不重要。本地临时对象(通常是表,也包括存储过程)不会被其他会话看到

即使多个线程(也包括请求)希望使用一个连接并执行存储过程,连接池也不能重用同一个连接。这意味着没有危险


类似地,一个线程使用连接并执行存储过程,它将不起作用。所有调用都使用相同的存储过程。它们将按顺序排队,直到执行上一个调用。

Temp表是它们所创建的作用域的本地表,当它们超出作用域时会自动删除(您不需要在过程结束时进行
删除
)。本地临时表不会与其他会话冲突。大量使用临时表的唯一并发问题是从DBA的角度来看,多个临时数据库文件可以减少分配页争用。顺便说一句,SQL 2008不受支持,并且在更高版本中有性能改进,例如临时表元数据缓存。