我们有一个跨2台服务器负载均衡的网站。这可以在90%的时间内满足我们的运行流量,但是当我们使用特定产品进行销售时,我们偶尔会出现大量的流量峰值。
为了解决这个问题,我们在网关服务器上有一个等候室应用程序。这为每个用户分配了等候室的唯一会话ID。
如果网站上当前的会话数低于规定的阈值,则允许用户通过,否则他们将被发送到保留页面,在那里他们可以看到队列中的位置。该会话由每隔15秒ping等候室应用程序的页面上的javascript函数维护。
如果某个会话连续错过3次ping,则表示用户已离开该站点并且其会话已过期,因此下一个用户可以进入该站点。这似乎工作得很好,但是我最近发现在使用SQL Server Management Studio查看网站上当前用户数时存在一些不一致。
例如,Google Analytics将报告网站上的200个用户,该用户低于阈值。当我运行下面的脚本时,它有时会报告该网站中的所有200个用户,但通常不会报告大约100个。
SELECT Count([id]) AS In_Site
FROM [WaitingRoom].[dbo].[queueUsers]
WHERE [status] = 2
SELECT Count([id]) AS Waiting
FROM [WaitingRoom].[dbo].[queueUsers]
WHERE [status] = 1
数据库是SQL Server 2016 Express并使用SQL Server Management Studio 17
有时为什么SQL似乎无法正确返回所有用户的任何想法?
答案 0 :(得分:1)
这可能更多地与Google Analytics(分析)归类为活跃用户和您的代码所做的差异有关。
查看他们的metrics信息:
指标值与日期范围的关系
报告中的指标与您用于报告的日期范围中的最后一天相关。例如,如果您的日期范围是1月1日到1月30日:
- 1天活跃用户:1月30日(日期范围的最后一天)在您的网站或应用上发起会话的唯一身份用户数。
因此,请注意,我认为这是今天使用过的用户,而不是积极参与网站。