如何快速解决Affinity mask和Affinity I/O mask冲突(conflict)问题

本文介绍了SQL Server中Affinity Mask和Affinity I/O Mask的概念,用于控制数据库任务在特定CPU上执行。当两者设置冲突时,会导致错误。通过检查并正确设置这两个属性,可以避免冲突,提升系统效率。文章提供了设置示例及检查当前配置的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL Server在执行一项任务时,会将这个任务分割成子任务同时进行。比如做2个表的join操作时,如果是首次执行,会有一个子任务负责从磁盘上的数据库文件中把要执行的数据页读取到内存中,同时,会有另一个子任务负责做join这个操作。

 

既然是多任务,那就可以在多个CPU上同时进行。有时这些任务要交换到不同CPU上继续执行。所以,就引出了Affinity mask的概念,简单来说,就是用户可以选择SQL Server可以固定使用哪些CPU。比如,我有一台4颗4核的CPU,那总的逻辑CPU数量就有16个,我可以通过Affinity Mask来控制我的SQL Server只使用其中的前3个,留出剩下的13个给其他的application用。同样,Affinity I/O Mask也是一样的道理,只是它是用来控制I/O操作的。

 

为了提高效率,不能将Affinity Mask和Affinity I/O Mask设在同一颗CPU上。一颗CPU只能派一个用场。

 

如果遇到这样的错误,

Msg 5834, Level 16, State 1, Line 1
The affinity mask specified conflicts with the IO affinity mask specified. Use the override option to force this configuration

 

很清楚,一定是什么语句把这两个属性设在相同的CPU上了。如果要检查当前的设置,可以运行

 

sp_configure

go

 

然后看这2个属性的Run_value(当前启用的值)

 

关于具体的设置方法,可以参考这篇文章,讲的很透彻:

http://msdn.microsoft.com/en-us/library/ms187104.aspx

 

例如:

以下可以成功。因为Affinity Mask设在了第1,2颗CPU上,Affinity I/O Mask设在了第3颗CPU上。

sp_configure 'affinity mask', 3;

RECONFIGURE;

GO

 

sp_configure 'affinity I/O mask', 4;

RECONFIGURE;

GO

 

 

而以下就会发生冲突。因为Affinity I/O Mask设在了第1和第3颗CPU上,而第1颗已经设上Affinity Mask了。

sp_configure 'affinity mask', 3;

RECONFIGURE;

GO

 

sp_configure 'affinity I/O mask', 5;

RECONFIGURE;

GO

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值