Sql Server来龙去脉系列之二 框架和配置
本节主要讲维持数据的元数据,以及数据库框架结构、内存管理、系统配置等。这些技术点在我们使用数据库时很少接触到,但如果要深入学习Sql Server这一章节也是不得不看。本人能力有限不能把所有核心的知识点理解透,所以有些描述的也不是很清楚。但当接下来的几个章节学习后再复习这些知识点应该能更容易理解。
数据库对象
数据库维持了一系列表存储所有对象、数据类型/约束/配置项/资源等,在2008种我们叫他们为system base tables,并且这些表我们默认是看不到的。我们可以通过管理员登陆数据库,然后执行脚本:
目录视图
什么是目录视图,目录视图作为常规接口用来维持系统的原数据。所有的目录视图命名都是以sys开始。例如,sys.objects;

系统函数
系统函数也叫做属性函数,属性函数从数据库对象提供给我们某些属性的值。在sql server 2008中包括以下系统函数:


数据库引擎组件
首先给大家看一张图看看数据库引擎包括哪些组件。
数据库协议
数据库通过协议层提供编程接口API,并且数据传递格式采用微软自定义的表数据流包(tabular data stream (TDS) packet),客户端也是通过TDS包和数据库交互数据。数据库包含的协议有:
查询优化器(Query Optmizer)
查询优化器从内存、CPU、I/O操作数来优化处理查询语句,检查数据表的影响次数、查找表索引和关联列等。
存储引擎(Storage engin)
存储引擎主要由访问方法、锁以及事物服务、工具命令三部分组成。
(1)访问方法: 当数据库定位数据时需要使用“访问方法”。随后访问方法预览数据页和索引页,把查询的数据返回给查询处理器。相似的,访问方法也接收从客户端传来的数据,打开表然后更新数据。
v82n46wh.png)
SQLOS(SQL 操作系统)
SQLOS运行于数据库引擎最底层,计划和内存管理是SQLOS最重要的两个功能。其他功能包括:
Sql Server 2008的NUMA框架
NUMA(non Uniform Memory Access Architecture)叫做非统一内存访问框架。 NUMA框架好处是可量化,遵循对称性架构(SMP),所有的内存访问都通过同一个内存栈,如果CPU比较少时这么模式工作还好。但如果多CPU都集中访问共一个系统栈就非常影响性能。NUMA限制了一个内存栈的CPU数量,每组进程有自己的内存和I/O通道。每一个组叫做NUMA节点,节点之间通过一条高速部内连接器交互,每一个节点的CPU数量依赖于具体的硬件设备。NUMA框架结构图如下:
内存管理
默认情况下,Sql Server 2008几乎是完全动态的管理内存资源。当分配内存时数据库差不多一直保持和SQLOS交互。所以说SQLOS是数据库非常重要的底层组件。
缓冲池和数据缓存
数据库主要的内存组件是缓存池(Buffer Pool)。缓存池中的所有内存被用作缓存从磁盘上读取的页数据。缓存管理器管理磁盘操作,把数据和索引页保存到数据缓存,以至于数据能够被用户共享。当其他组件需要内存时要从缓存池中申请。一个缓存在数据库中也是按照页形式存储,和数据以及索引页有相同的尺寸。你可以理解为一个缓存区是处理数据库中页的一个框架。很多的缓存区减少其他内存组件的缓存池然后转变成各种内存缓存。例如缓存存储过程和执行计划的缓存我们经常称为计划缓存。
访问内存数据页
访问数据缓存中的页的速度必须非常快,数据缓存中的页我们通过hash方式快速访问。hash表包含了一组指针数据映射到真实的缓冲页上。如果所有的指针映射不能存放到一张hash页上,则这些指针被串联到一个hash页中。hash的主键一般是一个dbid-fi leno-pageno identifier(数据库ID、文件Number、页面Number的组合体),hash表维持了一个索引和特殊页的关联关系。通过hash方法,即使存在大量的内存数据,数据库也能快速从内存中找到特殊的数据页。同理,仅仅少量内存读取就可以决定期望的页面是否存在缓存中,是否需要从磁盘中读取。
管理数据缓存中的页
你能使用一张数据页或者索引页如果它存在内存中。因此,数据缓存中必须存在一个缓冲区用来读取页。保持有效缓存的即时供应是重要的性能优化。如果一个缓存区不能有效读取,许多内存页不得不查找一个缓存区清空用来作为工作区。
Sql Server 2008配置
配置网络协议
SELECT net_transport FROM sys.dm_exec_connections WHERE session_id = @@SPID;
返回结果:。因为我们在同一台电脑上访问,直接通过共享内存协议速度最快。如果通过不同的电脑访问,改协议就不支持。Sql Server 2008开发、评估、Express版本默认是没有开启TCP/IP协议。下图展示了2008各个版本的默认协议设置
Sql Server浏览器(Sql Server Brower)
Sql Server 配置设置
Sql Server来龙去脉系列目录结构:
Sql Server来龙去脉系列之五 日志以及恢复
Sql Server来龙去脉系列之六 表
Sql Server来龙去脉系列之七 索引
Sql Server来龙去脉系列之八 比较特殊的存储
Sql Server来龙去脉系列之九 查询优化
Sql Server来龙去脉系列之十 计划缓存
Sql Server来龙去脉系列之十一 事务和并发
Sql Server来龙去脉系列之二 框架和配置的更多相关文章
- Sql Server来龙去脉系列之四 数据库和文件
在讨论数据库之前我们先要明白一个问题:什么是数据库? 数据库是若干对象的集合,这些对象用来控制和维护数据.一个经典的数据库实例仅仅包含少量的数据库,但用户一般也不会在一个实例上创建太多 ...
- Sql Server来龙去脉系列之三 查询过程跟踪
我们在读写数据库文件时,当文件被读.写或者出现错误时,这些过程活动都会触发一些运行时事件.从一个用户角度来看,有些时候会关注这些事件,特别是我们调试.审核.服务维护.例如,当数据库错误出现.列数据被更 ...
- Sql Server来龙去脉系列之一 目录篇
从工作一直到现在都没怎么花功夫深入学习下Sql Server数据库,在使用Sql Server时90%的时间基本上都是在接触T-SQL,所以数据库这块基本上属于菜鸟级别.至于数据库的底层框架以及运行机 ...
- Sql Server来龙去脉系列 必须知道的权限控制基础篇
题外话:最近看到各种吐槽.NET怎么落寞..NET怎么不行了..NET工资低的帖子.我也吐槽一句:一个程序猿的自身价值不是由他选择了哪一门技术来决定,而是由他自身能创造出什么价值来决定. 在进入本篇内 ...
- Sql Server来龙去脉系列 必须知道的权限控制核心篇
最近写了<Sql Server来龙去脉系列 必须知道的权限控制基础篇>,感觉反响比较大.这可能也说明了很多程序猿对数据库权限控制方面比较感兴趣,或者某些技术点了解的没有很透彻. 有些人看 ...
- SQL Server 学习系列之六
SQL Server 学习系列之六 SQL Server 学习系列之一(薪酬方案+基础) SQL Server 学习系列之二(日期格式问题) SQL Server 学习系列之三(SQL 关键字) SQ ...
- SQL Server 学习系列之五
SQL Server 学习系列之五 SQL Server 学习系列之一(薪酬方案+基础) SQL Server 学习系列之二(日期格式问题) SQL Server 学习系列之三(SQL 关键字) SQ ...
- SQL Server 学习系列之四(SQL 内幕)
SQL Server 学习系列之四(SQL 内幕) SQL Server 学习系列之一(薪酬方案+基础) SQL Server 学习系列之二(日期格式问题) SQL Server 学习系列之三(SQL ...
- sql server 备份与恢复系列四 大容量模式下的备份与还原
一. 概述 在sql server 备份与恢复系列的第一篇里,有讲到大容量模式下备份与还原的相关知识.这篇重点来演示在大容量模式下常用的备份与还原模式“完整备份+差异备份+日志备份”. 在大容量恢复模 ...
随机推荐
- GEMR: Get the parent window for view
Window window = Utilities.GetVisualParent<Window>(this); if (window != null) { window.DialogRe ...
- SQL 游标使用实例
IF EXISTS(SELECT *FROM sysobjects WHERE name='sp_ContestSubmit') DROP PROC sp_ContestSubmit GO -- == ...
- [LeetCode] Range Sum Query - Immutable & Range Sum Query 2D - Immutable
Range Sum Query - Immutable Given an integer array nums, find the sum of the elements between indice ...
- 【转】Objective-C Class Dump
(转自:http://blog.sina.com.cn/s/blog_4431c7610100x15t.html) class dump是一个命令行工具,用来监测存储在Mach-O二进制文件理的Obj ...
- Django 源码小剖: 响应数据 response 的返回
响应数据的返回 在 WSGIHandler.__call__(self, environ, start_response) 方法调用了 WSGIHandler.get_response() 方法, 由 ...
- jQuery Mobile 移动开发中的日期插件Mobiscroll使用说明
近期在移动方面的开发,使用jQuery Mobile ,移动方面的插件不如Web 方面的插件多,选择的更少,有一些需要自己去封装,但功力尚不足啊. 日期插件JQM也提供了内置的,但样式方面不好看,只好 ...
- CSS3学习笔记--line-height:150%与line-height:1.5的真正区别
代码: <div style="line-height:150%;font-size:16px;"> 父元素内容 <div style="font-si ...
- Redrain个人维护并使用的DuiLib和UiLib库源代码下载地址
转载请说明原出处:http://blog.csdn.net/zhuhongshu/article/details/40740353,谢谢~~ 首先说明一下Duilib和Uilib的差别:UiLIb是D ...
- [原创]Android Studio的Instant Run(即时安装)原理分析和源码浅析
Android Studio升级到2.0之后,新增了Instant Run功能,该功能可以热替换apk中的部分代码,大幅提高测试安装的效率. 但是,由于我的项目中自定义了一些ClassLoader,当 ...
- Android实战技巧:深入解析AsyncTask
AsyncTask的介绍及基本使用方法 关于AsyncTask的介绍和基本使用方法可以参考官方文档和Android实战技巧:多线程AsyncTask这里就不重复. AsyncTask引发的一个问题 上 ...