SQL Server Profiler中的“Audit Logout”是什么?

109

我正在运行一个数据导入程序(使用C# / Linq),自然而然地,我试图尽可能地优化我的查询。为此,我使用SQL Server Profiler对DB进行跟踪,并使用我的SQL登录名过滤跟踪的内容(这是可以唯一归属于我的数据导入过程的名称)。

奇怪的是,我的大多数SQL语句都非常快:很少有查询甚至超过1毫秒的时间。但在所有查询之间,分散着几行事件类型为“Audit Login”或“Audit Logout”的行 - “Audit Logout”的持续时间可能长达一分钟!

这是否与我在导入中使用事务有关?如果是这样,是否有办法找出那些影响较大的查询,以便我可以清理它们?


请问是否可以提供更多的背景信息以及所需的具体翻译领域,因为这个内容是关于 SQL 的连接池和登录注销审计的,请确认是否需要翻译整篇文章。 - Ruben Bartelink
请参考以下链接:https://stackoverflow.com/questions/44920375/sql-server-profiler-how-to-inspect-understand-the-duration-for-the-audit-logout - Stefan
4个回答

96

如果我没记错的话,审计退出的持续时间是连接打开的时间。例如,与命令速度无关,只与登录时长有关。


10
有趣,谢谢!但是为什么阅读次数会这么高(约为400,000),而在“登录”和“注销”之间查询的阅读次数仅为56次? - Shaul Behr
3
这是从登录到注销的毫秒数,而不是连接中查询实际使用的次数。400,000毫秒约为7分钟。查看CPU、读取和写入列,尝试定位高CPU和/或磁盘使用率的查询 - 这两者都会影响性能。 - Thies
对不起,您的意思是 Reads 响应时间测量吗? - Johnny_D
1
我的登出“读取”值似乎非常高,考虑到它和登录之间只有一个操作,其中列出了3个读取。 - Triynko
1
需要注意的是,“Reads”列并不代表查询返回的行数,而是逻辑磁盘读取的次数。即使一个查询没有返回任何内容,它也可能扫描整个包含100万条记录的表以查找要返回的内容,这将生成大量的读取次数。因此,读取次数并不自然地与查询次数相关联。 - Pace
“Reads”似乎是一个单调递增的值。当我在跟踪中找到两个连续的“Audit Logout”行,并从较早行的“Reads”中减去后面行的“Reads”,我得到一个小的正值,它等于后面所包含的数据库活动或“RPC”的“Reads”。 - IAM_AL_X

12

登录/注销事件与建立/撤销有关。我记得这里的时间是“已登录时间”,而不是像其他日志事件那样的处理持续时间。

通常情况下,除非你怀疑连接池管理等存在问题,否则会隐藏这些事件。

批次的原始时间应足以诊断实际活动所需的时间,包括任何事务的影响。


有没有可能更详细地检查“设置/拆除”?请参见以下相关问题:https://stackoverflow.com/questions/44920375/sql-server-profiler-how-to-inspect-understand-the-duration-for-the-audit-logout - Stefan

6
值得注意的是,正如这个回答所提到的,Audit Login/Logout可能只是意味着连接正在从连接池中被重用或返回。
您可以使用事件中的另一个字段来确定它是连接池事件还是“真实”的登录/注销。

5
审计注销事件类表示用户已从 Microsoft SQL Server 注销。此类中的事件由新连接或从连接池重用的连接触发。
它是连接登录时间的总时间,包括空闲时间,因此不表示性能问题。另外,记录登录/注销的概率非常小,不会引起性能问题。您最好查找表现不佳的查询,可能是长时间运行的查询。
有关更多信息,建议参阅 https://msdn.microsoft.com/en-us/library/ms175827.aspx :)

1
你确定在连接池中重用连接时会触发审计注销事件吗?我认为连接池是高审计注销持续时间的原因之一,因为连接处于打开但大部分时间空闲的状态。 - Adam Goodwin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接