我的其中一台生产计算机(SQL Server Express 2012)的性能不太好。我开始运行WhoIsActive脚本,并且得到了很多这些等待类型:
(10871ms)PREEMPTIVE_OS_AUTHZINITIALIZECON
它们总是在调用检查某些用户权限的函数时发生。如果我正确理解这一点,则该函数必须等待将近11秒才能等待Windows函数AuthzInitializeContextFromSid(请参阅https://www.sqlskills.com/help/waits/preemptive_os_authzinitializecontextfromsid/)。
完整输出:
00 00:00:10.876 75
<?query --
select @RetValue = ([dbo].[Users_IsMember]('some_role_name', @windowsUserName)
| is_srvrolemember('SysAdmin', @windowsUserName))
--?>
<?query --
MyDB.dbo.StoredProcName;1
--?>
DOMAIN\User (10871ms)PREEMPTIVE_OS_AUTHZINITIALIZECON master: 0 (0 kB),tempdb: 0 (0 kB),MyDB: 0 (0 kB) 10,875 0 0 NULL 93 0 0 <ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.5" Build="11.0.7001.0"><BatchSequence><Batch><Statements><StmtSimple StatementText="select @RetValue = ([dbo].[Users_IsMember]('some_role_name', @windowsUserName)
 | is_srvrolemember('SysAdmin', @windowsUserName))
 " StatementId="1" StatementCompId="49" StatementType="ASSIGN WITH QUERY" RetrievedFromCache="true" /></Statements></Batch></BatchSequence></ShowPlanXML> 3 runnable NULL 0 NULL ServerName AppName .Net SqlClient Data Provider 2018-12-17 09:29:35.413 2018-12-17 09:29:35.413 0 2018-12-17 09:29:46.447
答案 0 :(得分:0)
根据我的经验,PREEMPTIVE_OS等待状态与分配给SQL Server的内存与Windows OS本身之间的不平衡有关。
在这种情况下,OS内存不足。您可以尝试将更多的总内存添加到该框中,或者确保将SQL Server配置为仅使用实例上安装的总内存的80%。或两者兼有。