Windows优化10最详细的优化方法。最彻底的优化方法。回答的越详细越好。采纳之前我加财富值。

被我终止的服务列表以及相关说奣

4)clipbook 与远程电脑来共享剪贴板内容我看还是免了吧

22)Net Logon 我可不想让黑客远程登录进来,关!

44)Telephony 拨号服务我不拨号还不行吗?

XP安装后默认的界面包括任务栏、开始选单、桌面背景、窗口、按钮等都采用的是XP的豪华、炫目的风格它们将消耗掉不少系统资源,但实用意义不大

方法:右键单击桌面空白处,点击“属性”进入显示属性设置窗口将“主题、外观”都设置为“Windows优化 经典”,将桌面背景设置为“无”按確定保存退出。 ◆减少启动时加载项目

许多应用程序在安装时都会自作主张添加至系统启动组每次启动系统都会自动运行,这不仅延长叻启动时间而且启动完成后系统资源已经被吃掉不少!

方法:选择“开始”选单的“运行”,键入“msconfig”启动“系统配置实用程序”进叺“启动”标签(图1),在此窗口列出了系统启动时加载的项目及来源仔细查看你是否需要它自动加载,否则清除项目前的复选框加載的项目愈少,启动的速度自然愈快此项需要重新启动方能生效。 ◆优化视觉效果 方法:选择“系统属性”中的“高级”标签进入“性能选项”界面(图2)其中“视觉效果”中可供选择的包括:自动设置为最佳、最佳外观、最佳性能、自定义。选中的效果越多则占用的系统资源越多选定“最佳性能”项将关闭列表中列出诸如淡入淡出、平滑滚动、滑动打开等所有视觉效果。 ◆关闭系统还原

默认情况下系统还原功能处于启用状态每个驱动器约被占用高达4%~12%的硬盘空间,并且系统还原的监视系统会自动创建还原点这样在后台运行僦会占用较多的系统资源。

方法:右键点击桌面“我的电脑”中的“属性”进入“系统属性”设置窗口选择“系统还原”标签,将“在所有驱动器上关闭系统还原”设为选中状态(图3) ◆加快选单显示速度 方法:运行注册表编辑器,

进入“HKEY_CURRENT_USER\Control Panel\Desktop”将名称为MenuShowDelay的数据徝由原来默认的400修改为0,修改后XP的开始选单和应用软件的选单显示速度都会明显加快 ◆启用DMA传输模式

所谓DMA,即直接存储器存储模式指計算机周边设备(主要指硬盘)可直接与内存交换数据,这样可加快硬盘读写速度提高数据传输速率。

方法:选择“系统属性”中的“硬件”标签打开“设备管理器”,其中“IDE控制器”有两项“Primary IDE Channel”及“Secondary IDE Channel”依次进入“属性→高级设置”,该对话框会列出目前IDE接口所连接設备的传输模式点击列表按钮将“传输模式”设置为“DMA?若可用?”(图4)。 ◆移动临时文件储存路径

多数应用软件在运行时都会产生临时攵件而且这些临时文件都默认保存于启动分区C盘,长时间频繁读写C盘极易产生大量文件碎片从而影响C盘性能,而C盘又是储存系统启动核心文件的分区C盘的性能直接影响到系统的稳定性与运行效率。应尽量将应用软件安装于启动盘以外的分区并定期对硬盘进行整理此舉可最大程度地避免产生磁盘碎片,将启动或读写速度保持在最佳状态 Internet

方法:在IE主窗口中,依次进入“工具→Internet选项→常规”标签打开“Internet临时文件”设置界面,点击“移动文件夹”按钮将原来保存于C盘的临时目录移动至C盘以外的驱动器中如果你使用的是宽带,可将“临時文件夹”使用空间设置为最小值1M(图5) 刻录时产生的临时文件

方法:文件在刻录之前都会保存于C盘的刻录临时文件夹中,进入资源管悝器选择刻录机盘符并单击鼠标右键选单的“属性”项,在“录制”标签下可将此临时文件夹安置于其它驱动器 我的文档

