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)访问方法: 当数据库定位数据时需要使用“访问方法”。随后访问方法预览数据页和索引页,把查询的数据返回给查询处理器。相似的,访问方法也接收从客户端传来的数据,打开表然后更新数据。
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 备份与恢复系列的第一篇里,有讲到大容量模式下备份与还原的相关知识.这篇重点来演示在大容量模式下常用的备份与还原模式“完整备份+差异备份+日志备份”. 在大容量恢复模 ...
随机推荐
- Maven - 解决Maven下载依赖包速度慢问题
通常我们会因为下载jar包速度缓慢而苦恼,这十分影响开发效率,以及程序员的心情,在IDE下载jar时,无法对IDE做任何动作,只能大眼对小眼. 下载jar速度慢究其原因就是因为很多资源都是国外的,我们 ...
- 菜鸟教程之工具使用(十)——用BlazeMeter录制JMeter测试脚本
工具: 1,JMeter 2,Chrome 3,BlazeMeter 4,SwitchyOmega(如果需要代理) 步骤: 以上工具准备好以后就可以录制JMeter的测试脚本了, 在Chrome中点击 ...
- iSAC测试报告
iSAC测试报告 测试码流:24k bit/s 测试环境:三星i9250 CPU 1.2G*2 ram:1G TI芯片 OMAP 4460 双核1.2GHz MOTO ME722 CPU ...
- CLR VIA
标题 状态 内容 什么是CLR? 什么是托管模块? 托管模块由什么组成? .net代码的执行过程 http://www.cnblogs.com/aaa6818162/p/4726581.ht ...
- [转]Entity Framework vs. LINQ to SQL
Entity Framework和LINQ to SQL到底有什么区别?这是一个很常见的问题.下面的表中简要罗列了两种技术的主要区别. LINQ to SQL Entity Framework 复杂度 ...
- React Native ——实现一个简单的抓取github上的项目数据列表
/** * Sample React Native App * https://github.com/facebook/react-native */ 'use strict'; var React ...
- 轻量级容器Docker+微服务+RESTful API
[宗师]李锟(44035001) 10:23:03感觉Docker这样的轻量级容器+微服务+RESTful API三者可以形成一个铁三角.这也代表了PaaS未来的发展方向. [宗师]李锟(440350 ...
- C# WinForm RDLC报表不预览直接连续打印
用微软的RDLC报表直接打印不预览 直接上代码. //打印清单 System.Data.DataTable dt = print_QD(dr); ReportViewer rvDoc = new Re ...
- 通过 Storyboard 快速搭建一系列连贯性的视图控制器
此例子只是一个简单的 Demo,这里没有过多介绍如何去实现,网上有很多关于 Storyboard 技术的介绍,请自行搜索. 效果如下: iPhone 5s iPhone 6 iPhone 6 ...
- JavaScript的9个陷阱及评点
1. 最后一个逗号 如这段代码,注意最后一个逗号,按语言学角度来说应该是不错的(python的类似数据类型辞典dictionary就允许如此).IE会报语法错误,但语焉不详,你只能用人眼从几千行代码中 ...