小编use*_*633的帖子

如何使用存储会话数据的 SQL Server 表计算并发应用程序会话数?

我有一个供应商应用程序,它将会话数据存储在 SQL Server 2008 数据库表中。它包含的列包括 sessionId、用户的 IP 地址、会话创建时的日期时间戳(即用户登录)以及会话销毁时的日期时间戳(即用户注销或系统注销用户) .

我的目标是分析该表中的所有记录,并找出所有记录中并发会话的平均数。

现在,不幸的是,由于本问题范围之外的原因,会话销毁日期不准确。因此,我对会话的持续时间使用了一个非常粗略的估计:1 小时。在我整理了设计阶段之后,我可以随时更改数字。

我确信我可以组合一个存储过程来获得平均并发会话数,但我希望我可以通过查询来完成它。

为了简化这里的事情,让我们假设表中有 5 条记录,并且所有记录都是在同一天创建的,并且是 GMT 时间:

sessionId  sessionStart  sessionEnd  Accumulative # of Concurrent Sessions
1          12:00         13:00       1
2          12:15         13:15       2
3          12:30         13:30       3
4          12:45         13:45       4
5          13:00         14:00       4
Run Code Online (Sandbox Code Playgroud)

13:00,第一个会话被销毁。并发会话数保持在 4,因为会话 2 到 5 仍然存在。

问题是我如何编写一个查询来输出平均并发会话数?可以做到吗?我想它会涉及同一张桌子上的多个连接,但我还没有完全弄清楚从哪里开始。

该表有不到一百万条记录。我可以使用 2012 年的盒子,如果有帮助,可以将表格复制到那里。

performance sql-server stored-procedures query-performance

5
推荐指数
1
解决办法
696
查看次数