当前位置:首页 » 数据仓库 » 数据库性能如何衡量
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

数据库性能如何衡量

发布时间: 2022-05-04 01:29:39

数据库的性能方面的东西

1.应该是根据所建立信息系统客户的人数、预算的总数据量、平均访问量选择数据库。
2.性能指标就比较多了,你可以考虑一下数据库的可移植性(适用于不同的操作系统平台),数据库的并发性(同时操作一条数据或者一张表时数据的锁定方式),还有就是数据库的恢复能力(在出现异常数据能够最快完成恢复及备份的时间)。 --还有安全性,这个也很重要

300个人左右的b/s系统我推荐db2,并发性比sqlserver高,你要用常用的话甲骨文也可以,一般c/s系统都用sqlserver(中),access、mysql(小)

如果要说特点,真的是太多了,10000个字都不够写,你如果要买他们的产品,可以上网站或者找售前帮你

价格的话:sqlserver正版的大概就是10来万,db2要买服务,基本一年是15万到20万(基本服务),面向的应用我上面说了,b/s系统适合db2和甲骨文

这个性能是无法度量的,还要看你应用的情况,db2的应用最大的数据量理论上可以上亿,只要你数据库设计得合理,软件可以不要钱,基本服务一年是15到20万,不包括数据仓库,软件就是靠的增值服务,但是你不买服务就没有技术支持,而且商用的话你也有风险

如果你非要把其他搜到的东西列在这里,什么具体性能指标也没什么意义,还不如看ibm的db2白皮书,以我的经验来看,你应用在300个人在500个人的在线量,百万条数据,同时访问数据库,用db2不存在什么大的负载,非要说什么特点的话,就是一个字贵,db2的硬件的要求比较高,最好能上存储.

sqlserver存在一些安全性问题,而且大多数都运行在windows平台,对安全性的要求都不一样,你去了解一下aix就知道了

⑵ 数据库性能优化基准测试的度量指标有哪些

当前业界常见的服务器性能指标有:
TPC-C
TPC-E
TPC-H
SPECjbb2005
SPECjEnterprise2010
SPECint2006 及 SPECint_rate_2006
SPECfp2006 及 SPECfp_rate_2006
SAP SD 2-Tier
LINPACK
RPE2
一、TPC (Transaction Processing Performance Council) 即联机交易处理性能协会, 成立于1988年的非盈利组织,各主要软硬件供应商均参与,成立目标: 为业界提供可信的数据库及交易处理基准测试结果,当前发 布主要基准测试为:
TPC-C : 数据库在线查询(OLTP)交易性能
TPC-E : 数据库在线查询(OLTP)交易性能
TPC-H : 商业智能 / 数据仓库 / 在线分析(OLAP)交易性能
1.TPC-C测试内容:数据库事务处理测试, 模拟一个批发商的订单管理系统。实际衡量服务器及数据库软件处理在线查询交易处理(OLTP)的性能表现. 正规 TPC-C 测试结果发布必须提供 tpmC值, 即每分钟完成多少笔 TPC-C 数据库交易 (TPC-C Transaction Per Minute), 同时要提供性价比$/tpmC。如果把 TPC-C 测试结果写成为 tpm, TPM, TPMC, TPCC 均不属正规。
2.TPC-E测试内容:数据库事务处理测试,模拟一个证券交易系统。与TPC-C一样,实际衡量服务器及数据库软件处理在线查询交易处理(OLTP)的性能表现。正规TPC-E测试结果必须提供tpsE值,即每秒钟完成多少笔TPC-E数据库交易(transaction per second),同时提供$/tpsE。测试结果写成其他形式均不属正规。
对比:TPC-E测试较TPC-C测试,在测试模型搭建上增加了应用服务器层,同时增加了数据库结构的复杂性,测试成本相对降低。截止目前,TPC-E的测试结果仅公布有50种左右,且测试环境均为PC服务器和windows操作系统,并无power服务器的测试结果。除此之外,TPC官方组织并未声明TPC-E取代TPC-C,所以,说TPC-E取代TPC-C并没有根据。

⑶ 数据库的性能是由什么来衡量

c
性能 当然说的就是速度啊

⑷ 如何进行数据库性能分析

使用RichAPM可以直接针对不同类型的数据库性能进行分析,包括MySQL、Oracle、SQL Server三类关系型数据库及Memcache、redis两类非关系型数据库。

