在上篇文章 浅谈SQL Server内部运行机制 中,与大家分享了SQL Server内部运行机制,通过上次的分享,相信大家已经能解决如下几个问题:
1.SQL Server 体系结构由哪几部分组成?
2.SQL Server 体系结构各模块之间关系是怎样的?
3.SQL Server 体系结构内部运行机制是怎样的?
4.简单的一条SELECT语句,在SQL Server中是如何一步一步执行的?
然而,仅仅能解决如上几个问题,是不具有SQL Server数据库优化能力的,为什么这么说,我们先提出如下几个问题:
1.为什么会内存溢出?(上篇文章开篇提出的)
2.为什么会产生死锁,闩锁?
3.什么叫执行计划,如何分析执行计划?
4. Index Scan 与Index Seek区别?
5.什么叫聚集索引和非聚集索引?
6.什么叫堆和B-数?
7.优化SQL Server,应该建立怎样的一套优化理念?
8.SQL Server优化时,常用的检测工具,优化工具和优化手段都有哪些?
9.你了解这些表与函数吗?
Sys.dm_exec_requests,Sys.dm_exec_sql_text,Sys.dm_exec_session,Sys.dm_exec_connections,Sys.dm_exec_query_stats,Sys.dm_exec_query_resource_semaphores
10.为什么磁盘臂是I/O的最大开销?
11.什么叫碎片,为什么会产生碎片?
12.什么叫跨域,什么叫主从同步?
13.为什么要分区,为什么要拆表(水平拆分,垂直拆分)?
..........
如上的这些基础问题,若不能很好地解决,就急忙去研究SQL Server优化,甚至去实战,是会绕很多弯路的,且学得一知半解。我们就拿索引举个例子,一张UserInfo(UserName,Address,Sex)有1000万条数据,
当我们查询时,非常缓慢,为了提高查询速度,我们优先想到的是建立索引(其他条件不变情况下,如不增加CPU,不增加内存,不改变磁盘等),有经验的DBA和数据库优化高手,是不会选择Addresss和sex作为索引字
段的,想想为什么?
基于如上的种种问题,本篇文章还是继续从理论角度分析SQL Server的一些基本理论,为后续的SQL Server优化实战打好良好的功底,至于具体的优化实战,应该会在第四篇或第五篇文章开始讲解(本篇文章
为SQL Server数据库优化系列第二篇),本篇文章大致包括如下内容。(当然,本篇文章未必能全部解决如上提出的问题,但在SQL Server理论性问题介绍结束,大家应该知道如何解决,然后再去实战)
SQL Server引擎及集群
SQL Server数据文件存储
SQL Server table表数据的存储形式
Page的基本构成
若干基本概念:堆(Heap)、分区、B-Tree、行数据溢出、Master-Slave等
一 SQL Server引擎及集群
首先,我们要知道什么叫做SQL Server服务器?SQL Server服务器部署在服务器端,用来存储数据的,如系统数据(如系统数据库master,tempdb等)、用户数据(如自定义数据库数据)和日志数据(如Log Files)等。
一般地,SQL Server为我们提供了客户端访问工具SSMS(Microsoft SQL Server Management Studio),通过该工具,我们能访问SQL Server服务器,从而通过客户端SQL语句,获取我们想要的数据,SQL Server最为简
单的模式是:客户端《=》服务器模式,即只有一台SQL Server服务器,供一个或多个客户端访问,这种架构是最为简单的,也是大部分小公司常用的架构。下图为三个不同IP的SQL Server客户端工具SSMS访问同一个
SQL Server服务器。
其次,对于具有一定规模,有一定数据量的公司,单台SQL Server服务满足不了业务需求,如系统访问速度慢(一般用户能容忍的时间是3秒,时间超过3秒,用户就感觉不良好)、数据量大(单台SQL Server服务器无法支撑)等,