K3 wise erp 数据库索引性能优化解决方案

K3 wise erp 数据库索引性能优化解决方案
K3 wise erp 数据库索引性能优化解决方案

K3系统数据库索引性能优化解决方案(具体应用篇)

--重建索引速度较慢,请在系统空闲时间进行

DBCC DBREINDEX(t_icitem)

DBCC DBREINDEX(t_item)

DBCC DBREINDEX(t_itemclass)

DBCC DBREINDEX(t_itemright)

DBCC DBREINDEX(t_user)

DBCC DBREINDEX(t_group)

go

if not exists(select 1 from sysindexes where name='ix_group_fgroupid')

create index ix_group_fgroupid on t_group(fgroupid)

go

if not exists(select 1 from sysindexes where name='ix_itemright_ftypeid')

create index ix_itemright_ftypeid on t_itemright(ftypeid)

go

1 SQL Server调整

当用户使用K3系统一段时间以后,发现系统的响应时间越来越长。这种情形往往是由于账套数据库缺乏维护引起的。缺乏维护的数据库会存在过多地碎片、过期的统计、隐含着可能的错误查询结果的数据库的逻辑和物理的不一致性,这些都会直接影响系统的性能。这里介绍解决上述账套数据库性能问题常用的方法。

1.1 使用DBCC语句发现和解决上述问题。

DBCC: 数据库一致性检查器。

打开SQL 查询分析器,执行如下语句。

u DBCC SHOWCONTIG 显示指定表的数据和索引的有关数据碎片的信息DBCC SHOWCONTIG(表名[,索引名])

在有大的改动的表,引入数据的表,或者引起低效查询的表上使用该语句。例:DBCC SHOWCONTIG(’T_ITEM’)

u DBCC DBREINDEX 重建指定数据库中表的一个或多个索引。

例1:重建某个索引

DBCC DBREINDEX ('T_ITEM', uk_item2, 80)

例2:重建所有索引

DBCC DBREINDEX ('T_ITEM',’’,80)

u DBCC SHOW_STATISTICS 显示指定表上的指定目标(例如一个索引名称))的当前分布统计信息。这些统计信息是被SQL Server查询优化器使用的DBCC SHOW_STATISTICS(表名,目标)

例:DBCC SHOW_STATISTICs('t_item','pk_item')

u sp_updatestats & UPDATE STATISTICS 更新统计信息;sp_updatestats 对当前数据库中所有用户定义的表运行UPDATE STATISTICS.

使用UPDATE STATISTICS 语句的时机:在一个空表上创建一个索引,然后在以后应用它。执行TRUNCATE TABLE语句,然后在以后重新应用该表。通过使用FULLSCAN或SAMPLE选项请求明细的索引统计信息。

例1. UPDATE STATISTICS T_ITEM

例2. UPDATE STATISTICS T_ITEM(PK_ITEM)

例3. USE AIS20011203150410

EXEC sp_updatestats

u DBCC CHECKTABLE 检查指定表或索引视图的数据、索引及text 、ntext 和image 页的完整性。如果你相信一个指定的表可能被破坏了,这条命令非常有用。

u DBCC CHECKDB 检查指定数据库中的所有对象的分配和结构完整性。这条命令发现并修复数据库地址分配和表内部的全部错误。实际上,CHECKDB验证数据库内部一切事物的完整性,但是,DBCC CHECKDB是一个耗费CPU和磁盘资源的操作,每个需要检查的数据都必须首先从磁盘中读出到内存中。而且,DBCC CHECKDB 使用tempdb进行排序。要获得较高的DBCC性能,推荐在下面的情况下运行DBCC:

l 在系统使用率较低的情况下运行CHECKDB;

l 确信当前没有执行其他磁盘I/O操作,如磁盘备份操作;

l 将tempdb放在另一个磁盘系统上,或者放在一个快速磁盘子系统上;

l 为tempdb提供足够的空间,运行DBCC带上参数ESTIMATE ONLY(显示执行DBCC CHECKDB 操作所需tempdb 空间的数量),估计tempdb需要多少磁盘空间;

l 避免运行消耗大量CPU时间的查询和批处理;

l 在DBCC命令运行时,减少事物活动;

l 使用NO_INFOMSGS选项(压缩使用空间使用的信息和报告)减少处理和tempdb使用率。

例:DBCC CHECKDB ('AIS20011203150410') WITH NO_INFOMSGS,ESTIMATEONLY

u DBCC SQLPERF 提供有关所有数据库中的事务日志空间使用情况的统计信息。日志文件的闲余空间的减少,会降低系统的性能。系统会在备份时日志截断日志文件,所以要求用户要制定一份良好的备份方案。

例:DBCC SQLPERF ( LOGSPACE )

1.2 使用数据库维护计划

使用数据库维护计划器是一种标准且方便的可对多个账套数据库同时设置维护任务维护模式。下面介绍其建立方法:

本方案所介绍的数据库维护计划侧重于数据库的优化,即性能的提高。

1) 打开Enterprise Manager,展开服务器,展开管理,然后单击数据库维护计划。从操作(Action)中选择新建维护计划,可以看到图4.1所示的欢迎屏幕,单击

下一步按钮。

2) 选择数据库,选择K3账套所在的数据库(可选一个或多个)。单击下一步按钮。

图2 选择数据库

3) 更新数据库优化信息。选择重新组织数据和索引页,选择使用原有可用空间重新组织页面。选择当增长超过50MB时,从数据库文件中删除未使用空间,收缩后保留的可用空间为10%的数据空间。单击下一步按钮。

图3更新数据库优化信息

4) 检查数据库完整性。选择检查数据库完整性,包含索引以及尝试修复所有小问题。单击下一步。

图4 检查数据库完整性

5) 指定数据库备份计划,备份在优化方案中暂不考虑,跳过,单击下一步。

图5数据库备份计划

6) 指定事务日志备份计划在优化方案中暂不考虑,跳过,单击下一步。

图6指定事物备份计划

7) 生成报表。选择将报表写入目录中的文本文件,选择删除早于4周的报表文件。或者选择将电子邮件报表发送到操作员,然后花时间阅读这个报表,看看数据库中是否有任何需要注意的问题。单击下一步。

图7生成报表

8) 维护计划历史记录。

SQL Server每次运行时保持维护计划的历史。可以浏览这个历史,看看操作中何时遇到故障,然后确定故障原因。如果只有单台机器,则要在本地服务器存放历史纪录,但如果网络中又多台机器,则要将历史纪录存放在中央服务器中,以便从各台机器上方便的访问。下面选择缺省在本地存放1000行历史纪录。单击下一步。

图8 维护历史纪录

9) 完成数据库维护计划向导。用于命名和检查具体工作,在计划名中输入:K3账套数据库维护计划。单击完成按钮生成计划。

图9 完成数据库维护计划向导

1.3 发现死锁和消除死锁

死锁形成的原因是不同的,有的死锁系统可以自动地侦测和消除而另外一些则需要管理员调整请求

死锁发生在两个或多个进程同时等待被其中一个进程保留着的锁。该进程将不会释放它保留的锁直到它获得被其它进程保留的资源,反过来也一样。当一个死锁被被确认以后,SQL Server通过自动选择可以立即打断死锁的线程来结束死锁。