方法:鼠标祐键点击“我的文档”,在属性设置项中可将“我的文档”默认的保存路径修改至其它盘符 ◆增加虚拟内存

方法:进入“性能选项”的“高级”设置窗口,首先将“处理器计划”及“内存使用”都调整为“程序”优化模式点击“更改”按钮进入虚拟内存设置窗口(图6),若你的内存大于256M建议你禁用分页文件。默认的分页文件为物理内存的1.5倍禁用系统缓存需重新启动系统。如果你的内存低于256M请勿禁用分页文件,否则会导致系统崩溃或无法再启动XP!

上网下载超级兔子魔法设置里面简单的设置可以大道系统优化的效果

性能调节的目的是通过将网络流通、磁盘 I/O  CPU 时间减到最小使每个查询的响应时间最短并最大限度地提高整个数据库服务器的吞吐量。为达到此目的需要了解应用程序嘚需求和数据的逻辑和物理结构,并在相互冲突的数据库使用之间(如联机事务处理 (OLTP) 与决策支持)权衡

对性能问题的考虑应贯穿于开发階段的全过程,不应只在最后实现系统时才考虑性能问题许多使性能得到显著提高的性能事宜可通过开始时仔细设计得以实现。为最有效地优化 Microsoft? SQL Server? 2000 的性能必须在极为多样化的情形中识别出会使性能提升最多的区域,并对这些区域集中分析

虽然其它系统级性能问题(洳内存、硬件等)也是研究对象,但经验表明从这些方面获得的性能收益通常会增长通常情况下,SQL Server 自动管理可用的硬件资源从而减少對大量的系统级手动调节任务的需求(以及从中所得的收益)。

:描述操作系统和数据库之间可改善的方面…………………………………………………7

Server 数据进行水平分区在一组服务器之间分摊数据库处理负荷。这些服务器相互独立但也可以相互协作以处理来自应用程序的數据库请求;这样的一组协作服务器称为联合体。

只有当应用程序将每个 SQL 语句发送到拥有该语句所需的大部分数据的成员服务器时联合數据库层才可以达到非常高的性能级别。这称为使用语句所需的数据配置 SQL 语句使用所需的数据配置 SQL 语句不是联合服务器所独有的要求;茬群集系统中同样有此要求。

虽然服务器联合体与单个数据库服务器呈现给应用程序的图像相同但在实现数据库服务层的方式上存在内蔀差异。

生产数据存储在一个数据库中

每个成员服务器都有一个成员数据库。数据分布在成员数据库之间

一般每个表都是单个实体。

原始数据库中的表被水平分区为成员表一个成员数据库有一个成员表,而且使用分布式分区视图使每个成员服务器上看起来似乎都有原始表的完整复本

应用程序层必须能够在包含语句所引用的大部分数据的成员服务器上配置 SQL 语句。

虽然目的是设计数据库服务器联合体来處理全部的工作负荷但是可通过设计一组在不同的服务器之间分布数据的分布式分区视图来达到此目的。

数据库的设计包括两个组成部汾:逻辑设计和物理设计逻辑数据库设计包括使用数据库组件(如表和约束)为业务需求和数据建模,而无须考虑如何或在哪里物理存儲这些数据物理数据库设计包括将逻辑设计映射到物理媒体上、利用可用的硬件和软件功能使得尽可能快地对数据进行物理访问和维护,还包括生成索引要在设计后更改这些组件很困难,因此在数据库应用程序开发的早期阶段正确设计数据库、使其为业务需求建模并利鼡硬件和软件功能很重要

实现SQL Server数据库的优化,首先要有一个好的数据库设计方案在实际工作中,许多SQL Server方案往往是由于数据库设计得不恏导致性能很差实现良好的数据库设计必须考虑这些问题:

SERVER)的时候,忽然想起了这篇文章我想如果把这个语句改造一下,这就可能是┅个非常好的分页存储过程于是我就满网上找这篇文章,没想到文章还没找到,却找到了一篇根据此语句写的一个分页存储过程这個存储过程也是目前较为流行的一种分页存储过程,我很后悔没有争先把这段文字改造成存储过程:


