
以MySQL为例:
影响数据库性能的主要因素总结如下:1、sql查询速度
2、网卡流量
3、服务器硬件
4、磁盘IO
以上因素并不是时时刻刻都会影响数据库性能,而就像木桶效应一样。如果其中一个因素严重影响性能,那么整个数据库性能就会严重受阻。另外,这些影响因素都是相对的。
例如:当数据量并没有达到百万千万这样的级别,那么sql查询速度也许就不是个重要因素,换句话说,你的sql语句效率适当低下可能并不影响整个效率多少,反之,这种情况,无论如何怎么优化sql语句,可能都没有太明显的效果。
相关内容拓展:1、SQL查询速度
风险:效率低下的SQL
2、网卡流量
风险:网卡IO被占满(100Mb/8=100MB)
方案:
①减少从服务器的数量。从服务器都要从主服务器上复制日志,所以,从服务器越多,网络流量越大。
②进行分级缓存。前方大量缓存突然失效会对数据库造成严重的冲击。
③避免使用“select ”进行查询
④分离业务网络和服务器网络
3、磁盘IO
风险:磁盘IO性能突然下降。
方案:使用更好的磁盘设备解决。
影响数据库性能的因素
对于数据库爱好者们,数据库底层的各种细节,内幕,等待事件,隐藏参数等津津乐道,对于调整好一条SQL语句使之在查询优化器/查询引擎下能高性能运转具有巨大的满足感成功感,仿佛自己掌握了天下最有价值的真理,驾驭了天下最有难度的技术。但对于设计和开发出这个数据库系统的人来说,他们看到此情此景,只好躲在一边偷偷的笑了。那么问题来了,使用别人数据库的人被称为大师(如:OCM),那么自己写出一个数据库来的人又该称为什么呢?到底谁才是真正的高手呢?
数据库系统优化中的一些观点:
“系统性能出现问题进行优化,一定要深入了解数据库内部参数、等待事件、Latch、缓冲池、trace文件、查询/优化引擎等底层细节。”
这种观点往往出自数据库“高手”,这部分人以了解数据库底层实现细节而感到非常骄傲。但是从优化角度讲数据库的等待事件、Latch等指标高等等都只是问题的表象,懂得底层细节和内幕固然是好。但是解决问题的关键往往是在应用层进行优化。
“只要系统参数调整了,性能就能提高。系统优化应该调整那些参数…”
这种观点往往出自于一些偏运维和应用层的DBA,迷恋参数配置来调优。
调整系统参数是非常重要的,但不一定能解决性能问题,否则就不会有去IOE了,问题可能性最大的还是应用设计和开发问题。
同理,很多运维人员和系统架构师比较迷恋“Linux系统调优”。认为对“文件句柄数、磁盘子系统…”那些做了优化,就能提升整个应用系统的性能。其实不然。有些场景下,针对业务特点和应用类型做 *** 作系统调优是能取到立竿见影的效果,但是大多数时候往往提升并不明显。所以最关键的还是找出瓶颈所在,对症下药。/
“系统性能问题需要从架构上解决,与应用开发关系不大。”
系统性能与各个层面都有关,架构很重要,但应用开发也是非常重要的一环。
影响数据库性能的因素
1业务需求和技术选型
2应用系统的开发及架构
3数据库自身
31表结构的设计
32查询语句
33索引设计
34Mysql服务(安装、配置等)
35 *** 作系统调优
36硬件升级(SSD、更强的CPU、更大的内存)
4数据架构(读写分离、分库分表等)
在很多情况下,数据库可能是互联网应用系统的瓶颈。但是单纯从数据库角度去做优化,可能未必能达到理想的效果。
说点题外话,最近看到很多公司使用中间件或者分布式数据访问层来做数据库分片,说明也许该公司业务发展很快。但另一个方面,也令人担忧,他们的数据库压力真的已经到了必须切分不可的程度了吗?分库分表真的像科普的那么简单吗?他们能搞定分库分表带来的成本和问题吗?有没有更合适的优化方法呢?
当然是有的。其实“过度设计”和“提前优化”就是系统万恶之源。
1在运维工作中经常会遇到控制文件出错的问题,一般都是数据文件错误,或者是控制文件丢失
2在ASM磁盘组中可以看到控制文件已经丢失,如下图,关闭数据库,如果不能正常关闭数据库可以执行shutdown abort来强制关闭数据库
3创建参数文件查看数据库名称,创建的时候可以指定参数文件位置
4然后启动数据库到nomount状态,查看数据库的编码格式
5接着就是生成trace文件,生成方式是alter database backup controlfile to trace;创建完成后trace文件有两个创建controlfile的脚本,使用图中所示进行创建即可
本文主要针对SQL_TRACE的使用方法进行了详细的介绍 在文章的最后 大家可以通过一个实际案例加深对SQL_TRACE的理解
SQL_TRACE概述
SQL_TRACE是Oracle数据库提供的用于进行SQL跟踪的手段 在某种意义上讲 可以说是Oracle最强有力的辅助诊断工具
SQL_TRACE可以作为初始化参数在全局启用 也可以通过命令行方式在具体session启用
.在全局启用
在参数文件(pfile/spfile)中指定:
sql_trace =true
在全局启用SQL_TRACE会导致所有进程的活动被跟踪 包括后台进程及所有用户进程 在此情况下通常会导致比较严重的性能问题 所以在生产环境中必须要小心使用
注意: 通过在全局启用sql_trace 我们可以跟踪到所有后台进程的活动 很多在文档中的抽象说明 通过跟踪文件的实时变化 我们可以清晰的看到各个进程之间的紧密协调
. 在当前session级设置
大多数的情况下 我们使用sql_trace跟踪当前进程 通过跟踪当前进程可以发现当前 *** 作的后台数据库递归活动(这在研究数据库新特性时尤其有效) 研究SQL执行 发现后台错误等
在session级启用和停止sql_trace方式如下:
启用当前session的跟踪:
SQL> alter session set sql_trace=true;
Session altered
此时的SQL *** 作将被跟踪:
SQL> select count() from dba_users;
COUNT()
结束跟踪:
SQL> alter session set sql_trace=false;
Session altered
跟踪其他用户进程
在很多时候我们需要跟踪其他用户的进程 而不是当前用户 我们可以通过Oracle提供的系统包DBMS_SYSTEM SET_SQL_TRACE_IN_SESSION来完成
SET_SQL_TRACE_IN_SESSION程序需要提供三个参数:
SQL> desc dbms_system … PROCEDURE SET_SQL_TRACE_IN_SESSION Argument Name Type In/Out Default SID NUMBER IN SERIAL# NUMBER IN SQL_TRACE BOOLEAN IN …
通过v$session我们可以获得sid serial#等信息
获得进程信息 选择需要跟踪的进程:
SQL> select sid serial# username from v$session where username is not null;
SID SERIAL# USERNAME SYS EYGLE
设置跟踪:
SQL> exec dbms_system set_sql_trace_in_session( true)
PL/SQL procedure successfully pleted
…
可以等候片刻 跟踪session执行任务 捕获sql *** 作……
停止跟踪:
SQL> exec dbms_system set_sql_trace_in_session( false)
PL/SQL procedure successfully pleted
事件概述
事件是Oracle提供的内部事件 是对SQL_TRACE的增强
事件可以设置以下四个级别:
启用标准的SQL_TRACE功能 等价于sql_trace
Level 加上绑定值(bind values)
Level + 等待事件跟踪
Level + Level + Level
类似sql_trace 事件可以在全局设置 也可以在session级设置
. 在全局设置
在参数文件中增加:
event= trace name context forever level
此设置对所有用户的所有进程生效 包括后台进程
.对当前session设置
通过alter session的方式修改 需要alter session的系统权限:
SQL> alter session set events trace name context forever ; Session altered SQL> alter session set events trace name context forever level ; Session altered SQL> alter session set events trace name context off ; Session altered
.对其他用户session设置
通过DBMS_SYSTEM SET_EV系统包来实现:
SQL> desc dbms_system PROCEDURE SET_EV Argument Name Type In/Out Default SI BINARY_INTEGER IN SE BINARY_INTEGER IN EV BINARY_INTEGER IN LE BINARY_INTEGER IN NM VARCHAR IN
其中的参数SI SE来自v$session视图
查询获得需要跟踪的session信息: SQL> select sid serial# username from v$session
where username is not null;SID SERIAL# USERNAME SYS EYGLE
执行跟踪:
SQL> exec dbms_system set_ev( eygle );
PL/SQL procedure successfully pleted
结束跟踪:
SQL> exec dbms_system set_ev( eygle );
PL/SQL procedure successfully pleted
获取跟踪文件
上面生成的跟踪文件位于user_dump_dest目录中 位置及文件名可以通过下面的SQL查询得到:
SQL> select d value|| / ||lower(rtrim(i instance chr( )))|| _ora_ ||p spid|| trc trace_file_name from ( select p spid from sys v$mystat m sys v$session s sys v$process p where m statistic# = and s sid = m sid and p addr = s paddr) p ( select t instance from sys v$thread t sys v$parameter v where v name = thread and (v value = or t thread# = to_number(v value))) i ( select value from sys v$parameter where name = user_dump_dest ) d /
TRACE_FILE_NAME /opt/oracle/admin/hsjf/udump/hsjf_ora_ trc
读取当前session所设置的参数
假如我们通过alter session的方式设置了sql_trace 此设置在正常情况下是不能通过show parameter方式获取的 需要我们通过dbms_system read_ev来获取
lishixinzhi/Article/program/Oracle/201311/17241
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)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。
在经济管理的日常工作中,常常需要把某些相关的数据放进这样的“仓库”,并根据管理的需要进行相应的处理。
例如,企业或事业单位的人事部门常常要把本单位职工的基本情况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表中,这张表就可以看成是一个数据库。有了这个"数据仓库"我们就可以根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。这些工作如果都能在计算机上自动进行,那我们的人事管理就可以达到极高的水平。此外,在财务管理、仓库管理、生产管理中也需要建立众多的这种"数据库",使其可以利用计算机实现财务、仓库、生产的自动化管理。
扩展资料
数据库,简单来说是本身可视为电子化的文件柜--存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等 *** 作。
数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度的特点、是与应用程序彼此独立的数据集合。
在经济管理的日常工作中,常常需要把某些相关的数据放进这样的"仓库",并根据管理的需要进行相应的处理。
例如,企业或事业单位的人事部门常常要把本单位职工的基本情况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表中,这张表就可以看成是一个数据库。有了这个"数据仓库"我们就可以根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。这些工作如果都能在计算机上自动进行,那我们的人事管理就可以达到极高的水平。此外,在财务管理、仓库管理、生产管理中也需要建立众多的这种"数据库",使其可以利用计算机实现财务、仓库、生产的自动化管理。
参考资料:
以上就是关于影响数据库性能的主要因素有哪些全部的内容,包括:影响数据库性能的主要因素有哪些、影响数据库性能的因素、决算出来数据库文件错误或非法外部数据怎么处理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)