⑸ 如何衡量mysql库的健康度

  • 系统mysql的进程数

  • 查看 mysql buffer pool hit

  • ps -ef | grep "mysql" | grep -v "grep" | wc –l

    2.Slave_running

    mysql > show status like 'Slave_running';

    如果系统有一个从复***务器,这个值指明了从服务器的健康度

    3.Threads_connected

    mysql > show status like 'Threads_connected';

    当前客户端已连接的数量。这个值会少于预设的值,但你也能监视到这个值较大,这可保证客户端是处在活跃状态。

    4.Threads_running

    mysql > show status like 'Threads_running';

    如果数据库超负荷了,你将会得到一个正在(查询的语句持续)增长的数值。这个值也可以少于预先设定的值。这个值在很短的时间内超过限定值是没问题的。当Threads_running值超过预设值时并且该值在5秒内没有回落时, 要同时监视其他的一些值。

    5.Aborted_clients

    mysql > show status like 'Aborted_clients';

    客户端被异常中断的数值,即连接到mysql服务器的客户端没有正常地断开或关闭。对于一些应用程序是没有影响的,但对于另一些应用程序可能你要跟踪该值,因为异常中断连接可能表明了一些应用程序有问题。

    6.Questions

    mysql> show status like 'Questions';

    每秒钟获得的查询数量,也可以是全部查询的数量,根据你输入不同的命令会得到你想要的不同的值。

    7.Handler_*

    mysql> show status like 'Handler_%';

    如果你想监视底层(low-level)数据库负载,这些值是值得去跟踪的。

    如果Handler_read_rnd_next值相对于你认为是正常值相差悬殊,可能会告诉你需要优化或索引出问题了。Handler_rollback表明事务被回滚的查询数量。你可能想调查一下原因。

    8.Opened_tables

    mysql> show status like 'Opened_tables';

    缓存没有命中的数量。如果该值很大,你可能需要增加table_cache的数值。典型地,你可能想要这个值每秒打开的表数量少于1或2。

    9.Select_full_join

    mysql> show status like 'Select_full_join';

    没有主键(key)联合(Join)的执行。该值可能是零。这是捕获开发错误的好方法,因为一些这样的查询可能降低系统的性能。

    10.Select_scan

    mysql> show status like 'Select_scan';

    执行全表搜索查询的数量。在某些情况下是没问题的,但占总查询数量该比值应该是常量(即Select_scan/总查询数量商应该是常数)。如果你发现该值持续增长,说明需要优化,缺乏必要的索引或其他问题。

    11.Slow_queries

    mysql> show status like 'Slow_queries';

    超过该值(--long-query-time)的查询数量,或没有使用索引查询数量。对于全部查询会有小的冲突。如果该值增长,表明系统有性能问题。

    12.Threads_created

    mysql> show status like 'Threads_created';

    该值应该是低的。较高的值可能意味着你需要增加thread_cache的数值,或你遇到了持续增加的连接,表明了潜在的问题。

    13.客户端连接进程数

    shell> mysqladmin processlist

    mysql> show processlist;

    你可以通过使用其他的统计信息得到已连接线程数量和正在运行线程的数量,检查正在运行的查询花了多长时间是一个好主意。如果有一些长时间的查询,管理员可以被通知。你可能也想了解多少个查询是在"Locked"的状态—---该值作为正在运行的查询不被计算在内而是作为非活跃的。一个用户正在等待一个数据库响应。

    14.innodb状态

    mysql> show engine innodb statusG;

    该语句产生很多信息,从中你可以得到你感兴趣的。首先你要检查的就是“从最近的XX秒计算出来的每秒的平均负载”。

    (1)Pending normal aio reads:该值是innodb io请求查询的大小(size)。如果该值大到超过了10—20,你可能有一些瓶颈。

    (2)reads/s, avg bytes/read, writes/s, fsyncs/s:这些值是io统计。对于reads/writes大值意味着io子系统正在被装载。适当的值取决于你系统的配置。

    (3)Buffer pool hit rate:这个命中率非常依赖于你的应用程序。当你觉得有问题时请检查你的命中率

    (4)inserts/s, updates/s, deletes/s, reads/s:有一些Innodb的底层操作。你可以用这些值检查你的负载情况查看是否是期待的数值范围。

⑹ 如何检查oracle数据库性能