许多阻塞的问题发生在由于一个进程保留锁过长时间,引起一系列被阻塞的进程等待其它进程释放锁。SQL Server不能识别阻塞锁并自动地解决它们,所以必须监控阻塞锁的存在并手工消除它。

在一个应用中建立一个锁的超时设置是一个防止阻塞锁的方法。这允许应用监控阻塞锁并回滚进程而不是不确定地等待或阻塞语句的重提交。

下面,介绍手工消除死锁的方法:

1) 系统长时间没有响应,可以在SQL查询分析器中执行系统存储过程sp_lock 和sp_who ,如图所示,spid 57正在等待资源。

Spid :系统进程ID

执行命令:sp_who 57 可以得到关联该进程和锁的用户的登录名称,主机名称和状态等信息。

图1. 运行sp_lock显示的锁信息

2) 转到SQL Server Enterprise Manager,展开管理,展开当前活动,展开锁/ 进ID ,如图所示,spid57被spid56阻塞。

图2. 显示锁的阻塞情况

3) 双击spid56,然后单击取消进程(Kill Process)。

4) spid57阻塞解除。

2 硬件调整

硬件调整,是为K3系统的正常运行要求的工作量提供足够的硬件资源的行动。要调整系统的硬件,就要决定可以为K3系统分配那些资源以改进其性能,这些

资源包括附加的内存、CPU、I/O资源或所有这些资源的组合。调整系统性能的工作主要涉及决定应该增加哪种资源,以及增加多少资源。

硬件调整是非常重要的,因为许多典型的性能问题是由不充足的或配置失当的硬件组件导致的。I/O子系统是一个数据库调整的关键性部分。通过提供足够的CPU、内存与I/O资源。可以避免许多性能问题。

通过监控相关的计数器,可以及时发现和解决引起系统性能降低的硬件问题。

2.1 控制内存的使用

SQL Server 要求内存是基于静态内存的需要:一是它自己的程序代码和内部数据结构,例如内核的工作负载,打开对象,锁。二是数据高速缓存。

基于有效的系统资源和这些资源的竞争需要, SQL Server动态地获得和释放数据高速缓存。如果SQL Server的数据高速缓存需要更多的内存,它查询操作系统检查是否有物理内存可以利用。如果有,SQL Server在数据高速

存中使用它并且在内存中保留先前读到的数据。

为阻止Windows 2000页面调度,SQL Server依赖Server activity增减数据高速缓存以保留4MB~10MB剩余物理内存。对SQL Server不足的内存分配或使用会引起数据连续地从硬盘上而不是高速缓存上读取,这将降低系统的性能。

请观察以下与内存有关的计数器,以便及时发现和解决内存上的问题。

使用工具:性能监视器

监控内存和分页的使用

对象: 计数器

描述

指导

Memory: Available Bytes

监控被进程执行使用的有效字节数。

(可用物理内存量)

这个计数器应该总是大于5000KB;低值显示物理内存整体的缺乏和需要提高。

推荐值:大于4MB

Memory: Page/sec

为了访问不在内存中的页而读取或写入磁盘的总页数。

该计数器应该从不持续大于零.如果值持续大于零,Windows 2000操作系统正在使用页面调度来填充内存.

推荐值:小于5

Process: Page Faults/sec/SQL Server Instance

缺页/秒

处理器中的Page Faults的计数值。当进程所引用的虚拟内存页不在其主内存的工作集中时,将发生页错误。如果某一页已在主内存中(位与备用列表内),或者它正被共享此页的其他进程使用,Page Fault 将不会导致系统从磁盘调入该页。

这个计数器的高值表明过多的页面调度和磁盘压力,检查是否是SQL Server 或其他的进程引起过多的页面调度。

隔离SQL Server 使用的内存

Process: Working Set/SQL Server Instance

监控用于SQL Server的一个实例的SQL Server进程的内存的

数量。

这个计数器应该大于5000KB。当这个计数器低于5000KB,没有更多的内存可供SQL Server 使用。

SQL Server: Buffer Manager: Buffer Cache Hit Ratio

高速缓存命中率

监控高速缓存中不需从硬盘中读取的页的百分率,。不用区分用于高速缓存的是物理内存还是页面调度内存。

这个计数器应该大于90%,因为它显示的是发现在内存中的页的数量。

SQL Server: Buffer Manger: Total Pages

监控高速缓存中页的总数量,包括数据库,free和来自其他进程的stolen页。

低值显示连续的磁盘输入输出或压力.考虑增加更多的内存.

SQL Server: Memory Manager Total Server Memory

监控服务器正在使用的动态内存的总的数量。

如果该计数器与可用的物理内存比较持续高,则需加更多的内存。

2.2 监控线程和处理器的使用

优化处理器性能是输出量和响应时间之间的一种平衡。

处理器的性能

当你检查处理器的使用,考虑SQL Server实例正在做的工作的类型。如果SQL Server正在做大量的计算,例如包含集合的查询或绑定内存这种不需要磁盘输入输出的查询,100%的处理器时间可能被使用。

对于多处理器的系统,你需要监控每个处理器的这个计数器的分离的实例。确定所有处理器的平均值,可使

计数器:System:% Total Processor Time 。

线程

每个SQL Server的实例都是一个独立的操作系统进程,SQL Server2000的实例使用Windows线程,有时是纤程

去有效的管理并发的任务。

1) 一个进程是一个应用的实例,例如SQL Server并且能有一个或多个任务。

2) 一个线程是进程任务的一种机制,并且被用来计划处理器的时间。

当一个线程处于等待一个操作(例如读写磁盘)完成的空闲期时,Windows 2000操作系统通过转换线程来最大化处理器的使用。线程间的转换叫做context switching. 每个SQL Server的实例用户连接的一个线程池,池中的线程被叫做工作线程。

当Processor: %Processor Time 持续接近100%并且System: Processor Queue Length 显示更多的应用的进程正在等待处理器,或者当System: Context Switches/Sec 较高。显示出现了系统瓶颈。当Processor:% Processor Time 接近100%并且System: Context Switches/Sec 接近8000,考虑更快的处理器,附加的

处理器或者转换到使用纤程。

请观察以下与内存有关的计数器,以便及时发现和解决处理器上的问题。

使用工具:Windows 性能监视器

对象: 计数器

描述

指导

Processor: %Processor Time

以处理器运行非空闲线程所经历时间的百分比表示。它被视为用于处理有效工作的时间比。每一个处理器在空闲时将会指定一个空闲线程来消耗未被其他线程使用的处理器时间段。

这个计数器应该低于90%,如果这个计数器较高,应降低工作负荷,提高工作效率或者或加大处理器的能力。

System: Context Switches/sec

监控处理器每秒在线程间转换的次数。

在一个多处理器的计算机上,如果这个计数器达到8000,并且Processor:% Processor Time计数器超过90%,考虑使用SQL Server fiber scheduling.

System: Processor Queue Length

监控等待进程时间的线程的数目

这个计数器不应该持续大于2。如果这个计数器持续大于2,降低工作负荷,提高工作负荷的效率,或者增加处理器的能力,在多处理器的系统中可以增加处理器。

