173 lines
8.3 KiB
MySQL
173 lines
8.3 KiB
MySQL
|
|
SET HEA OFF PAGES 0;
|
||
|
|
CLEAR COLUMNS;
|
||
|
|
SPO /tmp/cs_driver_&&cs_mysid..sql;
|
||
|
|
--
|
||
|
|
PRO PRO
|
||
|
|
PRO PRO TOP_KEYS (with approximate counts)
|
||
|
|
PRO PRO ~~~~~~~~
|
||
|
|
--
|
||
|
|
WITH /* cs_top_keys_sql.sql kiev */
|
||
|
|
v_sqlarea_m AS (
|
||
|
|
SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */
|
||
|
|
DISTINCT
|
||
|
|
hash_value, address
|
||
|
|
FROM v$sqlarea
|
||
|
|
WHERE sql_id = '&&cs_sql_id.'
|
||
|
|
),
|
||
|
|
v_object_dependency_m AS (
|
||
|
|
SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */
|
||
|
|
DISTINCT
|
||
|
|
o.to_owner, o.to_name
|
||
|
|
FROM v$object_dependency o,
|
||
|
|
v_sqlarea_m s
|
||
|
|
WHERE o.from_hash = s.hash_value
|
||
|
|
AND o.from_address = s.address
|
||
|
|
AND o.to_type = 2 -- table
|
||
|
|
)
|
||
|
|
SELECT /* cs_top_keys_sql.sql kiev */
|
||
|
|
'PRO'||CHR(10)||
|
||
|
|
'PRO TABLE : '||i.table_owner||'.'||i.table_name||CHR(10)||
|
||
|
|
'PRO INDEX : '||i.owner||'.'||i.index_name||CHR(10)||
|
||
|
|
'PRO COLUMNS: ('||LISTAGG(c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||')'||CHR(10)||
|
||
|
|
'PRO ~~~~~~~'||CHR(10)||
|
||
|
|
'WITH top AS (SELECT '||CASE WHEN t.num_rows > 1e9 THEN '1000' WHEN t.num_rows > 1e8 THEN '100' WHEN t.num_rows > 1e7 THEN '10' ELSE '1' END||' * COUNT(*) AS VERSIONS, ROUND(100 * COUNT(*) / SUM(COUNT(*)) OVER (), 6) AS ROWS_PERCENT,'||CHR(10)||
|
||
|
|
'SUM(CASE t.KIEVLIVE WHEN ''Y'' THEN '||CASE WHEN t.num_rows > 1e9 THEN '1000' WHEN t.num_rows > 1e8 THEN '100' WHEN t.num_rows > 1e7 THEN '10' ELSE '1' END||' ELSE 0 END) AS KIEVLIVE_Y, SUM(CASE t.KIEVLIVE WHEN ''N'' THEN '||CASE WHEN t.num_rows > 1e9 THEN '1000' WHEN t.num_rows > 1e8 THEN '100' WHEN t.num_rows > 1e7 THEN '10' ELSE '1' END||' ELSE 0 END) AS KIEVLIVE_N, '||CHR(10)||
|
||
|
|
'MIN(t.KIEVTXNID) AS MIN_KIEVTXNID, MAX(t.KIEVTXNID) AS MAX_KIEVTXNID, '||CHR(10)||
|
||
|
|
LISTAGG('''"'||LOWER(c.column_name)||'": "''||t.'||LOWER(c.column_name), '||''",''||CHR(10)||' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||'||''"'' AS KEY_VALUE '||CHR(10)||
|
||
|
|
'FROM '||i.table_owner||'.'||i.table_name||CHR(10)||
|
||
|
|
CASE WHEN t.num_rows > 1e9 THEN ' SAMPLE BLOCK (0.1) ' WHEN t.num_rows > 1e8 THEN ' SAMPLE BLOCK (1) ' WHEN t.num_rows > 1e7 THEN ' SAMPLE BLOCK (10) ' END||' t GROUP BY '||CHR(10)||
|
||
|
|
LISTAGG('t.'||c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||CHR(10)||
|
||
|
|
'ORDER BY 1 DESC, 2 DESC, 3 DESC, 4 DESC, 5, 6, '||LISTAGG('t.'||c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||' FETCH FIRST 20 ROWS ONLY)'||CHR(10)||
|
||
|
|
'SELECT t.VERSIONS, t.ROWS_PERCENT, t.KIEVLIVE_Y, t.KIEVLIVE_N, t.MIN_KIEVTXNID, t.MAX_KIEVTXNID,'||CHR(10)||
|
||
|
|
'(SELECT MIN(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MIN_KIEVTXNID) AS MIN_BEGINTIME,'||CHR(10)||
|
||
|
|
'(SELECT MAX(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MAX_KIEVTXNID) AS MAX_BEGINTIME,'||CHR(10)||
|
||
|
|
-- '(SELECT MAX(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MAX_KIEVTXNID) - (SELECT MIN(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MIN_KIEVTXNID) AS TIME_INTERVAL,'||CHR(10)||
|
||
|
|
-- 'TRIM(TRIM(LEADING ''0'' FROM REGEXP_SUBSTR((SELECT MAX(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MAX_KIEVTXNID) - (SELECT MIN(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MIN_KIEVTXNID), ''\d+ \d{2}\:\d{2}\:\d{2}\.\d{3}''))) AS TIME_INTERVAL,'||CHR(10)||
|
||
|
|
'REGEXP_REPLACE(REGEXP_REPLACE((SELECT MAX(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MAX_KIEVTXNID) - (SELECT MIN(k.BEGINTIME) FROM '||i.owner||'.KIEVTRANSACTIONS k WHERE k.COMMITTRANSACTIONID = t.MIN_KIEVTXNID), ''\+0{1,8}'', ''+''), ''000'') AS TIME_INTERVAL,'||CHR(10)||
|
||
|
|
't.KEY_VALUE, ORA_HASH(SUBSTR(t.KEY_VALUE, 1, 4000)) AS KEY_HASH'||CHR(10)||
|
||
|
|
'FROM top t;'
|
||
|
|
AS dynamic_sql
|
||
|
|
FROM v_object_dependency_m d,
|
||
|
|
dba_tables t,
|
||
|
|
dba_users u,
|
||
|
|
dba_indexes i,
|
||
|
|
dba_ind_columns c
|
||
|
|
WHERE '&&cs_kiev_version.' <> 'NOT_KIEV' -- this script ONLY executes on KIEV databases
|
||
|
|
AND t.owner = d.to_owner
|
||
|
|
AND t.table_name = d.to_name
|
||
|
|
AND t.table_name NOT LIKE 'KIEV%' -- excludes KIEV internal tables
|
||
|
|
AND u.username = t.owner
|
||
|
|
AND u.oracle_maintained = 'N'
|
||
|
|
AND u.common = 'NO'
|
||
|
|
AND i.table_owner = t.owner
|
||
|
|
AND i.table_name = t.table_name
|
||
|
|
AND i.index_type = 'NORMAL'
|
||
|
|
AND NOT (i.uniqueness = 'UNIQUE' AND i.index_name LIKE '%PK%') -- excludes PK since it is reported under cs_top_primary_keys_table.sql
|
||
|
|
AND i.owner = t.owner
|
||
|
|
AND c.table_owner = i.table_owner
|
||
|
|
AND c.table_name = i.table_name
|
||
|
|
AND c.index_owner = i.owner
|
||
|
|
AND c.index_name = i.index_name
|
||
|
|
AND c.column_name <> 'KIEVTXNID'
|
||
|
|
AND c.column_name <> 'KIEVLIVE'
|
||
|
|
GROUP BY
|
||
|
|
i.table_owner,
|
||
|
|
i.table_name,
|
||
|
|
t.num_rows,
|
||
|
|
i.owner,
|
||
|
|
i.index_name,
|
||
|
|
i.uniqueness
|
||
|
|
ORDER BY
|
||
|
|
i.table_owner,
|
||
|
|
i.table_name,
|
||
|
|
CASE WHEN i.index_name LIKE '%PK%' THEN 1 WHEN i.uniqueness = 'UNIQUE' THEN 2 ELSE 3 END,
|
||
|
|
i.owner,
|
||
|
|
i.index_name
|
||
|
|
/
|
||
|
|
--
|
||
|
|
WITH /* cs_top_keys_sql.sql nonkiev */
|
||
|
|
v_sqlarea_m AS (
|
||
|
|
SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(sqlarea) */
|
||
|
|
DISTINCT
|
||
|
|
hash_value, address
|
||
|
|
FROM v$sqlarea
|
||
|
|
WHERE sql_id = '&&cs_sql_id.'
|
||
|
|
),
|
||
|
|
v_object_dependency_m AS (
|
||
|
|
SELECT /*+ MATERIALIZE NO_MERGE QB_NAME(obj_dependency) */
|
||
|
|
DISTINCT
|
||
|
|
o.to_owner, o.to_name
|
||
|
|
FROM v$object_dependency o,
|
||
|
|
v_sqlarea_m s
|
||
|
|
WHERE o.from_hash = s.hash_value
|
||
|
|
AND o.from_address = s.address
|
||
|
|
AND o.to_type = 2 -- table
|
||
|
|
)
|
||
|
|
SELECT /* cs_top_keys_sql.sql nonkiev */
|
||
|
|
'PRO'||CHR(10)||
|
||
|
|
'PRO TABLE : '||i.table_owner||'.'||i.table_name||CHR(10)||
|
||
|
|
'PRO INDEX : '||i.owner||'.'||i.index_name||CHR(10)||
|
||
|
|
'PRO COLUMNS: ('||LISTAGG(c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||')'||CHR(10)||
|
||
|
|
'PRO ~~~~~~~'||CHR(10)||
|
||
|
|
'WITH top AS (SELECT '||CASE WHEN t.num_rows > 1e9 THEN '1000' WHEN t.num_rows > 1e8 THEN '100' WHEN t.num_rows > 1e7 THEN '10' ELSE '1' END||' * COUNT(*) AS NUM_ROWS, ROUND(100 * COUNT(*) / SUM(COUNT(*)) OVER (), 6) AS ROWS_PERCENT,'||CHR(10)||
|
||
|
|
LISTAGG('''"'||LOWER(c.column_name)||'": "''||t.'||LOWER(c.column_name), '||''",''||CHR(10)||' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||'||''"'' AS KEY_VALUE '||CHR(10)||
|
||
|
|
'FROM '||i.table_owner||'.'||i.table_name||CHR(10)||
|
||
|
|
CASE WHEN t.num_rows > 1e9 THEN ' SAMPLE BLOCK (0.1) ' WHEN t.num_rows > 1e8 THEN ' SAMPLE BLOCK (1) ' WHEN t.num_rows > 1e7 THEN ' SAMPLE BLOCK (10) ' END||' t GROUP BY '||CHR(10)||
|
||
|
|
LISTAGG('t.'||c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||CHR(10)||
|
||
|
|
'ORDER BY 1 DESC, 2 DESC, '||LISTAGG('t.'||c.column_name, ', ' ON OVERFLOW TRUNCATE) WITHIN GROUP (ORDER BY c.column_position)||' FETCH FIRST 20 ROWS ONLY)'||CHR(10)||
|
||
|
|
'SELECT t.NUM_ROWS, t.ROWS_PERCENT, '||CHR(10)||
|
||
|
|
't.KEY_VALUE, ORA_HASH(SUBSTR(t.KEY_VALUE, 1, 4000)) AS KEY_HASH'||CHR(10)||
|
||
|
|
'FROM top t;'
|
||
|
|
AS dynamic_sql
|
||
|
|
FROM v_object_dependency_m d,
|
||
|
|
dba_tables t,
|
||
|
|
dba_indexes i,
|
||
|
|
dba_ind_columns c
|
||
|
|
WHERE '&&cs_kiev_version.' = 'NOT_KIEV' -- this script ONLY executes on NONKIEV databases
|
||
|
|
AND t.owner = d.to_owner
|
||
|
|
AND t.table_name = d.to_name
|
||
|
|
AND i.table_owner = t.owner
|
||
|
|
AND i.table_name = t.table_name
|
||
|
|
AND i.index_type = 'NORMAL'
|
||
|
|
AND i.uniqueness = 'NONUNIQUE'
|
||
|
|
AND i.owner = t.owner
|
||
|
|
AND c.table_owner = i.table_owner
|
||
|
|
AND c.table_name = i.table_name
|
||
|
|
AND c.index_owner = i.owner
|
||
|
|
AND c.index_name = i.index_name
|
||
|
|
GROUP BY
|
||
|
|
i.table_owner,
|
||
|
|
i.table_name,
|
||
|
|
t.num_rows,
|
||
|
|
i.owner,
|
||
|
|
i.index_name
|
||
|
|
ORDER BY
|
||
|
|
i.table_owner,
|
||
|
|
i.table_name,
|
||
|
|
i.owner,
|
||
|
|
i.index_name
|
||
|
|
/
|
||
|
|
--
|
||
|
|
SPO OFF;
|
||
|
|
SET HEA ON PAGES 100;
|
||
|
|
--
|
||
|
|
COL VERSIONS FOR 999,999,990;
|
||
|
|
COL NUM_ROWS FOR 999,999,990;
|
||
|
|
COL ROWS_PERCENT FOR 990.000000;
|
||
|
|
COL KIEVLIVE_Y FOR 999,999,990;
|
||
|
|
COL KIEVLIVE_N FOR 999,999,990;
|
||
|
|
COL MIN_KIEVTXNID FOR 99999999999990;
|
||
|
|
COL MAX_KIEVTXNID FOR 99999999999990;
|
||
|
|
COL MIN_BEGINTIME FOR A26;
|
||
|
|
COL MAX_BEGINTIME FOR A26;
|
||
|
|
COL TIME_INTERVAL FOR A20;
|
||
|
|
COL KEY_VALUE FOR A200;
|
||
|
|
COL KEY_HASH FOR 0000000000;
|
||
|
|
--
|
||
|
|
BREAK ON REPORT;
|
||
|
|
COMPUTE SUM OF VERSIONS NUM_ROWS ROWS_PERCENT KIEVLIVE_Y KIEVLIVE_N ON REPORT;
|
||
|
|
--
|
||
|
|
SPO &&cs_file_name..txt APP
|
||
|
|
@/tmp/cs_driver_&&cs_mysid..sql;
|
||
|
|
--
|
||
|
|
CLEAR BREAK COMPUTE COLUMNS;
|