oracle的性能判断需要综合数据库的多个运行指标来判断:
1、进程数量和占用cpu:这个主要看有没有长时间占用cpu的进行。通常会判断大出sql,需要优化;这个可以用执行计划或者awr报告查看;
2、内存占用:主要用系统命令查看ora_占用和系统总内存的比例,swap的使用率;通常swap使用率低就没事;这个主要使用系统命令;
3、磁盘占用率:防止磁盘空间不足,需要的主要在系统和用户表空间、RMAN等操作上;这个主要使用系统命令;RMAN命令查看

⑺ 衡量数据库性能的重要指标

具体来说,本文包括以下内容:

  • 事务

  • 查询性能

  • 用户和查询冲突

  • 容量

  • 配置

  • NoSQL 数据库

  • 事务

    事务可以观察真实用户的行为:能够在应用交互时捕获实时性能。众所周知,测量事务的性能包括获取整个事务的响应时间和组成事务的各个部分的响应时间。通常我们可以用这些响应时间与满足事务需求的基线对比,来确定当前事务是否处于正常状态。

    如果你只想衡量应用的某个方面,那么可以评估事务的行为。所以,尽管容器指标能够提供更丰富的信息,并且帮助你决定何时对当前环境进行自动测量,但你的事务就足以确定应用性能。无需向应用程序服务器获取 CPU 的使用情况,你更应该关心用户是否完成了事务,以及该事务是否得到了优化。

    补充一个小知识点,事务是由入口点决定的,通过该入口点可以启动事务与应用进行交互。

    一旦定义了事务,会在整个应用生态系统中对其性能进行测量,并将每个事务与基线进行比对。例如,我们可能会决定当事务的响应时间与基线相比,一旦慢于平均响应时间的两个标准差是否就应该判定为异常,如图1所示。

  • 图1-基于基线评估当前事务响应时间
  • 用于评估事务的基线与正在进行的事务活动在时间上是一致的,但事务会由每个事务执行来完善。例如,当你选定一个基线,在当前事务结束之后,将事务与平均响应时间按每天的小时数和每周的天数进行对比,所有在那段时间内执行的事务都将会被纳入下周的基线中。通过这种机制,应用程序可以随时间而变化,而无需每次都重建原始基线;你可以将其看作是一个随时间移动的窗口。

    总之,事务最能反映用户体验的测量方法,所以也是衡量性能状况最重要的指标。

    查询性能
    最容易检测到查询性能是否正常的指标就是查询本身。由查询引起的问题可能会导致时间太长而无法识别所需数据或返回数据。所以不妨在查询中排查以下问题。

    1. 选择过多冗余数据

    编写查询语句来返回适当的数据是远远不够的,很可能你的查询语句会返回太多列,从而导致选择行和检索数据变得异常缓慢。所以,最好是列出所需的列,而不是直接用 SELECT*。当需要在特定字段中查询时,该计划可能会确定一个覆盖索引从而加快结果返回。覆盖索引通常会包含查询中使用的所有字段。这意味着数据库可以仅从索引中产生结果,而不需要通过底层表来构建。

    另外,列出结果中所需的列不仅可以减少传输的数据,还能进一步提高性能。

    2. 表之间的低效联接

    联接会导致数据库将多组数据带到内存中进行比较,这会产生多个数据库读取和大量 CPU。根据表的索引,联接还可能需要扫描两个表的所有行。如果写不好两个大型表之间的联接,就需要对每个表进行完整扫描,这样的计算量将会非常大。其他会拖慢联接的因素包括联接列之间存在不同的数据类型、需要转换或加入包含 LIKE 的条件,这样就会阻止使用索引。另外,还需注意避免使用全外联接;在恰当的时候使用内部联接只返回所需数据。

    3. 索引过多或过少

    如果查询优化没有可用的索引时,数据库会重新扫描表来产生查询结果,这个过程会生成大量的磁盘输入/输出(I/O)。适当的索引可以减少排序结果的需要。虽然非唯一值的索引在生成结果时,不能像唯一索引那样方便。如果键越大,索引也会变大,并通过它们创建更多的磁盘 I/O。大多数索引是为了提高数据检索的性能,但也需要明白索引本身也会影响数据的插入和更新,因为所有相关联的指标都必须更新。

    4. 太多的SQL导致争用解析资源

    任何 SQL 查询在执行之前都必须被解析,在生成执行计划之前需要对语法和权限进行检查。由于解析非常耗时,数据库会保存已解析的 SQL 来重复利用,从而减少解析的耗时。因为 WHERE 语句不同,所以使用文本值的查询语句不能被共享。这将导致每个查询都会被解析并添加到共享池中,由于池的空间有限,一些已保存的查询会被舍弃。当这些查询再次出现时,则需要重新解析。

    用户和查询冲突
    数据库支持多用户,但多用户活动也可能造成冲突。

    1. 由慢查询导致的页/行锁定

    为了确保查询产生精确的结果,数据库必须锁定表以防止在运行读取查询时再发生其他的插入和更新行为。如果报告或查询相当缓慢,需要修改值的用户可能需要等待至更新完成。锁提示能帮助数据库使用最小破坏性的锁。从事务数据库中分离报表也是一种可靠的解决方法。

    2. 事务锁和死锁

    当两个事务被阻塞时会出现死锁,因为每一个都需要使用被另一个占用的资源。当出现一个普通锁时,事务会被阻塞直到资源被释放。但却没有解决死锁的方案。数据库会监控死锁并选择终止其中一个事务,释放资源并允许该事务继续进行,而另一个事务则回滚。

    3. 批处理操作造成资源争夺

    批处理过程通常会执行批量操作,如大量的数据加载或生成复杂的分析报告。这些操作是资源密集型的,但可能影响在线用户的访问应用的性能。针对此问题最好的解决办法是确保批处理在系统使用率较低时运行,比如晚上,或用单独的数据库进行事务处理和分析报告。

    容量
    并不是所有的数据库性能问题都是数据库问题。有些问题也是硬件不合适造成的。

    1. CPU 不足或 CPU 速度太慢

    更多 CPU 可以分担服务器负载,进一步提高性能。数据库的性能不仅是数据库的原因,还受到服务器上运行其他进程的影响。因此,对数据库负载及使用进行审查也是必不可少的。由于 CPU 的利用率时时在变,在低使用率、平均使用率和峰值使用率的时间段分别检查该指标可以更好地评估增加额外的 CPU 资源是否有益。

    2. IOPS 不足的慢磁盘

    磁盘性能通常以每秒输入/输出操作(IOPS)来计。结合 I/O 大小,该指标可以衡量每秒的磁盘吞吐量是多少兆。同时,吞吐量也受磁盘的延迟影响,比如需要多久才能完成请求,这些指标主要是针对磁盘存储技术而言。传统的硬盘驱动器(HDD)有一个旋转磁盘,通常比固态硬盘(SSD)或闪存更慢。直到近期,SSD 虽然仍比 HDD 贵,但成本已经降了下来,所以在市场上也更具竞争力。

    3. 全部或错误配置的磁盘

    众所周知,数据库会被大量磁盘访问,所以不正确配置的磁盘可能带来严重的性能缺陷。磁盘应该适当分区,将系统数据目录和用户数据日志分开。高度活跃的表应该区分以避免争用,通过在不同磁盘上存放数据库和索引增加并行放置,但不要将操作系统和数据库交换空间放置在同一磁盘上。

    4. 内存不足

    有限或不恰当的物理内存分配会影响数据库性能。通常我们认为可用的内存更多,性能就越好。监控分页和交换,在多个非繁忙磁盘中建立多页面空间,进一步确保分页空间分配足够满足数据库要求;每个数据库供应商也可以在这个问题上提供指导。

    5. 网速慢

    网络速度会影响到如何快速检索数据并返回给终端用户或调用过程。使用宽带连接到远程数据库。在某些情况下,选择 TCP/IP 协议而不是命名管道可显着提高数据库性能。

    配置

    每个数据库都需设置大量的配置项。通常情况下,默认值可能不足以满足数据库所需的性能。所以,检查所有的参数设置,包括以下问题。

    1. 缓冲区缓存太小

    通过将数据存储在内核内存,缓冲区缓存可以进一步提高性能同时减少磁盘 I/O。当缓存太小时,缓存中的数据会更频繁地刷新。如果它再次被请求,就必须从磁盘重读。除了磁盘读取缓慢之外,还给 I/O 设备增添了负担从而成为瓶颈。除了给缓冲区缓存分配足够的空间,调优 SQL 查询可以帮助其更有效地利用缓冲区缓存。

    2. 没有查询缓存

    查询缓存会存储数据库查询和结果集。当执行相同的查询时,数据会在缓存中被迅速检索,而不需要再次执行查询。数据会更新失效结果,所以查询缓存是唯一有效的静态数据。但在某些情况下,查询缓存却可能成为性能瓶颈。比如当锁定为更新时,巨大的缓存可能导致争用冲突。

    3. 磁盘上临时表创建导致的 I/O 争用

    在执行特定的查询操作时,数据库需要创建临时表,如执行一个 GROUP BY 子句。如果可能,在内存中创建临时表。但是,在某些情况下,在内存中创建临时表并不可行,比如当数据包含 BLOB 或 TEXT 对象时。在这些情况下,会在磁盘上创建临时表。大量的磁盘 I / O 都需要创建临时表、填充记录、从表中选择所需数据并在查询完成后舍弃。为了避免影响性能,临时数据库应该从主数据库中分离出来。重写查询还可以通过创建派生表来减少对临时表的需求。使用派生表直接从另一个 SELECT 语句的结果中选择,允许将数据加到内存中而不是当前磁盘上。

    NoSQL 数据库

    NoSQL 的优势在于它处理大数据的能力非常迅速。但是在实际使用中,也应该综合参考 NoSQL 的缺点,从而决定是否适合你的用例场景。这就是为什么NoSQL通常被理解为 “不仅仅是 SQL”,说明了 NoSQL 并不总是正确的解决方案,也没必要完全取代 SQL,以下分别列举出五大主要原因。

    1. 挑剔事务

    难以保持 NoSQL 条目的一致性。当访问结构化数据时,它并不能完全确保同一时间对不同表的更改都生效。如果某个过程发生崩溃,表可能会不一致。一致事务的典型代表是复式记账法。相应的信贷必须平衡每个借方,反之亦然。如果双方数据不一致则不能输入。NoSQL 则可能无法保证“收支平衡”。

    2. 复杂数据库

    NoSQL 的支持者往往以高效代码、简单性和 NoSQL 的速度为傲。当数据库任务很简单时,所有这些因素都是优势。但当数据库变得复杂,NoSQL 会开始分解。此时,SQL 则比 NoSQL 更好地处理复杂需求,因为 SQL 已经成熟,有符合行业标准的接口。而每个 NoSQL 设置都有一个唯一的接口。

    3. 一致联接

    当执行 SQL 的联接时,由于系统必须从不同的表中提取数据进行键对齐,所以有一个巨大的开销。而 NoSQL 似乎是一个空想,因为缺乏联接功能。所有的数据都在同一个表的一个地方。当检索数据时,它会同时提取所有的键值对。问题在于这会创建同一数据的多个副本。这些副本也必须更新,而这种情况下,NoSQL 没有功能来确保更新。

    4. Schema设计的灵活性

    由于 NoSQL 不需要 schema,所以在某些情况下也是独一无二的。在以前的数据库模型中,程序员必须考虑所有需要的列能够扩展,能够适应每行的数据条目。在 NoSQL 下,条目可以有多种字符串或者完全没有。这种灵活性允许程序员迅速增加数据。但是,也可能存在问题,比如当有多个团体在同一项目上工作时,或者新的开发团队接手一个项目时。开发人员能够自由地修改数据库,也可能会不断实现各种各样的密钥对。

    5. 资源密集型

    NoSQL 数据库通常比关系数据库更加资源密集。他们需要更多的 CPU 储备和 RAM 分配。出于这个原因,大多数共享主机公司都不提供 NoSQL。你必须注册一个 VPS 或运行自己的专用服务器。另一方面,SQL 主要是在服务器上运行。初期的工作都很顺利,但随着数据库需求的增加,硬件必须扩大。单个大型服务器比多个小型服务器昂贵得多,价格呈指数增长。所以在这种企业计算场景下,使用 NoSQL 更为划算,例如那些由谷歌和 Facebook 使用的服务器。

⑻ 如何评估和测试Mysql及oracle数据库性能

1:服务器环境

操作系统:Red Hat Enterprise Linux Server release 5.5 (Tikanga)

CPU:Intel(R) Xeon(R) CPU E5607 @ 2.27GHz 8核

内存:16G

Mysql:Ver 14.14 Distrib 5.5.21, for Linux (x86_64)

Oracle:OracleDatabase 11g Enterprise Edition Release

详细数据测试(操作通过存储过程完成)

数据插入

50并发Mysql插入性能图示(横坐标:当前数据总量,纵坐标:每秒执行次数){平均值:4841.98}