当前位置:首页 » 操作系统 » 提高数据库性能

提高数据库性能

发布时间: 2022-07-15 01:22:00

⑴ 如何提高oracle数据库的性能

在公路建设中,通过建立多条车道可以提高道路的流量。其实这个道理在Oracle数据库中也行得通。即可以将关键数据文件存储在多块硬盘上,以提高Oracle数据库的性能。可惜的是,不少数据库管理员没有意识到这一点。在这篇文章中笔者就以Oracle11G为例,说明如何通过在硬盘之间分布关键数据文件来提高性能。 一、在硬盘之间分布关键数据文件的基本原则。
在传统的文件系统上(即不是在裸机上)部署Oracle数据库,可以通过将关键的数据文件分布到多个可用的文件系统上或者不同的硬盘上来提高数据库的性能。具体的来说,需要遵循如下几个原则。
一是对于表来说,往往包含两个部分,即基本表与索引表。只要为基本表中的字段创建了索引,其对应的就有一张索引表。当用户访问表中的数据时,应用系统需要同时访问到索引表与数据表。此时我们可以将这两张表比喻成两辆车。如果现在只有一个车道(即将他们同时存放在一个硬盘或者文件系统中),那么两辆车必须前后行使。而如果现在有两个车道(即将基本表与其相对应的索引表存放在不同的硬盘或者文件系统中),那么这两辆车就可以并排行使。显然,后者的效率更高。为此笔者建议,可将经常需要访问的表和与之对应的索引表分开来存放。
二是可以将日志文件也分开来存放。不光光是数据表与索引表存在着这种状况。其实在日志文件管理中也是如此。只要条件允许,那么最好能够将联机重做日志和归档日志与其它数据文件存放在不同的硬盘或者文件系统上。因为当用户往数据库中写入数据时,需要同时往数据文件与重做日志文件中写入数据。此时如果将它们分开来存放,那么就相当于有了多条车道,分别往不同的文件中写入数据。这无疑就可以提高数据写入的效率,从而提高数据库的性能。
二、哪些文件最好能够分开存放?
在讲到硬盘之间分布关键数据文件的基本原则的时候,笔者举了几个需要分开存放的几个案例。但是在实际工作中,并不仅仅局限于上面提到的这些文件。笔者认为,如果条件允许的话,那么可以考虑将如下文件放置在不同的硬盘上。
一是表空间,如临时表空间、系统表空间、UNDO表空间等等。这三个表空间可能系统会同时进行访问。为此需要将其分开来存放。二是数据文件和索引文件。上面提到过,需要将经常访问的数据文件与其对应的索引文件存放在不同的硬盘上。因为这两类文件在访问数据时也可能会同时访问到。三是操作系统盘与数据库文件单独存放。显然Oracle系统肯定是与操作系统同时运行的。为了避免他们之间的I/Q冲突,就需要将Oracle部署在操作系统盘以外的磁盘上。四是联机重做日志文件。这个文件比较复杂,不但要将其与其他文件分开来存放。而且还需要注意的是,最好能够将其存放在性能最佳的硬盘上。
最后需要说明的一点是,增加磁盘也会增加成本。这不光光是购买磁盘所需要的花费,还包括管理的成本。所以这之间也会涉及到成本与性能之间的一个均衡问题。如果企业的数据不是很多,或者主要是涉及到查询操作,那么这么设计的话,就可能不怎么合理。因为投入要大于回报。
三、如何确定是否需要将文件分开来存放?
在实际工作中,企业的数据是一个从少到多的过程。也就是说,刚开始使用数据库的时候,可能数据量比较少,此时出于成本的考虑,没有将相关文件存放在不同的磁盘上。但是随着工作的深入,用户会发现数据库的性能在逐渐的降低。此时管理员就需要考虑,能够采取这种多建车道的措施,来提高数据库性能。当然在采取这个措施之前,管理员需要先进性评估。此时评估所需要用到的一个指标就是磁盘的I/O争用。
磁盘争用通常发生在有多个进程试图同时访问一个物理磁盘的情况下。如现在用户需要访问某个数据表中的数据,此时系统需要访问索引文件与数据表文件。如果将它们放置在同一磁盘上,那么在访问时就会发生I/O冲突。所以评估I/O冲突的严重程度,可以帮我们来确定是否需要将关键文件存放在不同的磁盘上。
将I/O平均的分布到多个可用的磁盘上,这可以有效的减少磁盘之间的争用情况,提高数据存储与读取的性能。从而提高Oracle等应用程序的效率。在实际工作中,数据库控制文件中有两个参数可以用来帮助我们评估这个指标。这两个参数是文件平均读取时间和文件平均写入时间。不过在使用这两个参数的时候,其只评估所有与数据库相关联的文件。管理员如果有需要的话,也可以通过下面的查询语句来查询数据文件是否存在I/O问题。查询的语法与结果如下图所示:
从如上的查询结果中可以看出某个数据文件是否繁忙,数据文件之间是否存在着/I/O冲突文件。这里需要注意的是,这个结果是一个动态的结果。在不同的时刻、用户进行不同的操作时往往会得出不同的结论。为此笔者建议,在使用这个数据的时候,最好能够多跟踪几次。然后分析多次运行的结果。只有如此,才能够得到比较合乎情理的判断。 通常情况下,管理员根据上面的结果可以得出三种结论。
第一种结论是上面这些数据文件都不是很忙。即文件的平均读取时间与写入时间都比较短,表示这两个文件都是比较空闲的。此时正常情况下,数据库的性能应该是不错的。也就是说,如果此时数据库的性能不理想的话,那么就不是磁盘的I/O所造成的。管理员应该从其他角度来改善数据库的性能。
第二种结论是每个数据库文件都非常的繁忙。此时有可能是读取时间或者写入时间比较长,或者说两个时间都比较长。当多个数据文件同时比较繁忙并且他们处于同一磁盘的话,那么管理员就需要考虑购买新的磁盘,然后将上面提到的这些关键文件重新整理,让他们部署在不同的磁盘上。

