数据库性能诊断
‘壹’ Mysql性能指标TPS\QPS\IOPS如何压测
性能指标概览
QPS(Queries Per Second)是每秒查询数,代表数据库每秒执行的SQL数量,包括insert、select、update、delete等操作。
TPS(Transactions Per Second)是每秒事务数,对于数据库而言,是每秒处理的事务数,以commit成功次数为准。
IOPS(每秒磁盘进行的I/O操作次数)衡量磁盘性能,是I/O操作的次数。
指标计算方式
2.1 TPS
适用于innodb Transactions Per Second,系统整体处理能力取决于处理能力最低模块的TPS值。
2.2 QPS
适用于InnoDB和MyISAM引擎,衡量每秒的查询率,对应fetches/sec,最大吞吐能力。
2.3 IOPS
IOPS是衡量磁盘性能的指标,是单位时间内系统能处理的I/O请求数量,重要指标包括Total IOPS和吞吐量。
测试IOPS的工具包括Iometer, IoZone, FIO等,需要根据应用负载特征选择合理的指标进行测量和对比分析。
3. mysqlslap
3.1 压测
mysqlslap是MySQL自带的性能测试和压力测试工具,可以模拟多个客户端对数据库施压,生成报告了解数据库性能。
3.2 案例
案例由IT邦德提供,通过juejin.cn进行链接分享。
‘贰’ MySQL数据库三个关键性能指标TPS\QPS\IOPS
今天,我们将深入探讨MySQL数据库及其他数据库的三个关键性能指标:TPS(每秒事务处理数)、QPS(每秒查询率)与IOPS(每秒输入输出次数)。
首先,我们来谈谈TPS(Transactions Per Second),这是衡量服务器每秒处理事务数量的指标。一个事务被定义为客户机向服务器发送请求,并在服务器回应后结束计时,用于计算完成的事务个数。TPS一般用作衡量系统处理能力的指标,系统整体性能取决于处理能力最低模块的TPS值。
接下来,我们了解QPS(Queries Per Second),它衡量特定查询服务器在给定时间内处理请求的流量。QPS也是系统吞吐能力的关键指标之一,对应每秒响应请求数,表明服务器的最大处理能力。
最后,我们探讨IOPS(Input/Output Per Second),这是衡量磁盘性能的重要指标。IOPS表示单位时间内系统能处理的I/O请求数量,关键在于衡量随机读写频繁的应用,如OLTP(Online Transaction Processing),其性能受IOPS指标影响显着。磁盘性能的关键因素包括寻道时间、旋转延迟与数据传输时间,其中,寻道时间与旋转延迟对IOPS影响最大。
要计算磁盘的最大IOPS,我们可使用公式:IOPS = 1000 ms / (Tseek + Trotation),忽略数据传输时间。举例而言,对于7200 rpm、10K rpm、15K rpm的磁盘,其最大IOPS理论值分别为:333.33、333.33、200。
评估数据库性能时,需要结合实际应用负载特征,选择合适的IOPS指标进行测试与分析,以此选择最佳的存储介质与软件系统。
‘叁’ 如何查询oracle 数据库性能,sql资源占用
作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作。下面简单介绍下一些查看oracle性能的一些实用方法:
1、查询每台机器的连接数
selectt.MACHINE,count(*)fromv$sessiontgroupbyt.MACHINE
这里所说的每台机器是指每个连接oracle数据库的服务器,每个服务器都有配置连接数据库的连接数,以websphere为例,在数据源中,每个数据源都有配置其最大/最小连接数。
执行SQL后,可以看到每个服务器连接oracle数据库的连接数,若某个服务器的连接数非常大,或者已经达到其最大连接数,那么这台服务器上的应用可能有问题导致其连接不能正常释放。
2、查询每个连接数的sql_text
v$session表里存在的连接不是一直都在执行操作,如果sql_hash_value为空或者0,则该连接是空闲的,可以查询哪些连接非空闲,web3是机器名,就是WebSphereApplicationServer的主机名。
selectt.sql_hash_value,t.*fromv$sessiontwheret.MACHINE='web3'andt.sql_hash_value!=0
这个SQL查询出来的结果不能看到具体的SQL语句,需要看具体SQL语句的执行下面的方法。
3、查询每个活动的连接执行什么sql
selectsid,username,sql_hash_value,b.sql_text
fromv$sessiona,v$sqltextb
wherea.sql_hash_value=b.HASH_VALUEanda.MACHINE='web3'
orderbysid,username,sql_hash_value,b.piece
orderby这句话的作用在于,sql_text每条记录不是保存一个完整的sql,需要以sql_hash_value为关键id,以piece排序,如图
Username是执行SQL的数据库用户名,一个sql_hash_value下的SQL_TEXT组合成一个完整的SQL语句。这样就可以看到一个连接执行了哪些SQL。
4、.从V$SQLAREA中查询最占用资源的查询
selectb.usernameusername,a.disk_readsreads,a.executionsexec,
a.disk_reads/decode(a.executions,0,1,a.executions)rds_exec_ratio,
a.sql_textStatement
fromv$sqlareaa,dba_usersb
wherea.parsing_user_id=b.user_id
anda.disk_reads>100000
orderbya.disk_readsdesc;
用buffer_gets列来替换disk_reads列可以得到占用最多内存的sql语句的相关信息。
V$SQL是内存共享SQL区域中已经解析的SQL语句。
该表在SQL性能查看操作中用的比较频繁的一张表,关于这个表的详细信息大家可以去http://apps.hi..com/share/detail/299920#上学习,介绍得比较详细。我这里主要就将该表的常用几个操作简单介绍一下:
1、列出使用频率最高的5个查询:
selectsql_text,executions
from(selectsql_text,executions,
rank()over
(orderbyexecutionsdesc)exec_rank
fromv$sql)
whereexec_rank<=5;
该查询结果列出的是执行最频繁的5个SQL语句。对于这种实用非常频繁的SQL语句,我们需要对其进行持续的优化以达到最佳执行性能。
2、找出需要大量缓冲读取(逻辑读)操作的查询:
selectbuffer_gets,sql_text
from(selectsql_text,buffer_gets,
dense_rank()over
(orderbybuffer_getsdesc)buffer_gets_rank
fromv$sql)
wherebuffer_gets_rank<=5;
这种需要大量缓冲读取(逻辑读)操作的SQL基本是大数据量且逻辑复杂的查询中会遇到,对于这样的大数据量查询SQL语句更加需要持续的关注,并进行优化。
3、持续跟踪有性能影响的SQL。
SELECT*FROM(
SELECTPARSING_USER_ID,EXECUTIONS,SORTS,
COMMAND_TYPE,DISK_READS,sql_textFROMv$sqlarea
ORDERBYdisk_readsDESC
)
WHEREROWNUM<10
这个语句在SQL性能查看中用的比较多,可以明显的看出哪些SQL会影响到数据库性能。
本文主要介绍了使用SQL查询方式查看oracle数据库SQL性能的部分常用方法。此外还有许多工具也能实现SQL性能监控,大家可以在网上搜索相关知识进行学习。
转载仅供参考,版权属于原作者
‘肆’ 如何评估和测试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}