Processor: % Privileged Time

在“特权模式”下处理器运行非空闲线程所经历时间的百分比。Windows NT服务层,执行体子程序及Windows NT内核都是在“特权方式”下运行。

如果处理器的大部分时间被用来做系统内核命令,并且物理硬盘的计数器较高,考虑提高硬盘输入输出子系统的性能。

Processor: %User Time

在“用户模式”下处理器运行非空闲线程所经历时间的百分比。所有应用程序码及子系统码都在“用户模式“下运行。

这个能确定其它进程或应用正在执行或阻止SQL Server操作。

2.3 监控硬盘输入输出

SQL Server 使用Windows 2000 I/O calls 执行磁盘的读写。SQL Server管理何时和如何执行磁盘读写,但依赖Windows执行底层的输入输出操作。I/O子系统包括系统总线,磁盘控制卡,磁盘,磁带驱动器,CD-ROM驱动器和许多其它的I/O 设备。磁盘经常是系统的最大的瓶颈。

监控硬盘输入输出将帮助你确定读页和写页是否超出硬盘子系统的能力。一个忙碌的硬盘子系统也可以显示不足的内存所引起的过多的页面调度输入输出。

下面的表描述了优化对象计数器,你可以用来监控你的硬盘子系统的性能。

使用工具:Windows 性能监视器

对象:计数器

描述

指导

PhysicalDisk: %Disk Time

所选的驱动器忙于处理读取或写入请求作服务所花费时间的百分比。

这个计数器应当持续低于90%。

推荐值:小于50%

PhysicalDisk:Avg.Disk Queue Length

指在采样间隔期内,对所选磁盘的读写操作被排入队列的平均次数。

这个计数器应该不超过中心值的两倍。

PhysicalDisk:Disk Read/sec

读取磁盘的速度

这个计数器应该续低于硬盘子系统的能力。

PhysicalDisk: Disk Writes/sec

写入磁盘的速度

这个计数器应持续低于硬盘子系统的能力。

如果这些硬盘计数器显示你的硬盘正在超负荷运行,考虑:

1. 通过使用一个更快的硬盘,提高硬盘输入输出能力

2. 把一些文件转移到一个附加硬盘或服务器上

3. 增加一个硬盘阵列

4. 提高硬盘的数量有助于减少硬盘的压力。

SQL SERVER中一些常见性能问题的总结

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引。

2.应尽量避免在where 子句中对字段进行null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num is null

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0

3.应尽量避免在where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

4.应尽量避免在where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num=10 or num=20

可以这样查询:

select id from t where num=10

union all

select id from t where num=20

5.in 和not in 也要慎用,否则会导致全表扫描,如:

select id from t where num in(1,2,3)

对于连续的数值,能用between 就不要用in 了:

select id from t where num between 1 and 3

6.下面的查询也将导致全表扫描:

select id from t where name like '%abc%'

若要提高效率,可以考虑全文检索。

7.如果在where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运

行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将

进行全表扫描:

select id from t where num=@num

可以改为强制查询使用索引:

select id from t with(index(索引名)) where num=@num

8.应尽量避免在where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:

select id from t where num/2=100

应改为:

select id from t where num=100*2

9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:

select id from t where substring(name,1,3)='abc'--name以abc开头的id

select id from t where datediff(day,createdate,'2005-11-30')=0--‘2005-11-30’生成的id

应改为:

select id from t where name like 'abc%'

select id from t where createdate>='2005-11-30' and createdate<'2005-12-1'

10.不要在where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

11.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。

12.不要写一些没有意义的查询,如需要生成一个空表结构:

select col1,col2 into #t from t where 1=0

这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:

create table #t(...)

13.很多时候用exists 代替in 是一个好的选择:

select num from a where num in(select num from b)

用下面的语句替换:

select num from a where exists(select 1 from b where num=a.num)

14.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。

15.索引并不是越多越好,索引固然可以提高相应的select 的效率,但同时也降低了insert 及update 的效率,因为insert 或update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。

16.应尽可能的避免更新clustered 索引数据列,因为clustered 索引数据列的顺

序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新clustered 索引数据列,那么需要考虑是否应将该索引建为clustered 索引。

17.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。18.尽可能的使用varchar/nvarchar 代替char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

19.任何地方都不要使用select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

20.尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。

21.避免频繁创建和删除临时表,以减少系统表资源的消耗。

22.临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。

23.在新建临时表时,如果一次性插入数据量很大,那么可以使用select into 代替create table,避免造成大量log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。

24.如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncate table ,然后drop table ,这样可以避免系统表的较长时间锁定。

25.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。

26.使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。

27.与临时表一样,游标并不是不可使用。对小型数据集使用FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。

28.在所有的存储过程和触发器的开始处设置SET NOCOUNT ON ,在结束时设置

SET NOCOUNT OFF 。无需在执行存储过程和触发器的每个语句后向客户端发送

DONE_IN_PROC 消息。

29.尽量避免大事务操作,提高系统并发能力。

30.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

具体的SQL语句在很多情况下需要结合实际的应用情况来写,这里不作叙述。--Windows 2003支持4G内存

[boot loader]

timeout=30

default=multi(0)disk(0)rdisk(0)partition(2)/WINDOWS

[operating systems]

multi(0)disk(0)rdisk(0)partition(2)/WINDOWS="Windows Server 2003, Standard" /fastdetect /3GB

将Boot.ini文件加好参数:

/fastdetect /3GB

对数据库中一些数据量较大的表(如T_Voucher,T_VoucherEntry,T_Balance, IcStockBill,IcStockBillEntry等)可以在SQL SERVER中制作一个作业在系统空闲时

定时进行重建索引,例如“dbcc dbreindex('icstockbill');dbcc dbreindex('icstockbillEntry')”2个sql进行出入库单据表的专门索引优化。

安全监测管理数据平台

安全监测管理数据平台 第一部分系统简介 一、系统介绍 远程监控系统组态平台可将数据、图像、声音共一个平台集中监控,C/S+B/S 结构,可同时采用RS485技术及LONWORKS技术等多种技术,该组态平台软件可用于机房集中监控、变电站远程监控、楼宇控制、动力环境集中监控、安全防范监控、智能小区监控管理、智能大厦监控管理、工业控制、远程数据图像声音监控,已在海关、电力、保险、银行、政府机关、工厂、电信及移动等各行业大量使用。 整个监控系统均为模块化结构,组建十分灵活,扩展十分方便。可实现机房设备运行管理的无人值守,极大的提高了资源利用率和设备运行管理水平。二、系统主要特点 ◆系统采用分布集中监控方式,适合多层多级部门建立分布集中管理模式。 ◆报警方式包括屏幕报警、电话语音报警、modem语音报警、短信息及电子邮件. ◆强大的报警处理功能。可区分多级的报警级别,报警事件发生时系统自动按事件级别排 队报警,显示,处理,并将画面切换报警画面。 ◆系统支持各式各样的UPS、空调、电量仪、门禁、消防监控主机等设备直接监控,对新 设备新通讯协议的监控不需编程。 ◆界面:令操作人员一目了然。参数实时动态显示,界面完全汉化,场地布局,设备照片 或图片直接显示屏幕上,场景逼真,鼠标控制,操作简单。

