微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQLServer线程与纤维

对于sqlServer线程管理,可能很多刚刚接触sql数据库的新人都比较陌生,下面就为您详细介绍sqlServer线程管理,希望对您学习sqlServer线程管理方面能有所帮助。

复杂的应用具有多个需要同步完成的任务或处理过程。一个进程具有一个执行线程,执行应用的程序指令。我们将这个执行线程简称为线程(thread)。sqlServer使用WindowsNT操作系统的线程,有时是sqlServer的纤维(见下面的讨论),执行并发任务(微软的sqlServer桌面版不支持纤维)。线程由sqlServer启动,然后WindowsNT在sqlServer可用的多个处理器(cpu)之间平均地分配线程。可以通过企业管理器,或通过设置sqlServer的配置参数affinitymask来配置sqlServer可以使用的处理器的数量

大多数系统通过允许sqlServer使用系统中的所有cpu,工作得最好。一个线程一个时间可以在系统的一个cpu上执行。例如,具有四个cpu的系统可以并发执行四个线程。当一个线程可能处于等待I/O操作完成的状态时,另一个线程可以运行在相同的cpu上,即使在一个cpu的系统中,也是如此。这样一来增加了可以执行的工作量。线程的管理是由WindowsNT核心代码维护的。当一个线程移出一个cpu,另一个线程移入cpu时,发生一次环境切换(contextswitch)。环境切换是一个相当耗时的操作,因为它需要在应用代码用户模式与sqlServer线程管理代码的核心模式之间进行切换,因此,设备环境切换越少越好。为减少环境切换,sqlServer具有一个称为纤维(fibers)的新特性。

纤维是线程的子部件,缺省情况下,sqlServer并不使用纤维,但可以通过配置让sqlServer使用纤维。纤维由运行在用户模式的代码来维护,因此,切换纤维比起切换线程的操作来,并不耗时,因为不需要在核心模式与用户模式之间改变模式。纤维的调度表由sqlServer维护,而线程的调度表由WindowsNT维护;多个纤维可以运行在同一个线程上,并且纤维可以在线程中进行切换,而此时在cpu上执行的线程不用切换环境。这样大大降低了系统上的环境切换次数。如果你的系统执行了许多环境切换,试试以纤维模式运行sqlServer。要这样做,必须通过企业管理器选择该选项,或者运行sp_configure并设置lightweightpooling(轻型池)参数,它也是一个高级选项。

sqlServer维护线程池以执行sql语句。如果设置了纤维模式,将维护纤维池而不是线程池。池中的线程或纤维,称为工作者线程(workerthread)。当在同一时间执行多条sql语句时,工作者线程池允许sqlServer更好地分配cpu的处理时间。也可以使用配置参数maxworkerthreads(最大工作者线程)配置sqlServer可用的工作者线程的数量,最大值为255(可以通过企业管理器配置,或使用sp_configure存储过程配置)。

当发送一条sql语句或一批语句给sqlServer执行时,如果池中存在空闲线程,sqlServer为该语句或批语句分配一个工作者线程;如果没有现存的空闲线程,并且尚未达到最大工作者线程数,sqlServer将为这个处理启动一个新的线程;如果达到了最大线程数,并且没有空闲线程,处理必须等待另一个批处理完成它的任务并释放一个线程,这种等待通常时间不会太长。如果发现一个已达到最大工作者线程限制的sqlServer错误,可以尝试一下增大该参数值。然而,千万记住,允许创建过多的线程会导致更多的开销,最终会降低性能
 
 
自己注解:
sqlServer:    取得操作系统的一个线程,然后轮流给我的多个任务用。切换只发生在我自己内部,与操作系统无关,对操作系统隐瞒切换。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