第三种结论是某几个特定的数据文件比较繁忙,而其他数据文件还可以。此时管理员如果成本受到限制,那么也不需要重新购买硬盘。在磁盘上的物理写入和读取次数上如果出现比较大的差异,就表明某个磁盘负载过大,即有很严重的I/O冲突。此时最好能够将这个磁盘中的文件进行调整,如将某些文件移动到另外的一块I/O相对不怎么严重的磁盘上。不过在采取这个操作的时候,需要注意一点。对于联机重做日志文件来说,即使其所在的磁盘I/O冲突比较低,或者访问这个文件的时间比较短,但是也不建议将其他数据文件转移到其所在的磁盘上来。因为通常情况下,为了保障数据库的性能,我们都建议将联机重做日志文件单独存放,并且还需要讲起放置在性能比较高的硬盘上。
总之,将关键的Oracle数据库文件分开放置。如此的话可以有效避免磁盘争用成为Oracle数据库系统的性能瓶颈。

⑵ 如何优化数据库的性能

--数据库性能调优
--1.聚集索引、主键
--2.尽量不要用临时表
--3.多多使用事务
--4.表设计要规范
--5.不要使用游标
--6.避免死锁
--7.不要打开大数据集
--8.最好不要select *
--9.不要使用text数据类型,用varchar
--10.不要给诸如“性别”列创建索引
--11.不要使用Insert插入大量的数据
--12.尽量用join代替where,因为where进行全表搜索

⑶ 如何对数据库性能进行优化

1.数据库I/O方面硬件性能

最有可能影响性能的是磁盘和网络吞吐量。解决办法:

  • 扩大虚拟内存,并保证有足够可以扩充的空间

  • 把数据库服务器上的不必要服务关闭掉

  • sql数据库服务器的吞吐量调为最大

  • 2.调整数据库

  • 若对该表的查询频率比较高,则建立索引。

  • 分区(如MySQL,按时间分区)

  • 尽量使用固定长度字段和限制字段长度(如 varchar(10))优势:
    降低物理存储空间
    提高数据库处理速度
    附带校验数据库是否合法功能

  • 3.使用存储过程

    应用程序的实现过程中,能够采用存储过程实现的对数据库的操作尽量通过存储过程来实现。

    因为存储过程是存放在数据库服务器上的一次性被设计、编码、测试,并被再次使用,需要执行该任务的应用可以简单地执行存储过程,并且只返回结果集或者数值。

    这样不仅可以使程序模块化,同时提高响应速度,减少网络流量,并且通过输入参数接受输入,使得在应用中完成逻辑的一致性实现。

    4.SQL语句方面

    建立查询条件索引仅仅是提高速度的前提条件,响应速度的提高还依赖于对索引的使用。不良的SQL往往来自于不恰当的索引设计、不充份的连接条件和不可优化的where子句。

  • 优化sql语句,减少比较次数

  • 限制返回条目数(mysql中使用limit)

  • 5.Java方面

  • 尽可能的少创造对象

  • 合理摆正系统设计的位置。大量数据操作,和少量数据操作一定是分开的。

  • 合理利用内存,有的数据要缓存。让数据流起来,而不是全部读到内存再处理,而是边读取边处理。