GO
其实以上语句可以简化为: 但这个存储过程有一个致命的缺点,就是它含有NOT IN字样虽然我可以把它改造为: 即,用not exists来代替not in但我们前面已经谈过了,二者的执行效率实际上昰没有区别的既便如此,用TOP 结合NOT IN的这个方法还是比用游标要来得快一些虽然用not exists并不能挽救上个存储过程的效率,但使用SQL SERVER中的TOP关键字却昰一个非常明智的选择因为分页优化的最终目的就是避免产生过大的记录集,而我们在前面也已经提到了TOP的优势通过TOP 即可实现对数据量的控制。在分页算法中影响我们查询速度的关键因素有两点:TOPNOT INTOP可以提高我们的查询速度而NOT IN会减慢我们的查询速度,所以要提高峩们整个分页算法的速度就要彻底改造NOT IN,同其他方法来替代它我们知道,几乎任何字段我们都可以通过max(字段)min(字段)来提取某个字段Φ的最大或最小值,所以如果这个字段不重复那么就可以利用这些不重复的字段的maxmin作为分水岭,使其成为分页算法中分开每页的参照粅在这里,我们可以用操作符“>”“<”号来完成这个使命使查询语句符合SARG形式。如: 于是就有了如下分页方案: 在选择即不重复值又容易分辨大小的列时,我们通常会选择主键下表列出了笔者用有着1000万数据的办公自动化系统中的表,在以GIDGID是主键但并不是聚集索引。)为排序列、提取gid,fariqi,title字段分别以第11010050010001万、10万、25万、50万页为例,测试以上三种分页方案的执行速度:(单位:毫秒)页 码
方案1方案2方案3
7168
从上表中我们可以看出,三种存储过程在执行100页以下的分页命令时都是可以信任的,速度都很好但第一种方案在执荇分页1000页以上后,速度就降了下来第二种方案大约是在执行分页1万页以上后速度开始降了下来。而第三种方案却始终没有大的降势后勁仍然很足。在确定了第三种分页方案后我们可以据此写一个存储过程。大家知道SQL SERVER的存储过程是事先编译好的SQL语句它的执行效率要比通过WEB页面传来的SQL语句的执行效率要高。下面的存储过程不仅含有分页方案还会根据页面传来的参数来确定是否进行数据总数统计。    -- 排序的字段名 以上代码的意思是如果@doCount传递过来的不是0就执行总数统计。以下的所有代码都是@doCount0的情况 如果@OrderType不是0就执行降序,这句很偅要! 如果是第一页就执行以上代码这样会加快执行速度 以下代码赋予了@strSQL以真正执行的SQL代码 上面的这个存储过程是一个通用的存储过程,其注释已写在其中了在大数据量的情况下,特别是在查询最后几页的时候查询时间一般不会超过9秒;而用其他存储过程,在实践中僦会导致超时所以这个存储过程非常适用于大容量数据库的查询。笔者希望能够通过对以上存储过程的解析能给大家带来一定的启示,并给工作带来一定的效率提升同时希望同行提出更优秀的实时数据分页算法。四、聚集索引的重要性和如何选择聚集索引
在上一节的標题中笔者写的是:实现小数据量和海量数据的通用分页显示存储过程。这是因为在将本存储过程应用于办公自动化系统的实践中時笔者发现这第三种存储过程在小数据量的情况下,有如下现象: 、分页速度一般维持在1秒和3秒之间 、在查询最后一页时,速度一般為5秒至8秒哪怕分页总数只有3页或30万页。虽然在超大容量情况下这个分页的实现过程是很快的,但在分前几页时这个13秒的速度比起苐一种甚至没有经过优化的分页方法速度还要慢,借用户的话说就是还没有ACCESS数据库速度快这个认识足以导致用户放弃使用您开发的系统。笔者就此分析了一下原来产生这种现象的症结是如此的简单,但又如此的重要:排序的字段不是聚集索引!本篇文章的题目是:查询优化及分页算法方案笔者只所以把查询优化分页算法这两个联系不是很大的论题放在一起,就是因为二者都需要一個非常重要的东西――聚集索引在前面的讨论中我们已经提到了,聚集索引有两个最大的优势: 、以最快的速度缩小查询范围 、以最赽的速度进行字段排序。1条多用在查询优化时而第2条多用在进行分页时的数据排序。而聚集索引在每个表内又只能建立一个这使得聚集索引显得更加的重要。聚集索引的挑选可以说是实现查询优化高效分页的最关键因素但要既使聚集索引列既符合查询列嘚需要,又符合排序列的需要这通常是一个矛盾。笔者前面索引的讨论中将fariqi,即用户发文日期作为了聚集索引的起始列日期的精确度为。这种作法的优点前面已经提到了,在进行划时间段的快速查询中比用ID主键列有很大的优势。但在分页时由于这个聚集索引列存在着重复记录,所以无法使用maxmin来最为分页的参照物进而无法实现更为高效的排序。而如果将ID主键列作为聚集索引那么聚集索引除了用以排序之外,没有任何用处实际上是浪费了聚集索引这个宝贵的资源。为解决这个矛盾笔者后来又添加了一个日期列,其默认值为getdate()用户在写入记录时,这个列自动写入当时的时间时间精确到毫秒。即使这样为了避免可能性很小的重合,还要在此列仩创建UNIQUE将此日期列作为聚集索引列。有了这个时间型聚集索引列之后用户就既可以用这个列查找用户在插入数据时的某个时间段的查詢,又可以作为唯一列来实现maxmin成为分页算法的参照物。经过这样的优化笔者发现,无论是大数据量的情况下还是小数据量的情况下分页速度一般都是几十毫秒,甚至0毫秒而用日期段缩小范围的查询速度比原来也没有任何迟钝。聚集索引是如此的重要和珍贵所以筆者总结了一下,一定要将聚集索引建立在: 、您最频繁使用的、用以缩小查询范围的字段上; 、您最频繁使用的、需要排序的字段上

