首页 > 数据库 >[20240313]使用tpt ashtop.sql脚本的困惑.txt

[20240313]使用tpt ashtop.sql脚本的困惑.txt

时间:2024-03-18 20:46:29浏览次数:22  
标签:03 ashtop Distinct 2024 -- tpt sql id

[20240313]使用tpt ashtop.sql脚本的困惑.txt

--//使用tpt ashtop.sql脚本遇到的问题,做一些分析以及说明:

1.环境:
[email protected]:9014/ywdb> @ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

2.问题:
[email protected]:9014/ywdb> @ ashtop sql_id sql_id='2cqbg080kv9uh' &day
    Total                                                                         Distinct Distinct
  Seconds     AAS %This   SQL_ID        FIRST_SEEN          LAST_SEEN           Execs Seen  Tstamps
--------- ------- ------- ------------- ------------------- ------------------- ---------- --------
        5      .0  100% | 2cqbg080kv9uh 2024-03-12 14:24:04 2024-03-13 10:54:39          1        5

--//Distinct Execs Seen =1,Distinct Tstamps=5,按照我以前的理解,Distinct Execs Seen相当于执行次数,Distinct Tstamps相当于
--//总的执行时间(注:两条相同sql语句同时执行,sample_time总会有一点点不同,相同的概率应该很低),除非很密集的执行也许可能出现
--//sample_time相同的情况.
--//我看过这条sql语句应该很快完成,根本不可能1次执行需要5秒.

--//感觉那里不对。

3.分析:
--//查看ashtop.sql脚本:
...
      , COUNT(DISTINCT sql_exec_start||':'||sql_exec_id) dist_sqlexec_seen
      , COUNT(DISTINCT sample_time) dist_timestamps
...

SELECT sql_id, sql_exec_start || ':' || sql_exec_id, sample_time
  FROM gV$ACTIVE_SESSION_HISTORY
 WHERE     sql_id = '2cqbg080kv9uh'
       AND sample_time BETWEEN SYSDATE - 1 AND SYSDATE;

SQL_ID        SQL_EXEC_START||':'||SQL_EXEC_ID SAMPLE_TIME
------------- -------------------------------- -----------------------
2cqbg080kv9uh :                                2024-03-12 21:38:48.048
2cqbg080kv9uh :                                2024-03-13 10:54:39.810
2cqbg080kv9uh :                                2024-03-13 08:15:53.122
2cqbg080kv9uh :                                2024-03-12 18:41:53.370
2cqbg080kv9uh :                                2024-03-12 14:24:04.705
       
--//噢!! 原来gV$ACTIVE_SESSION_HISTORY视图有一些情况并没有抓取到SQL_EXEC_START,SQL_EXEC_ID的值,这样看到dist_sqlexec_seen=1.
--//不清楚怎么时候会出现这样的情况。

4.总结:
--//Distinct Execs Seen,Distinct Tstamps 只能作为参考.
--//感觉tpt ashtop.sql脚本应该修改为:
COL dist_sqlexec_seen1  HEAD "Distinct|Execs Seen1" FOR 999999
...
, COUNT(DISTINCT decode(sql_exec_start||':'||sql_exec_id,':',to_char(sample_time,'yyyymmdd hh24:mi:ss.ff3'),sql_exec_start||':'||sql_exec_id)) dist_sqlexec_seen1
--//或者再增加一个字段也许更加合理一些.

[email protected]:9014/ywdb> @ ashtop sql_id sql_id='g7ytdh9mxt1s0' &day
    Total                                                                         Distinct Distinct    Distinct
  Seconds     AAS %This   SQL_ID        FIRST_SEEN          LAST_SEEN           Execs Seen  Tstamps Execs Seen1
--------- ------- ------- ------------- ------------------- ------------------- ---------- -------- -----------
      991      .0  100% | g7ytdh9mxt1s0 2024-03-17 11:52:15 2024-03-18 11:51:11        636      987         991

[email protected]:9014/ywdb> @ sql_id g7ytdh9mxt1s0
--SQL_ID = g7ytdh9mxt1s0
select count ( :"SYS_B_0" ) from BSOFT_TEST_CONNECT ;

