The following query will give you the gaps exactly :
Insert one more record...
INSERT INTO sensor_data VALUES ('UNIT1',10,1.235,SYSDATE);
COMMIT;
SELECT measurement_id - gap gap_from, measurement_id - 1 gap_to
FROM ( SELECT measurement_id, CASE measurement_id - NVL((LAG(measurement_id) OVER (ORDER BY measurement_id)),0)
WHEN 1
THEN 0
ELSE measurement_id - (LAG(measurement_id)
OVER (ORDER BY measurement_id)) -1
END gap
FROM sensor_data )
WHERE gap > 0;
Output will look like:
-GAP_FROM GAP_TO
3 3
6 6
8 9
Hope you find this useful.
Wednesday, April 30, 2008
How to get the 100 most expensive sql statements
The below sql statement will give the 100 most expensive sql statements for a scpecific user,in the following example i run it for user SCOTT.
SELECT *
FROM (SELECT SQL_TEXT, B.USERNAME, ROUND(ELAPSED_TIME / 1000000, 3) ELAPSED_TIME_SECS,
ROUND((A.DISK_READS / DECODE(A.EXECUTIONS, 0, 1, A.EXECUTIONS)), 2) AS DISK_READS_PER_EXEC,
A.DISK_READS, A.BUFFER_GETS,
ROUND((A.BUFFER_GETS / DECODE(A.EXECUTIONS, 0, 1, A.EXECUTIONS)), 2) AS BUFFER_GETS_PER_EXEC,
A.PARSE_CALLS, A.SORTS, A.EXECUTIONS, A.LOADS, A.ROWS_PROCESSED,
100 - ROUND(100 * A.DISK_READS / GREATEST(A.BUFFER_GETS, 1), 2) AS HIT_RATIO,
A.FIRST_LOAD_TIME, SHARABLE_MEM, PERSISTENT_MEM, RUNTIME_MEM, ROUND(CPU_TIME / 1000000, 3) AS CPU_TIME_SECS,
ROUND((CPU_TIME / 1000000) / DECODE(A.EXECUTIONS, 0, 1, A.EXECUTIONS), 3) AS CPU_TIME_SECS_PER_EXECUTE,
ROUND((ELAPSED_TIME / 1000000) / DECODE(A.EXECUTIONS, 0, 1, A.EXECUTIONS), 3) AS ELAPSED_TIME_SECS_PER_EXECUTE, ADDRESS, HASH_VALUE
FROM V_$SQLAREA A, ALL_USERS B
WHERE A.PARSING_USER_ID = B.USER_ID
AND B.USERNAME IN ('SCOTT')
ORDER BY ELAPSED_TIME DESC)
WHERE ROWNUM <>
SELECT *
FROM (SELECT SQL_TEXT, B.USERNAME, ROUND(ELAPSED_TIME / 1000000, 3) ELAPSED_TIME_SECS,
ROUND((A.DISK_READS / DECODE(A.EXECUTIONS, 0, 1, A.EXECUTIONS)), 2) AS DISK_READS_PER_EXEC,
A.DISK_READS, A.BUFFER_GETS,
ROUND((A.BUFFER_GETS / DECODE(A.EXECUTIONS, 0, 1, A.EXECUTIONS)), 2) AS BUFFER_GETS_PER_EXEC,
A.PARSE_CALLS, A.SORTS, A.EXECUTIONS, A.LOADS, A.ROWS_PROCESSED,
100 - ROUND(100 * A.DISK_READS / GREATEST(A.BUFFER_GETS, 1), 2) AS HIT_RATIO,
A.FIRST_LOAD_TIME, SHARABLE_MEM, PERSISTENT_MEM, RUNTIME_MEM, ROUND(CPU_TIME / 1000000, 3) AS CPU_TIME_SECS,
ROUND((CPU_TIME / 1000000) / DECODE(A.EXECUTIONS, 0, 1, A.EXECUTIONS), 3) AS CPU_TIME_SECS_PER_EXECUTE,
ROUND((ELAPSED_TIME / 1000000) / DECODE(A.EXECUTIONS, 0, 1, A.EXECUTIONS), 3) AS ELAPSED_TIME_SECS_PER_EXECUTE, ADDRESS, HASH_VALUE
FROM V_$SQLAREA A, ALL_USERS B
WHERE A.PARSING_USER_ID = B.USER_ID
AND B.USERNAME IN ('SCOTT')
ORDER BY ELAPSED_TIME DESC)
WHERE ROWNUM <>
Subscribe to:
Posts (Atom)
