我们公司为几个网站运行了几台服务器。服务器运行的是 Windows Server 2012,数据库使用的是 MS SQL Server 2012。
今天我检查了位于以下位置的日志文件:
"C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log"
我在名为“system_health”的事件日志中发现了这个奇怪的事情:
security_error_ring_buffer_recorded
点击它后,我得到了更多信息:
api_name ImpersonateSecurityContext
call_stack 0x6E2715B4FB0700007C36FBB3FB070000A553FBB3FB070000... <- this one continues forever
calling_api_name NLShimImpersonate
error_code 5023
id 0
session_id 51
time_stamp 190360
如果不是“错误”和“记录”部分,我就不会这么烦恼了......这听起来不太好。
这种事件每天每小时都会发生,有时候间隔几分钟,而其他时候则在几秒钟内发生一百次。
这是我第一次检查这些日志文件。
有人能向我解释一下这是什么以及如何“修复”它(如果有必要的话)吗?
编辑:
除了这个活动之外,还有一个名为:
"scheduler_monitor_system_health_ring_buffer_recorded"
单击它后显示“page_faults”为 8913。这听起来也不太好。
答案1
什么是环形缓冲区?
环形缓冲区是用于线程间或进程间通信的固定大小的内存。本质上,信息被写入环形缓冲区,当系统到达末尾时,它会再次从头开始写入。还有一个指向缓冲区当前头部的共享指针。
同时,读取线程从头开始读取,并尝试跟上写入器的速度。如果写入器进程超过读取器,则事件/数据将丢失,但至少您可以继续。
一般来说,缓冲区的大小是这样的,除非发生坏事,否则这种情况不会发生。
环形缓冲区用于丢失事件并不致命的情况,而其他形式的队列管理则存在更大的问题。
那么这一事件意味着什么?
这意味着有一个环形缓冲区,正在向其中写入安全错误。另一个线程正在读取环形缓冲区,并将信息记录到日志文件中。这正是应该发生的事情。
这不是一个错误。这是详细的日志记录,告诉您它如何处理安全错误(例如登录失败)以确保它们不会丢失。