如何使用查询显示系统统计信息?

时间:2017-01-04 16:19:16

标签: php oracle database-performance

好吧,我不得不说我对Oracle没有多少经验。我的问题是:

我有一台运行Oracle数据库的服务器。有时,它加载缓慢并挂起。我需要跟踪以了解原因。但我没有这个服务器的权限。我只能通过PDO运行查询。

这是我如何运行查询:

$db = new PDOOCI\PDO("192.168.x.x:xxxx/something.something;charset=AL32UTF8", "username", "password"); 
$status = $db->prepare("SELECT * FROM table");
$status->execute();
$r = $status->fetchAll();
var_dump($r);

所以,我希望我可以使用查询来收集有关服务器的一些信息,如CPU加载速度,内存,会话等,并实时绘制有关它的图表。通过这种方式,我可能知道它曾经在哪个时间减速。

我在下面尝试了一些查询,但没有返回任何内容。

$status = $db->prepare("SELECT sql_text FROM v$session");
$status = $db->prepare("SELECT * FROM v$process");
$status = $db->prepare("select * from V$OSSTAT");

我不确定自己是否走错了方向:(

1 个答案:

答案 0 :(得分:0)

这是一个相当困难的问题。它可能是除了数据库之外的其他因素可能导致系统变慢。这取决于你在服务器上的内容。

以下是关于如何收集有关当天发布的查询的信息的提示:每晚运行以了解数据库中发生的情况: 使用V$SQL Oracle系统视图

SELECT *
  FROM v$sql 
 WHERE to_date(last_load_time,'YYYY-MM-DD/HH24:MI:SS') > trunc(sysdate)

e.g。如果您只想要10个最昂贵的查询,请订购,然后选择10个顶行:

SELECT * FROM (
    SELECT sql_text, cpu_time, elapsed_time,  last_load_time 
      FROM v$sql 
     WHERE to_date(last_load_time,'YYYY-MM-DD/HH24:MI:SS') > trunc(sysdate)
  ORDER BY cpu_time desc
)WHERE ROWNUM <10
  

注意:由于您在v$session或其他系统视图中看不到任何内容,因此您可能需要向DBA询问数据库的额外授权。例如您可能需要角色SELECT_CATALOG_ROLE或类似的