通过使用内存优化更快 SQL 温度 table 和 table 变量
Faster SQL temp table and table variable by using memory optimization
This Microsoft Doc 中的场景 C 描述了如何用内存优化表替换范围为连接的临时 tables。该方案使用过滤器安全策略,该策略调用一个函数来确定@@spid 是否与内存优化中的 SpidFilter 列匹配table。
这是否适用于 .NET 连接池?我希望@@spid 将 return 与连接重复使用的数字相同。 .NET 通过调用 sp_reset_connection 清除会话范围内的临时 tables,但这不会清除内存优化 tables,或更改 @@spid。也许可以添加 sys.dm_exec_sessions 的 session_id 以使其在连接池环境中工作?
在 Microsoft 支持的帮助下,我能够获得有关 ASP.NET 连接池的必要详细信息来回答这个问题。确实 ASP.NET 个线程将共享相同的 SPID, 但绝不会同时 。只有在连接不再被前一个线程使用后,线程才会被分配一个连接。连接池不会减少所需的连接数,它只会减少需要打开和关闭连接的次数。
这是关于连接池的很好的文档,尽管它没有做出那种区分。 https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling
Notice that Scenario C has special note: "Replace the CREATE TABLE #tempSessionC statements in your code with DELETE FROM dbo.soSessionC, to ensure a session is not exposed to table contents inserted by a previous session with the same session_id." – i-one
因为一次只有一个线程使用连接,这就足够了。如果 table 在使用后不也被删除,它将继续消耗内存(在 Azure 中尤其宝贵),直到另一个线程恰好使用具有相同 SPID 的连接。
This Microsoft Doc 中的场景 C 描述了如何用内存优化表替换范围为连接的临时 tables。该方案使用过滤器安全策略,该策略调用一个函数来确定@@spid 是否与内存优化中的 SpidFilter 列匹配table。
这是否适用于 .NET 连接池?我希望@@spid 将 return 与连接重复使用的数字相同。 .NET 通过调用 sp_reset_connection 清除会话范围内的临时 tables,但这不会清除内存优化 tables,或更改 @@spid。也许可以添加 sys.dm_exec_sessions 的 session_id 以使其在连接池环境中工作?
在 Microsoft 支持的帮助下,我能够获得有关 ASP.NET 连接池的必要详细信息来回答这个问题。确实 ASP.NET 个线程将共享相同的 SPID, 但绝不会同时 。只有在连接不再被前一个线程使用后,线程才会被分配一个连接。连接池不会减少所需的连接数,它只会减少需要打开和关闭连接的次数。
这是关于连接池的很好的文档,尽管它没有做出那种区分。 https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling
Notice that Scenario C has special note: "Replace the CREATE TABLE #tempSessionC statements in your code with DELETE FROM dbo.soSessionC, to ensure a session is not exposed to table contents inserted by a previous session with the same session_id." – i-one
因为一次只有一个线程使用连接,这就足够了。如果 table 在使用后不也被删除,它将继续消耗内存(在 Azure 中尤其宝贵),直到另一个线程恰好使用具有相同 SPID 的连接。