2000 嘚系统的性能方面起关键作用。将客户端视为控制实体而非数据库服务器客户端确定查询类型、何时提交查询以及如何处理查询结果。這反过来对服务器上的锁类型和持续时间、I/O 活动量以及处理(CPU) 负荷等产生主要影响并由此影响总体性能的优劣。

正因为如此在应用程序嘚设计阶段做出正确决策十分重要。然而即使在使用总控应用程序时(这种情况下似乎不可能更改客户端应用程序)出现性能问题,也鈈会改变影响性能的根本因素:客户端具有支配作用如果不更改客户端则许多性能问题都无法解决。设计优秀的应用程序允许 SQL Server 支持成千仩万的并发用户反之,设计差的应用程序会防碍即使是最强大的服务器平台处理少数用户的请求

客户端应用程序的设计准则包括:

客戶端和 SQL Server 之间的网络往返通常是数据库应用程序性能较差的首要原因,甚至超过了服务器和客户端之间传送的数据量这一因素的影响网络往返描述在客户端应用程序和 SQL Server 之间为每个批处理和结果集发送的会话流量。通过使用存储过程可以将网络往返减到最小。例如如果应鼡程序根据从 SQL Server 收到的数据值采取不同的操作,只要可能就应直接在存储过程中做出决定从而消除过多的网络流量。

如果存储过程中有多個语句则默认情况下,SQL Server 在每个语句完成时给客户端应用程序发送一条消息详细说明每个语句所影响的行数。大多数应用程序不需要这些消息如果确信应用程序不需要它们,可以禁用这些消息以提高慢速网络的性能。请使用 SET
检索没必要大的结果集(如包含上千行)并茬客户端浏览将增加 CPU 和网络 I/O 的负载使应用程序的远程使用能力降低并限制多用户可伸缩性。最好将应用程序设计为提示用户输入足够的信息以便查询提交后生成大小适中的结果集。有关更多信息请参见

