В окне списка сессий PL/SQL Developer (Tools -> Sessions) можно добавить кучу полезных вкладок, которые будут выполнять скрипты и запросы, получая любое значение из подсвеченной сессии в списке через :[ИМЯ_КОЛОНКИ v$session]. В настоящее время в стоковом PL/SQL Developer (версия 11) есть 5 вкладок:
Cursors
SQL Text
Statistics
Locks
Sql Monitor
Добавлять свои вкладки можно при помощи кнопки с гаечным ключиком -> Details
В настоящий момент я использую
План запроса dbms_xplan
Особое внимание /* concatenate */ из последней строчки – результат будет сцеплен в одно поле, его можно скопировать и вставить в другое окно для детального анализа.
SELECT t.plan_table_output || CHR(10) plan_table_output
FROM table(dbms_xplan.display_cursor(:sql_id, :sql_child_number,format => 'ADVANCED')) t
/* concatenate */
План запроса из v$
SELECT decode(id, 1, child_number) || decode(:sql_address, '00', '-P') AS c,
output_rows AS tot_r,
last_output_rows AS r,
rpad(' ', depth * 3) || operation || ' ' || options ||
nvl2(object_name, ' -> ', '') || object_name AS op,
cost,
cardinality AS card,
bytes,
access_predicates AS "ACCESS",
filter_predicates AS filter,
round(temp_space / 1024 / 1024) AS temp_mb,
partition_start || nvl2(partition_start, ' - ', '') || partition_stop AS p,
partition_id,
other,
other_tag,
cpu_cost,
io_cost,
distribution,
object_owner,
optimizer,
position,
search_columns,
executions,
last_starts,
starts,
last_cr_buffer_gets,
cr_buffer_gets,
last_cu_buffer_gets,
cu_buffer_gets,
last_disk_reads,
disk_reads,
last_disk_writes,
disk_writes,
round(last_elapsed_time / 1000000, 2) AS last_ela_time,
round(elapsed_time / 1000000, 2) AS elapsed_time,
policy,
estimated_optimal_size,
estimated_onepass_size,
last_memory_used,
last_execution,
last_degree,
total_executions,
optimal_executions,
onepass_executions,
multipasses_executions,
round(active_time / 1000000, 2) AS active_time_avg,
max_tempseg_size,
last_tempseg_size
FROM (SELECT *
FROM v$sql_plan_statistics_all
WHERE address = hextoraw(:sql_address)
AND hash_value = :sql_hash_value
UNION ALL
SELECT *
FROM v$sql_plan_statistics_all
WHERE address = hextoraw(:prev_sql_addr)
AND hash_value = :prev_hash_value) t
CONNECT BY address = PRIOR address
AND hash_value = PRIOR hash_value
AND child_number = PRIOR child_number
AND PRIOR id = parent_id
START WITH id = 1
ORDER BY address, hash_value, child_number DESC, id, position
SQL Workarea
Объем памяти, потребляемой сессией. Правда не очень часто пригождается
SELECT operation_type,
policy,
estimated_optimal_size,
estimated_onepass_size,
last_memory_used,
last_execution,
last_degree,
total_executions,
optimal_executions,
onepass_executions,
multipasses_executions,
active_time,
max_tempseg_size,
last_tempseg_size
FROM v$sql_workarea
WHERE address = hextoraw(:sql_address)
AND hash_value = :sql_hash_value
Таким способом достаточно удобно заниматься troubleshooting’ом, если известа сессия, которая испытывает проблемы. Очень удобный и мощный механизм.
Комментариев нет:
Отправить комментарий