数据库上层组件
来源:互联网 发布:淘宝有哪些优惠的软件 编辑:程序博客网 时间:2024/04/30 04:53
看过inside SQLSERVER2005 T-SQL查询这本书的人都知道T-SQL的逻辑执行顺序,我写这篇文章的目的就是让做数据库优化工作的朋友了解SQLSERVER上层组件如何处理T-SQL语句。
数据库处理组件分查询引擎和存储引擎。
1、网络协议层,这一层很少有朋友去了解他们,它分4种协议,这四种协议大家在安装SQLSERVER实例后,可以在配置管理器中看到:
(1)内存共享协议(shared memory),这个大家在安装实例时,默认打开,同时也是SQLSERVER指定的默认管道。
(2)命名管道(Named Pipes),这个是实例用于局域网通信,可以通过服务器别名连接数据库。
(3)TCP/IP,这个是最常用的,大家使用SSMS连接数据库时,使用IP连接数据库,通常连接服务器时,默认是1433端口(除非你改了端口号),另外,服务器如果有多个实例,那么连接时,除非连接默认实例,否则都要使用IP\实例名。
(4)VIA,虚拟局域网络,这个需要专用通道。
2、TDS层,这也是一个协议,表单数据包协议,负责发送请求和接受数据。它会建立与服务器端的连接,并将T-SQL命令封装为TDS数据包发送给服务器端。
3、oledb协议层,这个会执行与TDS层相反的事情,先把TDS包解包并解释成T-SQL语句传递给数据库引擎。到这里,T-SQL语句的传递就执行完成了。
4、查询编译器,这个会处理T-SQL语句,如果语句语法有问题,会返回给oledb层错误信息。
5、查询分析器,接受查询编译器传递过来的查询语句,去缓冲区搜索查询计划缓存,如果有,就直接将计划传递给查询执行器,如果没有就会生成一个查询计划树,这个树的每个节点都是一个T-sql执行步骤。生成查询计划候传递给查询执行器。
6、查询执行器,执行查询,它会访问访问方法层。
7、访问方法层,这是一个接口层,提供访问数据的接口。
8、缓存层,包括计划缓存+数据缓存,访问方法在访问数据时,会先去数据缓存区获取数据,如果数据缓存中没有数据,会先从硬盘读取数据到数据缓存区,然后再返回给查询执行器。可以说,SQLSERVER的所有数据操作都是在内存区处理的。PS:当数据缓存内存区没有存在查询的数据时,会从硬盘读取数据到内存中,这个过程叫硬页错误,这个涉及到内存命中率。
数据查询引擎:查询编译器,查询分析器,查询执行器。
存储引擎:访问方法,缓存层。
大家在做数据库优化,通常都是1、T-sql语句优化,2、索引优化,3、表分区,4、分表分库,5、读写分离,6、硬件优化。我写这篇文章,就是希望大家了解了这些东西后,去分析可以从哪些方面去优化数据库,视野更开阔一些。
- 数据库上层组件
- Android上层应用5大基本组件
- 初识Android上层应用5大基本组件
- 关于大型网站MYSQL数据库上层缓存的讨论
- EXTJS上层组件在IE中首次显示不出现问题
- 数据库原理 数据库组件概况
- 上层目录
- FM上层
- FM上层
- 关于数据库访问组件
- 查询数据库可用组件
- 数据库组件介绍(Delphi)
- 通用数据库访问组件
- 应用数据库组件
- 开启远程数据库组件
- 数据库架构组件
- 理解“数据库”中的各个组件
- 使用 Databound 组件访问数据库
- java常用api(不断完善)
- Static Binding versus Dynamic Binding
- Java抽象类和接口的区别
- java--奇偶数的简单分离
- ifconfig没有eth0解决办法
- 数据库上层组件
- Qt窗口位置及注意
- 他人的总结
- getline在vc6.0和vs2008中实现效果不一样
- 安卓街机模拟器 MAME4droid 源码,只需要自己加入rom 可以发布到安卓市场了。
- 依赖注入理解
- HTML中的标签在不同浏览器下比较
- Ubuntu 13.04 删除令人厌恶的Amazon suggestions
- java遍历文件夹读取文件进行处理