вы можете сделать что-то вроде этого
foreach($tags as &$tag){
$tag['value'] = $tag['url'];
unset($tag['url']);
}
Я нашел, что этот SQL-оператор был полезным местом для запуска (извините, я не могу приписать это исходному автору; я нашел его где-нибудь в Интернете):
SELECT * FROM
(SELECT
sql_fulltext,
sql_id,
elapsed_time,
child_number,
disk_reads,
executions,
first_load_time,
last_load_time
FROM v$sql
ORDER BY elapsed_time DESC)
WHERE ROWNUM < 10
/
Это находит главные SQL-операторы, которые в настоящее время хранятся в кэше SQL, заказанном прошедшим временем. Операторы будут исчезать из кэша со временем, таким образом, это не могла бы быть никакая хорошая попытка диагностировать пакетное задание прошлой ночи, когда Вы прокручиваетесь в работу в полдень.
можно также попытаться заказать disk_reads и выполнением. Выполнение полезно, потому что некоторые некачественные нанесения отправляют тот же SQL-оператор слишком много раз. Этот SQL предполагает, что Вы используете, связывают переменные правильно.
Затем можно взять sql_id
и child_number
из оператора и подать их в этот baby:-
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id', &child));
, который Это показывает фактическому плану от кэша SQL и полному тексту SQL.
Вы могли взять средний буфер, добирается на выполнение в течение периода действия экземпляра:
SELECT username,
buffer_gets,
disk_reads,
executions,
buffer_get_per_exec,
parse_calls,
sorts,
rows_processed,
hit_ratio,
module,
sql_text
-- elapsed_time, cpu_time, user_io_wait_time, ,
FROM (SELECT sql_text,
b.username,
a.disk_reads,
a.buffer_gets,
trunc(a.buffer_gets / a.executions) buffer_get_per_exec,
a.parse_calls,
a.sorts,
a.executions,
a.rows_processed,
100 - ROUND (100 * a.disk_reads / a.buffer_gets, 2) hit_ratio,
module
-- cpu_time, elapsed_time, user_io_wait_time
FROM v$sqlarea a, dba_users b
WHERE a.parsing_user_id = b.user_id
AND b.username NOT IN ('SYS', 'SYSTEM', 'RMAN','SYSMAN')
AND a.buffer_gets > 10000
ORDER BY buffer_get_per_exec DESC)
WHERE ROWNUM <= 20
Это зависит, какую версию оракула Вы имеете, для 9i и ниже , Statspack - то, что Вы после, 10 г и выше, Вы хотите awr, и эти инструменты дадут Вам главный sql's и много другого материала.
Существует много возможных способов сделать это, но иметь Google для tkprof
нет никакого GUI..., это - совершенно командная строка и возможно касание, пугающее для новичков Oracle; но это очень мощно.
Эта ссылка похожа на хорошее начало:
При поиске я получил следующий запрос, который делает задание с одним предположением (время выполнения запросов> 6 секунд)
<час>ИЗБРАННОЕ имя пользователя, sql_text, sofar, totalwork, единицы
ОТ v$sql, v$session_longops
ГДЕ sql_address = адрес И sql_hash_value = адрес ORDER BY hash_value
, hash_value, child_number;
<час>я думаю выше запроса, перечислит детали для текущего пользователя.
Комментарии приветствуются!!
Вы могли найти диск интенсивным полным сканированием таблицы с чем-то вроде этого:
SELECT Disk_Reads DiskReads, Executions, SQL_ID, SQL_Text SQLText,
SQL_FullText SQLFullText
FROM
(
SELECT Disk_Reads, Executions, SQL_ID, LTRIM(SQL_Text) SQL_Text,
SQL_FullText, Operation, Options,
Row_Number() OVER
(Partition By sql_text ORDER BY Disk_Reads * Executions DESC)
KeepHighSQL
FROM
(
SELECT Avg(Disk_Reads) OVER (Partition By sql_text) Disk_Reads,
Max(Executions) OVER (Partition By sql_text) Executions,
t.SQL_ID, sql_text, sql_fulltext, p.operation,p.options
FROM v$sql t, v$sql_plan p
WHERE t.hash_value=p.hash_value AND p.operation='TABLE ACCESS'
AND p.options='FULL' AND p.object_owner NOT IN ('SYS','SYSTEM')
AND t.Executions > 1
)
ORDER BY DISK_READS * EXECUTIONS DESC
)
WHERE KeepHighSQL = 1
AND rownum <=5;