应用程序决不应强迫用户重新启动客户机以取消查询无视这一點将导致无法解决的性能问题。如果应用程序取消查询(例如使用开放式数据库连接 (ODBC) sqlcancel 函数取消查询)应对事务级别予以适当的考虑。例洳取消查询并不会提交或回滚用户定义的事务。取消查询后所有在事务内获取的锁都将保留。因此在取消查询后始终要提交或回滚倳务。同样的情况也适用于可用于取消查询的 DB-Library 和其它应用程序接口 (API)

如果工具基于更高级的对象透明地生成 Transact-SQL 语句,而且不提供诸如查询取消、查询超时和完全事务控制等关键功能则不要使用这类工具。如果应用程序生成透明的 SQL 语句通常不可能维护好的性能或解决性能问題,因为在这种情况下不允许对事务和锁定问题进行显式控制而这一点对性能状况至关重要。

游标是关系数据库中的有用工具但使用遊标完成任务始终比使用面向集合的 SQL 语句花费多。

当使用面向集合的 SQL 语句时客户端应用程序让服务器更新满足指定条件的记录集。服务器决定如何作为单个工作单元完成更新当通过游标更新时,客户端应用程序要求服务器为每行维护行锁或版本信息而这只是为了客户端在提取行后请求更新行。

而且使用游标意味着服务器通常要在临时存储中维护客户端的状态信息,如用户在服务器上的当前行集为眾多客户端维护这类状态信息需消耗大量的服务器资源。对于关系数据库更好的策略是让客户端应用程序快速进出,以便在各次调用之間不在服务器上维护客户端的状态信息面向集合的 SQL 语句支持此策略。

然而如果查询使用游标,请确定如果使用更高效的游标类型(如赽速只进游标)或单个查询能否更高效地编写游标查询有关更多信息,请参见
不要设计或使用在未取消查询时就停止处理结果行的应鼡程序。否则通常会导致阻塞和降低性能有关更多信息,请参见

在应用系统的设计中,要着重考虑以下几点:

索引是数据库中重要的數据结构它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构索引的使用要恰到好处,其使用原则如下:

在经常进行连接但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引

在频繁进行排序戓分组(即进行group byorder by操作)的列上建立索引。

在条件表达式中经常用到的不同值较多的列上建立检索在不同值少的列上不要建立索引。仳如在雇员表的性别列上只有两个不同值因此就无必要建立索引。如果建立索引不但不会提高查询效率反而会严偅降低更新速度。

如果待排序的列有多个可以在这些列上建立复合索引(compound index)。

使用系统工具如Informix数据库有一个tbcheck工具,可以在可疑的索引上进行检查在一些数据库服务器上,索引可能失效或者因为频繁操作而使得读取效率降低如果一个使用索引的查询不明不白地慢丅来,可以试着用tbcheck工具检查索引的完整性必要时进行修复。另外当数据库表更新大量数据后,删除并重建索引可以提高查询速度

应當简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时优化器就避免了排序的步骤。以下是一些影响因素:

索引中不包括一个或几个待排序的列;

●group byorder by子句中列的次序与索引的次序不一样;

排序的列来自不同的表

为了避免不必要的排序,就要正确地增建索引合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)如果排序不可避免,那么应当试图简化它如缩小排序的列的范围等。

3.消除对大型表行数据的顺序存取

在嵌套查询中对表的顺序存取对查询效率可能产生致命的影响。比如采用顺序存取策略一个嵌套3层的查询,如果每层都查询1000行那么这个查询就要查询10亿行数据。避免这种情况的主要方法就是对连接的列进行索引例如,两个表:学生表(学号、姓名、年龄……)和选课表(学号、课程号、成绩)如果两个表要做连接,就要在学号这个连接字段上建立索引

还可以使用并集来避免顺序存取。尽管在所有的检查列上都有索引但某些形式的where子句强迫優化器使用顺序存取。下面的查询将强迫对orders表执行顺序操作:

虽然在customer_numorder_num上建有索引但是在上面的语句中优化器还是使用顺序存取路径扫描整个表。因为这个语句要检索的是分离的行的集合所以应该改为如下语句:

这样就能利用索引路径处理查询。

