SQL server下空转——无连接的痛苦,早在很多年前,当SQL server连接开始被人们广泛应用的时候,它就被用来处理查询要求来改善系统的性能。但是,当你运行的查询比较多,连接却比较少时,你将会遭受到它的性能瓶颈——“空转”。空转这个行业术语是指数据库服务器上连接数量比较少,无法处理可用的查询,它就会来回滚动数据库中的查询,甚至大部分时间都在空转,因而充分利用系统资源没有实现。
导致“空转”现象产生的原因主要有三点:首先,由于SQL Server连接数量受限,无法为每个查询请求分配到一个可用的连接,而这些查询请求就会被数据库处理器ignore,就会形成排队等待的现象,这些排队的查询就会导致系统空转;其次,由于SQL Server有着良好分区特性,当查询只是对某一个特定的分区进行查询,但是服务器上没有可用的连接通道,也会导致空转;再者,SQL Server的缓存机制非常好,它会将上次的查询结果缓存起来,也会导致空转。
为了解决空转的问题,我们可以采取以下措施来解决:
调整连接:首先,调整SQL Server的连接数量,使得总的连接数大于正在运行的查询数量,这样就可以避免连接受限而导致排队现象;
聚合计算:减少查询返回的行,但是却能够获得更高的性能是很重要的,尤其是在查询量比较大的时候;
优化查询:对执行的SQL语句进行性能优化,比如建立索引,精简语句,重新构造关联键等;
缩短空闲时间:如果连接上最后一次查询执行完毕以后没有新的查询发起,则可以考虑将空闲时间缩短,以减少空转现象。
通过以上措施,紧跟SQL Server的空转情况,可以有效的降低命中率,从而提高性能。
运用一堆优化SQL Server查询语句以及调整连接数量,就可以减少“空转”现象。不断优化SQL语句,比如添加索引,管理缓存,缩小查询返回的行列,以及调整SQL Server的连接数量,都是必不可少的,有助于改善数据库系统的性能。
“`sql
–升级索引
ALTER INDEX [IX_TenantConfigurations] ON [dbo].[TenantConfigurations] REBUILD
–扩展并收缩数据库
ALTER DATABASE [DB] MODIFY FILE (NAME = N’DB’, SIZE = 1048576MB)
ALTER DATABASE [DB] MODIFY FILE (NAME = N’DB_Log’, SIZE = 1048576MB)
–为SQL SERVER连接数量添加索引
EXEC SP_CONFIGURE ‘number of user connections’, 50
GO
RECONFIGURE
GO