这个微软医生中的场景C描述了如何用内存优化表替换连接范围内的临时表。该方案使用筛选器安全策略,该策略调用一个函数来确定@@spid是否与内存优化表中的SpidFilter列匹配。
这是否适用于.NET连接池?我希望@@spid会返回一个连接被一次又一次重复使用时的相同编号。.NET通过调用sp_reset_connection清除会话作用域的临时表,但这不会清除内存优化表,也不会更改@@spid。也许可以添加sys.dm_exec_ session_id以使其在连接池环境中工作?
发布于 2018-08-24 18:44:02
在Microsoft的帮助下,我能够获得有关ASP.NET连接池的必要细节,以解决这一问题。确实,ASP.NET线程将共享相同的SPID,但永远不会同时共享。只有在连接不再被前一个线程使用之后,线程才会被分配连接。连接池并不会减少所需连接的数量,它只会减少需要打开和关闭连接的次数。
这是关于连接池的很好的文档,尽管它没有区分这一点。https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling
请注意,场景C有特别的注意事项:“将代码中的CREATE #tempSessionC语句替换为dbo.soSessionC中的DELETE,以确保会话不会暴露于使用相同session_id插入的前一个会话插入的表内容”- in。
因为一次只使用一个线程,这就足够了。如果表在使用后也未被删除,它将继续消耗内存(在Azure中尤为珍贵),直到另一个线程碰巧使用同一个SPID的连接为止。
https://stackoverflow.com/questions/50849713
复制相似问题