当前位置:首页 » 编程语言 » 查看sql性能

查看sql性能

发布时间: 2024-10-28 14:41:43

Ⅰ 几个检查数据库性能的sql语句

SIMPLE:简单SELECT(不使用UNION或子查询等)
PRIMARY:最外面的SELECT
UNION:UNION中的第二个或后面的SELECT语句
DEPENDENTUNION:UNION中的第二个或后面的SELECT语句,取决于外面的查询
UNIONRESULT:UNION的结果。
SUBQUERY:子查询中的第一个SELECT
DEPENDENTSUBQUERY:子查询中的第一个SELECT,取决于外面的查询
DERIVED:导出表的SELECT(FROM子句的子查询)

Ⅱ PL/SQl怎么测试一个sql语句的性能

一段SQL代码写好以后,可以通过查看SQL的执行计划,初步预测该SQL在运行时的性能好坏,尤其是在发现某个SQL语句的效率较差时,我们可以通过查看执行计划,分析出该SQL代码的问题所在。

1、 打开熟悉的查看工具:PL/SQL Developer。
在PL/SQL Developer中写好一段SQL代码后,按F5,PL/SQL Developer会自动打开执行计划窗口,显示该SQL的执行计划。

2、 查看总COST,获得资源耗费的总体印象
一般而言,执行计划第一行所对应的COST(即成本耗费)值,反应了运行这段SQL的总体估计成本,单看这个总成本没有实际意义,但可以拿它与相同逻辑不同执行计划的SQL的总体COST进行比较,通常COST低的执行计划要好一些。

3、 按照从左至右,从上至下的方法,了解执行计划的执行步骤
执行计划按照层次逐步缩进,从左至右看,缩进最多的那一步,最先执行,如果缩进量相同,则按照从上而下的方法判断执行顺序,可粗略认为上面的步骤优先执行。每一个执行步骤都有对应的COST,可从单步COST的高低,以及单步的估计结果集(对应ROWS/基数),来分析表的访问方式,连接顺序以及连接方式是否合理。

4、 分析表的访问方式
表的访问方式主要是两种:全表扫描(TABLE ACCESS FULL)和索引扫描(INDEX SCAN),如果表上存在选择性很好的索引,却走了全表扫描,而且是大表的全表扫描,就说明表的访问方式可能存在问题;若大表上没有合适的索引而走了全表扫描,就需要分析能否建立索引,或者是否能选择更合适的表连接方式和连接顺序以提高效率。

5、 分析表的连接方式和连接顺序
表的连接顺序:就是以哪张表作为驱动表来连接其他表的先后访问顺序。
表的连接方式:简单来讲,就是两个表获得满足条件的数据时的连接过程。主要有三种表连接方式,嵌套循环(NESTED LOOPS)、哈希连接(HASH JOIN)和排序-合并连接(SORT MERGE JOIN)。我们常见得是嵌套循环和哈希连接。
嵌套循环:最适用也是最简单的连接方式。类似于用两层循环处理两个游标,外层游标称作驱动表,Oracle检索驱动表的数据,一条一条的代入内层游标,查找满足WHERE条件的所有数据,因此内层游标表中可用索引的选择性越好,嵌套循环连接的性能就越高。
哈希连接:先将驱动表的数据按照条件字段以散列的方式放入内存,然后在内存中匹配满足条件的行。哈希连接需要有合适的内存,而且必须在CBO优化模式下,连接两表的WHERE条件有等号的情况下才可以使用。哈希连接在表的数据量较大,表中没有合适的索引可用时比嵌套循环的效率要高。

Ⅲ 检查SQL语句性能

exlpain sql语句

Ⅳ 如何使用loadrunner测试SQL查询语句的性能

