当前位置:首页 » 编程语言 » sqlserver线程数
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlserver线程数

发布时间: 2023-08-23 10:20:33

sql server 属性配置最大内存设为多少合适

SQL Server 使用内存有两种情况:

第一种情况: 动态改变它的内存需求。
默认情况下,SQL Server 会依据可获得的系统资源动态改变它的内存需求。如果 SQL Server 需要更多的内存,它会要求操作系统确定是否有空闲的物理内存可用,并使用可用的内存。若 SQL Server 不再需要当前分配给它的内存,它就将内存释放给操作系统。当 SQL Server 动态使用内存时,它要求系统定期地检测可用的物理内存数量。SQL Server 根据服务器活动增大或收缩高速缓冲存储器,以使可用物理内存保持在 4 MB 到 10 MB 之间。这就避免了系统进行换页操作。
[也就是说,这种情况下SQL SERVER 本身不会使物理可用内存小于4M,如果比较长的时间内都小于4M的话,则要看一下是不是该服务器上其它应用程序有问题]

第二种情况:限制使用内存
使用 set working set size 为sql server保留等于服务器内存设置的物理内存空间。即使是sql server 进程此时是空闲的,系统也不会将 SQL Server 页交换出去。
使用min server memory 保证sql server 使用的最小内存。SQL Server 启动时不立即分配 min server memory 中所指定的内存量。但是,当内存使用由于客户端负荷而达到该值后,SQL Server 将无法从已分配的缓冲池中释放内存。
使用max server memory 则防止 SQL Server 使用多于指定数量的内存,这样剩余的可用内存可以快速运行其它应用程序。SQL Server 启动时不立即分配 max server memory 中所指定的内存。内存使用随 SQL Server 的需要而增长,直到达到 max server memory 中所指定的值。SQL Server 无法超过该内存使用值,除非增加 max server memory 值。
第一种情况比较适用于服务器专做sql server服务器的情况,第二种情况适用于为在同一台计算机上运行的其它应用程序保留一定的内存以便于快速响应。(另:如果想动态分配sql server 的内存,则不要设置set working set size 选项,使用默认值即可。至于这些参数如何设置参见另外的文档)

监视 SQL Server 所使用的内存和计数器有助于确定:
是否由于缺少可用物理内存存储高速缓存中经常访问的数据而导致瓶颈存在。如果是这样,SQL Server 必须从磁盘检索数据。
是否可通过添加更多内存或使更多内存可用于数据高速缓存或 SQL Server 内部结构来提高查询性能。
SQL Server 需要从磁盘读取数据的频率。与其它操作相比,例如内存访问,物理 I/O 会耗费大量时间。尽可能减少物理 I/O 可以提高查询性能。