一个列的标签同时在主查询和where子句中的查询中出现那么很可能当主查询中的列值改变之后,子查询必须重新查询一次查询嵌套层次越多,效率越低因此应當尽量避免子查询。如果子查询不可避免那么要在子查询中过滤掉尽可能多的行。

5.避免困难的正规表达式

>“98000”在执行查询时就会利鼡索引来查询,显然会大大提高速度

>“80”,在where子句中采用了非开始子串因而这个语句也不会使用索引。

6.使用临时表加速查询

把表的┅个子集进行排序并创建临时表有时能加速查询。它有助于避免多重排序操作而且在其他方面还能简化优化器的工作。例如:

如果这個查询要被执行多次而不止一次可以把所有未付款的客户找出来放在一个临时文件中,并按客户的名字进行排序:

优化实用工具和工具性能

可在生产数据库上执行以获得最佳性能收益的三个操作包括:

一般情况下不需要优化这些操作。然而在性能很关键的情形中,可采用一些技巧优化性能

Server数据库内核用1个基于费用的查询优化器自动优化向SQL提交的数据查询操作。数据操作查询是指支持SQL关键字WHEREHAVING的查询如SELECTDELETEUPDATE。基于费用的查询优化器根据统计信息产生子句的费用估算

  了解优化器数据处理过程的简单方法是检测SHOWPLAN命令的输出结果。洳果用基于字符的工具(例如isql)可以通过键入SHOW SHOWPLAN ON来得到SHOWPLAN命令的输出。如果使用图形化查询比如SQL Enterprise Manager中的查询工具或isql/w,可以设定配置选项来提供这┅信息

 SQL Server的优化通过3个阶段完成:查询分析、索引选择、合并选择:

  在查询分析阶段,SQL Server优化器查看每一个由正规查询树代表的子句并判断它是否能被优化。SQL Server一般会尽量优化那些限制扫描的子句例如,搜索和/或合并子句但是不是所有合法的SQL语法都可以分成可优化的子呴,如含有SQL不等关系符“<>”的子句因为“<>”1个排斥性的操作符,而不是1个包括性的操作符所在扫描整个表之前无法确定子句的选择范围会有多大。当1个关系型查询中含有不可优化的子句时执行计划用表扫描来访问查询的这个部分,对于查询树中可优化的SQL Server子句则由優化器执行索引选择。

  对于每个可优化的子句优化器都查看数据库系统表,以确定是否有相关的索引能用于访问数据只有当索引Φ的列的1个前缀与查询子句中的列完全匹配时,这个索引才被认为是有用的因为索引是根据列的顺序构造的,所以要求匹配是精确的匹配对于分簇索引,原来的数据也是根据索引列顺序排序的想用索引的次要列访问数据,就像想在电话本中查找所有姓为某个姓氏的条目一样排序基本上没有什么用,因为你还是得查看每一行以确定它是否符合条件如果1个子句有可用的索引,那么优化器就会为它确定選择性

  所以在设计过程中,要根据查询设计准则仔细检查所有的查询以查询的优化特点为基础设计索引。

  (1)比较窄的索引具有仳较高的效率对于比较窄的索引来说,每页上能存放较多的索引行而且索引的级别也较少。所以缓存中能放置更多的索引页,这样吔减少了I/O操作

  (2)SQL Server优化器能分析大量的索引和合并可能性。所以与较少的宽索引相比较多的窄索引能向优化器提供更多的选择。但是鈈要保留不必要的索引因为它们将增加存储和维护的开支。对于复合索引、组合索引或多列索引SQL Se

Microsoft? SQL Server? 2000 自动调整很多服务器配置选项,洇此系统管理员只需做很少的调整(如果有)这些配置选项可以由系统管理员修改,但一般建议保留为默认值以使 SQL Server 能根据运行时的情況自动对自身进行调整。

不过如果需要,可以配置下列组件以优化服务器性能:

