`
OneAPM_Official
  • 浏览: 22678 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

衡量企业应用数据库性能的6大指标

阅读更多

【编者按】本文作者是 Omed Habib,在其职业生涯中花费了大量的时间不断探索一些新方法以提高大型 Web 应用的性能状况。本篇文章中,作者详细介绍了数据库的六大性能指标,帮助我们更好对数据库性能进行评估和改进。

在前一篇文章中,我们曾对 SQL 和非 SQL 进行过简要介绍。本文基于这些主题,通过回顾最重要的六个性能指标,帮助评估企业应用数据库的健康状况。

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

  • 事务
  • 查询性能
  • 用户和查询冲突
  • 容量
  • 配置
  • NoSQL 数据库
 

1、事务

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

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

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

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

衡量企业应用数据库性能的6大指标

图1-基于基线评估当前事务响应时间

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

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

 

2、查询性能

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

选择过多冗余数据

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

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

表之间的低效联接

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

索引过多或过少

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

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

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

 

3、用户和查询冲突

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

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

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

事务锁和死锁

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

批处理操作造成资源争夺

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

 

4、容量

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

CPU 不足或 CPU 速度太慢

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

IOPS 不足的慢磁盘

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

全部或错误配置的磁盘

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

内存不足

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

网速慢

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

 

5、配置

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

缓冲区缓存太小

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

没有查询缓存

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

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

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

 

6、NoSQL 数据库

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

挑剔事务

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

复杂数据库

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

一致联接

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

 

Schema设计的灵活性

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

资源密集型

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

 

7、总结

本文主要介绍了评估数据库状况时需要考量的六个最主要的因素:

  • 事务
  • 查询性能
  • 用户和查询冲突
  • 容量
  • 配置
  • NoSQL 数据库

(编译自:https://dzone.com/articles/top-6-database-performance-metrics-to-monitor-in-e

OneAPM 为您提供端到端的 Java 应用性能解决方案,我们支持所有常见的 Java 框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,Java 监控从来没有如此简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客

本文转自 OneAPM 官方博客

 

 
分享到:
评论

相关推荐

    SQL语言在数据库安全方面的应用(全文).docx

    因此无论是小到企业、 单位,大到政府、国家,数据库的安全性保障与控制都势在必行。 一方面,由于数据库需要对外提供数据与 信息,因此在数据进行访问与存取时需要保障安全性;另一方面,数据在存储与传输的过程中...

    MySQLMTOP数据库监控工具 2.2.zip

    MySQLMTOP提供一个基于Web的界面,可令您全面深入地了解数据库性能、可用性、关键活动等;直观地查看一台服务器、自定义的应用组或所有服务器。一组丰富的实时图形和历史图形将帮助您深入了解详细的服务器统计信息。...

    Sybase IQ“绿色数据库”构建绿色信息

    作为衡量企业绿色信息环境的标准,Sybase提出绿色数据指标——SPoT:SPoT=S*P/T,每单位资源所能处理的源数据及其相关性能指数。传统数据库的SPoT值均小于1, 而Sybase IQ有别于所有同类数据库产品(Oracle、DB2、SQL...

    数据库的应用类型

    概述  一般来说,可将数据库的类型分为OLTP(Online Transaction Processing,联机事务处理)和OLAP(Online Analysis Processing,...衡量OLTP系统的一个重要的性能指标是系统性能,具体体现为实时响应时间。  O

    软件性能测试指标介绍

    作为一家非盈利性机构,事务处理性能委员会(TPC)负责定义诸如TPC-C、TPC-H和TPC-W基准测试之类的事务处理与数据库性能基准测试,并依据这些基准测试项目发布客观性能数据。TPC基准测试采用极为严格的运行环境,并且...

    数据库计算机三级等级考试

    五、性能指标: 1、数据操作响应时间。 2、系统吞吐量。 3、允许并发访问的最大用户数。 4、每TPS代价值。用于衡量系统性价比 的指标。 六、系统设计: 1、概念设计。(ER图) 2、逻辑设计。(ER图转关系模式) ...

    MySQLMTOP数据库监控系统-其他

    如查询缓存命中率,Key_buffer_read_hits,Key_buffer_write_hits,Thread_cache_hits,Key_blocks_used_rate,Created_tmp_disk_tables_rate等信息,根据相关性能指标可以对服务器核心参数进行调整优化。

    【7A文】服务器性能计算.docx

    这种基准测试项目将对包括查询、更新及队列式小批量事务在内的广泛数据库功能进行测试,因此对于数据库密集型应用来说,TPC-C被许多IT部门视为衡量真实OLTP系统性能的有效指示器。 接口服务器性能计算 接口服务器在...

    服务器配置与选型.doc

    磁盘驱动器的性能指标 " " "(1)主轴转速。主轴转速是决定硬盘内部传输速度和持续传输" " "速度的第一决定因素。硬盘的转速多为7200rpm,10000rpm和15" " "000rpm。从目前的情况来看,10000rpm及以上的SCSI硬盘具有...

    基于数据库管理的数据采集系统的设计及实现.docx

    A/D的转换装置性能优劣衡量指标即为:采样的分辨率(A/D的转换装置具体位数)、A/D的转换速度。系统内部采用12位数分辨率数据的采集卡。 图1 数据的采集系统总体架构示意图 2、系统软件的设计与实现 管理数据库内...

    TPE:衡量公司合作者绩效指标的系统,允许根据他们的绩效建立激励措施

    它包含用于评估月度和年度性能(性能配置文件和故障历史记录),虚拟笔记本,具有提醒和后续通知的任务计划器,按设备进行的移动历史记录,按托盘进行的存在报告以及具有选项卡团队分配的用户配置文件的应用程序。...

    计算机应用基础知识点总结.doc

    17、衡量一台微型计算机的主要性能指标包括 主频 、字长内存容量和存取周期、高速缓冲存储器〔Cache、总线速度 18、键盘〔考点:四个区自己整理 19、鼠标 分类:无线、有线、蓝牙 操作:选择、单击、双击、拖动、...

    loadrunner测试资料

    webload提供巡航控制器cruise control的功能,利用巡航控制器,可以预定义web应用程序应该满足的性能指标,然后测试系统是否满足这些需求指标;cruise control能够自动把负载加到web应用程序,并将在此负荷下能够访问程序...

    自考计算机应用基础知识点.docx

     9、 计算机性能的衡量指标有: 10、 计算机语言的发展经历了机器语言,汇编语言,高级语言;计算机能识别的语言是计算机语言; 11、 显示器的分辩率是显示器一屏能显示的像素数目,是品价一台计算机显示器好坏的...

    oracle动态性能表

    数据库使用状态的一些关键指标:  CPU used by this session:所有session的cpu占用量,不包括后台进程。这项统计的单位是百分之x秒.完全调用一次不超过10ms  db block changes:那部分造成SGA中数据块变化的...

    自考计算机应用基础知识点-范本模板.docx

     9、 计算机性能的衡量指标有: 10、 计算机语言的发展经历了机器语言,汇编语言,高级语言;计算机能识别的语言是计算机语言; 11、 显示器的分辩率是显示器一屏能显示的像素数目,是品价一台计算机显示器好坏的...

    服务器能力计算(1).docx

    TPC- C 通过模拟一个批发商的货物管理系统,衡量硬件服务器的性能指标( 查询、统计功能的执行效率) 。TPC 对具体的测试环境, 也做了详细的规定。 1.2.1 测试环境 批发公司有W个仓库, 每个仓库供应10 个地区, 其中每个...

    计算机应用基础教案win7-+-.doc

    掌握计算机软件系统及硬件系统构成,了解微机的硬件系统,包括掌握微机系统 " "硬件组成及主要性能指标。了解微机的软件系统,包括掌握机器指令与计算机语言(" "机器语言,汇编语言,高级语言)的概念、系统软件与...

    服务器配置与选型(1).doc

    磁盘驱动器的性能指标 " " "(1)主轴转速。主轴转速是决定硬盘内部传输速度和持续传输" " "速度的第一决定因素。硬盘的转速多为7200rpm,10000rpm和15" " "000rpm。从目前的情况来看,10000rpm及以上的SCSI硬盘具有...

    JMeter操作手册大全.docx

    计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。 现代的操作系统为了最大利用内存,在内存中存放了缓存,因此内存利用率100%并不代表内存有瓶颈,衡量系统内有有瓶颈主要靠SWAP...

Global site tag (gtag.js) - Google Analytics