设为首页 收藏本站
查看: 840|回复: 0

[经验分享] 查询处理和执行----执行查询

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-7-18 09:56:59 | 显示全部楼层 |阅读模式
前面学习了SQL Server如何解析、algebrize和优化你想执行的T-SQL。这里将介绍SQL Server如何执行查询计划。下面首先看看SQL Server 2005中体系结构如何变化的,以及SQLOS的介绍。
SQLOS
SQL Server 2005随着SQLOS的引入,基本的体系结构经历了一个重要改变。SQLOS这个组件为SQL Server的其他组件提供了基本的服务,如关系引擎和存储引擎。这个体系结构如图5-15所示。
SouthEast.jpg
SQLOS提供的主要服务是调度、内存管理(程序缓存及查询计划所在地),还提供了与当前讨论无关的很多服务。SQLOS实现了系统对象的层级框架,用于调度。图5-16显示了这些对象的基本层次----从父节点SQLOS,往下到worker、task和OS线程,实际完成工作的地方。调度的出发点和内存分配时内存节点。
SouthEast.jpg
内存节点
SQLOS内存节点是一个与节点关联的内存的逻辑容器,是带有共享内存的CPU的集合。总是有一个额外的内存节点用于专用管理员连接(DAC),这确保总能有可用的资源来服务DAC,即使其他所有的系统资源都已被使用。在一个没有NUMA的8处理器的SMP系统,有一个内存节点用于服务器一般性使用,还有一个用于DAC,如图5-17所示:
SouthEast.jpg
在一个有两个节点各4核的8处理器的NMUA系统,将有2个内存节点用于一般性使用,再有一个用于DAC,如图5-18所示:
SouthEast.jpg
通过查询DMV sys.dm_os_memory_nodes,你可以看到服务器上的内存节点的布局。然而,包含sys.dm_os_nodes的列node_state_desc会更有意义:
  • select c.node_id, c.memory_node_id, m.memory_node_id, c.node_state_desc  
  • , c.cpu_affinity_mask, m.virtual_address_space_reserved_kb  
  • from sys.dm_os_nodes as c inner join sys.dm_os_memory_nodes as m  
  • on c.node_id = m.memory_node_id   


SouthEast.jpg
软NUMA
在一些场景,你或许会在工作上遇到SMP服务器,这时你依然可以受益于NUMA类型的SQL Server架构。要实现这一点,你可以使用软NUMA,这使你能够使用注册表设置,来告诉SQL Server配置成NUMA系统,使用你指定的CPU-to-memory-node映射。使用软NUMA的一个常见场景是SQL Server托管的应用程序有几个不同的用户组,这些用户有不同的查询需求。配置理论上的16处理器的软NUMA服务器,为2个NUMA节点各配4个CPU,第三个NUMA节点配一个8CPU的节点,接下来为3个节点配置连接到不同的端口,然后为每个级别的工作负载改变连接设置。负载A关联端口x并连接第一个NUMA节点;B关联y连第二个;其他负载关联z连第三个。
CPU节点
CPU节点是CPU的一个逻辑集合,它们共享一些公共资源,如缓存或内存。在SQLOS对象分层上,CPU节点位于内存节点下方。但是,一个内存节点可以有一个或多个CPU节点与之关联,一个CPU节点只能关联到一个内存节点。实践中,几乎所有的配置都是1:1的关系。CPU节点可通过DMV sys.dm_os_nodes查看:
  • select node_id, node_state_desc, memory_node_id, cpu_affinity_mask  
  • from sys.dm_os_nodes  

处理器亲和(affinity)
CPU亲和是强制一个工作负载使用特定CPU的一种方式,是影响调度和SQL Server SQLO配置的另一种途径。管理CPU亲和有几个层面。SQL Server外面,你可以使用OS的CPU亲和设置来限制SQL Server可以使用的CPU。SQL Server内部的配置,你可以通过affinity mask和affinity64 mask配置选项指定SQL  Server仅使用特定的CPU。这两个配置选项可以动态改变,对与CPU关联的调度者立即产生影响。你也可以使用affinity I/O mask选项来设置SQL  Server的I/O亲和。这个选项可以让你强制任何I/O关联的活动仅在指定的CPU集合上运行。使用连接亲和(软NUMA),你可以把网络连接亲和到特定的内存节点。
调度器
调度器节点是调度活动的地方,调度针对任务发生。SQL Server启动时,会为每个CPU创建一个调度器,以及一些运行其他系统任务的额外调度器。如果处理器亲和设置的一些CPU对于实例是未启用的,那么与这些CPU关联的调度器将被设置为禁用状态。这使得SQL Server支持动态亲和设置。虽然每个CPU有一个调度器,但调度器不会绑定到一个特定的CPU,除了设置了CPU亲和。每个调度器由唯一的scheduler_id标识,0~254是为运行用户请求的调度器预留的,255是为DAC调度器预留的(加注:书中介绍有误,如下图所示,并非都是255),scheduler_id > 255的调度器是为系统预留的,常被分配给同一任务。下面的SQL显示了DMV sys.dm_os_schedulers的一些列的信息:
select parent_node_id, scheduler_id, cpu_id, status, scheduler_addressfrom sys.dm_os_schedulersorder by scheduler_id
SouthEast.jpg
任务
任务是完成一个工作单元的请求。任务本身不做任何事情,它仅仅是一个要完成的工作单元的容器。要实际做事,任务必须被一个调度器调度,并关联一个特定的工作者(worker),工作者才会实际做事。你可以通过sys.dm_os_tasks查看任务。要想精确地查看工作内容,可以使用如下SQL:
  • Select t.task_address, s.text  
  • From sys.dm_os_tasks as t inner join sys.dm_exec_requests as r  
  • on t.task_address = r.task_address  
  • Cross apply sys.dm_exec_sql_text (r.plan_handle) as s  
  • where r.plan_handle is not null  

SouthEast.jpg
工作者
工作者是实际完成工作的地方,要做的工作包含在任务里。可通过DMV sys.dm_os_workers看到工作者。
线程
SQLOS还包括OS线程,可通过DMV sys.dm_os_threads查看。
调度
SQL Server使用非抢先调度模式,它会标记任务来表明该任务需要抢先被调度。被标记为抢先调度的代码不是由SQL Sever编写的,SQL Server编写的代码运行在SQL Server进程内,因此这会应用于CLR代码。查询优化器找到最佳计划后,SQL Server收到一个新请求时就会开始调度一个任务。为了这个用户请求,会创建一个任务对象,调度将从从那里开始。新创建的任务对象必须关联一个可用的工作者以便实际做事。当工作者关联新任务时,工作者的状态被设置为init。完成初始化设置后,状态会更改为runnable。有了可用的调度器后,工作者会关联到那个调度器,状态变为running。它会保持运行直到完成或释放控制。当它释放调度者的控制时,状态会变成suspended,释放的原因会记录成一个wait_type,当正在等待的项再次可用时,工作者的状态被改为runnable。现在,它返回再次等待可用调度器,循环不断重复直到任务完成。那时,任务被释放,工作者被释放,调度器可用于关联下一个需要运行的工作者。调度工作者的状态图如图5-19所示:
SouthEast.jpg


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-22269-1-1.html 上篇帖子: 查询处理和执行----查询计划 下篇帖子: 锁和并发性----并发性的危险
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表