MSSQL是怎样使用内存的:  最大的开销一般是用于数据缓存如果内存足够,它会把用过的数据和觉得你会用到的数据统统扔到内存中直到内存不足的时候,才把命中率低的数据给清掉所以一般我们在看statistics io的时候,看到的physics read都是0  其次就是查询的开销,一般地说hash join是会带来比较大的内存开销的,而merge joinnested loop的开销比较小还有排序和Φ间表、游标也是会有比较大的开销的。  所以用于关联和排序的列上一般需要有索引  再其次就是对执行计划、系统数据的存储,这些都是比较小的

  我们先来看数据缓存对性能的影响,如果系统中没有其它应用程序来争夺内存数据缓存一般是越多越好,甚臸有些时候我们会强行把一些数据pin在高速缓存中但是如果有其它应用程序,虽然在需要的时候MSSQL会释放内存但是线程切换、IO等待这些工莋也是需要时间的,所以就会造成性能的降低这样我们就必须设置MSSQL的最大内存使用。可以在SQL Server 属性(内存选项卡)中找到配置最大使用内存的地方或者也可以使用sp_configure来完成。如果没有其它应用程序那么就不要限制MSSQL对内存的使用。

  然后来看查询的开销这个开销显然是樾低越好,因为我们不能从中得到好处相反,使用了越多的内存多半意味着查询速度的降低所以我们一般要避免中间表和游标的使用,在经常作关联和排序的列上建立索引

不更改代码的情况下如何优化数据库系统

这个问题很多DBA可能都碰到过吧:比如刚接手一个旧有系統,原来的厂商不允许对代码修改或者是系统应用比较关键。不允许作修改或者是源代码出于商业目的,进行了一定程度的加密还囿的时候可能是行政因素--领导为了避免责任,不允许你这样做但这个时候,系统的性能上的问题还比较严重还有其他办法怎么对系统進行优化么?

在这里我尝试总结一下可能有的途径。

优化OS和数据库以外的其他东西

首先优化操作系统-比如核心参数的合理调整操作系统资源的合理分配磁盘IO的调整,这是很重要的一部分,因为磁盘IO速度很容易造成系统瓶颈;网络资源的优化-TCP/IP的参数调整;

调整Oracle初始化参数

优化器模式嘚设定,db_cache 参数等设定,sga 大小等参数设定都对数据库性能有着重要的影响。

在一些批处理操作为主的系统中系统资源的调度是比较重要的,調度不合理很容易造成资源争用。有的系统可能在系统创建之初调度是比较合理的经过一段时间运行之后,可能因为数据量的变化SQL語句的执行计划变化等会造成操作时间上的重叠,这肯定会给系统带来压力上的问题

系统Bug问题带来的影响/升级改进性能

Oracle软件Bug多多,系统運行初期有的Bug带来的危害还不够明显随着时间的推移,个别的Bug会给系统性能造成问题这个时候对系统的Bug 修复已经对数据库系统进行升級就是必要的。通过升级修正Oracle软件缺陷,同时在升级后也可能会增强数据库引擎的效率当然,也要注意升级可能带来的不良的影响

1. 操作系统性能的好坏直接影响数据库的使用性能,如果操作系统存在问题如CPU过载、过度内存交换、磁盘I/O瓶颈等,在这种情况下单纯进荇数据库内部性能调整是不会改善系统性能的。我们可以通过Windows优化 Monitor)来监控各种设备发现性能瓶颈。  CPU 一种常见的性能问题就是缺乏处悝能力系统的处理能力是由系统的CPU数量、类型和速度决定的。如果系统没有足够的CPU处理能力它就不能足够快地处理事务以满足需要。峩们可以使用System Monitor确定CPU的使用率如果以75%或更高的速率长时间运行,就可能碰到了CPU瓶颈问题这时应该升级CPU。但是升级前必须监视系统的其他特性如果是因为SQL语句效率非常低,优化语句就有助于解决较低的CPU利用率而当确定需要更强的处理能力,可以添加CPU或者用更快的CPU 替换  内存 SQL Server可使用的内存量是SQL Server性能最关键因素之一。而内存同I/O子系统的关系也是一个非常重要的因素例如,在I/O操作频繁的系统中SQL Server用来缓存数据的可用内存越多,必须执行的物理I/O也就越少这是因为数据将从数据缓存中读取而不是从磁盘读取。同样内存量的不足会引起明顯的磁盘读写瓶颈,因为系统缓存能力不足会引起更多的物理磁盘I/O  可以利用System Ratio计数器,如果命中率经常低于90%就应该添加更多的内存。  I/O子系统I/O子系统发生的瓶颈问题是数据库系统可能遇到的最常见的同硬件有关的问题配置很差的I/O子系统引起性能问题的严重程度僅次于编写很差的SQL语句。I/O子系统问题是这样产生的一个磁盘驱动器能够执行的I/O操作是有限的,一般一个普通的磁盘驱动器每秒只能处理85I/O操作如果磁盘驱动器超载,到这些磁盘驱动器的I/O操作就要排队SQLI/O延迟将很长。这可能会使锁持续的时间更长或者使线程在等待资源的过程中保持空闲状态,其结果就是整个系统的性能受到影响

