计算机编程

图片 1

【介绍】

在spark-env.sh文件中配置了一下参数;exportSPARK_WORKER_MEMORY=4gexportSPARK_WORKER_CORES=1exportSPARK_WORKER_INSTANCES=12但是现在我想恢复到原来的默认分配的资源该怎么恢复呢怎么只显示最后俩个,请大家帮帮忙。

SQL Server 通过WORKER, SCHEDULER, TASK等来对任务进行调度和处理。了解这些概念,对于了解SQL Server 内部是如何工作,是非常有帮助的。

通常来讲,SCHEDULER个数是跟CPU个数相匹配的 。除了几个系统的SCHEDULER以外,每一个SCHEDULER都映射到一个CPU,如下面的查询结果所示,我们有四个CPU,也就有相应四个SCHEDULER。

图片 2

而WORKER (又称为WORKER THREAD), 则是工作线程。在一台服务器上,我们可以有多个工作线程。因为每一个工作线程要耗费资源,所以,SQL Server有一个最大工作线程数。一个TASK进来,系统会给它分配一个工作线程进行处理。但是当所有的工作线程都在忙,而且已经达到了最大工作线程数,SQL Server就要等待,直到有一个忙的工作线程被释放。最大工作线程数可以通过下面的查询得到。SQL SERVER并不是一开始就把这些所有的工作线程都创建,而是依据需要而创建。

图片 3

TASK是由BATCH而来。我们知道,一个连接,可以包含多个BATCH,而每个BATCH则可以分解成多个TASK。如下面某一个连接要做的事情。这个连接要做的有两个BATCH,而每个BATCH,如SELECT * FROM TABLE_B,因为可以支持并行化查询,所以可能会被分解成多个TASK。具体BATCH怎么分解成TASK,以及分解成多少个,则是由SQL Server内部决定的。

INSERT INTO TABLE_B VALUES (‘aaa’)
GO
SELECT * FROM TABLE_B
GO

【关系】

我们初步了解了Connection, Batch, Task, Worker, Scheduler, CPU这些概念,那么,它们之间的关系到底是怎么样呢?
图片 4

 如上图所示,左边是很多连接,每个连接有一个相应的SPID,只要用户没有登出,或者没有timeout, 这个始终是存在的。标准设置下,对于用户连接数目,是没有限制的。

在每一个连接里,我们可能会有很多batch,在一个连接里,batch都是按顺序的。只有一个batch执行完了,才会执行下面一个batch。因为有很多连接,所以从SQL Server层面上看,同时会有很多个batch。

SQL Server会做优化,每一个batch,可能会分解成多个task以支持如并行查询。这样,在SQL层面上来看,同时会有很多个TASK。

SQL Server 上,每一个CPU通常会对应一个Scheduler, 有几个额外的系统的Scheduler,只是用来执行一些系统任务。对用户来讲,我们只需要关心User Scheduler就可以了。如果有4个CPU的话,那么通常就会有4个User Scheduler。

每个Scheduler上,可以有多个worker对应。Worker是真正的执行单元,Scheduler(对CPU的封装)是执行的地方。Worker的总数受max worker thread限制。每一个worker在创建的时候,自己需要申请2M内存空间。如果max worker thread为1024,并且那些worker全部创建的话,至少需要2G空间。所以太多的worker,会占用很多系统资源。

【跟踪】 

我们了解了Connection, Batch, Task, Worker, Scheduler, CPU之间的关系,下面我们用DMV跟踪一下运作的流程。

步骤一:

执行下面的脚本,创建一个测试数据库和测试数据表

CREATE DATABASE TEST
go
use TEST
go

CREATE TABLE TEST
(ID int,
name nvarchar(50)
)
INSERT INTO TEST VALUES (1, 'aaa')

步骤二:
打开一个查询窗口,执行下面的语句,注意,我们这里并没有commit transaction.

begin tran
update TEST set name='bbb' where [ID] = 1

步骤三:
打开另外一个窗口,执行下面的语句,我们会看到,下面的查询会一直在执行,因为我们前面的一个transaction并没有关闭。从查询窗口,我们可以看到,下面语句执行的SPID为58

SELECT * FROM TEST

步骤四:查看连接。

从下面的查询来看,我们的连接对应的SPID是58,被block住了。

图片 5

步骤五:查看batch

我们查看SQL Profiler, 看到我们的Batch是SELECT * FROM TEST

其他新闻
  • 【介绍】 在spark-env.sh文件中配置了一下参数;exportSPARK_WORKER_MEMORY=4gexportSPARK_WORKER_CORES=1exportSPARK_WORKER_INSTANCES=12但是现在我想恢复到原来的默认分配的资源该怎么恢复呢怎么只显示最后...
    2019-12-27
  • WEB项目中使用UEditor(富文本编辑器) 本来页面ueditor加载没问题,手贱强制刷新页面ctrl+shift+r之后,ueditor就加载出问题了,排版混乱。后来我重启项目之后,发现ueditor测地加载有问题了,...
    2019-12-27
  • 记录NetCore2.0的学习和工作,理解对与错不重要,重要的是,我飘~~~过 我启动项目后进来是下面这个样子的,我想一启动项目就进入首页有内容显示怎么做呢?-------------------------------...
    2019-12-27
友情链接

公司名称巴黎人电玩
版权所有:Copyright © 2015-2019 http://www.zhongqiangjy.com. 巴黎人电玩有限公司 版权所有

友情链接

Copyright © 2015-2019 http://www.zhongqiangjy.com. 巴黎人电玩有限公司 版权所有
公司地址http://www.zhongqiangjy.com