include 'start.php'; $sql_id = u::request_val('sql_id'); # # links to previous sql for sessions # good for recursive lob sql # # - need to change to look at v$open_cursor and find the lob object # - this would be better, I think # $enterprise = $db_obj->enterprise_edition(); $sql = "select distinct prev_sql_id prev_sql_id from v\$session where sql_id = :sql_id and prev_sql_id != :sql_id"; $binds = ''; $binds[] = array(":sql_id", $sql_id); $cur = $db_obj->exec_sql($sql, $binds); while ($rec = oci_fetch_object($cur)) { p("Prev sql's : " . sql_details_link($sql_id, $db) . "\n"); } # # Hidden sql # #include 'look_for_hidden_sql.php'; # # Sql text # $sql = "select sql_fulltext sql_fulltext from v\$sqlarea where sql_id = :sql_id"; $binds = ''; $binds[] = array(":sql_id", $sql_id); p('<pre>'); # # Links more sql details #
$binds = ''; $binds[] = array(":sql_mins_hist", $sql_mins_hist); $binds[] = array(":session_type", $session_type); $cur = $db_obj->exec_sql($sql, $binds); u::start_tag('div', 'style="' . $div_styles_top_10s . '"'); u::start_tag('table', 'id="data1"'); u::tr('<th>sql_id</th><th>% of ' . $sql_mins_hist . ' mins busy</th><th>Execs</th><th>Avg Disk Reads</th><th>Avg Secs</th><th>SQL Text</th>', '', 1); $i = 0; while ($rec = oci_fetch_object($cur)) { # # Row formatting # $class_str = u::odd_even_class_str($i++); u::start_tag('tr', $class_str); $highlight_graph_str = "onmouseover=\"highlight('{$rec->SQL_ID}');\" "; $sql_cell = "<div {$highlight_graph_str}>" . sql_details_link($rec->SQL_ID, $db) . "</div>"; u::td($sql_cell, '', 1); # # Barchart # $values = array($rec->PERCENT_ON_CPU, $rec->PERCENT_USER_IO, $rec->PERCENT_SYSTEM_IO, $rec->PERCENT_BLOCKED, $rec->PERCENT_OTHER); u::start_tag('td', 'style="padding:0px 0px 0px 0px"'); include 'bar_chart.php'; u::end_tag('td'); u::td($rec->EXECS, '', 1); u::td($rec->AVG_DISK_READS, '', 1); u::td($rec->AVG_SECS, '', 1); u::tagged_item('td', $rec->SQL_TEXT, 'style="border-right:0px;font-size:xx-small;font-family:Courier New;"', 1); u::end_tag('tr'); } #
td($key); } p('</tr>'); $print_header = 0; } if (@$_GET['all_secs']) { u::fill_in_missing_snaps($last_snap_time, $rec->HOUR_MIN_SEC); $last_snap_time = $rec->HOUR_MIN_SEC; } # # Row data # p('<tr>'); foreach ($rec as $key => $val) { if ($key === 'SQL_ID') { td(sql_details_link($val, $db)); } else { if ($key === 'CURRENT_OBJ#' and $val > 0) { td("<a href=./obj_details.php?db={$db}&obj_id={$val}>{$val}</a>"); } else { if ($key === 'BLOCKING_SESSION' and $val) { td("<a href=./session_drilldown.php?db={$db}&sid={$val}&snaps_table={$snaps_table}>{$val}</a>"); } else { td($val); } } } } p('</tr>'); #p( "<tr><td>$rec->S_TIME</td><td>$rec->SESSION_STATE</td></tr>" ); }
u::start_tag('tr', $class_str); $sid_cell = "<div " . highlight_js_str($rec->SID) . ">" . drilldown_links($rec->SID, $db, '', $snaps_table) . "</div>"; u::td($sid_cell, '', 1); u::td($rec->USERNAME, '', 1); # # Covert seconds to % for plotting # $values = array($rec->SECONDS_ON_CPU, $rec->SECONDS_USER_IO, $rec->SECONDS_SYSTEM_IO, $rec->SECONDS_BLOCKED, $rec->SECONDS_OTHER); foreach ($values as $key => $value) { $values[$key] = round($value * 100 / ($mins_hist * 60)); } u::start_tag('td', 'style="padding:0;"'); # # Draw percentages as a bar chart # u::info('Draw Bar chart', 1); include 'bar_chart.php'; u::info('Draw Bar chart - Done', 1); u::end_tag('td'); $highlight_graph_str = "onmouseover=\"highlight('{$rec->CURRENT_BLOCKING_SESSION}');\" "; $sid_cell = "<div {$highlight_graph_str}>" . drilldown_links($rec->CURRENT_BLOCKING_SESSION, $db, '', $snaps_table) . "</div>"; u::td($sid_cell, '', 1); u::td("<div " . highlight_js_str($rec->CURRENT_SQL_ID) . ">" . sql_details_link($rec->CURRENT_SQL_ID, $db) . "</div>", '', 1); u::td("<div " . highlight_js_str($rec->PREV_SQL_ID) . ">" . sql_details_link($rec->PREV_SQL_ID, $db) . "</div>", '', 1); u::td($rec->CURRENT_PROGRAM, '', 1); u::td($rec->CURRENT_MACHINE, 'style="border-right:0px;"', 1); u::end_tag('tr'); } u::filler_rows($table_rows, $i, 8); u::end_tag('table'); u::end_tag('div');