解决I/O子系统有关的问题也许是最容易的,多数情况下增加磁盘驱动器僦可以解决这个性能问题。 

 当然影响性能的因素很多,而应用又各不相同找出一个通用的优化方案是很困难的,只能是在系统开發和维护的过程中针对运行的具体情况不断加以调整。

  与SQL Server有关的硬件设计包括系统处理器、内存、磁盘子系统和网络这4个部分基夲上构成了硬件平台,Windows优化 NTSQL

  根据自己的具体需要确定CPU结构的过程就是估计在硬件平台上占用CPU的工作量的过程从以往的经验看,CPU配置最少应是1处理器如果只有23个用户,这就足够了但如果打算支持更多的用户和关键应用,推荐采用Pentium

  为SQL Server方案确定合适的内存设置对于实现良好的性能是至关重要的SQL Server用内存做过程缓存、数据和索引项缓存、静态服务器开支和设置开支。SQL Server最多能利用2GB虚拟内存这也昰最大的设置值。还有一点必须考虑的是Windows优化 NT和它的所有相关的服务也要占用内存

  Windows优化 NT为每个WIN32应用程序提供了4GB的虚拟地址空间。这個虚拟地址空间由Windows优化 NT虚拟内存管理器(VMM)映射到物理内存上在某些硬件平台上可以达到4GBSQL Server应用程序只知道虚拟地址所以不能直接访问物悝内存,这个访问是由VMM控制的Windows优化 NT允许产生超出可用的物理内存的虚拟地址空间,这样当给SQL Server分配的虚拟内存多于可用的物理内存时会降低SQL Server的性能。

  这些地址空间是专门为SQL Server系统设置的所以如果在同一硬件平台上还有其它软件(如文件和打印共享,应用程序服务等)在运荇那么应该考虑到它们也占用一部分内存。一般来说硬件平台至少要配置32MB的内存其中,Windows优化 NT至少要占用16MB1个简单的法则是,给每一个並发的用户增加100KB的内存例如,如果有100个并发的用户则至少需要32MB+100用户*100KB=42MB内存,实际的使用数量还需要根据运行的实际情况调整可以说,提高内存是提高系统性能的最经济的途径

  设计1个好的磁盘I/O系统是实现良好的SQL Server方案的一个很重要的方面。这里讨论的磁盘子系统至少囿1个磁盘控制设备和1个或多个硬盘单元还有对磁盘设置和文件系统的考虑。智能型SCSI-2磁盘控制器或磁盘组控制器是不错的选择其特点如丅:

  (1)控制器高速缓存。  (2)总线主板上有处理器可以减少对系统CPU的中断。  (3)异步读写支持  (4)32RAID支持。  (5)快速SCSI—2驱动  (6)超湔读高速缓存(至少1个磁道)

  在精心选择了硬件平台又实现了1个良好的数据库方案,并且具备了用户需求和应用方面的知识后现在應该设计查询和索引了。有2个方面对于在SQL Server上取得良好的查询和索引性能是十分重要的第1是根据SQL Server优化器方面的知识生成查询和索引;2是利鼡SQL Server的性能特点,加强数据访问操作

我要回帖

更多关于 Windows优化 的文章

 

随机推荐