第一步测试准备 第二步配置ODBC数据源 第三步录制SQL语句在Sql Server查询分析器中的运行过程 第四步优化录制脚本设置事务 第五步改变查询数量级查看SQL语句的性能 第六步在controller中运行脚本 下面开始具体的介绍 测试准备阶段我们首先要确认测试数据库服务器我们可以在本地安装SQLSERVER数据库服务端及客户端也可以确定一台装好的SQL SERVER服务器 接下来准备测试数据对数据库测试时我们要考虑的不是SQL语句是否能够正确执行而是在某数量级的情况下SQL语句的执行效率及数据库服务的运行情况所以我们分别准备不同数量级的测试数据即根据实际的业务情况预估数据库中的记录数在本次讲解中我们不考虑业务逻辑也不考虑数据表之间的关系我们只建立一张表并向此表中加入不同数量级的数据如分别加入条条条条数据查看某SQL语句的执行效率 在查询分析器中运行如下脚本 创建测试数据库 create database loadrunner_test; use loadrunner_test 创建测试数据表 create table test_table (username varchar()sex intage intaddress varchar()post int) 通过一段程序插入不同数量级的记录具体的语法在这里就不多说了 declare @i int set @i=while @i< //循环次可以根据测试数据情况改变插入条数 begin BEGIN TRAN T insert into test_table (usernamesexageaddresspost) values (户瑞海+cast(@i as varchar)@i@i+北京市和平里+cast(@i as varchar)+号); IF @@ERROR <> begin rollback; select @@error end else begin commit; set @i = @i+ end end 好了执行完上述语句后建立的数据表中已经有条记录了下面进行第二步的操作配置ODBC数据源为了能让loadrunner能够通过ODBC协议连接到我们建立的SQL SERVER数据路我们需要在本机上建立ODBC数据源建立方法如下 控制面板—性能和维护—管理工具—数据源(ODBC)添加在列表中选择SQL SERVER点击完成根据向导输入数据源名称链接的服务器下一步输入链接数据库的用户名和密码更改链接的数据库完成ODBC的配置如果配置正确的话在最后一步点击测试数据源会弹出测试成功的提示 配置好ODBC数据源后就要录制SQL语句在查询分析器中的执行过程了 打开loadrunner选择ODBC协议 在start recording中的application type 选择win applicationprogram to record中录入SQL SERVER查询分析器的路径\安装目录\isqlwexe 开始录制首先通过查询分析器登录SQL SERVER在打开的查询分析器窗口中输入要测试的SQL语句如select * from test_table; 在查询分析器中执行该语句执行完成后结束录制 好了现在就可以看到loadrunner生成的脚本了(由于脚本过长在这里就不粘贴了有需要的朋友可以加我QQ我把脚本发给你们)通过这些语句我们可以看出登录数据库的过程执行SQL语句的过程 接下来我们来优化脚本我们分别为数据库登录部分和执行SQL语句的部分加一个事物在增加一个double的变量获取事务执行时间简单内容如下 Action() { double trans_time; //定义一个double型变量用来保存事务执行时间 lr_start_transaction(sqserver_login); //设置登录事务的开始 lrd_init(&InitInfo DBTypeVersion); //初始化链接(下面的都是loadrunner生成的脚本了大家可以通过帮助查到每个函数的意思) lrd_open_context(&CtxLRD_DBTYPE_ODBC ); lrd_db_option(Ctx OT_ODBC_OV_ODBC ); lrd_alloc_connection(&Con LRD_DBTYPE_ODBC Ctx /*Unused*/ ); ……………… trans_time=lr_get_transaction_ration( sqserver_login ); //获得登录数据库的时间 lr_output_message(sqserver_login事务耗时 %f 秒 trans_time); //输出该时间 lr_end_transaction(sqserver_login LR_AUTO); //结束登录事务 lr_start_transaction(start_select);//开始查询事务 lrd_cancel( Csr /*Unused*/ ); lrd_stmt(Csr select * from test_table;\r\n /*None*/ );//此句为执行的SQL lrd_bind_cols(Csr BCInfo_D ); lrd_fetch(Csr PrintRow ); …………… trans_time=lr_get_transaction_ration( start_select ); //获得该SQL的执行时间 lr_output_message(start_select事务耗时 %f 秒 trans_time); //输出该时间 lr_end_transaction(start_select LR_AUTO); //结束查询事务 优化后在执行上述脚本后就可以得到登录到数据库的时间及运行select * from test_table这条语句的时间了当然我们也可以根据实际情况对该条语句进行参数化可以测试多条语句的执行时间也可以将该语句改为调用存储过程的语句来测试存储过程的运行时间 接下来把该脚本在controller中运行设置虚拟用户数设置集合点这些操作我就不说了但是值得注意的是没有Mercury 授权的SQL SERVER用户license在运行该脚本时回报错提示You do not have a license for this Vuser type Please contact Mercury Interactive to renew your license我们公司穷啊买不起loadrunner所以我也无法继续试验希望有license朋友们监控一下运行结果! 最起码在VUGen中运行该脚本我们可以得到任意一个SQL语句及存储过程的执行时间如果我们测试的B/S结构的程序我们也可以通过HTML协议录制的脚本在CONTROLLER中监控SQL SERVER服务器的性能情况这样两方面结合起来就可以对数据库性能做一个完整的监控了

Ⅳ 如何查看SQL数据库内容

1、首先,打开SQL Server的电脑软件,进入软件加载界面等待加载。

Ⅵ 测试sql语句性能

有时候我们经常为我们的sql语句执行效率低下发愁 反复优化后 可还是得不到提高

那么你就用这条语句找出你sql到底是在哪里慢了

示例

SET STATISTICS io ON SET STATISTICS time ON go 你要测试的sql语句 select top * from TBL_Cot_RecStaticList go SET STATISTICS profile OFF SET STATISTICS io OFF SET STATISTICS time OFF

显示信息

SQL Server 分析和编译时间: CPU 时间 = 毫秒 占用时间 = 毫秒

( 行受影响) 表 TBL_Cot_RecStaticList 扫描计数 逻辑读取 次 物理读取 次 预读 次 lob 逻辑读取 次 lob 物理读取 次 lob 预读 次

SQL Server 执行时间: CPU 时间 = 毫秒 占用时间 = 毫秒 SQL Server 分析和编译时间: CPU 时间 = 毫秒 占用时间 = 毫秒

SQL Server 执行时间: CPU 时间 = 毫秒 占用时间 = 毫秒

lishixin/Article/program/net/201311/12652

Ⅶ 如何查询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性能监控,大家可以在网上搜索相关知识进行学习。


转载仅供参考,版权属于原作者

热点内容
ftp源码怎么发 发布:2024-10-28 17:09:36 浏览:836
解压玩假水 发布:2024-10-28 17:09:31 浏览:178
我的世界神奇宝贝服务器推荐电脑版 发布:2024-10-28 17:09:30 浏览:781
360借贷为什么提醒服务器繁忙 发布:2024-10-28 17:07:06 浏览:930
加密移动硬盘盒评测 发布:2024-10-28 17:07:04 浏览:796
c语言源程序是怎么编译 发布:2024-10-28 17:06:21 浏览:592
java的jdbc 发布:2024-10-28 17:00:58 浏览:703
默纳克万能服务器巨人通力怎么用 发布:2024-10-28 16:51:46 浏览:622
ip访问量用什么服务器好 发布:2024-10-28 16:51:41 浏览:399
java培训机构达内 发布:2024-10-28 16:31:18 浏览:245