浅析数据库引擎

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

浅析SQLServer数据库引擎科大讯飞移动互联凌军2011年06月20日一、数据库历史简介二、SQLServer产品历史简介三、SQLServer2008体系结构简介四、SQLServer2008数据库引擎浅析五、SQLServer2008执行模型六、结合实例进一步剖析七、思考主要内容一、数据库历史简介第一阶段:人工管理阶段第二阶段:文件管理阶段第三阶段:数据库管理阶段层次数据库(IMS)网状数据库(IDS)关系数据库(Oracle,DB2,SyBase,SQLServer)图灵奖获得者:Bachman:网状数据库之父(设计开发IDS,提交DBTG报告)E.F.Codd:关系数据库之父(关系模型理论)JimGray:SQL之父(SQL语言,事务处理技术)二、SQLServer产品历史时间版本说明1986年--当时微软已和IBM合作开发OS/2操作系统,但由于缺乏数据库的管理工具,而IBM也打算将其数据库工具放到OS/2中销售之下1987年--Sysbase开发出Unix系统下运行的SQLServer版本1989年SQLServer1.0为了与IBM竞争,SQLServer由微软与Sybase共同开发,获得Ashton-Tate的支持,运行于OS/2平台。1993年(1993-09-14)SQLServer4.2一个桌面数据库系统,包含较少的功能。与Windows集成并提供了易于使用的用户界面,运行于WindowsNT平台1995年SQLServer6.0Microsoft重写了大部分核心的系统。提供了一个低价的小型商业应用数据库方案。1996年(1996-04-16)SQLServer6.5此版本带来了显著的性能提升并且提供了多种有益的功能。1998年(1998-11-16)SQLServer7.0完全重写了核心数据库引擎,提供中小型商业应用数据库方案,包含了初始的Web支持。SQLServer从这一版本起得到了广泛应用。1999年SQLServer7.0OLAP工具首次引入OLAP工具2000年(2000-08-07)SQLServer2000此款产品被微软定义为企业级数据库系统,其包含了三个组件(DB,OLAP,EnglishQuery)。丰富的前端工具,完善的开发工具,以及对XML的支持等,促进了该版本的推广和应用2003年(2003-04-24)SQLServer2000,64位版本已经和Unix/Linux的Oracle形成竞争2005年(2005-11-07)SQLServer2005是一个全面的数据库平台,使用集成的商业智能(BI)工具提供了企业级的数据管理。SQLServer2005数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序2008年(2008-08-07)SQLServer2008SQLServer2008可为关键业务应用提供可信赖的、高效的、智能的平台,支持基于策略的管理、审核、大规模数据仓库、空间数据、高级报告与分析服务等新特性2010年(2010-04-21)SQLServer2008R2SQLServer2008R2新增了大量重要功能,在性能和可扩展性方面也有了极大提升三、SQLServer2008体系结构简介数据库引擎是用于存储、处理和保护数据的核心服务。数据库引擎提供了受控访问和快速事务处理,以满足企业内最苛刻的数据消费应用程序的要求。数据库引擎还提供了大量的支持以保持高可用性。AnalysisServices(多维数据)允许您设计、创建和管理包含从其他数据源(如关系数据库)聚合的数据的多维结构,从而实现对OLAP的支持。AnalysisServices(数据挖掘)使您可以设计、创建和可视化数据挖掘模型。通过使用多种行业标准数据挖掘算法,可以基于其他数据源构造这些挖掘模型。IntegrationServices是一个生成高性能数据集成解决方案的平台,其中包括对数据仓库提供提取、转换和加载(ETL)处理的包。复制是一组技术,用于在数据库间复制和分发数据和数据库对象,然后在数据库间进行同步操作以维持一致性。使用复制时,可以通过局域网和广域网、拨号连接、无线连接和Internet,将数据分发到不同位置以及分发给远程用户或移动用户。ReportingServices提供企业级的Web报表功能,从而使您可以创建从多个数据源提取数据的表,发布各种格式的表,以及集中管理安全性和订阅。ServiceBroker帮助开发人员生成安全的可缩放数据库应用程序。这一新的数据库引擎技术提供了一个基于消息的通信平台,从而使独立的应用程序组件可作为一个工作整体来执行。ServiceBroker包括可用于异步编程的基础结构,该结构可用于单个数据库或单个实例中的应用程序,也可用于分布式应用程序。四、SQLServer2008数据库引擎浅析1、最简单的查询语句是怎么运行的?select*fromTest2、最简单的插入语句是怎么运行的?insertintoTest([Name])values('test')要敢于去“打开盒子”,看里面到底是什么查询优化器命令分析器查询执行器SNISQL管理器数据库管理器存取方法缓冲区管理器事务管理器数据文件事务文件死锁监视器资源管理器惰性写入器调度器监视器锁管理器服务同步调度内存管理器I/O执行计划缓存数据缓存区关系引擎存储引擎SQLOS协议层SQLServer网络接口缓冲池TDSSQL命令查询处理过程:分析绑定优化执行命令分析器分析:从语法库中检查T-SQL进行基本的语法检查。绑定:1、名字解析:检查所有的对象在用户的安全上下文中存在并可见。2、类型推导:确定解析树中每个节点的最终类型。3、聚合绑定:确定哪些地方可以进行聚合。4、组合绑定:将聚合绑定到正确的选择列表中。优化:1、预优化:查询语句很简单,开销足够小,直接结束优化。比如没有联接的基本查询。属于零开销,称为普通计划。2、阶段0:检验基本规则,以及散列和嵌套联接选项。这个计划的开销是否小于0.2,如果是,结束优化。3、阶段1:检验更多的规则,以及变换联接的顺序。如果开销最小的计划的开销小于1.0,如果是,结束优化。如果不是,继续判断。如果maxdop0且这个系统是SMP系统,以及最小开销大于并行化的开销临界值,则使用并行计划。比较并行计划的开销和最好的串行计划的开销,将开销更小的计划传递给阶段2。4、检验所有可能的计划,并且选择达到检验的时间限制时开销最小的计划。执行:这个计划被调度执行,后面详细说明。查询树较好的查询计划查询优化器查询最容易出现瓶颈的地方在哪?插入处理过程:写事务日志接收写请求日志管理器插入缓冲池访问方法缓冲区管理器写入数据文件惰性写入器检查点写事务日志:数据修改事务中唯一一个总是需要写入磁盘的操作。并不是修改查询语句的清单,而是修改操作发生之后数据页面的具体变化。是由日志管理器完成。接收写请求:一旦访问方法接收到确认信息,就会接收写请求,将写请求发送缓存区管理器。插入缓冲池:缓冲区管理器在内存中插入数据,插入成功后将确认结果发送给访问方法,最终确认结果到达客户端。写入数据文件:这个步骤可以由两个组件任何一个完成。惰性写入器线程定期检查空闲缓冲列表的大小,当这个值过低的时候,惰性写入器会扫描整个数据缓存,将所有一段时间没被使用的页面老化。如果找到一段时间没有被使用的脏页,惰性写入器则将其写入磁盘,然后将这个页面的内存空间标记为空闲空间。检查点是检查点线程创建的一个时间点,将保证脏页写入磁盘,并且在页面头将缓存中的这个页面标记为干净的页面。确认成功写请求插入最容易出现瓶颈的地方在哪?SQLOSOS调度器调度器调度器五、SQLServer2008执行模型SQLOS本质是SQLServer的资源管理器。SQLOS为服务器上每个逻辑CPU创建一个调度器,然后将工作线程均匀地分布在每个调度器上,在任何一个时间点上,一个调度器上只能有一个工作线程执行。不能替代Windows,不是操作系统的抽象层,因为最终还要依赖Windows服务,属于瘦用户模式层,和.net的clr不是一个级别。工作线程等待线程可运行线程I/O线程定时器列表请求资源(如锁)SQLServer使用的是非抢占式调度模型,除了不是SQLServer的代码(如CLR代码、扩展存储过程),这种情况会给任务打上标记,表明这些任务需要抢占式调度。为什么采用是非抢占式调度模型?六、结合实例进一步分析通过什么能分析呢?1、保证环境干净select*fromsys.dm_exec_connectionscrossapplysys.dm_exec_sql_text(most_recent_sql_handle)2、查询:select*fromtestcheckpoint--检查点dbccdropcleanbuffers--清空干净的数据页缓存dbccfreeproccache--清空计划缓存select*fromsys.dm_os_buffer_descriptorswheredatabase_id=db_id(‘Test’)--查询数据缓存区select*fromsys.dm_exec_cached_planscrossapplysys.dm_exec_sql_text(plan_handle)—查询执行计划缓存setstatisticsprofile或者默认Ctrl+L执行计划查看setstatisticsiosetstatisticstime3、插入:insertintotest([name])values('kk')dbccsqlperf(‘logspace’)--查看日志大小dbccloginfo(‘Test’)--查看虚拟日志dbccind(‘Test’,‘test’,-1)--查找该表第一个页dbcctraceon(3604)--开启跟踪,dbccpage将结果输出到客户端dbccpage(Test,1,89,3)--输出最详细的页面内容dbcctraceon(3502)--开启跟踪标志,在错误日志中记录了检查点的开始和结束位置4、执行selectscheduler_id,cpu_id,parent_node_id,current_tasks_count,runnable_tasks_count,current_workers_count,active_workers_count,work_queue_countfromsys.dm_os_schedulers;--查看调度器select*fromsys.dm_os_workers--每个调度器工作线程select*fromsys.dm_os_waiting_tasks–等待列表中正在等待的任务select*fromsys.dm_exec_requests--可运行列表中等待CPU的任务dbccsqlperf(umsstats)--线程管理情况的统计信息七、思考结合以上内容思考数据库常用优化有哪些?

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功