第二部分服务器操作说明 一、启动运行服务端 A、运行“安装目录:\“:集中监控系统\服务端”目录下的“SERVER.EXE”. B、“开始”-》“程序”-》“集中监控系统”-》“监控服务器”。 C、桌面上点击“集中监控系统服务端”。 以上三种方式均可运行监控系统服务端程序,运行后界面如下: 用户名:登录系统的用户名称。系统默认:admin。 密码:此用户的密码,系统默认为空密码。 二、系统菜单说明 1)日常操作 启动:启动数据采集。 停止:停止数据采集。 退出:退出本系统。 2)系统配置 时间调度设置报警时间段及拨打报警电话、发送报警短信及报警EMAIL的时间调度。

如何优化数据库,提高查询效率

龙源期刊网 https://www.360docs.net/doc/e95703054.html, 如何优化数据库,提高查询效率 作者:代鸿彬 来源:《学习与科普》2019年第10期 摘要:随着信息时代的到来,生活和工作当中已经无法避免的需要和计算机打交道,和 计算机打交道的同时就必须要用到数据库。数据库系统是计算机当中的一项重要系统,储存在用户的关键信息,不仅对个人影响很大,同时对企事业单位也有着重要影响。 关键词:信息时代;数据库;索引 数据库是信息的载体也是数据的最佳表现形式,它的共享性导致了数据会被大量的搜索查询,为了提高查询的效率,就不得不对数据库进行优化。 一、利用索引进行优化。 索引是数据库的重要组成部分,也是使用者根据需要进行查询最直接的方法,优化索引可以提高查询的效率。当前的数据库当中大部分还是使用国际商业机器公司以前的索引顺序存取方法,对于用户来说肯定会选择方便、快捷的索引方式,怎么方便怎么来。在建立索引的时候针对不同的内容,需要建立不同的连接方式,但是随着用户的增多,查询内容和方向的多元化,这就造成了在实际工作当中经常会有使用频率很少的索引出现,甚至也会出现没有查询所需的索引,这种情况可以通过查询优化器进行自动生成的索引进行查询。对于使用频率较为频繁的列,需要对其进行排序或者分组的列上建立索引时,要优化索引提高效率,对于使用频率很少的列可以不建立索引。 二、简化排序进行优化。 对于部分企事业单位需要排序的内容很多时,就要使用大型数据表来满足查询需求,但是大型数据表涉及的内容很多,为了避免出现重复排序的现象需要对数据表进行简化。在大型数据表当中有一部分的内容可以自动进行排序的次序输出,这时就可以直接利用查询优化器进行优化,将复杂的排序简单化,从而提高索引查询效率。需要排序的列对索引优化影响较大,就像语言当中的ORDER BY 或者GROUP BY句子当中的列次序和索引当中的列次序基本是不同的,但是排序的列可通过表的不同形式表现出来。通过简化排序避免了重复的排序,并且将数据库进行了合理的合并。如果不进行简化排序,就需要将排序的范围进行缩小简化,从而提高查询使用的效率。 三、大型表行数据库存取的合理消除。 数据库系统的存储量是有上限的,所有的索引内容都占有数据库空间,尤其是大型数据表占有的空间更大,将会造成索引时间变长。但是大型表行数据有些内容是不必要的,在进行索引查詢时,数据表当中的存取顺序对查询的效率有直接的影响。例如需要采用存取策略时,通

大数据库优化(SQLServer)

SQL SERVER性能优化综述 近期因工作需要,希望比较全面的总结下SQL SERVER数据库性能优化相关的注意事项,在 网上搜索了一下,发现很多文章,有的都列出了上百条,但是仔细看发现,有很多似是而非或 者过时(可能对SQL SERVER6.5以前的版本或者ORACLE是适用的)的信息,只好自己根据以 前的经验和测试结果进行总结了。 我始终认为,一个系统的性能的提高,不单单是试运行或者维护阶段的性能调优的任务,也不单单是开发阶段的事情,而是在整个软件生命周期都需要注意,进行有效工作才能达到的。所以我希望按照软件生命周期的不同阶段来总结数据库性能优化相关的注意事项。 一、分析阶段 一般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性、可用性、可靠性、安全性需求往往吸引了我们大部分的注意力,但是,我们必须注意,性能是很重要的非功能 性需求,必须根据系统的特点确定其实时性需求、响应时间的需求、硬件的配置等。最好能 有各种需求的量化的指标。 另一方面,在分析阶段应该根据各种需求区分出系统的类型,大的方面,区分是OLTP(联机事务处理系统)和OLAP(联机分析处理系统)。 二、设计阶段 设计阶段可以说是以后系统性能的关键阶段,在这个阶段,有一个关系到以后几乎所有性能 调优的过程—数据库设计。 在数据库设计完成后,可以进行初步的索引设计,好的索引设计可以指导编码阶段写出高效 率的代码,为整个系统的性能打下良好的基础。 以下是性能要求设计阶段需要注意的: 1、数据库逻辑设计的规范化 数据库逻辑设计的规范化就是我们一般所说的范式,我们可以这样来简单理解范式: 第1规范:没有重复的组或多值的列,这是数据库设计的最低要求。 第2规范: 每个非关键字段必须依赖于主关键字,不能依赖于一个组合式主关键字的某些组 成部分。消除部分依赖,大部分情况下,数据库设计都应该达到第二范式。 第3规范: 一个非关键字段不能依赖于另一个非关键字段。消除传递依赖,达到第三范式应该是系统中大部分表的要求,除非一些特殊作用的表。 更高的范式要求这里就不再作介绍了,个人认为,如果全部达到第二范式,大部分达到第三

OracleSQL性能优化方法

OracleSQL性能优化方法 Oracle性能优化方法(SQL篇) (1) 1综述 (2) 2表分区的应用 (2) 3访咨询Table的方式 (3) 4共享SQL语句 (3) 5选择最有效率的表名顺序 (5) 6WHERE子句中的连接顺序. (6) 7SELECT子句中幸免使用’*’ (6) 8减少访咨询数据库的次数 (6) 9使用DECODE函数来减少处理时刻 (7) 10整合简单,无关联的数据库访咨询 (8) 11删除重复记录 (8) 12用TRUNCATE替代DELETE (9) 13尽量多使用COMMIT (9) 14运算记录条数 (9) 15用Where子句替换HA VING子句 (9) 16减少对表的查询 (10) 17通过内部函数提高SQL效率 (11) 18使用表的不名(Alias) (12) 19用EXISTS替代IN (12) 20用NOT EXISTS替代NOT IN (13) 21识不低效执行的SQL语句 (13) 22使用TKPROF 工具来查询SQL性能状态 (14) 23用EXPLAIN PLAN 分析SQL语句 (14) 24实时批量的处理 (16)