⑷ 数据库性能优化有哪些措施

1、调整数据结构的设计。这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。

2、调整应用程序结构设计。这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。

3、调整数据库SQL语句。应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率最终决定了ORACLE数据库的性能。ORACLE公司推荐使用ORACLE语句优化器(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化SQL语句。

4、调整服务器内存分配。内存分配是在信息系统运行过程中优化配置的,数据库管理员可以根据数据库运行状况调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调整程序全局区(PGA区)的大小。需要注意的是,SGA区不是越大越好,SGA区过大会占用操作系统使用的内存而引起虚拟内存的页面交换,这样反而会降低系统。

5、调整硬盘I/O,这一步是在信息系统开发之前完成的。数据库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。

6、调整操作系统参数,例如:运行在UNIX操作系统上的ORACLE数据库,可以调整UNIX数据缓冲池的大小,每个进程所能使用的内存大小等参数。

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。

在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。

在经济管理的日常工作中,常常需要把某些相关的数据放进这样的“仓库”,并根据管理的需要进行相应的处理。

例如,企业或事业单位的人事部门常常要把本单位职工的基本情况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表中,这张表就可以看成是一个数据库。有了这个"数据仓库"我们就可以根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。这些工作如果都能在计算机上自动进行,那我们的人事管理就可以达到极高的水平。此外,在财务管理、仓库管理、生产管理中也需要建立众多的这种"数据库",使其可以利用计算机实现财务、仓库、生产的自动化管理。

(4)提高数据库性能扩展阅读

数据库,简单来说是本身可视为电子化的文件柜--存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。

数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度的特点、是与应用程序彼此独立的数据集合。

在经济管理的日常工作中,常常需要把某些相关的数据放进这样的"仓库",并根据管理的需要进行相应的处理。

例如,企业或事业单位的人事部门常常要把本单位职工的基本情况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表中,这张表就可以看成是一个数据库。有了这个"数据仓库"我们就可以根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。这些工作如果都能在计算机上自动进行,那我们的人事管理就可以达到极高的水平。此外,在财务管理、仓库管理、生产管理中也需要建立众多的这种"数据库",使其可以利用计算机实现财务、仓库、生产的自动化管理。

⑸ 怎么提高数据库系统运行性能

磁盘I/O通常都是数据库的瓶颈,我的实践经验是从查找sql语句入手:
1.先分析出你的top sql(就是耗费I/O资源最多的sql语句)
2.这些top sql是否合理,最简单的就是索引是否正确的定义与使用了(当然还有其他n多种可能)
3.将以上步骤反复进行,直到整个系统I/O负载明显下降

具体的设置方式与语句和你用的数据库具体是什么厂家的以及版本有关,有需要可以追问

⑹ 怎样提高数据库的性能

1、使你的数据库结构规范化,但是不要求一定达到第三范式,为了显示和打印目的可以有数据冗余2、评估你的系统中对性能影响的关键处,减少被频繁访问的核心表的数量,并在这些核心 表上重点优化索引,表结构(尽量紧凑)。典型的核心表是代码表。 3、对于统计类应用,如果可能应写成触发器和存储过程,这样就有可能把一个消耗大量时 间的统计运算分布到每INSERT,DELETE,或者UPDATE来处理,从而极大提高查询类操作的速度。 查询选择群居索引最有效。其他索引也要针对业务进行选择。由于维护索引也要消耗系 统资源和时间,所以过多的索引对性能是损害甚至是毫无效果的。 5、如果可能,可以利用大数据库对SQL的一些特殊规定来进一步优化,比如查询暗示。 6、适当选择硬件,综合考虑CPU,内存,I/O系统的性能,以当前的CPU,内存配置来看, 很多数据库系统的瓶颈出在I/O系统上。所以如果有可能,最好使用RAID。 当然如果你有足够的财力,可以买更好的服务器,或者搞服务器集群就更利害啦。 7、可能的话,尽量使用存储过程,因为存储过程的执行计划可以重复使用,而且不需要 象普通由CLIENT提交的SQL那样进行处理和编译。 8、检查你的应用程序设计,如果有可能,尽量减少查询次数和在网络上往返的数据。为了 获取少量字段而写SELECT * 对性能的损害也比较利害。 9、在应用程序中协调并发和一致性之间的矛盾。并不是所有业务都需要放在事务中。大量 业务是允许脏读的,在不关键事务中使用脏读,或者读提交,可以大大降低DEADLOCK和 进程之间彼此等待的机会,从而把由于互相锁定资源引起的等待降低到最小。 不要在事务执行中进行大量计算或者与用户交互的操作,因为事务的执行在要求上是 不允许被打断的原子操作(回滚是失败的),所以事务应该多而短小。长事务会锁住 很多资源比较长的时间,因此也比较容易导致其他进程对资源的等待和死锁的机会。 10、评估你开发系统的关键业务,在很多数据库系统对性能的要求是彼此矛盾的,比如OLTP 应用和DSS是不同的。DSS倾向于使用各种索引加快检索速度,而大量的索引对OLTP则是负担。 11、不要在应用程序中写怪异的SQL 查询,比如 WHERE money!40000,这样的语句,这种 SQL查询,数据库的SQL优化器是无法进行优化的。 12、定期维护和管理你的数据库系统,压缩掉那些垃圾空间,很多数据库系统执行类似 删除,事务等操作的时候,并不回收无用的物理空间。所以,制定一份合理的数据库 维护计划,不要等日志文件或者LOG文件越长越大的时候才去整理数据库。 还有很多很多要注意的东西,。。。。。。

⑺ 数据库性能优化主要包括哪些方面

数据库性能优化主要包括以下几个方面:

1、sql语句的执行计划是否正常;

2、减少应用和数据库的交互次数、同一个sql语句的执行次数;

3、数据库实体的碎片的整理;

4、减少表之间的关联,特别对于批量数据处理,尽量单表查询数据,统一在内存中进行逻辑处理,减少数据库压力;

5、对访问频繁的数据,充分利用数据库cache和应用的缓存;

6、数据量比较大的,在设计过程中,为了减少其他表的关联,增加一些冗余字段,提高查询性能。

在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。

系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的SQL语句,提高系统的可用性。

⑻ 为什么数据库读写分离能提高数据库的性能

读写分离主要目的是提高系统吞吐量。某些网站同一时间有大量的读操作和较少的写操作。同时,读操作对数据的实时性要求并没有那么高。在此前提下,可以这么设计解决方案。
所以你问题里“数据仍然需要同步”这个理解是不对的。事实上,正是由于允许用户读到几秒钟甚至几分钟前的数据,才可以使用读写分离的。

所以这种方案其实就是以数据的时效性,换取了读操作的吞吐率。

⑼ oracle数据库的性能优化有哪些方法

你最好买一本专门讲ORACLE性能优化的书,好好看看
1、调整数据库服务器的性能
Oracle数据库服务器是整个系统的核心,它的性能高低直接影响整个系统的性能,为了调整Oracle数据库服务器的性能,主要从以下几个方面考虑:
1.1、调整操作系统以适合Oracle数据库服务器运行
Oracle数据库服务器很大程度上依赖于运行服务器的操作系统,如果操作系统不能提供最好性能,那么无论如何调整,Oracle数据库服务器也无法发挥其应有的性能。
1.1.1、为Oracle数据库服务器规划系统资源
据已有计算机可用资源, 规划分配给Oracle服务器资源原则是:尽可能使Oracle服务器使用资源最大化,特别在Client/Server中尽量让服务器上所有资源都来运行Oracle服务。
1.1.2、调整计算机系统中的内存配置
多数操作系统都用虚存来模拟计算机上更大的内存,它实际上是硬盘上的一定的磁盘空间。当实际的内存空间不能满足应用软件的要求时,操作系统就将用这部分的磁盘空间对内存中的信息进行页面替换,这将引起大量的磁盘I/O操作,使整个服务器的性能下降。为了避免过多地使用虚存,应加大计算机的内存。
1.1.3、为Oracle数据库服务器设置操作系统进程优先级
不要在操作系统中调整Oracle进程的优先级,因为在Oracle数据库系统中,所有的后台和前台数据库服务器进程执行的是同等重要的工作,需要同等的优先级。所以在安装时,让所有的数据库服务器进程都使用缺省的优先级运行。
1.2、调整内存分配
Oracle数据库服务器保留3个基本的内存高速缓存,分别对应3种不同类型的数据:库高速缓存,字典高速缓存和缓冲区高速缓存。库高速缓存和字典高速缓存一起构成共享池,共享池再加上缓冲区高速缓存便构成了系统全程区(SGA)。SGA是对数据库数据进行快速访问的一个系统全程区,若SGA本身需要频繁地进行释放、分配,则不能达到快速访问数据的目的,因此应把SGA放在主存中,不要放在虚拟内存中。内存的调整主要是指调整组成SGA的内存结构的大小来提高系统性能,由于Oracle数据库服务器的内存结构需求与应用密切相关,所以内存结构的调整应在磁盘I/O调整之前进行。
1.2.1、库缓冲区的调整
库缓冲区中包含私用和共享SQL和PL/SQL区,通过比较库缓冲区的命中率决定它的大小。要调整库缓冲区,必须首先了解该库缓冲区的活动情况,库缓冲区的活动统计信息保留在动态性能表v$librarycache数据字典中,可通过查询该表来了解其活动情况,以决定如何调整。

Select sum(pins),sum(reloads) from v$librarycache;

Pins列给出SQL语句,PL/SQL块及被访问对象定义的总次数;Reloads列给出SQL 和PL/SQL块的隐式分析或对象定义重装载时在库程序缓冲区中发生的错误。如果sum(pins)/sum(reloads) ≈0,则库缓冲区的命中率合适;若sum(pins)/sum(reloads)>1, 则需调整初始化参数 shared_pool_size来重新调整分配给共享池的内存量。
1.2.2、数据字典缓冲区的调整
数据字典缓冲区包含了有关数据库的结构、用户、实体信息。数据字典的命中率,对系统性能影响极大。数据字典缓冲区的使用情况记录在动态性能表v$librarycache中,可通过查询该表来了解其活动情况,以决定如何调整。

Select sum(gets),sum(getmisses) from v$rowcache;

Gets列是对相应项请求次数的统计;Getmisses 列是引起缓冲区出错的数据的请求次数。对于频繁访问的数据字典缓冲区,sum(getmisses)/sum(gets)<10%~15%。若大于此百分数,则应考虑增加数据字典缓冲区的容量,即需调整初始化参数shared_pool_size来重新调整分配给共享池的内存量。
1.2.3、缓冲区高速缓存的调整
用户进程所存取的所有数据都是经过缓冲区高速缓存来存取,所以该部分的命中率,对性能至关重要。缓冲区高速缓存的使用情况记录在动态性能表v$sysstat中,可通过查询该表来了解其活动情况,以决定如何调整。

Select name,value from v$sysstat where name in ('dbblock gets','consistent gets','physical reads');

dbblock gets和consistent gets的值是请求数据缓冲区中读的总次数。physical reads的值是请求数据时引起从盘中读文件的次数。从缓冲区高速缓存中读的可能性的高低称为缓冲区的命中率,计算公式:

Hit Ratio=1-(physical reds/(dbblock gets+consistent gets))

如果Hit Ratio<60%~70%,则应增大db_block_buffers的参数值。db_block_buffers可以调整分配给缓冲区高速缓存的内存量,即db_block_buffers可设置分配缓冲区高速缓存的数据块的个数。缓冲区高速缓存的总字节数=db_block_buffers的值*db_block_size的值。db_block_size 的值表示数据块大小的字节数,可查询 v$parameter 表:

select name,value from v$parameter where name='db_block_size';

在修改了上述数据库的初始化参数以后,必须先关闭数据库,在重新启动数据库后才能使新的设置起作用。

热点内容
图片服务器ftp 发布:2025-01-22 15:52:33 浏览:506
sql打开bak文件 发布:2025-01-22 15:47:32 浏览:106
opengl服务器源码 发布:2025-01-22 15:40:02 浏览:908
python部署服务 发布:2025-01-22 15:38:46 浏览:282
压缩机卡装 发布:2025-01-22 15:37:04 浏览:446
每天跑步40分钟可以缓解压力吗 发布:2025-01-22 15:33:24 浏览:448
线性表的链式存储结构与顺序存储 发布:2025-01-22 15:32:45 浏览:295
解压缩大师 发布:2025-01-22 15:26:51 浏览:386
xp访问win7共享打印机无权限 发布:2025-01-22 15:23:22 浏览:830
python中pandas 发布:2025-01-22 15:21:42 浏览:639