--//这条语句执行频率非常高, 执行很快,dist_timestamps=987,如果前面dist_sqlexec_seen表示执行次数,明显不妥.
--//dist_sqlexec_seen1=991,说明有4次(991-987)的sample_time存在重复的.

标签:03,ashtop,Distinct,2024,--,tpt,sql,id
From: https://www.cnblogs.com/lfree/p/18081345

相关文章

  • 动态SQL-条件分页
    动态SQL根据条件获取到不同的sql语句.主要是where部分发生变化。动态sql的实现,使用的是mybatis提供的标签ifchoose(when,otherwise)trim(where,set)foreach......
  • sql Server
    目录导出sql导出sqlwin导出;ssms操作;1:右键:2:点击下一步:3:选则是否为所有表:4:选择脚本保存位置:......
  • MySQL复习笔记
    MySQL概述-mysql启动netstartmysql80netstopmysql80-mysql客户端连接mysql-uroot-pSQLsql分类分类全称说明DDLDataDefinitionLanguage数据定义语言,用来定义数据库对象DMLDataManipulationLanguage数据操作语言,用来对数据库表中的数据进行增删改DQLData......
  • mysql索引(索引失效,遵循最左前缀,使用1.全值匹配 2.覆盖索引,失效:索引加函数,范围查询右边
    1.遵循联合索引最左列原则当表中创建了一个联合索引idx_name_age_position案例演示1.当我们在执行sql语句:以name为where条件时,我们可以用到索引EXPLAINSELECT*FROMemployeesWHEREname='LiLei';2.当我们在执行sql语句:以age为where条件时,索引就会失效......
  • sqli注入详解——>sqli-labs less-1~65
    目录1、基础知识(1)注入的分类基于从服务器接收到的响应基于如何处理输入的SQL查询(数据类型)基于程度和顺序的注入(哪里发生了影响)基于注入点的位置上的(2)系统函数(3)字符串连接函数(4)一般用于尝试的语句(5)union操作符的介绍SQLUNION语法SQLUNIONALL语法(6)sql中......
  • mysql null值比较
    在SQL查询中,使用NULL值的比较需要使用ISNULL或ISNOTNULL运算符,而不是使用等号(=)进行比较。如果您想筛选出bc.id不为NULL的记录,可以使用ISNOTNULL运算符进行条件判断。以下是修改后的示例查询:sql复制SELECT*FROMbadgesASbLEFTJOINbadge_categori......
  • MySQL忘记数据库密码,怎么连接数据库(Windows环境)
    一、Navicat连接过数据库,还有连接历史记录1.找回原密码(1)打开注册列表【win+R】-->【regedit】打开注册表 (2)查找Navicat密码保存位置,找到数据库名【数据库名称ruoyi】计算机\HKEY_CURRENT_USER\SOFTWARE\PremiumSoft\Navicat\Servers\ruoyi在右侧找到pwd属性,右键点击【修改......
  • Joomla SQL注入漏洞(CVE-2017-8917)
    环境搭建参考vulhub中文文档:https://github.com/vulhub/vulhub/blob/master/joomla/CVE-2017-8917/README.zh-cn.md安装vulhub,然后cdvulhub/joomla/CVE-2017-8917dockercomposeup-d如果报端口冲突的错可以修改文件:docker-compose.yml中的端口此时能访问http://......
  • Linux安装Mysql5.7数据库
    一、前置条件系统版本:Linux CentOS7.5MySQL版本:mysql5.7.31二、操作步骤2.1、关闭mysql服务servicemysqldstop提示使用命令:systemctlstopmysqld.service2.2、grep查找已安装的mysql服务rpm-qa|grep-imysql2.3、卸载mysql:yum-yremove命令—......
  • Mysql,MongoDB,Redis的横纵向对比
    一,什么是MysqlMysql是一款安全,可以跨平台,高效率的数据库系统,运行速度高,安全性能高,支持面向对象,安全性高,并且成本比较低,支持各种开发语言,数据库的存储容量大,有许多的内置函数。二,什么是MongoDBMongoDB是基于分布式文件存储的数据库,是一个介于关系型数据库和非关系型数据库之......