FocusBI: SQL Server内核
关注微信公众号:FocusBI 查看更多文章;加QQ群:808774277 获取学习资料和一起探讨问题。
《商业智能教程》pdf下载地址
链接:https://pan.baidu.com/s/1f9VdZUXztwylkOdFLbcmWw 密码:2r4v
了解SQL Server 内部组件是如何运作对学习BI是非常有帮助的,它是BI数据的主要来源。
一:SQL Server 网络接口(SNI)是一个协议层,负责建立客户端和服务器之间的网络连接。SQL Server支持的协议有: 共享内存、TCP/IP、命名管道 等,这里我讲一下 TCP 协议的三次握手和四次挥手,TCP端口默认1433,UDP端口默认1434
二:SQL Server 由两个主要引擎组成:关系引擎和存储引擎。
关系引擎有时称为查询处理器,因为关系引擎的主要功能是进行查询的优化和执行。关系引擎包含三个主要部分,命令解析器、查询优化器和查询执行器。命令解析器用于检查查询命令的语法和生成查询树,查询优化器大概是任何数据库系统中最重要的一部分,查询执行器负责查询命令的执行。
存储引擎负责管理与数据相关的所有I/O操作,包括访问方法和缓冲区管理器。其中,访问方法负责处理行、索引、页、分配和行版本的I/O请求;缓冲区管理器负责缓冲池的管理,缓冲池是SQL Server 内存的主要使用者。存储引擎还包含了一个事物管理器,负责数据的锁定以实现ACID(原子性、一致性、隔离性、持久性)属性中的隔离性,并负责管理事物日志。
缓冲池是SQL Server内存最大的使用者。缓冲池中包含了SQL Server 中所有类型的缓存,包括计划缓存和数据缓存。比如当你查询一个关联语句时如果它开机后没有执行过,查询时会消耗一点时间,如果开机后又查询过在去查询速度会很快,它没有去查询数据库文件而是去的内存中缓存下来的数据。
三:磁盘上的数据文件和日志文件。
这里已一个简单的查询(select)和更新(update)的生命周期为例
简单的查询
- 客户端的SQL Server 网络接口(SNI)通过只用网络协议,例如TCP/IP与SQL Server服务器端的SNI建立了一个连接,然后通过TCP/IP连接和TDS端点创建一个连接,并通过这个连接向SQL Server以TDS消息的形式发送select语句。
- SQL Server的SNI将TDS消息解包,读取select 语句,然后将这个SQL命令发送给命令解析器。
- 命令解析器在缓冲池的计划缓存中检查是否已经存在了一条与接收到的语句匹配且可用的查询计划。如果找不到命令解析器则基于select语句生成一个查询树,然后将查询树传递给查询优化器,让它生成查询计划。
- 由于这条查询命令比较简单,查询优化器仅在预优化阶段就生成了“零开销”的查询计划(或称为“普通”查询计划)。查询优化器将创建出来的查询计划发送给查询执行器执行。
- 查询执行器在执行查询计划的时候,首先确定完成这个查询计划需要读取什么数据,然后通过OLE DB 接口向存储引擎中的访问方法发送访问请求。
- 为了完成查询执行器的请求,访问方法需要从数据库中读取一个数据页面,并要求缓冲区管理器提供这个数据页面。
- 缓冲区管理器在数据缓存中检查这个数据页是否已经存在。由于这个页面并没有在缓存中,因此缓冲区管理器首先从磁盘上获取这个数据页面,然后将其存入缓存,并传回给访问方法。
- 最后,访问方法将结果集传递给关系引擎,由关系引擎将结果集发送给客户端。
简单的更新
更新与查询的前面步骤是一样的,到了访问方法这一步,事物管理器会将更新操作写入日志管理器中,只有在确定操作已经成功写入了事物日志之后,才能够执行真正的数据修改操作。所以事物日志的性能很关键,一旦访问方法接收到确认信息,就将修改数据的请求发送给缓冲区管理器,由缓冲区管理器完成修改数据的操作。
历史文章:
FocusBI: 使用Python爬虫为BI准备数据源(原创)
FocusBI关注者
FocusBI:SSAS体系结构(原创)
FocusBI:租房分析&星型模型
FocusBI:地产分析&雪花模型
FocusBI:MDX检索多维模型
FocusBI:租房分析可视化(网址体验)
FocusBI: 《DW/BI项目管理》之数据库表结构 (原创)
FocusBI: SQL Server内核的更多相关文章
- [转载]SQL Server内核架构剖析
原文链接:http://www.sqlserver.com.cn 我们做管理软件的,主要核心就在数据存储管理上.所以数据库设计是我们的重中之重.为了让我们的管理软件能够稳定.可扩展.性能优秀.可跟踪排 ...
- SQL Server内核架构剖析与NUMA
http://www.cnblogs.com/lyhabc/p/4272053.html http://www.cnblogs.com/lyhabc/archive/2013/02/05/289247 ...
- SQL SERVER 2012 从Enterprise Evaluation Edtion 升级到 Standard Edtion SP1
案例背景:公司从意大利购买了一套中控系统,前期我也没有参与其中(包括安装.实施都是第三方),直到最近项目负责人告诉我:前期谈判以为是数据库的License费用包含在合同中,现在经过确认SQL Serv ...
- SQL SERVER 2014 各个版本支持的功能
转自:https://technet.microsoft.com/library/cc645993 转换箱规模限制 功能名称 Enterprise Business Intelligence Stan ...
- sql server 对象资源管理器(二)
SQL会缓存大量的数据页面,他还会缓存很多其他信息,包括存储过程的执行计划 ,特定用户的安全上下文等 如果这些信息没有在数据库中缓存,SQL都要重新计算一遍,花额外的时间,所以SQLSERVER对内存 ...
- 查看MS SQL SERVER 错误日志
查看目的: 错误日志的查看是确保过程已成功完成(例如,备份和恢复操作,批处理命令,或其他脚本和过程).这可以帮助检测任何当前或潜在的问题,包括自动恢复信息(尤其是如果SQL Server实例已停止并重 ...
- (转)SQL Server 性能调优(cpu)
摘自:http://www.cnblogs.com/Amaranthus/archive/2012/03/07/2383551.html 研究cpu压力工具 perfom SQL跟踪 性能视图 cpu ...
- 一名小小的SQL Server DBA想谈一下SQL Server的能力
一名小小的SQL Server DBA想谈一下SQL Server的能力 百度上暂时还没有搜索到相关的个人写的比较有价值的文章,至少在中文网络的世界里面没有 但是在微软的网站有这样一篇文章:<比 ...
- SQL Server 2014新特性——基数评估(白皮书阅读笔记)
基数评估 目录 基数评估 说明 基数评估准确的重要性 模型假设 启用新的基数评估 验证基数评估的版本 在迁移到新的基数评估前要测试 校验基数评估 偏差问题 需要手动处理的变化 避免因为新的CE造成性能 ...
随机推荐
- Android-事务(Transaction)
事务就拿转帐的例子来说:两个用户,要么都成功,要么都失败,这样才是安全
- 《JavaScript权威指南》(第6版)翻译错误集 更新中。。。
§6.2.2 P126 原文:If o inherits x,and that property is an accessor property with a setter method. 原译:如 ...
- AI_图像识别
http://ai.baidu.com/forum/topic/show/595938 经测试识别率相当高,车辆信息识别 文中的import cv2不是python3自带库,需要安装pip3 inst ...
- 菜鸟的Xamarin.Forms前行之路——windows下VS运行ios模拟器调试
在Xamarin.Forms项目中,运行安卓模拟器是很方便的,但是想要运行IOS模拟器,相对而言是困难一点. 在参考一些资料后,发现很多是与Xamarin.studio有关的方法,尝试了许久没有成功. ...
- Windows上编译libjpeg
通常libjpeg可以使用如下命令行生成Visual Studio 2010的项目文件: nmake /f makefile.vc setup-v10 但可惜我们使用的是Visual Studio 2 ...
- struts2把表单数据封装到实体类里
<form method="post" action=""> <input type="text" name=" ...
- A. The Meaningless Game(数学)
A. The Meaningless Game time limit per test:1 second memory limit per test:256 megabytes input:stand ...
- jmeter处理json(关联)
例:用户需要登录成功后才可进行充值,进行充值操作时需要获取登录成功返回的sign值,在jmeter中可以通过关联的方式进行处理. jmeter中json path插件的使用方法:http://www. ...
- jquery源码解析:type,isPlainObject,parseHTML,parseXML,globalEval详解
jQuery的工具方法,其实就是静态方法,源码里面就是通过extend方法,把这些工具方法添加给jQuery构造函数的. jQuery.extend({ ...... type: function( ...
- 【FAQ】maven包引入版本引发的问题
pom.xml文件中的 dependency顺序可能会引起jar包版本不一致的问题,越上面越先引入进来