List of tables accessed by Tuner
Oracle Tables Read by Tuner
- In order to extract the explain plan we create a table on Oracle named EMBARCADERO_EXPLAIN_PLAN.
- Outlines management creates a function called EMBT_GET_SIGNATURE that uses sys.outln_edit_pkg.generate_signature package
- For statistics we create a function called EMBT_DISPLAY_RAW
Component | Read | Write |
SGA | V$SQL, SYS.ALL_USERS | |
Outlines management | SYSTEM.OL$HINTS, USER_OUTLINES, DBA_OUTLINES, USER_OUTLINE_HINTS, DBA_OUTLINE_HINTS | SYSTEM.OL$HINTS, CREATE OUTLINE, ALTER OUTLINE, DROP OUTLINE |
Execution statistics | v$session, v$sesstat, v$statname, V$SQL_PLAN_STATISTICS | |
Index analysis | DBA_OBJECTS,, USER_OBJECTS, ALL_IND_COLUMNS, ALL_INDEXES,
all_constraints, all_cons_columns |
CREATE INDEX, DROP INDEX |
Statistics | USER_TAB_MODIFICATIONS, SYS.DBA_TAB_MODIFICATIONS, USER_TABLES, DBA_TABLES, USER_TAB_COLUMNS, SYS.DBA_TAB_COLUMNS, DBA_HISTOGRAMS, USER_HISTOGRAMS |
Example of giving grants to user via a role (as SYS):
- CREATE ROLE SQLTUNING NOT IDENTIFIED;
- GRANT SQLTUNING TO "CONNECT";
- GRANT SQLTUNING TO SELECT_CATALOG_ROLE;
- GRANT ANALYZE ANY TO SQLTUNING;
- GRANT CREATE ANY OUTLINE TO SQLTUNING;
- GRANT CREATE ANY PROCEDURE TO SQLTUNING;
- GRANT CREATE PROCEDURE TO SQLTUNING;
- GRANT CREATE ANY TABLE TO SQLTUNING;
- GRANT CREATE ANY TRIGGER TO SQLTUNING;
- GRANT CREATE ANY VIEW TO SQLTUNING;
- GRANT CREATE SESSION TO SQLTUNING;
- GRANT CREATE TRIGGER TO SQLTUNING;
- GRANT CREATE VIEW TO SQLTUNING;
- GRANT DROP ANY OUTLINE TO SQLTUNING;
- GRANT DROP ANY PROCEDURE TO SQLTUNING;
- GRANT DROP ANY TRIGGER TO SQLTUNING;
- GRANT DROP ANY VIEW TO SQLTUNING;
- GRANT SELECT ON SYS.V_$SESSION TO SQLTUNING;
- GRANT SELECT ON SYS.V_$SESSTAT TO SQLTUNING;
- GRANT SELECT ON SYS.V_$SQL TO SQLTUNING;
- GRANT SELECT ON SYS.V_$STATNAME TO SQLTUNING;
Once complete, you can assign the role to users who will be running tuning jobs:
- CREATE USER TUNINGUSER IDENTIFIED BY VALUES '05FFD26E95CF4A4B'
- DEFAULT TABLESPACE USERS
- TEMPORARY TABLESPACE TEMP
- QUOTA UNLIMITED ON USERS
- PROFILE DEFAULT
- ACCOUNT UNLOCK;
- GRANT SQLTUNING TO TUNINGUSER;
- ALTER USER TUNINGUSER DEFAULT ROLE SQLTUNING;
Collecting SQL Execution Statistics:
- SELECT (
- SELECT
- ROUND(S.LAST_ELAPSED_TIME/1000000,2)
- FROM
- V$SQL_PLAN_STATISTICS S
- WHERE
- S.ADDRESS=P.ADDRESS and
- s.hash_value=p.hash_value and
- s.child_number=p.child_number AND
- S.OPERATION_ID=P.ID
- ) "ELAPSED"
- FROM V$SQL_PLAN P
- where p.sql_id = ?
- order by P.CHILD_NUMBER, p.id
- select
- n.name,
- value,
- sysdate
- from
- sys.v_$sesstat s,
- sys.v_$statname n
- where
- s.sid = :sid and
- s.statistic#=n.statistic# and
- n.name in ('CPU used by this session',
- 'physical reads',
- 'consistent gets',
- 'db block gets',
- 'session logical reads',
- 'parse time cpu',
- 'sorts (memory)',
- 'sorts (disk)',
- 'sorts (rows)',
- 'opened cursors current')
- SELECT
- p.id,
- (SELECT S.STARTS
- FROM V$SQL_PLAN_STATISTICS S
- WHERE
- S.ADDRESS = P.ADDRESS AND
- s.hash_value = p.hash_value AND
- s.child_number = p.child_number AND
- S.OPERATION_ID = P.ID) "STARTS",
- (SELECT S.LAST_OUTPUT_ROWS
- FROM V$SQL_PLAN_STATISTICS S
- WHERE
- S.ADDRESS = P.ADDRESS AND
- s.hash_value = p.hash_value AND
- s.child_number = p.child_number AND
- S.OPERATION_ID = P.ID) "ROWS",
- (SELECT ROUND (S.LAST_ELAPSED_TIME / 1000000,
- 2)
- FROM V$SQL_PLAN_STATISTICS S
- WHERE
- S.ADDRESS = P.ADDRESS AND
- s.hash_value = p.hash_value AND
- s.child_number = p.child_number AND
- S.OPERATION_ID = P.ID) "ELAPSED",
- (SELECT S.LAST_CR_BUFFER_GETS
- FROM V$SQL_PLAN_STATISTICS S
- WHERE
- S.ADDRESS = P.ADDRESS AND
- s.hash_value = p.hash_value AND
- s.child_number = p.child_number AND
- S.OPERATION_ID = P.ID) "CR_GETS",
- (SELECT S.LAST_CU_BUFFER_GETS
- FROM V$SQL_PLAN_STATISTICS S
- WHERE
- S.ADDRESS = P.ADDRESS AND
- s.hash_value = p.hash_value AND
- s.child_number = p.child_number AND
- S.OPERATION_ID = P.ID) "CU_GETS",
- (SELECT S.LAST_DISK_READS
- FROM V$SQL_PLAN_STATISTICS S
- WHERE
- S.ADDRESS = P.ADDRESS AND
- s.hash_value = p.hash_value AND
- s.child_number = p.child_number AND
- S.OPERATION_ID = P.ID) "READS",
- (SELECT S.LAST_DISK_WRITES
- FROM V$SQL_PLAN_STATISTICS S
- WHERE
- S.ADDRESS = P.ADDRESS AND
- s.hash_value = p.hash_value AND
- s.child_number = p.child_number AND
- S.OPERATION_ID = P.ID) "WRITES",
- P.CARDINALITY "Cardinality"
- FROM V$SQL_PLAN P
- WHERE p.sql_id = ?
- ORDER BY
- P.CHILD_NUMBER,
- p.id