简介 我们已经知道SQL Server IO最小的单位是页,连续的8个页是一个区.SQL Server需要一种方式来知道其所管辖的数据库中的空间使用情况,这就是GAM页和SGAM页. GAM页 GAM(全局分配位图)是用于标识SQL Server空间使用的位图的页.位于数据库的第3个页,也就是页号是2的页.下面我们通过新建一个数据库来看其GAM的结构.创建测试数据库的代码如代码所示. CREATE DATABASE [test] ON PRIMARY ( NAME = N'test', FILE…
我们每天都在使用数据库,我们部门使用最多的关系数据库有Sqlserver,Oracle,有没有想过这些数据库是怎么存放到操作系统的文件中的?有时候为了能够设计出最优的表结构,写出高性能的Sqlserver脚本,处理海量数据并发,我们必须解底层原理.由于个人兴趣最近研究了下Sqlserver的文件存储,由于水平有限,下面只讲解Sqlserver的最小存储单元-页. 什么是页,区? 什么会有一个页的概念,我们知道对于操作系统来说,文件可以认为是一个很大 的线性空间,如果按地址空间顺序分配容量(也就是…
我们已经讨论了GAM与SGAM页,数据页(Data Page) ,现在我们来看下页面自由空间页(Page Free Space (PFS) ). PFS在数据文件里是第2页(页号1,页号从0开始),接在文件头(file header,页号0)后.GAM与SGAM是用来跟踪区分配情况,而PFS页是用来跟踪页分配级别(page level allocation).当分配页时,数据库引擎使用GAM与SGAM来确定有可用页的区.一旦数据库引擎找到有可用页的区,它使用PFS页来确定在那个区里未分配的页,页…
原文:SQL Server :理解Page Free Space (PFS) 页 我们已经讨论了GAM与SGAM页,数据页(Data Page) ,现在我们来看下页面自由空间页(Page Free Space (PFS) ). PFS在数据文件里是第2页(页号1,页号从0开始),接在文件头(file header,页号0)后.GAM与SGAM是用来跟踪区分配情况,而PFS页是用来跟踪页分配级别(page level allocation).当分配页时,数据库引擎使用GAM与SGAM来确定有可用页…
曾经在网络上看到过一种说法,SqlServer的存储过程中使用临时表,会导致重编译,以至于执行计划无法重用, 运行时候会导致重编译的这么一个说法,自己私底下去做测试的时候,根据profile的跟踪结果, 存储过程中使用临时表,如果不是统计信息变更导致导致的重编译,并不会导致重编译, 但是现实情况下,对于一些特殊的情况,即便是统计信息没有更新,又确实会出现每次运行都重编译的情况, 存储过程中使用了临时表,什么情况下会重编译,什么情况下不用重编译? 为了弄清楚这个问题,查阅了大量的资料,才把这个问题…
无论是哪一个数据库,如果要对数据库的性能进行优化,那么必须要了解数据库内部的存储结构.否则的话,很多数据库的优化工作无法展开.对于对于数据库管理员来说,虽然学习数据库的内存存储结构比较单调,但是却是我们必须攻下的一个堡垒.在SQLServer数据库中,数据页是其存储的最基本单位.系统无论是在保存数据还是在读取数据的时候,都是以页为单位来进行操作的. 一.数据页的基本组成. 如上图所示,是SQLServer数据库中页的主要组成部分.从这个图中可以看出,一个数据页基本上包括三部分内容,分别为标头.数…
死锁杂谈 当数据库死锁时,SqlServer会释放一个优先级较低的锁,让另一个事务运行:所以,即时去捕捉数据库死锁,是挺不容易的. 如果,数据库死锁比较长时间,那么死锁是可以被捕捉的. 可以用SqlServer活动监视器来查看,哪些进程锁了数据库. 首先打开SqlServer活动监视器,然后可以看到,界面里有进程,查看资源,数据文件I/O,最近消耗大量资源的查询四项. 四项显示内容如下: 进程:在进程里可以看到哪些进程被阻塞,查看属性[阻塞者]可以看到,[阻塞者]的会话ID. 等待资源:等待资源…
SQLSERVER聚集索引与非聚集索引的再次研究(上) 上篇主要说聚集索引 下篇的地址:SQLSERVER聚集索引与非聚集索引的再次研究(下) 由于本人还是SQLSERVER菜鸟一枚,加上一些实验的逻辑严谨性, 单写<SQLSERVER聚集索引与非聚集索引的再次研究(上)>就用了12个小时,两篇文章加起来最起码写了20个小时, 本人非常非常用心的努力完成这两篇文章,希望各位看官给点意见o(∩_∩)o 为了搞清楚索引内部工作原理和结构,真是千头万绪,这篇文章只是作为参考,里面的观点不一定正确 有…
怎样查出SQLServer的性能瓶颈 --王成辉翻译整理,转贴请注明出自微软BI开拓者[url]www.windbi.com[/url]--原帖地址 如果你曾经做了很长时间的DBA,那么你会了解到SQLServe的性能调优不是一个精密的科学.即使是,对于为最佳的性能找到最佳的配置也是很困难的.这是因为对于调优来说很少东西是绝对的.例如,一个性能调优可能对某一方面有用,可是却会影响其他的性能. 我曾经做过DBA,在最后7年的日子里,我总结了一套SQLServer调优的清单.当第一次进行SQLSer…
本文转载自桦仔的博客http://www.cnblogs.com/lyhabc/archive/2013/07/16/3194220.html 解释一下SQLSERVER事务日志记录 大家知道在完整恢复模式下,SQLSERVER会记录每个事务所做的操作,这些记录会存储在事务日志里,有些软件会利用事务日志来读取 操作记录恢复数据,例如:log explorer 那么事务日志记录怎麽查看,里面都记录了些什么? 打开可以利用下面SQL语句来查看所在数据库的事务日志记录 1 USE [GPOSDB] -…