Ну, я должен сказать, что у меня нет большого опыта работы с 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);
Итак, я надеюсь, что смогу использовать запрос, чтобы собрать некоторую информацию о сервере, такую как скорость загрузки процессора, память, сеанс и т. Д., И составить диаграмму об этом в режиме реального времени. Таким образом, я могу знать, в какое время дня он замедлялся.
Я попробовал какой-то запрос ниже, но он ничего не возвращает.
$status = $db->prepare("SELECT sql_text FROM v$session");
$status = $db->prepare("SELECT * FROM v$process");
$status = $db->prepare("select * from V$OSSTAT");
Я не уверен, нахожусь ли я на неправильном пути или нет 🙁
Это довольно сложный вопрос. Это может быть не только ваша база данных, что может привести к замедлению работы системы. Это зависит от того, что у вас на сервере.
Вот подсказка о том, как вы можете собрать информацию о запросах, которые были запущены в тот же день: запускайте его каждую ночь, чтобы узнать, что произошло в вашей базе данных: использование V$SQL
Системное представление Oracle
SELECT *
FROM v$sql
WHERE to_date(last_load_time,'YYYY-MM-DD/HH24:MI:SS') > trunc(sysdate)
например Если вы хотите только 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
или другие виды системы, вам может потребоваться обратиться к администратору базы данных за дополнительными грантами в базе данных. например вам может понадобиться что-то вроде ролиSELECT_CATALOG_ROLE
или похожие
Других решений пока нет …