1综述 ORACLE数据库的性能调整是个重要,却又有难度的话题,如何有效地进行调整,需要通过反反复复的过程。在数据库建立时,就能依照顾用的需要合理设计分配表空间以及储备参数、内存使用初始化参数,对以后的数据库性能有专门大的益处,建立好后,又需要在应用中不断进行应用程序的优化和调整,这需要在大量的实践工作中不断地积存体会,从而更好地进行数据库的调优。 数据库性能调优的方法 ●调整内存 ●调整I/O ●调整资源的争用咨询题 ●调整操作系统参数 ●调整数据库的设计 ●调整应用程序 本文针对应用程序的调整,来讲明对数据库性能如何进行优化。 2表分区的应用 关于海量数据的表,能够考虑建立分区以提高操作效率。建立分区一样以关键字为分区的标志,也能够以其他字段作为分区的标志,但效率不如关键字高。建立分区的语句在建表时能够进行讲明: create table TABLENAME() partition by range (PutOutNo) (partition PART1 values lessthan (200312319999) partition PART2 values lessthan (200412319999) 。。。。。。 如此,在进行大部分数据查询,数据更新和数据插入时,Oracle自动判定操作应该在哪个分区进行,幸免了整表操作,提高了执行的效率

数据库性能优化基础步骤

1性能优化基本步骤 1.1定位跟踪耗费资源较多的SQL语句步骤 1.1.1 通过SQL查询 (1): 查询出最耗费资源的SQL语句 select t1.SID, t1.SERIAL#, tt.HASH_VALUE, tt.ADDRESS, tt.BUFFER_GETS, --读内存次数 tt.DISK_READS, --磁盘物理读次数 tt.EXECUTIONS, --语句的执行次数 tt.BUFFER_GETS / tt.EXECUTIONS, --平均读内存次数 tt.SQL_FULLTEXT from v$sqlareatt, v$session t1 where (tt.BUFFER_GETS>100000 or tt.DISK_READS>100000) and tt.HASH_VALUE = t1.SQL_HASH_VALUE and tt.ADDRESS = t1.SQL_ADDRESS and t1.STATUS = 'ACTIVE' orderby tt.BUFFER_GETS desc (2):根据客户端程序发出的SQL来定位需要跟踪的session select s.sid sid, s.SERIAL# "serial#", https://www.360docs.net/doc/e95703054.html,ername, s.machine, s.program, s.server, s.LOGON_TIME from v$session s 1.1.2 通过Oracle提供的SQL TRACE进行SQL跟踪 (1):跟踪前设定相应参数 1.查询得到需要跟踪的session 2.打开时间开关

Show parameter timed_statistics alter session set timed_statistics=true; execsys.dbms_system.set_bool_param_in_session(sid => 8,serial# => 3,parnam => 'timed_statistics',bval => true); 3.设置跟踪文件存放位置 Show parameter user_dump_dest alter system set user_dump_dest='c:\temp'; (2):启动跟踪功能并让系统运行一段时间 alter session set sql_trace=true; execsys.dbms_system.set_sql_trace_in_session(8, 3, true); (3):关闭跟踪功能 alter session set sql_trace=false; execsys.dbms_system.set_sql_trace_in_session(8, 3, false); (4):格式化跟踪数据文件,并分析跟踪结果文件 tkprof dsdb2_ora_18468.trc dsdb2_trace.txt EXPLAIN=SCOTT/TIGER tkprof各参数含义: ' traced_file ' 指定输入文件,即oracle产生的trace文件 'formatted_file'指定输出文件,即我们想得到的易于理解的格式化文件 'EXPLAIN' 利用哪个用户对trace文件中的sql进行分析得到该sql语句的执行计划1.2查看分析执行计划 1.2.1查看执行计划 (1):Sqlplus中可按F5查看执行计划 (2):使用执行计划表进行查看 使用语句将SQL语句的执行计划装入plan_table表,然后进行分析查看explainplansetstatement_id = 'dd'into plan_table for select t.type_name,t.source_value,t.standard_value from ODS_STD_COMP t,ODS_STD_COMP_BAK t1 where t.system_id = t1.system_id and t.type = t1.type and t.source_value = t1.source_value (3):示例演示 1.让ORALCE自动选择最优的执行计划,不人为干预 explainplansetstatement_id = 'dd'into plan_table for select t.type_name,t.source_value,t.standard_value from ODS_STD_COMP t,ODS_STD_COMP_BAK t1 where t.system_id = t1.system_id and t.type = t1.type and t.source_value = t1.source_value

( O管理)ORACLESL性能优化(内部培训资料)

(O管理)ORACLESL性能优化(内部培训资料)

ORACLESQL性能优化系列(一) 1.选用适合的ORACLE优化器 ORACLE的优化器共有3种: a.RULE(基于规则) b.COST(基于成本) c.CHOOSE(选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS.你当然也在SQL句级或是会话(session)级对其进行覆盖. 为了使用基于成本的优化器(CBO,Cost-BasedOptimizer),你必须经常运行analyze命令,以增加数据库中的对象统计信息(objectstatistics)的准确性. 如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关.如果table已经被analyze过,优化器模式将自动成为CBO,反之,数据库将采用RULE形式的优化器. 在缺省情况下,ORACLE采用CHOOSE优化器,为了避免那些不必要的全表扫描(fulltablescan),你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器.

2.访问Table的方式 ORACLE采用两种访问表中记录的方式: a.全表扫描 全表扫描就是顺序地访问表中每条记录.ORACLE采用一次读入多个数据块(databaseblock)的方式优化全表扫描. b.通过ROWID访问表 你可以采用基于ROWID的访问方式情况,提高访问表的效率,,ROWID包含了表中记录的物理位置信息..ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系.通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高. 3.共享SQL语句 为了不重复解析相同的SQL语句,在第一次解析之后,ORACLE将SQL语句存放在内存中.这块位于系统全局区域SGA(systemglobalarea)的共享池(sharedbufferpool)中的内存可以被所有的数据库用户共享.因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同,ORACLE就能很快获得已经被解析的语句以及最好的执行路

ORACLE 性能优化

ORACLE 数据库性能优化 参考书目: 《ORACLE 9i Database Performance Tuning Guide and Reference》《ORACLE 9i Database Reference》 《ORACLE 9i SQL Reference》 《ORACLE 9i Database Administrator’s Guide》

一、数据库实例创建过程参数确定 在创建数据库实例过程中,需要确定以下几个参数: 1. 数据块大小(DB_BLOCK_SIZE) 该参数指明了ORACLE所处理的数据存贮于数据文档以及SGA内存中的数据块大小。 该参数的可选择的范围为:4k,8k,16k,32k,64k。对于OLTP系统而言,取值可以为4K或8K,对于DSS系统而言,则可以取较大的数据,如32K或64K 建议统一取8K(即8192) 说明 DB_BLOCK_SIZE的大小将影响创建表时的EXTENT的大小。例如指定db_block_size=16K,某表空间的EXTENT MANAGEMENT 为local autoallocate,则其系统将extent的大小最小指定为1M.所以将可能导致空间的浪费。 2. 字符集(Character set) 该参数确定数据库以何种字符集来存贮CHAR以及V ARCHAR、V ARCHAR2等字符类型的值。对于ORACLE数据字典中的字符(如表及字段的COMMENT 内容)具有同样的作用。因此需要考虑如字符集的使用。对于国际项目,因为数据库中的comment内容(包括表及字符、存贮过程中的中文字符等内容)可能性需要以中文存贮,而用户业务数据使用的字符可能性是使用本地的语言,基于此,该参数需要选择支持UNICODE的字符编码的字符集。目前ORACLE9i支持以下二种UNICODE字符集: ?UTF8 ?AL32UTF8 建议统一取AL32UTF8

VOC在线监测管理系统

VOC在线监测管理系统 背景介绍 1、项目背景 随着经济的快速发展,污染源的种类日益增多,特别是化工区、工业集中区及周边环境,污染方式与生态破坏类型日趋复杂,环境污染负荷逐渐增加,环境污染事故时有发生。同时,随着公众环境意识逐渐增强,各类环境污染投诉纠纷日益频繁,因此对环境监测的种类、要求越来越高。 在“十二五”期间,政府着力打造以空气环境监测,水质监测,污染源监测为主体的国家环境监测网络,形成了我国环境监测的基本框架。“十三五”规划建议中已经明确“以提高环境质量为核心”,从目前环保部力推的“气,水,土三大战役”的初步效果来看,下一步对于环境质量的改善则是对于现有治理设施和治理手段的检验。而对于三个领域治理效果的检验,依赖于全面有效的环境监测网络。 国务院印发的《生态环境监测网络建设方案的通知》提出建设主要目标:到2020年,全国生态环境监测网络基本实现环境质量、重点污染源、生态状况监测全覆盖,各级各类监测数据系统互联共享,监测预报预警、信息化能力和保障水平明显提升,监测与监管协同联动,初步建成陆海统筹、天地一体、上下协同、信息共享的生态环境监测网络。 根据调研大部分企业具备简单治理技术,即将生产车间内生产工艺所产生的VOCs污染物通过管道集气罩收集后通过活性炭吸附装置处理以后进行排放,但园区内存在着有组织排放超标和无组织排放的问题,为督促企业改进生产工艺和治理装置,减少无组织排放,建议园区部署网格化区域监控系统。 系统部署可提高各工业工园区污染源准确定位能力,同时快速直观的分析出污染源周边的相关信息,通过整合各类地理信息资源和环境保护业务资源,建立统一的环境信息资源数据库,将空间数据与动态监测数据、动态监管数据、政策法规数据等业务数据进行无缝衔接。为管理者提供直观、高效、便捷的管理手段,提高环保业务管理能力,综合管理与分析的决策能力。同时根据业务应用的不同,对数据进行横向的层次划分,通过应用人员层次的不同,对数据进行纵向的层次划分,明晰信息的脉络,方便数据的管理。 2、建设依据 2.1相关政策、规划和工作意见 《国务院关于印发国家环境保护“十二五”规划的通知》(国发〔2011〕42号)

数据库查询优化实验报告_SQLServer2008

SQL Server 2008数据查询的优化方法研究摘要 随着数据存储需求的日益增长,对关系数据的管理和访问就成为数据库技术必须解决的问题。本文主要论述关系数据库查询优化技术,并从它的优化技术进行深入探讨,对系统实现做了一定的论述,并进行了部分的程序实现。 关键词:数据库查询系统优化 引言 SQLServer是是由微软公司开发的基于Windows操作系统的关系型数据库管理系统,它是一个全面的、集成的、端到端的数据解决方案,为企业中的用户提供了一个安全、可靠和高效的平台用于企业数据管理和商业智能应用。目前,许多中小型企业的数据库应用系统都是用SQLServer作为后台数据库管理系统设计开发的。设计一个应用系统并不难,但是要想使系统达到最优化的性能并不是一件容易的事。根据多年的实践,由于初期的数据库中表的记录数比较少,性能不会有太大问题,但数据积累到一定程度,达到数百万甚至上千万条,全面扫描一次往往需要数十分钟,甚至数小时。20%的代码用去了80%的时间,这是程序设计中的一个著名定律,在数据库应用程序中也同样如此。如果用比全表扫描更好的查询策略,往往可以使查询时间降为几分钟。而且我们知道,目前数据库系统应用中,查询操作占了绝大多数,查询优化成为数据库性能优化最为重要的手段之一。 影响查询效率的因素 SQLServer处理查询计划的过程是这样的:在做完查询语句的词法、语法检查之后,将语句提交给SQLServer的查询优化器,查询优化器通过检查索引的存在性、有效性和基于列的统计数据来决定如何处理扫描、检索和连接,并生成若干执行计划,然后通过分析执行开销来评估每个执行计划,从中选出开销最小的执行计划,由预编译模块对语句进行处理并生成查询规划,然后在合适的时间提交给系统处理执行,最后将执行结果返回给用户。所以,SQLServer中影响查询效率的因素主要有以下几种: 1.没有索引或者没有用到索引。索引是数据库中重要的数据结构,使用索引的目的是避免全表扫描,减少磁盘I/O,以加快查询速度。 2.没有创建计算列导致查询不优化。 3.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)。 4.返回了不必要的行和列。 5.查询语句不好,没有优化。其中包括:查询条件中操作符使用是否得当;查询条件中的数据类型是否兼容;对多个表查询时,数据表的次序是否合理;多个选择条件查询时,选择条件的次序是否合理;是否合理安排联接选择运算等。 SQLServer数据查询优化方法 1、避免使用不兼容的数据类型。例如float和int、char和varchar、binary和varbinary 是不兼容的。数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化操作。例如: select name from employee where salary >60000

Oracle SQL性能优化方法研究

Oracle SQL性能优化方法探讨 Oracle性能优化方法(SQL篇) (1) 1综述 (2) 2表分区的应用 (2) 3访问Table的方式 (3) 4共享SQL语句 (3) 5选择最有效率的表名顺序 (5) 6WHERE子句中的连接顺序. (6) 7SELECT子句中幸免使用’*’ (6) 8减少访问数据库的次数 (6) 9使用DECODE函数来减少处理时刻 (7) 10整合简单,无关联的数据库访问 (8) 11删除重复记录 (8) 12用TRUNCATE替代DELETE (9) 13尽量多使用COMMIT (9) 14计算记录条数 (9) 15用Where子句替换HAVING子句 (9) 16减少对表的查询 (10) 17通过内部函数提高SQL效率 (11)

18使用表的不名(Alias) (12) 19用EXISTS替代IN (12) 20用NOT EXISTS替代NOT IN (13) 21识不低效执行的SQL语句 (13) 22使用TKPROF 工具来查询SQL性能状态 (14) 23用EXPLAIN PLAN 分析SQL语句 (14) 24实时批量的处理 (16)

1综述 ORACLE数据库的性能调整是个重要,却又有难度的话题,如何有效地进行调整,需要通过反反复复的过程。在数据库建立时,就能依照顾用的需要合理设计分配表空间以及存储参数、内存使用初始化参数,对以后的数据库性能有专门大的益处,建立好后,又需要在应用中不断进行应用程序的优化和调整,这需要在大量的实践工作中不断地积存经验,从而更好地进行数据库的调优。 数据库性能调优的方法 ●调整内存 ●调整I/O ●调整资源的争用问题 ●调整操作系统参数 ●调整数据库的设计 ●调整应用程序 本文针对应用程序的调整,来讲明对数据库性能如何进行优化。 2表分区的应用 关于海量数据的表,能够考虑建立分区以提高操作效率。建

ORACLE性能优化31条

1.ORACLE的优化器共有3种 A、RULE (基于规则) b、COST (基于成本) c、CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS 。你当然也在SQL句级或是会话(session)级对其进行覆盖。 为了使用基于成本的优化器(CBO,Cost-Based Optimizer) ,你必须经常运行analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性。 如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze 命令有关。如果table已经被analyze过,优化器模式将自动成为CBO ,反之,数据库将采用RULE 形式的优化器。 在缺省情况下,ORACLE采用CHOOSE优化器,为了避免那些不必要的全表扫描(full table scan) ,你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器。 2.访问Table的方式 ORACLE 采用两种访问表中记录的方式: A、全表扫描 全表扫描就是顺序地访问表中每条记录。ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描。 B、通过ROWID访问表 你可以采用基于ROWID的访问方式情况,提高访问表的效率,ROWID包含了表中记录的物理位置信息。ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系。通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高。 3.共享SQL语句 为了不重复解析相同的SQL语句,在第一次解析之后,ORACLE将SQL语句存放在内存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同,ORACLE就能很快获得已经被解析的语句以及最好的执行路径。ORACLE的这个功能大大地提高了SQL 的执行性能并节省了内存的使用。 可惜的是ORACLE只对简单的表提供高速缓冲(cache buffering),这个功能并不适用于多表连接查询。 数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性也就越大了。 当你向ORACLE提交一个SQL语句,ORACLE会首先在这块内存中查找相同的语句。这里需要注明的是,ORACLE对两者采取的是一种严格匹配,要达成共享,SQL语句必须完全相同(包括空格,换行等)。 数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性也就越大了。 共享的语句必须满足三个条件: A、字符级的比较:当前被执行的语句和共享池中的语句必须完全相同。 B、两个语句所指的对象必须完全相同: C、两个SQL语句中必须使用相同的名字的绑定变量(bind variables)。 4.选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表driving table)将被最先处理。在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。当ORACLE处理多个表时,会运用排序及合并的方式连接它们。首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并。 如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指

Oracle性能优化

ORACLE的优化器共有3种 A、RULE (基于规则) b、COST (基于成本) c、CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS 。你当然也在SQL句级或是会话(session)级对其进行覆盖。 为了使用基于成本的优化器(CBO, Cost-Based Optimizer) ,你必须经常运行analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性。 如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关。如果table已经被analyze过,优化器模式将自动成为CBO ,反之,数据库将采用RULE形式的优化器。 在缺省情况下,ORACLE采用CHOOSE优化器,为了避免那些不必要的全表扫描(full table scan) ,你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器。 2.访问Table的方式 ORACLE 采用两种访问表中记录的方式: A、全表扫描 全表扫描就是顺序地访问表中每条记录。ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描。 B、通过ROWID访问表 你可以采用基于ROWID的访问方式情况,提高访问表的效率, ROWID 包含了表中记录的物理位置信息。ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系。通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高。 3.共享SQL语句 为了不重复解析相同的SQL语句,在第一次解析之后,ORACLE将SQL语句存放在存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的存可以被所有的数据库用户共享。因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同, ORACLE就能很快获得已经被解析的语句以及最好的执行路径。ORACLE的这个功能大提高了SQL的执行性能并节省了存的使用。 可惜的是ORACLE只对简单的表提供高速缓冲(cache buffering),这个功能并不适用于多表连接查询。

MS_SQL_Server_数据库性能优化方法总结

1.列出数据库服务器、Web服务器的基本的硬件配置,如CPU、内存等。 2.检查数据库服务器是否真正启用了AWE内存。 (1) 启用AWE:数据库服务器检查C:\boot.ini文件,需要配置"/PAE"(*重启电脑才能生效),如下: [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprise" /noexecute=optout /fastdetect /PAE (2) 开启sql server 服务用户的,内存中锁定页面权限 (*重启电脑才能生效)在“服务管理”中查看 SQL SERVER 服务登录账户,默认是本地系统帐户(System)。然后在运行 gpedit.msc ,选择计算机配置->windows 设置->安全设置->本地策略->用户权限分配->内存中锁定页面。添加SQL SERVER服务的登录用户到里面去。 (3)启用数据库AWE内存,以服务器8G内存为例,一般设置如下,最小2G,最大6G(重启SQL SERVER服务即可): (4)跟踪数据库性能“Total Server Memory ”的使用情况,看看数据库真正使 用的内存,越接近为数据库分配的最大内存越好。 或使用如下语句,查询数据库的内存使用情况: use master go select * from sysperfinfo where counter_name like '%Total Server Memory(KB)%' go 3.Web服务器监控项:

数据库优化

关于数据库优化方面的文章很多,但是有的写的似是而非,有的不切实际,对一个数据库来说,只能做到更优,不可能最优,并且由于实际需求不同,优化方案还是有所差异,根据实际需要关心的方面(速度、存储空间、可维护性、可拓展性)来优化数据库,而这些方面往往又是相互矛盾的,下面结合网上的一些看法和自己的一些观点做个总结。 一个系统的性能的提高,不单单是试运行或者维护阶段的性能调优,也不单单是开发阶段的事情,而是在整个软件生命周期都需要注意。所以我希望按照软件生命周期的不同阶段来总结数据库性能优化相关的注意事项。 一、分析阶段 一般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性、可用性、可靠性、安全性需求往往吸引了我们大部分的注意力,但是,我们必须注意,性能是很重要的非功能性需求,必须根据系统的特点确定其实时性需求、响应时间的需求、硬件的配置等。最好能有各种需求的量化的指标。 另一方面,在分析阶段应该根据各种需求区分出系统的类型,大的方面,区分是OLTP(联机事务处理系统)和OLAP(联机分析处理系统)。 二、设计阶段 设计阶段可以说是以后系统性能的关键阶段,在这个阶段,有一个关系到以后几乎所有性能调优的过程—数据库设计。 在数据库设计完成后,可以进行初步的索引设计,好的索引设计可以指导编码阶段写出高效率的代码,为整个系统的性能打下良好的基础。 以下是性能要求设计阶段需要注意的: 1、数据库逻辑设计的规范化 数据库逻辑设计的规范化就是我们一般所说的范式,我们可以这样来简单理解范式:第1规范:没有重复的组或多值的列,这是数据库设计的最低要求。 第2规范: 每个非关键字段必须依赖于主关键字,不能依赖于一个组合式主关键字的某些组成部分。消除部分依赖,大部分情况下,数据库设计都应该达到第二范式。 第3规范: 一个非关键字段不能依赖于另一个非关键字段。消除传递依赖,达到第三范式应该是系统中大部分表的要求,除非一些特殊作用的表。 更高的范式要求这里就不再作介绍了,个人认为,如果全部达到第二范式,大部分达到第三范式,系统会产生较少的列和较多的表,因而减少了数据冗余,也利于性能的提高。 2、合理的冗余 完全按照规范化设计的系统几乎是不可能的,除非系统特别的小,在规范化设计后,有计划地加入冗余是必要的。 冗余可以是冗余数据库、冗余表或者冗余字段,不同粒度的冗余可以起到不同的作用。 冗余可以是为了编程方便而增加,也可以是为了性能的提高而增加。从性能角度来说,冗余数据库可以分散数据库压力,冗余表可以分散数据量大的表的并发压力,也可以加快特殊查询的速度,冗余字段可以有效减少数据库表的连接,提高效率。 3、主键的设计 主键是必要的,SQL SERVER的主键同时是一个唯一索引,而且在实际应用中,我们往往选择最小的键组合作为主键,所以主键往往适合作为表的聚集索引。聚集索引对查询的影响是比较大的,这个在下面索引的叙述。 在有多个键的表,主键的选择也比较重要,一般选择总的长度小的键,小的键的比较速度快,同时小的键可以使主键的B树结构的层次更少。 主键的选择还要注意组合主键的字段次序,对于组合主键来说,不同的字段次序的主键的性能差别可能会很大,一般应该选择重复率低、单独或者组合查询可能性大的字段放在前

Oracle性能优化

y物理模型CheckList (Oracle,性能) 1. 系统级优化 数据库参数配置 合理分配SGA及其内部参数(经验值如下): SGA=phy*(60%-80%) Share pool=SAG*45% DB Cache=SGA*45% Log Buffer: 1~3M 注:Oracle9i在Windows下有bug,是由Windows下的SGA最大 值有2G的限制造成的 注意调整process和open cursor参数,这两个参数直接影响 数据库的session量 分离表和索引:将表和索引建立在不同的表空间,决不要将 不属于Oracle内部系统的对象存放到SYSTEM表空间。同 时,确保数据表空间和索引表空间置于不同的硬盘,减少I/O 竞争; 如果是企业版数据库,大表可以考虑采取分区存储措施,提 高系统的性能; 优化Export和Import工作:使用较大的BUFFER(比如10MB , 10,240,000)可以提高EXPORT和IMPORT的速度 定期分析查询计划,提高数据库的性能;

2. 索引相关 要对经常查询的字段建立索引,但是由于索引管理的开销, 在增删改操作频繁的情况下避免建立不必要的索引; 对于只读或者接近只读的场合,如数据仓库,对于势值比较 小的列可以考虑使用bitmap索引; 如果索引是建立在多个列上, 只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引. 3. SQL相关 Oracle的From子句表的顺序:记录越多的表放在越前面 (左); Oracle的where子句表达式的顺序:过滤掉最大数目记录的条 件放到where子句的末尾; Select子句中避免使用‘*’,增加了查询表的列的开销; 在执行结果等效的情况下,使用Truncate代替Delete; 为了在查询过程中要尽量使用索引,对于like语句避免使用 右匹配或者中间匹配的模糊查询; 将过滤条件尽可能放到Where子句中,而不是放到Having子 句中; 在SQL语句中,要减少对表的查询,特别是在含有子查询的 SQL子句中; 使用表的别名可以减少解析的时间并避免引起歧义; 使用exists替代in; 用NOT EXISTS替代NOT IN; 通常情况下,采用表连接的方式比exists更有效率; 当提交一个包含一对多表信息(比如部门表和雇员表)的查询

优化数据库性能

查询速度慢如何解决 ------主要针对SQL 2005 为例 引起查询或更新的执行时间超过预期时间的原因有多种。查询运行慢,可能是由与运行 SQL Server 的网络或计算机相关的性能问题引起的,也可能是由物理数据库设计问题引起的。 查询和更新运行慢的最常见原因有: ?网络通讯速度慢。 ?服务器的内存不足,或者没有足够的内存供 SQL Server 使用。 ?索引列上缺少有用的统计信息。 ?索引列上的统计信息过期。 ?缺少有用的索引。 ?缺少有用的索引视图。 ?缺少有用的数据条带化。 ?缺少有用的分区。 1、用于对运行慢的查询进行故障排除的清单 当查询或更新花费的时间比预期时间长时,请考虑以下问题,找到可解答前一节中列出的查询运行慢的原因: ①. 是与组件而不是与查询相关的性能问题吗?例如,是网络性能低的问题吗?有其他可能引起或造成性能降低的组件吗? Windows 系统监视器可用于监视与 SQL Server 和非 SQL Server 相关的组件的性能。有关详细信息,请参阅监视资源使用情况(系统监视器)。 ②. 如果性能问题与查询相关,那么涉及到的是哪个或哪组查询? 首先使用 SQL Server Profiler来帮助找出运行慢的查询。有关详细信息,请参阅使用 SQL Server Profiler。 在找出运行慢的查询后,可以使用 SET 语句启用 SHOWPLAN、STATISTICS IO、STATISTICS TIME 和 STATISTICS PROFILE 选项,进一步分析查询的性能,相关描述如下: ?SET SHOWPLAN_XML ON 描述 SQL Server 查询优化器选择用来检索完善的 XML 文档数据的方法。有关详细信息,请参阅 SET SHOWPLAN_XML (Transact-SQL)。在 Microsoft SQL Server 2005 中,建议使用这种方法。此 SET 选项生成的信息比 SHOWPLAN_ALL 和 SHOWPLAN_TEXT SET 选项生成的信息详细。 ?SET SHOWPLAN_ALL ON 描述 SQL Server 查询优化器选择的数据检索方法。有关详细信息,请参阅 SET SHOWPLAN_ALL (Transact-SQL)。此 SET 选项生成的信息比 SHOWPLAN_TEXT SET 选项生成的信息详细。 ?SET SHOWPLAN_TEXT ON 返回每条 Transact-SQL 语句的执行信息,但不执行它们。有关详细信息,请参阅SET SHOWPLAN_TEXT (Transact-SQL)。

Oracle性能优化总结

个人理解,数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个人理解应该分为物理的和逻辑的优化,物理的是指oracle产品本身的一些优化,逻辑优化是指应用程序级别的优化物理优化: 一、优化内存

V$ROWCACHE视图结构

3.管理员可以通过下述语句来查看数据缓冲区的使用情况 select name,value from v$sysstat where name in ('db block gets', 'consistent gets ', 'physical reads'); 数据缓冲区使用命中率(physical reads除以db block gets加consistent gets之和)一定要小于10%,否则需要增加数据缓冲区大小 4.管理员可以通过执行下述语句,查看日志缓冲区的使用情况 select name,value from v$sysstat where name in ('redo entries','redo log space requests') 根据查询出的结果可以计算出日志缓冲区的申请失败率:requests除以entries 申请失败率应该解决与0,否则说明日志缓冲区开设太小,需要增加Oracle数据库的日志缓冲区 二、物理I/0的优化 1.在磁盘上建立数据文件前首先运行磁盘碎片整理程序 为了安全地整理磁盘碎片,需关闭打开数据文件的实例,并且停止服务。如果有足够的连续磁盘空间建立数据文件,那么就容易避免数据文件产生碎片。 2.不要使用磁盘压缩(Oracle文件不支持磁盘压缩) 3.不要使用磁盘加密

相关文档
最新文档