有问题就有答案
Q1:数据库怎么优化
内容来自用户:许成文
数据库优化数据库优化的目的:避免磁盘I/O瓶颈、减少CPU利用率和减少资源竞争。数据库的优化包括物理上的优化,如良好的平台(硬件平台、网络平台),合理的环境参数(操作系统环境参数、oracle环境参数),及软件上的优化。1、数据库结构的设计1、数据库的逻辑设计、包括表与表之间的关系是优化关系型数据库性能的核心。一个好的逻辑数据库设计可以为优化数据库和应用程序打下良好的基础。标准化的数据库逻辑设计包括用多的、有相互关系的窄表来代替很多列的长数据表。下面是一些使用标准化表的一些好处。A:由于表窄,因此可以使排序和建立索引更为迅速B:由于多表,所以多镞的索引成为可能C:更窄更紧凑的索引D:每个表中可以有少一些的索引,因此可以提高insert update delete等的速度,因为这些操作在索引多的情况下会对系统性能产生很大的影响E:更少的空值和更少的多余值,增加了数据库的紧凑性由于标准化,所以会增加了在获取数据时引用表的数目和其间的连接关系的复杂性。太多的表和复杂的连接关系会降低服务器的性能,因此在这两者之间需要综合考虑。定义具有相关关系的主键和外来键时应该注意的事项主要是:用于连接多表的主键和参考的键要有相同的数据类型。(对于多列索引,10、FROM hr.employees e WHERE last_name LIKE :b1;FROM employees e
Q2:数据库如何优化
body{line-height:200%;}如何优化MySQL数据库当MySQL数据库邂逅优化,它有好几个意思,今天我们所指的是性能优化。我们究竟该如何对MySQL数据库进行优化呢?下面我就从MySQL对硬件的选择、Mysql的安装、my.cnf的优化、MySQL如何进行架构设计及数据切分等方面来说明这个问题。1.服务器物理硬件的优化1)磁盘(I/O),MySQL每一秒钟都在进行大量、复杂的查询操作,对磁盘的读写量可想而知,所以推荐使用RAID1+0磁盘阵列,如果资金允许,可以选择固态硬盘做RAID1+0;2)cpu对Mysql的影响也是不容忽视的,建议选择运算能力强悍的CPU。2.MySQL应该采用编译安装的方式MySQL数据库的线上环境安装,我建议采取编译安装,这样性能会较大的提升。3.MySQL配置文件的优化1)skip-name-resolve,禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间;2)back_log=384,back_log指出在MySQL暂时停止响应新请求之前,短时间内的多少个请求可以被存在堆栈中,对于Linux系统而言,推荐设置小于512的整数。3)如果key_reads太大,则应该把my.cnf中key_buffer_size变大,保持key_reads/key_read_requests至少在1/100以上,越小越好。4.MySQL上线后根据status状态进行适当优化1)打开慢查询日志可能会对系统性能有一点点影响,如果你的MySQL是主-从结构,可以考虑打开其中一台从服务器的慢查询日志,这样既可以监控慢查询,对系统性能影响也会很小。2)MySQL服务器过去的最大连接数是245,没有达到服务器连接数的上限256,应该不会出现1040错误。比较理想的设置是:Max_used_connections/max_connections*100%=85%5.MySQL数据库的可扩展架构方案1)MySQLcluster,其特点为可用性非常高,性能非常好,但它的维护非常复杂,存在部分Bug;2)DRBD磁盘网络镜像方案,其特点为软件功能强大,数据可在底层块设备级别跨物理主机镜像,且可根据性能和可靠性要求配置不同级别的同步。
Q3:数据库优化怎么做?
内容来自用户:许成文
数据库优化数据库优化的目的:避免磁盘I/O瓶颈、减少CPU利用率和减少资源竞争。数据库的优化包括物理上的优化,如良好的平台(硬件平台、网络平台),合理的环境参数(操作系统环境参数、oracle环境参数),及软件上的优化。1、数据库结构的设计1、数据库的逻辑设计、包括表与表之间的关系是优化关系型数据库性能的核心。一个好的逻辑数据库设计可以为优化数据库和应用程序打下良好的基础。标准化的数据库逻辑设计包括用多的、有相互关系的窄表来代替很多列的长数据表。下面是一些使用标准化表的一些好处。A:由于表窄,因此可以使排序和建立索引更为迅速B:由于多表,所以多镞的索引成为可能C:更窄更紧凑的索引D:每个表中可以有少一些的索引,因此可以提高insert update delete等的速度,因为这些操作在索引多的情况下会对系统性能产生很大的影响E:更少的空值和更少的多余值,增加了数据库的紧凑性由于标准化,所以会增加了在获取数据时引用表的数目和其间的连接关系的复杂性。太多的表和复杂的连接关系会降低服务器的性能,因此在这两者之间需要综合考虑。定义具有相关关系的主键和外来键时应该注意的事项主要是:用于连接多表的主键和参考的键要有相同的数据类型。(对于多列索引,10、FROM hr.employees e WHERE last_name LIKE :b1;FROM employees e
Q4:在数据库访问量过大时,怎样提高访问速度?
在ASP中优化数据库处理 ASP是一个WEB服务器端的开发环境,它提供了一种简单易学的脚本(VBScript或Jscript),并带有许多内置的对象,从而提供了一条简捷的编程之路。更为重要的是,ASP中提供了ADO对象,让程序员可以轻松操作各种数据库,从而可以产生和运行动态的、交互的WEB服务应用程序。目前,国内很多电子商务站点都采用了ASP技术来与数据库交互,为用户提供各类服务。 由于电子商务站点的大部分信息都存放在数据库中,要提高WEB的响应速度,建立高性能的电子商务站点,很大一部分取决于ASP与数据库之间的处理性能。因此,在ASP编写时,要注意数据库处理方法。 1、 使用Connection pool机制 在数据库处理中,资源花销最大的是建立数据库连接,而且用户还会有一个较长的连接等待时间。若每一个用户访问时,都重新建立连接,不仅用户要长时间等待,而且系统有可能会由于资源消耗过大而停止响应。如果能够重用以前建立的数据库连接,而不是每次访问时都重新建立连接,则可以很好地解决这些问题,从而提高整个系统的性能。在IIS+ASP处理体系中,采用了Connection pool机制来保证这一点。 Connection pool的原理是,IIS+ASP体系中维持了一个连接缓冲池,建立好的数据库连接在ASP程序中的断开都是逻辑断开,而实际的物理连接被存储在池中并被维护。这样,当下一个用户访问时,直接从连接缓冲池中取得一个数据库连接,而不需重新连接数据库,因此,可以大大地提高系统的响应速度。 为了正确使用Connection pool时,必须注意以下几点: a). 在MDAC2.0以前的版本中,必须经过数据库驱动程序的配置才能使用Connection Pool;在以后的版本中(比如MDAC2.1),缺省是使用Connection Pool机制。具体配置情况可以参见微软公司的站点()。 顺便提一句,在使用ORACLE数据库时,最好使用微软提供的驱动程序。 b). 每次数据库连接串参数必须相同,否则会被认为是不同的连接而重新去连接数据库,而不是使用缓冲池中的连接。最好的做法是将连接串存储在Application变量中,所有的程序在建立连接时使用Application变量的值。 c). 为了更好地使用和维护连接缓冲池,建议在程序中使用以下的方法对数据库连接进行操作,因为隐式使用数据库连接时不能利用缓冲池的机制: ¨ 显示地创建连接对象: Set conn=Server.CreateObject(“Adodb.connection”) ¨ 建立数据库连接:conn.open Application(“connection_string”),… ¨ 进行数据库操作:… ¨ 显式地关闭连接对象:conn.close 2、 利用直接的Ole DB驱动程序 在Asp中,通过ADO可以使用两种方式连接数据库,一种是传统的ODBC方式,一种是Ole DB方式。由于ADO是建立在Ole DB技术上的,为了支持ODBC,必须建立相应的Ole DB 到ODBC的调用转换(如MS Oledb provider for ODBC)。而使用直接的Ole DB方式(如MS Oledb provider for Sql, Oracle),则不需转换,从而提高处理速度,同时,还能利用Ole DB的新特性。 3、 在内存中缓存ADO对象或其内容 通常,在ASP程序中,都会涉及到一些存储在数据库中的常用信息,如省份列表,商品分类等,这些信息对于每一个访问用户都是相同的。若每一个用户访问时,都要去数据库里取出来,然后显示给用户,不仅会使数据库服务器负载加重,无法快速服务于更重要的事务处理,而且WEB服务器也必须不停地创建ADO对象,消耗大量资源,导致了当用户很多时几乎失去响应。若能把一些常用信息事先存储在内存中,当用户访问时,直接从内存中取出,显示给用户,则可以大大减小系统的压力,提高响应速度。 比如,我们可以把已经取得了数据的RecordSet对象存储在Application变量中,当用户访问时,从Application变量中取得RecordSet对象,而不需再次建立数据库连接;也可以将RecordSet对象里的数据以其他方式存储,比如存储在数组中,然后再将数组存储在Application变量中,使用时用数组的方式读取。 需要注意的是,一个对象要存储在Application变量中,线程模式必须是Both;对于不满足该条件的对象,必须以其他方式,比如转换成数组的方式存储在Application变量中,这也是上面所说的将内容存储在数组中的原因。 4、 使用数字序列 在Asp程序中,从诸如RecordSet中读取数据时,为了方便,常使用数据库列名的方式进行: Response.write rs(“fieldnameN”) 而很少采用该数据库列名所在的数字序列来读取,即: Response.write rs(N) 其实,为了从RecordSet得到列值,ADO必须将列名转化为数字序列,因此,若直接使用数字序列,则可以提高读取速度。若感觉使用数字序列,程序可读性不直观,可以采用建立常量的方法,定义: const FIELDNAME1 1 5、 使用数据库过程(procere) 在电子商务站点中,尤其是要进行交易的站点,为了完成交易,可能需要多次查询大量的信息,用于判定是非,然后更新入库。若在编写Asp时,直接在一个程序中作多次数据库操作,不仅IIS要创建很多ADO对象,消耗资源,而且加重了数据库服务器的负担,增大了网络流量。若把多次数据库操作流程定义为一个数据库过程,用如下方式调用: connection.execute “” 则可以利用数据库的强大性能,大大减轻Web系统的压力,而且由于页面内容与业务分开,管理维护也变得方便。 6、 使用优化过的sql语句 对于电子商务网站,最主要的就是要保证,不论访问用户的多少,系统都要有足够快的响应速度。由于在Asp技术中,ADO对象消耗的资源是非常大的,若一个sql语句要执行很长的一段时间,对整个资源也将一直占用,使系统没有足够的资源服务于其它用户。因此,尽量使用优化过的sql语句,减少执行时间。比如,不使用在in语句中包含子查询的语句,充分利用索引。 7、 利用数据库的特性 ADO是一套通用的对象控件,本身没有利用数据库的任何特性。但若在Asp程序编写时,有意识地考虑结合数据库的特性,往往可以有很好的效果。 比如,Oracle数据库服务器对于执行过的sql语句,通常都经过了分析优化,并存储在一个sql内存缓冲区中,当下次同样的sql语句请求时,直接从内存缓冲区取出执行,不再进行分析优化,从而可以大幅度提高性能。这就要求在Asp程序编写时,尽量使用相同的Sql语句,或者参数化的Sql语句: Set cmd=Server.createobject(“adodb.command”) cmd.CommandText=”select * from proct where proctcode=?” 8、 用时创建,用完释放 在前面也提到过,ADO对象是非常消耗资源的,因此一定要牢牢记住,只在用到ADO对象时才创建,用完后马上释放: set rs=Server.createobject(“adodb.recordset”) …. rs.close set rs=nothing 愿您愉快地编程,让人们享受社会信息化所带来的好处。
Q5:如何加快数据库连接速度?
1、升级硬件 2、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。 3、扩大服务器的内存 4、增加服务器CPU个数 5、对于大的数据库不要设置数据库自动增长,它会降低服务器的性能 6、在查询Select语句中用Where字句限制返回的行数,避免表扫描,如果返回不必要的数据,浪费了服务器的I/O资源,加重了网络的负担降低性能。如果表很大,在表扫描的期间将表锁住,禁止其他的联接访问表,后果严重。 7、查询时不要返回不需要的行、列 8、用select top 100 / 10 Percent 来限制用户返回的行数或者SET ROWCOUNT来限制操作的行 9、在IN后面值的列表中,将出现最频繁的值放在最前面,出现得最少的放在最后面,减少判断的次数 10、一般在GROUP BY 个HAVING字句之前就能剔除多余的行,所以尽量不要用它们来做剔除行的工作。他们的执行顺序应该如下最优: select的Where字句选择所有合适的行,Group By用来分组个统计行,Having字句用来剔除多余的分组。这样Group By 个Having的开销小,查询快.对于大的数据行进行分组和Having十分消耗资源。如果Group BY的目的不包括计算,只是分组,那么用Distinct更快 11、一次更新多条记录比分多次更新每次一条快,就是说批处理好.
Q6:数据库导致服务器CPU过高怎么优化?
啥数据库呀?cpu几个?用到多少了?我见过的cpu过高有2种,一种是很多命令在执行,二种是是因为他们写的sql语句过滥造成的。其他的我就不知道了。