对sql server服务器内存的监视:
Memory:Available Bytes
计数器表示当前进程可使用的物理内存字节数。
如果小于4M或更小,说明计算机上总的内存可能不足,或某个程序没有释放内存
● Memory: Page Faults / sec
每秒软性页面失效的数目(包括有些可以直接在内存中满足而有些需要从硬盘读取)较page/sec只表明数据不能在内存指定工作集中立即使用。
如果该值偶尔走高,表明当时有线程竞争内存。如果持续很高,则内
存可能是瓶颈。
Memory:Pages/sec
计数器表示由于缺页处理而从磁盘取回的页数,或由于缺页处理而写入磁盘以释放工作集空间的页数。
● Page Reads/sec
每秒发出的物理数据库页读取数。这一统计信息显示的是在所有数据库间的物理页读取总数。由于物理 I/O 的开销大,可以通过使用更大的数据高速缓存、智能索引、更高效的查询或者改变数据库设计等方法,使开销减到最小。
● Page Writes/sec
所发出的物理数据库页写入的数目。
监视 SQL Server 正在使用的内存量:
Process:Working Set
计数器表示的是一个进程所占用的内存数量。
若这一数值持续低于 SQL Server 配置使用的内存数量(由"最小服务器内存"和"最大服务器内存"服务器选项设置,( min server memory 的默认设置为 0,max server memory 的默认设置为 2147483647。),则表示 SQL Server 所配置的内存比它所需要的多。否则,用"设置工作集大小"服务器选项修改工作集大小。
[在设置了sql server 使用的最小 和 最大内存后,查看此参数比较有意义。如果没有设置sql server 内存使用范围,则该值可以与系统总的内存比较,设置分配给sql server 的最大最小内存分配的是物理内存+虚拟内存的一部分]
● SQL Server:Buffer Manager:Buffer Cache Hit Ratio
数据请求可以从数据缓冲区中获得所需数据的成功率
计数器值依应用程序而定,但比率最好为 90% 或更高。增加内存直到这一数值持续高于 90%,表示 90% 以上的数据请求可以从数据缓冲区中获得所需数据。
● SQL Server:Buffer Manager: Total Pages
缓冲区池中页的数目(包括数据库、可用页和被盗用页)
若 Total Server Memory (KB) 计数器值与计算机的物理内存大小相比一直很高,可能表示需要更多的内存

结论:
对sql server 服务器内存的监视,可以看出该服务器整体的内存的占用情况
对 sql server 使用内存的监视, 可以看出是否是sql server 使用了大多数内存
根据监视的结果确定是否是内存不够。

其它:

内存相关参数调整(见后面)
SQL Server 对象内存使用情况说明(见后面)

疑问:
使用 set working set size =1 后,系统是在sql server 启动时就分配给它要求的内存 还是 开始不分配这么多,而是等到用了这么多之后不释放就行了?

SQL Server 对象内存使用情况说明
下表列出 Microsoft® SQL Server™ 中不同对象的内存使用量。下表中的信息不适用于 Microsoft® SQL Server 2000™ Windows® CE 版。
对象大小
对象 SQL Server 7.0 SQL Server 2000
锁 96 字节 每个所有者 64 字节外加 32 字节。
开放式数据库 2.880 字节 每个文件 3924 字节外加 1640 字节,每个文件组 336 字节。
开放式对象1 276 字节 每个对象上打开的索引 256 字节外加 1724 字节2。
用户联接 12 KB +(3 * 网络数据包大小)3。 12 KB +(3 * 网络数据包大小)3。

3 开放式对象包括所有的表、视图、存储过程、扩展存储过程、触发器、规则、默认值及约束。
2 在表或视图上可以打开索引。
3 网络数据包大小是表格格式数据方案 (TDS) 数据包的大小,该数据包用于应用程序和关系数据库引擎之间的通讯。默认的数据包大小为 4 KB,由 network packet size 配置选项控制。

内存相关:
服务器虚拟内存的配置
页面文件和物理内存或RAM构成虚礼内存

虚拟内存设置方法:
启动"控制面板"的"系统"选项,然后选择"虚拟内存"按钮来创建一个附加的页面文件或增加当前页面文件的大小。

虚拟内存不足:
当服务器上运行的应用程序请求的内存超过服务器上可用的内存时,Microsoft® Windows® 打开"服务器进程 — 虚拟内存用完"对话框,其文本如下所示:
系统的虚拟内存已经不足。请关闭一些应用程序。可以启动"控制面板"的"系统"选项,然后选择"虚拟内存"按钮来创建一个附加的页面文件或增加当前页面文件的大小。

一般情况下,将虚拟内存大小设置为计算机中安装的物理内存的 1.5 倍
如果另外安装了全文检索功能,并打算运行 Microsoft 搜索服务以便执行全文索引和查询,可考虑:
将虚拟内存大小配置为至少是计算机中安装的物理内存的 3 倍。
● 将 SQL Server max server memory 服务器配置选项配置为物理内存的 1.5 倍(虚拟内存大小设置的一半)。
如考虑其它服务需要的虚拟内存,则配置 SQL Server max server memory 选项,使得留有足够的虚拟内存满足全文检索内存需求。全部虚拟内存 -(SQL Server 最大虚拟内存 + 其它服务需要的虚拟内存)>= 1.5 倍物理内存。

Sql server 使用的内存参数的配置:
手工配置给 SQL Server 多于物理内存数量的虚拟内存会导致性能较低。默认情况下,SQL Server 能够可用系统资源动态改变它的内存需求。min server memory 的默认设置为 0,max server memory 的默认设置为 2147483647。可以为 max server memory 指定的最小内存量为 4 MB。
作用:如果在运行 SQL Server 实例的计算机上频繁启动或停止其它应用程序,启动这些应用程序所需的时间可能会因 SQL Server 实例分配和释放内存而延长。另外,如果 SQL Server 是几个在一台计算机上运行的服务器应用程序中的一个,系统管理员可能需要控制分配给 SQL Server 的内存量。在这些情况下,可以使用 min server memory 和 max server memory 选项控制 SQL Server 可以使用的内存量。

对SQL Sserver 使用内存的配置主要是对以下三个参数进行配置:
min server memory 保证了 SQL Server 实例使用的最小内存量。
max server memory 则可防止 SQL Server 使用多于指定数量的内存,这样剩余的可用内存可以快速运行其它应用程序。
set working set size 为 SQL Server 保留等于服务器内存设置的物理内存空间。

手工设置 SQL Server 内存选项有两种主要方法:
第一种方法,设置 min server memory 和 max server memory 为同一数值。该数值与分配给 SQL Server 的固定内存量相对应。
● 第二种方法,把 min server memory 和 max server memory 数量设置到一个范围段内。这种方法在系统或数据库管理员希望配置 SQL Server 实例,使其适应在同一台计算机上运行的其它应用程序的内存需求时很有用。

如果只设置了min server memory 和 max server memory ,sql server 使用的内存值在最小和最大值之间变动(如果sql server 使用的值超过过最小值的话)
如果设置set working set size =1,必须先将min server memory 和 max server memory的值设成同一个值,这个值就是为sql server 保留的物理内存空间。即使当 SQL Server 空闲,另一个进程可以使用 SQL Server 页时,系统也不会将 SQL Server 页交换出去。

参数的设置方法:
1. 在查询分析器中运行 [要先运行下面的语句,否则内存页面打不开]
use master
exec sp_configure 'show advanced option','1'

2. 在企业管理器中配置,步骤:
打开Sql Server 属性配置,选择内存页面,然后在里面配置就行了。
(不过这里用图形界面配置内存的时候好像不能超过物理内存的大小,可以用命令来分配大于物理内存的内存空间,下面有简单的介绍。 )

对上图的说明:
动态配置 SQL Server 内存
指定在更改服务器属性之后立即配置 Microsoft® SQL Server™ 内存。
使用固定的内存大小
为 SQL Server 指定固定的内存大小。
为 SQL Server 保留物理内存
为 SQL Server 保留与内存设置相等的物理内存空间。这意味着 Microsoft Windows NT® 4.0 或 Windows® 2000 不会将 SQL Server 页交换出去,即使当 SQL Server 闲置时可以更容易地使用这些页。
最小查询内存
设置可以分配给每个用户执行查询的最小内存大小。默认为 1024 KB。
配置值[显示现在配置的值,不做其它用途]
查看或更改此选项卡上的选项的配置值。如果更改了这些值,单击"运行值"查看更改是否已生效。如果没有,必须重新启动 SQL Server 实例才能使更改生效。
运行值[显示现在运行值,不做其它用途]
查看此选项卡上的选项的当前运行值。这些值为只读值。

另:如果要用命令来设置比较麻烦。如下简单举个例子:
Set working set size 设置方法:
set working set size 是一个高级选项。如果要用 sp_configure 系统存储过程改变该选项,必须把 show advanced options 设置为 1,该选项在停止并重新启动服务器后生效。
设置 show advanced options 设置为 1,在查询分析器中运行以下命令:
use master
exec sp_configure 'show advanced option','1'
如果成功,会返回如下结果:

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
已将配置选项 'show advanced options' 从 1 改为 1。请运行 RECONFIGURE 语句以安装。

设置set working set size =1,运行如下命令:
use master
exec sp_configure 'set working set size','1'
如果成功,会返回如下结果:
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
已将配置选项 'set working set size' 从 0 改为 1。请运行 RECONFIGURE 语句以安装。

…………………………………………

Cache Hit Ratio(高速缓存命中率,所有Cache”的命中率。在SQL Server中,Cache可以包括Log Cache,Buffer Cache以及Procere Cache,是一个总体的比率。) 高速缓存命中次数和查找次数的比率。对于查看SQL Server高速缓存对于你的系统如何有效,这是一个非常好的计数器。如果这个值很低,持续低于80%,就需要增加更多的内存。

设置架构高速缓存:
架构高速缓存可显着提高 XPath 查询的性能。当对带批注的 XDR 架构执行 XPath 查询时,架构存储在内存中,而必要的数据结构内置在内存中。如果设置了架构高速缓存,架构仍保留在内存中,因而提高了后续 Xpath 查询的性能。
解释:
架构-SCHEMA
CREATE SCHEMA
创建一个架构,并且可以在概念上将其看作是包含表、视图和权限定义的对象。
CREATE SCHEMA 提供了在单个语句中创建表、视图以及授予对象权限的方法。如果在创建任何对象或授予任何权限(这些是在 CREATE SCHEMA 语句中指定的)时发生错误,则不会创建任何对象。

XPath查询-Xpath(XML Path 语言)是一种图形导航语言
个人理解简单的说就是在URL中指定查询。[详细知识参照sql server 联机帮助文档]

设置方法:
可通过在注册表中添加下列键来设置架构高速缓存的大小:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXMLX\SchemaCacheSize。
[我在注册表中没找到位置!?]
根据可用内存和要使用的架构数设置架构大小。默认的架构高速缓存大小为 31。如果设置更高的架构高速缓存大小,需使用更多的内存。因此,如果架构访问速度慢,可增加高速缓存大小,如果内存少则可减小高速缓存的大小。
出于性能方面的考虑,建议将架构高速缓存的大小设得比通常所用的映射架构数多。当架构数增加时,如果架构高速缓存的大小比所拥有的架构数少,性能会降低。

② MSSQL Server查询优化方法


查询速度慢的原因很多,常见如下几种:
1、没有索引或者没有用到索引(这是查询慢最常见的问世升州题,是程序设计的缺陷)
2、I/O吞吐量小,形成了瓶颈效应。
3、没有创建计算列导致查询不优化。
4、内存不足
5、搜蔽网络速度慢
6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)
7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。
9、返回了不必要的行和列
10、查询语句不好,没有优化
可以通过如下方法来优化查询 :
1、把数据、日志、索引放到不同的I/O设备上,增加读取速度,以前可以将Tempdb应放在RAID0上,SQL2000不在支持。数据量(尺寸)越大,提高I/O越重要.
2、纵向、横向分割表,减少表的尺寸(sp_spaceuse)
3、升级硬件
4、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段
5、提高网速;
6、扩大服务器的内存,windows 2000和SQL server 2000能支持4-8G的内存。
配置虚拟内存:
虚拟内存大小应基于计算机上并发运行的服务进行配置。运行 Microsoft SQL Server 2000 时,可考虑将虚拟内存大小设置为计算机中安装的物理内存的 1.5 倍。如果另外安装了全文检索功能,并打算运行 Microsoft 搜索服务以便执行全文索引和查询,可考虑:
将虚拟内存大小配置为至少是计算机中安装的物理内存的 3 倍。
将 SQL Server max server memory 服务器配置选项配置为物理内存的 1.5 倍(虚拟内存大小设置的一半)。
7、增加服务器CPU个数;但是必须明白并行处理串行处理更需要资源例如内存。使用并行还是串行程是MsSQL自动评估选择的。单个任务分解成多个任务,就可以在处理器上运行。例如耽搁查询的排序、连接、扫描和GROUP BY字句同时执行,SQL SERVER根据系统的负载情况决定最优的并行等级,复杂的需要消耗大量的CPU的查询最适合并行处理。但是更新操作UPDATE,INSERT, DELETE还不能并行处理。
8、如果是使用like进行查询的话,简单的使用index是不行的,但是全文索引,耗空间。
like 'a%' 使用索引
like '%a' 不使用索引
用 like '%a%' 查询时,查询耗时和字段值总长度成正比,所以不能用CHAR类型,而是VARCHAR。对于字段的值很长的建全文索引。
9、DB Server 和APPLication Server 分离;OLTP和OLAP分离
10、分布式分区视图可用于实现数据库服务器联合体。联合体是一组分开管理的服务器,但它们相互协作分担系统的处理负荷。这种通过分区数据形成数据库服务器联合体的机制能够扩大一组服务器,以支持大型的多层 Web 站点的处理需要。有关更多信息,参见设计联合数据库服务器。(参照SQL帮助文件'分区视图')
a、在实现分区视图之前,必须先水平分区表
b、在创建成员表后,在每个成员服务器上定义一个分布式分区视图,并且每个视图具有相同的
名称。这样,引用分布式分区视图名的查询可以在任何一个成员服务器上运行。系统操作如同每个成员服务器上都有一个原始表的复本一样,但其实每个服务器上只有一个成员表和一个分布式分区视图。数据的位置对应用程序是透明的。
11、重建索引 DBCC REINDEX ,DBCC INDEXDEFRAG,收缩数据和日志 DBCC SHRINKDB,DBCC SHRINKFILE.
设置自动收缩日志.对于大的数据库不要设置数据库自动增长,它会降低服务器的性能。
在T-sql的写法上有很笑稿大的讲究,下面列出常见的要点:
首先,DBMS处理查询计划的过程是这样的:
1、 查询语句的词法、语法检查
2、 将语句提交给DBMS的查询优化器
3、 优化器做代数优化和存取路径的优化
4、 由预编译模块生成查询规划
5、 然后在合适的时间提交给系统处理执行
6、 最后将执行结果返回给用户
其次,看一下SQL SERVER的数据存放的结构:
一个页面的大小为8K(8060)字节,8个页面为一个盘区,按照B树存放。
Commit和rollback的区别
Rollback:回滚所有的事物。
Commit:提交当前的事物.
没有必要在动态SQL里写事物,如果要写请写在外面如:
begin tran
exec(@s)
commit trans
或者将动态SQL 写成函数或者存储过程。
13、在查询Select语句中用Where字句限制返回的行数,避免表扫描,如果返回不必要的数据,浪费了服务器的I/O资源,加重了网络的负担降低性能。如果表很大,在表扫描的期间将表锁住,禁止其他的联接访问表,后果严重。
14、SQL的注释申明对执行没有任何影响
15、尽可能不使用光标,它占用大量的资源。如果需要row-by-row地执行,尽量采用非光标技术,如:在客户端循环,用临时表,Table变量,用子查询,用Case语句等等。游标可以按照它所支持的提取选项进行分类:
只进
必须按照从第一行到最后一行的顺序提取行。FETCH NEXT 是唯一允许的提取操作,也是默认方式。
可滚动性
可以在游标中任何地方随机提取任意行。
游标的技术在SQL2000下变得功能很强大,他的目的是支持循环。
有四个并发选项
READ_ONLY:不允许通过游标定位更新(Update),且在组成结果集的行中没有锁。
OPTIMISTIC WITH valueS:乐观并发控制是事务控制理论的一个标准部分。乐观并发控制用于这样的情形,即在打开游标及更新行的间隔中,只有很小的机会让第二个用户更新某一行。当某个游标以此选项打开时,没有锁控制其中的行,这将有助于最大化其处理能力。如果用户试图修改某一行,则此行的当前值会与最后一次提取此行时获取的值进行比较。如果任何值发生改变,则服务器就会知道其他人已更新了此行,并会返回一个错误。如果值是一样的,服务器就执行修改。
选择这个并发选项_仁褂没Щ虺绦蛟背械T鹑危__砟切┍硎酒渌_没б丫_云浣_辛诵薷牡拇砦蟆Sτ贸绦蚴盏秸庵执砦笫辈扇〉牡湫痛胧┚褪撬⑿掠伪辏_竦闷湫轮担_缓笕糜没Ь龆ㄊ欠穸孕轮到_行薷摹?BROPTIMISTIC WITH ROW VERSIONING:此乐观并发控制选项基于行版本控制。使用行版本控制,其中的表必须具有某种版本标识符,服务器可用它来确定该行在读入游标后是否有所更改。在 SQL Server 中,这个性能由 timestamp 数据类型提供,它是一个二进制数字,表示数据库中更改的相对顺序。每个数据库都有一个全局当前时间戳值:@@DBTS。每次以任何方式更改带有 timestamp 列的行时,SQL Server 先在时间戳列中存储当前的 @@DBTS 值,然后增加 @@DBTS 的值。如果某
个表具有 timestamp 列,则时间戳会被记到行级。服务器就可以比较某行的当前时间戳值和上次提取时所存储的时间戳值,从而确定该行是否已更新。服务器不必比较所有列的值,只需比较 timestamp 列即可。如果应用程序对没有 timestamp 列的表要求基于行版本控制的乐观并发,则游标默认为基于数值的乐观并发控制。
SCROLL LOCKS
这个选项实现悲观并发控制。在悲观并发控制中,在把数据库的行读入游标结果集时,应用程序将试图锁定数据库行。在使用服务器游标时,将行读入游标时会在其上放置一个更新锁。如果在事务内打开游标,则该事务更新锁将一直保持到事务被提交或回滚;当提取下一行时,将除去游标锁。如果在事务外打开游标,则提取下一行时,锁就被丢弃。因此,每当用户需要完全的悲观并发控制时,游标都应在事务内打开。更新锁将阻止任何其它任务获取更新锁或排它锁,从而阻止其它任务更新该行。然而,更新锁并不阻止共享锁,所以它不会阻止其它任务读取行,除非第二个任务也在要求带更新锁的读取。
滚动锁
根据在游标定义的 SELECT 语句中指定的锁提示,这些游标并发选项可以生成滚动锁。滚动锁在提取时在每行上获取,并保持到下次提取或者游标关闭,以先发生者为准。下次提取时,服务器为新提取中的行获取滚动锁,并释放上次提取中行的滚动锁。滚动锁独立于事务锁,并可以保持到一个提交或回滚操作之后。如果提交时关闭游标的选项为关,则 COMMIT 语句并不关闭任何打开的游标,而且滚动锁被保留到提交之后,以维护对所提取数据的隔离。
所获取滚动锁的类型取决于游标并发选项和游标 SELECT 语句中的锁提示。
锁提示 只读 乐观数值 乐观行版本控制 锁定
无提示 未锁定 未锁定 未锁定 更新
NOLOCK 未锁定 未锁定 未锁定 未锁定
HOLDLOCK 共享 共享 共享 更新
UPDLOCK 错误 更新 更新 更新
TABLOCKX 错误 未锁定 未锁定 更新
其它 未锁定 未锁定 未锁定 更新
*指定 NOLOCK 提示将使指定了该提示的表在游标内是只读的。
16、用Profiler来跟踪查询,得到查询所需的时间,找出SQL的问题所在;用索引优化器优化索引
17、注意UNion和UNion all 的区别。UNION all好
18、注意使用DISTINCT,在没有必要时不要用,它同UNION一样会使查询变慢。重复的记录在查询里是没有问题的
19、查询时不要返回不需要的行、列
20、用sp_configure 'query governor cost limit'或者SET QUERY_GOVERNOR_COST_LIMIT来限制查询消耗的资源。当评估查询消耗的资源超出限制时,服务器自动取消查询,在查询之前就扼杀掉。 SET LOCKTIME设置锁的时间
21、用select top 100 / 10 Percent 来限制用户返回的行数或者SET ROWCOUNT来限制操作的行
22、在SQL2000以前,一般不要用如下的字句: "IS NULL", "", "!=", "!", "!", "NOT", "NOT EXISTS", "NOT IN", "NOT LIKE", and "LIKE '%500'",因为他们不走索引全是表扫描。也不要在WHere字句中的列名加函数,如Convert,substring等,如果必须用函数的时候,创建计算列再创建索引来替代.还可以变通写法:WHERE SUBSTRING(firstname,1,1) = 'm'改为WHERE firstname like 'm%'(索引扫描),一定要将函数和列名分开。并且索引不能建得太多和太大。NOT IN会多次扫描表,使用EXISTS、NOT EXISTS ,IN , LEFT OUTER JOIN 来替代,特别是左连接,而Exists比IN更快,最慢的是NOT操作.如果列的值含有空,以前它的索引不起作用,现在2000的优化器能够处理了。相同的是IS NULL,“NOT", "NOT EXISTS", "NOT IN"能优化她,而””等还是不能优化,用不到索引。
23、使用Query Analyzer,查看SQL语句的查询计划和评估分析是否是优化的SQL。一般的20%的代码占据了80%的资源,我们优化的重点是这些慢的地方。
24、如果使用了IN或者OR等时发现查询没有走索引,使用显示申明指定索引:
SELECT * FROM PersonMember (INDEX = IX_Title) WHERE processid IN (‘男’,‘女’)
25、将需要查询的结果预先计算好放在表中,查询的时候再SELECT。这在SQL7.0以前是最重要的手段。例如医院的住院费计算。
26、MIN() 和 MAX()能使用到合适的索引。
27、数据库有一个原则是代码离数据越近越好,所以优先选择Default,依次为Rules,Triggers, Constraint(约束如外健主健CheckUNIQUE,数据类型的最大长度等等都是约束),Procere.这样不仅维护工作小,编写程序质量高,并且执行的速度快。
28、如果要插入大的二进制值到Image列,使用存储过程,千万不要用内嵌INsert来插入(不知JAVA是否)。因为这样应用程序首先将二进制值转换成字符串(尺寸是它的两倍),服务器受到字符后又将他转换成二进制值.存储过程就没有这些动作:
方法:Create procere p_insert as insert into table(Fimage) values (@image),
在前台调用这个存储过程传入二进制参数,这样处理速度明显改善。
29、Between在某些时候比IN速度更快,Between能够更快地根据索引找到范围。用查询优化器可见到差别。
select * from chineseresume where title in ('男','女')
Select * from chineseresume where between '男' and '女'
是一样的。由于in会在比较多次,所以有时会慢些。
30、在必要是对全局或者局部临时表创建索引,有时能够提高速度,但不是一定会这样,因为索引也耗费大量的资源。他的创建同是实际表一样。
31、不要建没有作用的事物例如产生报表时,浪费资源。只有在必要使用事物时使用它。
32、用OR的字句可以分解成多个查询,并且通过UNION 连接多个查询。他们的速度只同是否使用索
引有关,如果查询需要用到联合索引,用UNION all执行的效率更高.多个OR的字句没有用到索引,改写成UNION的形式再试图与索引匹配。一个关键的问题是否用到索引。
33、尽量少用视图,它的效率低。对视图操作比直接对表操作慢,可以用stored procere来代替她。特别的是不要用视图嵌套,嵌套视图增加了寻找原始资料的难度。我们看视图的本质:它是存放在服务器上的被优化好了的已经产生了查询规划的SQL。对单个表检索数据时,不要使用指向多个表的视图,直接从表检索或者仅仅包含这个表的视图上读,否则增加了不必要的开销,查询受到干扰.为了加快视图的查询,MsSQL增加了视图索引的功能。
34、没有必要时不要用DISTINCT和ORDER BY,这些动作可以改在客户端执行。它们增加了额外的开销。这同UNION 和UNION ALL一样的道理。
SELECT top 20 ad.companyname,comid,position,ad.referenceid,worklocation,
convert(varchar(10),ad.postDate,120)
as postDate1,workyear,degreedescription
FROM jobcn_query.dbo.COMPANYAD_query ad
where referenceID
in('JCNAD00329667','JCNAD132168','JCNAD00337748
','JCNAD00338345','JCNAD00333138','JCNAD00303570',
'JCNAD00303569','JCNAD00303568','JCNAD00306698
','JCNAD00231935','JCNAD00231933','JCNAD00254567',
'JCNAD00254585','JCNAD00254608','JCNAD00254607
','JCNAD00258524','JCNAD00332133','JCNAD00268618',
'JCNAD00279196','JCNAD00268613')
order by postdate desc
35、在IN后面值的列表中,将出现最频繁的值放在最前面,出现得最少的放在最后面,减少判断的次数。
36、当用SELECT INTO时,它会锁住系统表(sysobjects,sysindexes等等),阻塞其他的连接的存取。创建临时表时用显示申明语句,而不是select INTO.
drop table t_lxh
begin tran
select * into t_lxh from chineseresume where name = 'XYZ'
--commit
在另一个连接中SELECT * from sysobjects可以看到
SELECT INTO 会锁住系统表,Create table 也会锁系统表(不管是临时表还是系统表)。所以千万不要在事物内使用它!!!这样的话如果是经常要用的临时表请使用实表,或者临时表变量。
37、一般在GROUP BY 个HAVING字句之前就能剔除多余的行,所以尽量不要用它们来做剔除行的工作。他们的执行顺序应该如下最优:select 的Where字句选择所有合适的行,Group By用来分组个统计行,Having字句用来剔除多余的分组。这样Group By 个Having的开销小,查询快.对于大的数据行进行分组和Having十分消耗资源。如果Group BY的目的不包括计算,只是分组,那么用Distinct更快
41、一次更新多条记录比分多次更新每次一条快,就是说批处理好
42、少用临时表,尽量用结果集和Table类性的变量来代替它,Table 类型的变量比临时表好
43、在SQL2000下,计算字段是可以索引的,需要满足的条件如下:
a、计算字段的表达是确定的
b、不能用在TEXT,Ntext,Image数据类型
c、必须配制如下选项
ANSI_NULLS = ON, ANSI_PADDINGS = ON, .
44、尽量将数据的处理工作放在服务器上,减少网络的开销,如使用存储过程。存储过程是编译好、优化过、并且被组织到一个执行规划里、且存储在数据库中的SQL 语句,是控制流语言的集合,速度当然快。反复执行的动态SQL,可以使用临时存储过程,该过程(临时表)被放在Tempdb中。
以前由于SQL SERVER对复杂的数学计算不支持,所以不得不将这个工作放在其他的层上而增加网络的开销。SQL2000支持UDFs,现在支持复杂的数学计算,函数的返回值不要太大,这样的开销很大。用户自定义函数象光标一样执行的消耗大量的资源,如果返回大的结果采用存储过程
45、不要在一句话里再三的使用相同的函数,浪费资源,将结果放在变量里再调用更快
46、SELECT COUNT(*)的效率教低,尽量变通他的写法,而EXISTS快.同时请注意区别:
select count(Field of null) from Table 和 select count(Field of NOT null) from Table
的返回值是不同的!!!
47、当服务器的内存够多时,配制线程数量 = 最大连接数+5,这样能发挥最大的效率;
否则使用 配制线程数量最大连接数启用SQL SERVER的线程池来解决,如果还是数量 = 最大连接数+5,严重的损害服务器的性能。
48、按照一定的次序来访问你的表。如果你先锁住表A,再锁住表B,那么在所有的存储过程中都要按照这个顺序来锁定它们。如果你(不经意的)某个存储过程中先锁定表B,再锁定表A,这可能就
会导致一个死锁。如果锁定顺序没有被预先详细的设计好,死锁很难被发现
49、通过SQL Server Performance Monitor监视相应硬件的负载
Memory: Page Faults / sec计数器
如果该值偶尔走高,表明当时有线程竞争内存。如果持续很高,则内存可能是瓶颈。
Process:
1、 % DPC Time 指在范例间隔期间处理器用在缓延程序调用(DPC)接收和提供服务的百分比。(DPC 正在运行的为比标准间隔优先权低的间隔)。 由于 DPC 是以特权模式执行的,DPC 时间的百分比为特权时间百分比的一部分。这些时间单独计算并且不属于间隔计算总数的一部 分。这个总数显示了作为实例时间百分比的平均忙时。
2、%Processor Time计数器
如果该参数值持续超过95%,表明瓶颈是CPU。可以考虑增加一个处理器或换一个更快的处理器。
3、% Privileged Time 指非闲置处理器时间用于特权模式的百分比。(特权模式是为操作系统组件和操纵硬件驱动程序而设计的一种处理模式。它允许直接访问硬件和所有内存。另一种模式为用户模式,它是一种为应用程序、环境分系统和整数分系统设计的一种有限处理模式。操作系统将应用程序线程转换成特权模式以访问操作系统服务)。 特权时间的 % 包括为间断和 DPC 提供服务的时间。特权时间比率高可能是由于失败设备产生的大数量的间隔而引起的。这个计数器将平均忙时作为样本时间的一部分显示。
4、% User Time表示耗费CPU的数据库操作,如排序,执行aggregate functions等。如果该值很高,可考虑增
加索引,尽量使用简单的表联接,水平分割大表格等方法来降低该值。
Physical Disk: Curretn Disk Queue Length计数器
该值应不超过磁盘数的1.5~2倍。要提高性能,可增加磁盘。
SQLServer:Cache Hit Ratio计数器
该值越高越好。如果持续低于80%,应考虑增加内存。 注意该参数值是从SQL Server启动后,就一直累加记数,所以运行经过一段时间后,该值将不能反映系统当前值。
40、分析select emp_name form employee where salary
3000 在此语句中若salary是Float类型的,则优化器对其进行优化为Convert(float,3000),因为3000是个整数,我们应在编程时使用3000.0而不要等运行时让DBMS进行转化。同样字符和整型数据的转换。
41、查询的关联同写的顺序
select a.personMemberID, * from chineseresume a,personmember b where
personMemberID = b.referenceid and a.personMemberID = 'JCNPRH39681'
(A = B ,B = ‘号码’)
select a.personMemberID, * from chineseresume a,personmember b where
a.personMemberID = b.referenceid and a.personMemberID = 'JCNPRH39681'
and b.referenceid = 'JCNPRH39681'
(A = B ,B = ‘号码’, A = ‘

③ 如何实现多线程查询Sqlserver库

如何实现多线程查询Sqlserver库
在后台创建多个线程,访问你对应的数据然后放在一个指定的对象里面。 JSP上异步不断的发送请求向你存放数据的对象,返回数据后,放在JSP页面里面。

④ 如何使用SSMS配置SQL SERVER 服务器属性

可以使用系统存储过程或SQL SERVER MANAGEMENT STUDIO(SSMS)工具对SQL SERVER 2005/2008服务器进行设置,对于一般用户来说,第二种方式更为直观与简便,不需要记得复杂的SQL语句及语法,就能在图形化操作界面下来完成大部
分数据库的操作与管理,从SQL SERVER 2005开始,数据库管理方面推出了SSMS组件,此组件把以前版本的"企业管理器"和"查询管理器"两个工具组合到一个界面中,这使各种开发人员和一般的管理员都能轻松的访问SQL SERVER.使用SSMS工具可以查看与配置SQL SERVER 2005/2008数据库的服务器属性,本经验以SQL SERVER 2005为例,演示配置的全过程,供大家参考.

方法/步骤

1
单击"开始"|"所有序"|Microsoft SQL Server 2005|SQL Server Management Studio命令,或在开始菜单历史项中单击SQL Server Management Studio命令,启动SSMS

按照默认设置不变,点击"连接"按钮,连接到数据库服务器

在"对象资源管理器"中,右键单击服务器,选择"属性"命令

弹出"服务器属性"对话框,在"常规"选项卡中,可以查看到服务器相关硬件及软件信息,包括服务器名称,安装的操作系统,内存容量,处理器数量,SQL SERVER版本,安装根目录等信息

点击"内存"选项卡,对于32位的服务器操作系统, 并且物理内存>=4GB,本例服务器内存容量为8G 要勾选"使用AWE分配内存"复选框 ,64位系统直接支持大内存,
所以不要勾选"使用AWE分配内存"复选框,AWE可以让32位操作系统寻址更多内存,超过4GB的限制,在sqlserver中使用AWE,可以防止sqlserver的working set被操作系统page out,起到lock page in memory的作用.

点击"处理器"选项卡,其中"最大工作线程数"的默认值是0,则允许SQL SERVER在启动时自动配置工作线程,该设置对于大多数系统而言是最佳设置,也可以手工设置"最大工作线程数",输入一个介于32-32767之间的值即可,如果此服务器兼任文件服务器,数据库服务器,邮件服务器时,可以勾选"提升SQL SERVER的优先级",来提升SQL SERVER的优先级.

点击"安全性"选项卡,主要涉及"服务器身份验证","登录审核","服务器代理账户"和"选项"几个方面."启用C2审核跟踪"选项是配置服务器,以记录对语句和对象的失败和成功的访问尝试,这些信息可以帮助我们了解系统活动并跟踪可能的安全策略冲突;"跨数据库所有权链接",可以为SQL SERVER实例配置跨数据库所有权链接,此处勾选了"启用C2审核跟踪"选项

点击"连接"选项卡,此处主要有"连接","默认连接选项","远程服务器连接"三部分,在"连接"选项组下面的"最大并发连接数"调节框内,可以输入或选择一个值(介于0-32767之间),以设置允许与SQL SERVER实例同时连接的最大用户数量,0代表没有限制,一般保持默认设置即可.

点击"数据库设置"选项卡,一般保持默认设置即可,"默认索引填充因子","恢复间隔(分钟)",此处都为0,意思是让SQL SERVER自动配置与管理.

点击"高级"选项卡,此处包括并行的开销阀值,查询等待值,锁,最大并行度,网络数据包大小,远程登录超时值等,本服务有四CPU,此处设定"最大并行度"为2,意思是限制并行计划执行中使用的处理器数量为2个.

点击"权限"选项卡,此处可以选择不同的登录名或角色,也可以添加新的登录名或角色来设置相应权限.

⑤ sqlserver

摘自:http://database.ctocio.com.cn/analysis/465/7709465.shtml
【IT专家网独家】SQL Server用户自定义函数和存储过程有类似的功能,都可以创建捆绑SQL语句,存储在server中供以后使用。这样能够极大地提高工作效率,通过以下的各种做法可以减少编程所需的时间:

重复使用编程代码,减少编程开发时间。
隐藏SQL细节,把SQL繁琐的工作留给数据库开发人员,而程序开发员则集中处理高级编程语言。
维修集中化,可以在一个地方做业务上的逻辑修改,然后让这些修改自动应用到所有相关程序中。
乍看之下,用户自定义函数和存储过程的功能似乎一摸一样。但是,其实这两者之间还有一些虽然细微但是很重要的差异:

存储过程是使用EXEC命令独立调用的,而用户自定义函数是在另一个SQL语句中调用的。
l存储程序是允许用户和程序去使用存储过程,而不是允许其存取表格,这样能够增强程序安全性。与标准的SQL Server相比,存储程序限制用户行动权限方面更为细化。例如,如果你有一个货存表格,每次卖出一个货物收银员都要对表格进行更新一次(从货存中把该货品减去一件)。你可以给收银员设置权限,允许其使用decrement_item存储过程,而不是允许他们有任意修改或村表格的权限。
函数必须始终返回一个值(一个标量值或一个表格)。而存储过程可以返回一个标量值、一个表值或无需返回值。
总而言之,存储程序对SQL Server开发员来说是最有价值的宝物之一,用于数据库中,能够大大的提高工作效率,增强安全性,绝对超值。

⑥ 深入浅出SQLServer2005系统管理与应用开发的目 录

第1章 安装SQL Server 2005 1
1.1 版本 1
1.2 组件 2
1.2.1 服务器组件 2
1.2.2 客户机组件 2
1.3 安装企业版 3
1.3.1 安装环境 3
1.3.2 安装服务器 3
1.3.3 安装客户机 8
1.3.4 安装Service Pack 8
1.4 服务器的后台服务 9
1.4.1 MSSQLSERVER 10
1.4.2 SQLSERVERAGENT 10
1.4.3 MSSQLServerOLAPService 10
1.4.4 ReportServer 10
1.4.5 MSDTSServer 10
1.4.6 SQLBrowser 10
1.4.7 MSFTESQL 10
1.5 客户机上的管理工具 11
1.5.1 Management Studio 11
1.5.2 Visual Studio 2005 13
1.5.3 SQL Server配置管理器 15
1.5.4 通知服务命令提示 16
1.5.5 报表服务配置 18
1.5.6 SQL Server错误和使用情况报告 18
1.5.7 SQL Server外围应用配置器 19
1.5.8 SQL Server Profiler 21
1.5.9 数据库引擎优化顾问 21
1.6 本章小结 22
1.7 习题 23
第2章 SQL Server 2005新特性 24
2.1 Service Broker 24
2.1.1 分布式系统 24
2.1.2 分布式数据库系统 25
2.1.3 Service Broker的作用 25
2.1.4 Service Broker的术语 26
2.1.5 Service Broker的组件 28
2.1.6 Service Broker的实现 28
2.2 CLR集成 31
2.2.1 .NET是什么 31
2.2.2 .NET Framework是什么 31
2.2.3 .NET Framework的特性 32
2.2.4 .NET Framework的结构 33
2.2.5 CLR是什么 34
2.2.6 CLR集成的优点 35
2.2.7 CLR集成的编程增强 36
2.2.8 CLR集成是否可以取代T-SQL 36
2.2.9 启用CLR集成 37
2.3 专用管理员连接DAC 37
2.3.1 有权使用DAC的用户 38
2.3.2 DAC使用的局限 38
2.3.3 DAC使用的命令 39
2.3.4 Sqlcmd使用DAC 39
2.3.5 Management Studio使用DAC 40
2.4 resource系统数据库 41
2.4.1 resource数据库在哪里 42
2.4.2 如何使用resource数据库 44
2.5 用户与架构分离 44
2.5.1 与架构相关的概念 44
2.5.2 基于用户的数据对象描述 46
2.5.3 基于架构的数据对象描述 47
2.5.4 用户与架构分离的优点 47
2.6 分区 48
2.6.1 概念 48
2.6.2 类型 48
2.6.3 分区的数据对象 48
2.7 本章小结 49
2.8 习题 49
第3章 配置SQL Server 2005网络 50
3.1 网络基础 50
3.1.1 网络工作模式 50
3.1.2 网络管理模式 52
3.1.3 网络通信协议 52
3.1.4 TCP/IP 53
3.1.5 IP地址 54
3.1.6 端口 56
3.2 SQL Server网络基础 57
3.2.1 进程和线程 57
3.2.2 IPC 57
3.2.3 常见的IPC机制 58
3.2.4 Net-Library 58
3.3 网络中的名称 59
3.3.1 服务器NetBIOS名称 59
3.3.2 实例名称 60
3.3.3 服务器别名 62
3.4 TDS协议 63
3.4.1 TDS的概念 63
3.4.2 TDS的作用 63
3.4.3 TDS的结构 64
3.5 端点 64
3.5.1 端点的作用 65
3.5.2 端点的类型 65
3.5.3 TDS端点 66
3.5.4 需不需要创建TDS端点 66
3.5.5 创建TDS端点 66
3.6 网络配置工具与步骤 67
3.6.1 网络配置工具 67
3.6.2 网络配置步骤 68
3.7 配置共享内存网络 68
3.7.1 配置服务器 68
3.7.2 配置客户机 69
3.8 配置TCP/IP网络 70
3.8.1 配置服务器 70
3.8.2 配置客户机 72
3.9 配置命名管道网络 74
3.9.1 配置服务器 75
3.9.2 配置客户机 76
3.10 配置网络中的常见问题 78
3.10.1 怎样选择网络协议 78
3.10.2 不同的网络协议的效率 79
3.10.3 隐藏实例(HideInstance) 80
3.11 本章小结 81
3.12 习题 81
第4章 服务器日常管理 82
4.1 注册 82
4.1.1 注册服务器 83
4.1.2 排除常见注册故障 86
4.1.3 总结注册方法 87
4.2 暂停服务器 87
4.2.1 在【控制面板】中暂停 87
4.2.2 在【Management Studio】中暂停 88
4.2.3 在【SQL Server配置管理器】中暂停服务器 89
4.3 关闭服务器 89
4.3.1 在【控制面板】中关闭 89
4.3.2 在【Management Studio】中关闭 90
4.3.3 在【SQL Server配置管理器】中关闭 91
4.4 启动服务器 91
4.4.1 在【控制面板】中启动 91
4.4.2 在【Management Studio】中启动 92
4.4.3 在【SQL Server配置管理器】中启动 92
4.5 服务启动信息 93
4.5.1 查看启动信息的方法 93
4.5.2 分析启动信息的内容 94
4.5.3 服务启动顺序 96
4.6 服务启动参数 97
4.6.1 配置方法 97
4.6.2 -d参数 98
4.6.3 -l参数 99
4.6.3 -e参数 99
4.7 最小配置启动 99
4.7.1 -f参数 100
4.7.2 最小配置的含义 101
4.8 本章小结 101
4.9 习题 102
第5章 服务器配置 103
5.1 常规参数 103
5.1.1 基础信息 103
5.1.2 排序规则 104
5.2 内存配置 105
5.2.1 有关内存的术语 106
5.2.2 SQL Server有关内存的术语 107
5.2.3 SQL Server服务器内存结构 107
5.2.4 在内存中寻找数据 108
5.2.5 时钟管理算法 109
5.2.6 内存空间分配 110
5.2.7 最小服务器内存 110
5.2.8 最大服务器内存 110
5.2.9 索引占用的内存 111
5.2.10 每次查询占用的最小内存 111
5.2.11 AWE内存分配 112
5.3 处理器配置 112
5.3.1 处理器关联掩码 112
5.3.2 I/O关联掩码 114
5.3.3 最大工作线程数 114
5.3.4 提升SQL Server优先级 115
5.3.5 使用Windows纤程 115
5.4 安全性配置 117
5.4.1 服务器身份验证 118
5.4.2 登录审核 119
5.4.3 启用服务器代理账户 121
5.4.4 启用C2审核跟踪 123
5.5 连接配置 125
5.5.1 最大并发连接数 125
5.5.2 使用查询调控器 126
5.5.3 远程服务器连接 127
5.5.4 默认连接选项 127
5.6 数据库设置配置 128
5.6.1 默认索引填充因子 128
5.6.2 磁带备份和还原参数 129
5.6.3 恢复间隔 129
5.6.4 数据库默认位置 130
5.7 高级配置 130
5.7.1 并行 130
5.7.2 网络 131
5.7.3 杂项 131
5.8 本章小结 132
5.9 习题 133
第6章 数据库日常管理 134
6.1 数据库的逻辑结构 134
6.1.1 数据库关系图 134
6.1.2 表 137
6.1.3 索引 138
6.1.4 视图 139
6.1.5 同义词 140
6.1.6 存储过程 140
6.1.7 数据库触发器 141
6.1.8 类型 141
6.1.9 规则 141
6.1.10 默认值 143
6.1.11 程序集 143
6.2 数据库的物理结构 143
6.2.1 数据文件 144
6.2.2 日志文件 144
6.3 数据库的类型 145
6.3.1 系统数据库 145
6.3.2 用户数据库 146
6.3.3 数据库快照 146
6.4 数据库的状态 147
6.4.1 查看数据库状态 147
6.4.2 状态值的含义 148
6.5 创建数据库 149
6.5.1 数据库命名规则 149
6.5.2 创建数据库 149
6.6 配置数据库 152
6.6.1 备份信息 152
6.6.2 大小和可用空间 153
6.6.3 对用户数的勘误 155
6.6.4 排序规则 157
6.6.5 恢复模式 158
6.6.6 页验证 159
6.6.7 只读数据库 160
6.6.8 限制访问 160
6.6.9 统计信息 160
6.6.10 自动关闭 161
6.6.11 自动收缩 161
6.7 分离和附加数据库 162
6.7.1 分离数据库 162
6.7.2 附加用户数据库 163
6.8 脱机和联机数据库 165
6.8.1 脱机用户数据库 165
6.8.2 联机用户数据库 165
6.9 重命名数据库 166
6.9.1 重命名数据库 166
6.9.2 Alter Database重命名数据库 166
6.10 本章小结 166
6.11 习题 167
第7章 数据库文件管理 168
7.1 文件类型 168
7.1.1 主要数据文件 168
7.1.2 次要数据文件 169
7.1.3 日志文件 170
7.2 文件状态 170
7.2.1 查看文件状态 170
7.2.2 文件状态的含义 170
7.3 数据文件管理 171
7.3.1 数据文件内部的读写机制 171
7.3.2 添加次要数据文件 172
7.3.3 删除次要数据文件 173
7.3.4 调整数据文件的增长属性 175
7.3.5 收缩数据文件 176
7.3.6 移动数据文件的数据 178
7.4 日志文件管理 179
7.4.1 VLF 179
7.4.2 日志文件的内部读写机制 180
7.4.3 日志文件的作用 181
7.4.4 日志文件的特点 181
7.4.5 日志文件的结构 182
7.4.6 查看日志文件内容 182
7.4.7 添加日志文件 183
7.4.8 移动日志文件的内容 184
7.4.9 删除日志文件 185
7.5 文件组 185
7.5.1 概念 185
7.5.2 文件组的读写机制 185
7.5.3 文件组的使用原则 186
7.6 本章小结 186
7.7 习题 187
第8章 代理服务 188
8.1 代理服务基础 188
8.1.1 作用 188
8.1.2 作业(Job) 189
8.1.3 计划(Schele) 189
8.1.4 警报(Alert) 189
8.1.5 操作员(Operator) 190
8.2 管理代理服务 190
8.2.1 启动代理服务 190
8.2.2 配置代理服务 191
8.2.3 查看代理服务的错误日志 194
8.3 基于代理服务的案例 195
8.3.1 创建操作员 195
8.3.2 创建警报 196
8.3.3 创建计划 197
8.3.4 创建作业 198
8.3.5 配置警报属性 202
8.3.6 总结案例的关系 202
8.3.7 查看作业的执行情况 203
8.4 本章小结 204
8.5 习题 204
第9章 维护计划 205
9.1 作用 205
9.2 维护计划管理 205
9.2.1 用向导创建维护计划 206
9.2.2 修改维护计划 210
9.2.3 修改优先约束 211
9.2.4 修改执行服务器 211
9.2.5 执行维护计划 211
9.3 本章小结 213
9.4 习题 213
第10章 集成服务SSIS 214
10.1 SSIS基础 214
10.1.1 作用 214
10.1.2 体系结构 215
10.2 SSIS使用 217
10.2.1 导出数据 217
10.2.2 查看包 221
10.2.3 执行包 221
10.3 SSIS项目开发 222
10.3.1 开发SSIS项目 222
10.3.2 解决方案 224
10.3.3 SSIS项目剖析 225
10.3.4 开发复杂的SSIS项目 225
10.4 SSIS包 226
10.4.1 总体结构 226
10.4.2 容器 226
10.4.3 任务 227
10.4.4 优先约束 229
10.4.5 控制流 229
10.4.6 数据流 230
10.4.7 事件处理程序 230
10.4.8 包资源管理器 231
10.5 本章小结 232
10.6 习题 232
第11章 T-SQL基础知识 233
11.1 语法约定 233
11.2 数据对象表示方法 234
11.2.1 参数说明 234
11.2.2 使用实例 234
11.3 安装AdventureWorks数据库 235
11.4 研究T-SQL的原则 237
11.4.1 功能与效率并重的原则 237
11.4.2 数据与日志并重的原则 237
11.5 T-SQL的执行机制 237
11.5.1 引擎的工作流程 238
11.5.2 引擎的体系结构 239
11.5.3 T-SQL的执行过程 240
11.6 T-SQL的执行计划 241
11.6.1 执行计划的内容 241
11.6.2 执行计划的执行 241
11.6.3 执行计划的老化 242
11.6.4 查看T-SQL的执行计划 242
11.7 T-SQL的优化 243
11.7.1 查询优化器 244
11.7.2 基于CBO的优化 244
11.7.3 数据库统计信息 245
11.7.4 查看表的统计信息 245
11.8 研究T-SQL效率的方法 246
11.8.1 客户端统计信息 247
11.8.2 T-SQL的I/O 248
11.8.3 T-SQL的执行时间 249
11.8.4 T-SQL的执行计划 249
11.8.5 编程计算T-SQL的执行时间 251
11.8.6 编程计算成批T-SQL的执行时间 251
11.9 研究T-SQL数据的方法 252
11.9.1 DBCC PAGE命令 253
11.9.2 DBCC LOG命令 254
11.10 本章小结 256
11.11 习题 256
第12章 T-SQL语法要素 257
12.1 数据类型 257
12.1.1 整数型 258
12.1.2 二进制型 258
12.1.3 字符串型 258
12.1.4 日期时间型 259
12.1.5 小数型 259
12.1.6 货币型 259
12.1.7 其他类型 260
12.2 常量 260
12.2.1 常见的常量定义格式 260
12.2.2 常见的常量使用方法 262
12.3 变量 262
12.3.1 全局变量 263
12.3.2 局部变量 263
12.4 运算符 264
12.4.1 算术运算符 264
12.4.2 位运算符 264
12.4.3 比较运算符 264
12.4.4 逻辑运算符 265
12.4.5 字符串连接运算符 265
12.4.6 赋值运算符 265
12.4.7 运算符的优先级 265
12.5 T-SQL函数 266
12.5.1 聚合函数 266
12.5.2 日期和时间函数 266
12.5.3 数学函数 267
12.5.4 字符串函数 267
12.6 T-SQL表达式 268
12.6.1 表达式的组合 268
12.6.2 表达式的结果 268
12.7 注释 269
12.7.1 单行注释 269
12.7.2 多行注释 269
12.8 批处理 270
12.8.1 批处理的含义 270
12.8.2 批处理的特点 270
12.9 流程控制 270
12.9.1 程序块语句BEGIN..END 270
12.9.2 判断语句IF..ELSE 271
12.9.3 循环语句WHILE 272
12.9.4 分支判断语句CASE 273
12.9.5 无条件退出语句RETURN 273
12.9.6 无条件跳转语句GOTO 275
12.9.7 延期执行语句WAITFOR 275
第13章 查询语句研究 277
13.1 语法结构 277
13.2 选择列表 278
13.2.1 选择所有列 278
13.2.2 选择特定列 282
13.2.3 包含运算符的查询 284
13.2.4 包含函数的查询 285
13.2.5 消除重复项 286
13.3 FROM子句 287
13.3.1 使用表别名 287
13.3.2 使用表提示 290
13.4 WHERE子句 293
13.4.1 WHERE子句中的运算符 294
13.4.2 比较查询 295
13.4.3 范围查询 296
13.4.4 列表查询 297
13.4.5 模式匹配查询 298
13.5 GROUP BY子句 299
13.5.1 语法结构 300
13.5.2 实例分析 300
13.6 ORDER BY子句 302
13.6.1 语法结构 302
13.6.2 实例分析 302
13.7 本章小结 303
13.8 习题 303
第14章 数据操作语句研究 304
14.1 INSERT语句研究 304
14.1.1 表结构和索引结构 305
14.1.2 执行前的日志情况分析 305
14.1.3 执行情况分析 305
14.1.4 执行后的日志情况分析 307
14.1.5 研究数据的变化情况 308
14.1.6 研究结论 308
14.2 UPDATE语句研究 309
14.2.1 执行前的日志情况分析 310
14.2.2 执行情况分析 310
14.2.3 执行后的日志情况 311
14.2.4 研究结论 313
14.3 DELETE语句研究 313
14.3.1 执行前的日志情况分析 314
14.3.2 执行情况分析 314
14.3.3 执行后的日志情况 315
14.3.4 研究结论 316
14.4 深入探讨语句内部机制 317
14.4.1 谁先插入数据 317
14.4.2 谁先更新数据 317
14.4.3 谁先删除数据 317
14.5 本章小结 317
14.6 习题 318
第15章 DBCC命令深入研究 319
15.1 验证类DBCC命令 319
15.1.1 DBCC CHECKALLOC 319
15.1.2 DBCC CHECKCATALOG 323
15.1.3 DBCC CHECKDB 324
15.2 DBCC CLEANTABLE深入研究 326
15.2.1 创建测试表 327
15.2.2 表的存储空间分配 328
15.2.3 删除列 331
15.2.4 删除列后表的存储空间分配 331
15.2.5 执行DBCC CLEANTABLE命令 333
15.2.6 DBCC CLEANTABLE命令日志分析 333
15.2.7 存储空间的变化 335
15.2.8 结论 337
15.3 DBCC DBREINDEX深入研究 337
15.3.1 语法结构 337
15.3.2 查询执行前的页面情况 338
15.3.3 查询执行前的日志情况 339
15.3.4 重建索引 339
15.3.5 查询执行后的日志情况 340
15.3.6 查询执行后的页面情况 340
15.4 本章小结 341
15.5 习题 341
第16章 安全管理 342
16.1 安全方案 342
16.1.1 基于网络安全机制实现的方案 342
16.1.2 基于SQL Server 2005本身实现的方案 343
16.2 网络安全方案 343
16.2.1 网络安全的新需求 344
16.2.2 常规加/解密技术 344
16.2.3 公钥加/解密技术 345
16.2.4 公钥加/解密技术的实现方案 345
16.2.5 产生公钥的数字证书实现方案 347
16.3 主流的网络安全技术 348
16.3.1 IPSec 348
16.3.2 VPN 350
16.3.3 SSL 351
16.4 SQL Server 2005的安全体系 352
16.4.1 安全体系 352
16.4.2 安全主体 353
16.4.3 安全对象 353
16.5 服务器安全管理 354
16.5.1 身份验证机制 354
16.5.2 更改身份验证机制 355
16.5.3 查询登录名 357
16.5.4 新建登录名 357
16.5.5 服务器角色 361
16.5.6 密码复杂性策略 361
16.5.7 启用登录审核 361
16.5.8 查询登录审核信息 363
16.6 数据库安全管理 367
16.6.1 用户管理 367
16.6.2 固定数据库角色 369
16.6.3 创建应用程序角色 369
16.6.4 创建架构 370
16.7 加密机制 371
16.7.1 加密体系 372
16.7.2 密钥的加密 373
16.8 对称密钥加/解密 374
16.8.1 产生对称密钥的语句 374
16.8.2 产生对称密钥 375
16.8.3 打开和关闭对称密钥 376
16.8.4 加密和解密数据的语句 377
16.8.5 实例:用对称密钥加密数据 378
16.8.6 实例:用对称密钥解密数据 378
16.9 非对称密钥加/解密 379
16.9.1 产生非对称密钥的语句 379
16.9.2 产生非对称密钥 380
16.9.3 加密和解密数据的语句 380
16.9.4 实例:用非对称密钥加密数据 381
16.9.5 实例:用非对称密钥解密数据 381
16.10 数字证书加/解密 381
16.10.1 产生数字证书的语句 382
16.10.2 产生数字证书 382
16.10.3 加密和解密数据的语句 382
16.10.4 实例:用数字证书加密数据 383
16.10.5 实例:用数字证书解密数据 383
16.11 密钥管理 384
16.11.1 备份和恢复服务主密钥 384
16.11.2 产生数据库主密钥 384
16.11.3 用服务主密钥加密数据库主密钥 385
16.12 密码策略 386
16.12.1 增加密码的复杂性 386
16.12.2 强密码 386
16.13 SQL注入式攻击与防范 386
16.13.1 SQL注入式攻击的产生 386
16.13.2 SQL注入式攻击的防范 387
16.14 存储介质的安全管理 387
16.14.1 尽可能保证日志文件的安全 388
16.14.2 用硬件实现日志文件的复用 388
16.14.3 分离存储数据文件和日志文件 388
16.15 本章小结 389
16.16 习题 389
第17章 事务和锁 391
17.1 多用户数据库的并发问题 391
17.1.1 并发访问的实例 391
17.1.2 并发问题 392
17.2 事务 393
17.2.1 事务的特性 393
17.2.2 事务的状态 394
17.3 SQL Server 2005中的事务机制 395
17.3.1 事务模式 395
17.3.2 更改事务模式 396
17.3.3 事务的启动 396
17.3.4 事务日志记录 397
17.3.5 事务编程语句 397
17.3.6 事务的调度 398
17.3.7 事务的隔离性级别 398
17.3.8 批(GO) 399
17.4 锁 399
17.4.1 锁的粒度 400
17.4.2 锁的类型(模式) 400
17.4.3 锁持有度 401
17.4.4 动态锁机制 401
17.4.5 查看锁 401
17.5 死锁 402
17.5.1 死锁的发生 402
17.5.2 消除死锁的方法 403
17.5.3 SQL Server 2005死锁检测和结束机制 403
17.5.4 跟踪和检测死锁 404
17.6 本章小结 404
17.7 习题 405
第18章 备份恢复 406
18.1 数据库系统故障类型 406
18.1.1 事务故障 407
18.1.2 系统故障 407
18.1.3 介质故障 407
18.1.4 DBA需要应对的故障 407
18.2 不同类型故障的恢复机制 408
18.2.1 事务故障的恢复机制 408
18.2.2 系统故障的恢复机制 408
18.2.3 介质故障的恢复机制 408
18.3 基于事务日志的备份和恢复机制 409
18.3.1 经典的事务日志结构 409
18.3.2 Redo(重做)事务 409
18.3.3 Undo(回滚)事务 410
18.3.4 WAL原则 411
18.4 SQL Server 2005基于日志的恢复机制 412
18.4.1 剖析日志记录结构的奥秘 412
18.4.2 Previous Page LSN参数的奥秘 414
18.4.3 Undo的实现机制 415
18.4.4 Redo的实现机制 416
18.5 检查点机制 417
18.5.1 检查点的操作 417
18.5.2 检查点与恢复效率的关系 417
18.5.3 MinLSN的选择 418
18.6 SQL Server 2005恢复模式 419
18.6.1 恢复模式与日志的关系 419
18.6.2 完整恢复模式 419
18.6.3 简单恢复模式 420
18.6.4 大容量日志恢复模式 421
18.7 实例:完整备份与恢复 422
18.7.1 完整数据库备份恢复的原理 422
18.7.2 完整数据库备份 422
18.7.3 完整数据库恢复 424
18.8 实例:完整+日志备份与恢复 425
18.8.1 完整+日志备份恢复的原理 425
18.8.2 完整+日志备份 426
18.8.3 完整+日志恢复 427
18.9 实例:完整+差异+日志备份与恢复 429
18.9.1 完整+差异备份恢复的原理 429
18.9.2 完整+差异+日志备份 430
18.9.3 完整+差异+日志恢复 431
18.10 BAK文件恢复 434
18.10.1 查看BAK文件的内容 434
18.10.2 实例:从BAK文件恢复 435
18.11 本章小结 437
18.12 习题 437
第19章 高可用性 438
19.1 故障转移群集 438
19.1.1 网络服务新需求 438
19.1.2 SMP解决方案 439
19.1.3 群集 439
19.1.4 故障转移群集 440
19.2 数据库镜像 441
19.2.1 数据库镜像方案 442
19.2.2 数据库镜像的具体实现 443
19.2.3 数据库镜像的特点 443
19.2.4 故障转移的实现 443
19.2.5 数据库镜像模式 444
19.3 日志传送 444
19.3.1 日志传送方案 445
19.3.2 日志传送的特点 446
19.3.3 日志传送的具体实现 446
19.3.4 构建实例环境 447
19.3.5 步骤1:以有权限的用户登录 447
19.3.6 步骤2:创建专门的目录 448
19.3.7 步骤3:初始化辅助服务器的数据库 448
19.3.8 步骤4:配置主数据库的日志传送 449
19.3.9 步骤5:查看作业情况 453
19.3.10 步骤6:分析配置脚本 453
19.4 本章小结 456
19.5 习题 456
第20章 分布式复制 457
20.1 分布式复制概述 457
20.1.1 构建高可用性服务器环境 457
20.1.2 构建分布式数据交换环境 458
20.2 分布式复制模型 459
20.2.1 发布服务器 459
20.2.2 订阅服务器 459
20.2.3 分发服务器 459
20.2.4 项目 460
20.2.5 发布 460
20.2.6 订阅 460
20.3 分布式复制类型 461
20.3.1 事务复制 461
20.3.2 快照复制 462
20.3.3 合并复制 462
20.4 分布式复制代理 463
20.4.1 快照代理 463
20.4.2 日志读取器代理 463
20.4.3 分发代理 463
20.4.4 分发代理 463
20.4.5 队列读取器代理 464
20.5 两台服务器间复制数据库案例 464
20.5.1 案例环境 464
20.5.2 实现步骤 464
20.6 典型的复制案例 468
20.6.1 配置分发服务器 468
20.6.2 配置分发服务器的属性 472
20.6.3 配置发布服务器的属性 473
20.6.4 创建发布 474
20.6.5 创建订阅 479
20.6.6 同步发布和订阅 482
20.7 本章小结 482
第21章 Transact-SQL实例 483
21.1 配置参数检测调整 483
21.1.1 配置服务器的AWE内存 483
21.1.2 配置最小服务器内存 484
21.1.3 配置最大服务器内存 484
21.1.4 配置服务器的身份验证方式 484
21.1.5 配置服务器的登录审核 485
21.1.6 配置服务器的远程连接 486
21.1.7 启动OLE自动化 486
21.1.8 配置数据库的恢复模式 487
21.1.9 配置数据库的统计信息参数 488
21.1.10 检测CPU资源调度模式设置 489
21.1.11 配置参数综合检测与修改 491
21.2 性能监控实例 498
21.2.1 性能计数器种类 498
21.2.2 当前内存总数 499
21.2.3 当前用户连接使用内存数 499
21.2.4 当前锁使用内存数 500
21.2.5 当前查询优化使用内存数 500
21.2.6 当前工作空间使用内存数 501
21.2.7 当前过程缓冲区使用内存数 502
21.2.8 当前可用内存 502
21.2.9 当前数据缓冲区内存数 503
21.2.10 数据缓冲区使用比例 504
21.2.11 数据缓冲区命中率 504
21.2.12 数据缓冲区中消耗资源Top对象 505
21.3 本章小结 507
第22章 DBA Expert项目开发实践 508
22.1 项目概述 508
22.1.1 DBA Expert安装 509
22.1.2 DBA Expert使用 510
22.2 构建开发环境 510
22.2.1 C/S模式的开发环境 511
22.2.2 B/S模式的开发环境 511
22.2.3 项目的开发环境 512
22.2.4 构建本书的开发环境 513
22.3 项目总体结构 513
22.3.1 解决方案和项目 513
22.3.2 DBAExpertSQLServer项目 514
22.3.3 DBAExpertSQLServerSetup项目 515
22.4 数据库设计 515
22.4.1 需要重点关注什么内容 515
22.4.2 表的设计应重点关注什么内容 517
22.4.3 索引的设计应重点关注什么内容 518
22.4.4 DBA Expert项目数据库设计 519
22.5 存储过程设计 521
22.5.1 存储过程P_DataBaseCollationCheck 521
22.5.2 存储过程P_GetAllDataBase 521
22.5.3 存储过程P_GetAllocationUnit 522
22.5.4 存储过程P_GetBuffer 523
22.5.5 存储过程P_GetFile 524
22.5.6 存储过程P_GetFileGroup 525
22.5.7 存储过程P_GetIndex 526
22.5.8 存储过程P_GetObject 527
22.5.9 存储过程P_GetPartitions 528
22.5.10 存储过程P_GetPrincipal 529
22.5.11 存储过程P_GetSchema 530
22.5.12 存储过程P_DeleteAllIndex 531
22.5.13 存储过程P_DeleteAllObject 531
22.5.14 存储过程P_DeleteAllocationUnit 531
22.5.15 存储过程P_DeleteAllPartitions 532
22.5.16 存储过程P_DeleteAllSchema 532
22.5.17 存储过程P_DeleteBuffer 533
22.5.18 存储过程P_DeleteCacheTop 533
22.5.19 存储过程P_DeleteDataBase 533
22.5.20 存储过程P_DeleteFile 534
22.5.21 存储过程P_DeleteFileGroup 534
22.5.22 存储过程P_DeleteIndex 534
22.5.23 存储过程P_DeleteObject 535
22.5.24 存储过程P_DeletePartitions 535
22.5.25 存储过程P_DeletePrincipal 536
22.5.26 存储过程P_DeleteSchema 536
22.5.27 存储过程P_Init 536
22.5.28 存储过程P_BufferTopObject 537
22.6 典型模块与技巧 541
22.6.1 如何设计公用类 541
22.6.2 如何使用公用类 545
22.6.3 如何使用第三方控件 545
22.6.4 如何设计报表打印数据 547
22.6.5 如何实现自动保存连接信息 548
22.6.6 如何实现窗体之间传递数据 553
22.7 事务处理与实现 554
22.7.1 基于开发语言的事务实现机制 554
22.7.2 基于T-SQL的事务实现机制 555
22.7.3 什么样的事务语句有意义 555
22.8 DBA Expert项目典型窗体剖析 555
22.8.1 主窗体 555
22.8.2 直接执行T-SQL的窗体 557
22.8.3 获取存储过程输出参数的窗体 569
22.8.4 图形显示结果的窗体 572
22.9 项目打包发布 577
22.9.1 打包项目 577
22.9.2 生成安装包 579
22.9.3 集成运行环境的安装包 582