好吧,我不得不说我对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");
我不确定自己是否走错了方向:(
答案 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
或类似的