237 lines
6.8 KiB
SQL
237 lines
6.8 KiB
SQL
|
|
|
|
/**
|
|
* Rebuild Indexes with BLevel >= 4
|
|
*/
|
|
--SELECT Index_Name, BLevel FROM USER_Indexes WHERE BLevel >= 4
|
|
--ALTER INEX x REBUILD
|
|
|
|
/**
|
|
* Hit rate of index
|
|
*/
|
|
SELECT i.Index_Name, i.Table_Name, i.Distinct_Keys, t.Num_Rows,
|
|
ROUND(t.Num_Rows/i.Distinct_Keys,2) AS "Rows Per Key",
|
|
ROUND((t.Num_Rows/i.Distinct_Keys)/t.Num_Rows*100,6) AS "% Hit Rate", i.Uniqueness
|
|
FROM User_Indexes i, User_Tables t
|
|
WHERE i.Table_Name = t.Table_Name
|
|
AND i.Distinct_Keys > 0 AND t.Num_Rows > 50
|
|
AND t.Num_Rows > i.Distinct_Keys
|
|
ORDER BY 6 DESC
|
|
|
|
/**
|
|
* LibraryCache - GetHitRate should be > 95% and ReloadRatio < 1%
|
|
*/
|
|
SELECT NameSpace, Gets, GetHits, ROUND(GetHitRatio,6) AS GetHitRatio,
|
|
Reloads, Pins, ROUND(Reloads/Pins,6) AS ReloadRatio, Invalidations
|
|
FROM V$LibraryCache
|
|
WHERE (GetHitRatio < 0.95 OR Reloads/Pins > 0.01)
|
|
AND NameSpace NOT IN ('INDEX', 'CLUSTER', 'OBJECT', 'PIPE')
|
|
ORDER BY GetHitRatio;
|
|
|
|
/**
|
|
* Data Dictionary - Hit Ratio should be > 85%
|
|
*/
|
|
SELECT Parameter, Gets, GetMisses, ROUND(GetMisses/Gets,6) AS DD_HitRatio
|
|
FROM v$RowCache
|
|
WHERE Gets > 0 AND GetMisses/Gets < .85
|
|
ORDER BY 4 DESC;
|
|
|
|
/**
|
|
* Buffer Cache - Buffer Cache Hit Ratio should be > 90%
|
|
*/
|
|
SELECT physical.value "Physical Reads",
|
|
ROUND(1-(physical.value / (blockgets.value + consistent.value)),6) "Buffer Cache Hit Ratio"
|
|
FROM v$sysstat physical, v$sysstat blockgets, v$sysstat consistent
|
|
WHERE physical.name = 'physical reads'
|
|
AND blockgets.name = 'db block gets'
|
|
AND consistent.name = 'consistent gets';
|
|
|
|
/**
|
|
* Cached Tables
|
|
*/
|
|
SELECT Table_Name
|
|
FROM USER_TABLES WHERE TRIM(CACHE) = 'Y';
|
|
ALTER TABLE AD_Window CACHE;
|
|
ALTER TABLE AD_Val_Rule CACHE;
|
|
ALTER TABLE AD_Field_Trl CACHE;
|
|
ALTER TABLE AD_Tab_Trl CACHE;
|
|
ALTER TABLE AD_Window_Trl CACHE;
|
|
ALTER TABLE AD_FieldGroup CACHE;
|
|
ALTER TABLE AD_FieldGroup_Trl CACHE;
|
|
ALTER TABLE AD_Message CACHE;
|
|
ALTER TABLE AD_Message_Trl CACHE;
|
|
|
|
/**
|
|
* DD Buffer Size
|
|
*/
|
|
SELECT o.object_name, o.object_type, COUNT(DISTINCT bh.block#) "# Buffers"
|
|
FROM USER_OBJECTS o, v$bh bh
|
|
WHERE o.object_ID=bh.objd
|
|
GROUP BY o.object_name, o.object_type
|
|
ORDER BY 2; --4 DESC;
|
|
|
|
/**
|
|
* Buffer Pools
|
|
* Init.ora:
|
|
* DB_BLOCK_SIZE = 8192 # 8k
|
|
* DB_BLOCK_BUFFERS = 64000 # 500 MB total - for Default 300
|
|
* DB_BLOCK_LRU_LATCHES = 30 # total
|
|
* BUFFER_POOL_KEEP = (BUFFERS: 19200, LRU_LATCHES: 10) # 150MB of 500
|
|
* BUFFER_POOL_RECYCLE = (BUFFERS: 6400, LRU_LATCHES: 5) # 50 MB of 500
|
|
*/
|
|
-- What Pools do we have
|
|
SELECT Name, Set_Count "Latches", Buffers
|
|
FROM v$buffer_pool;
|
|
-- What is not in the Defualt pool
|
|
SELECT Segment_type, Segment_Name, Buffer_Pool
|
|
FROM USER_SEGMENTS
|
|
WHERE Buffer_Pool != 'DEFAULT';
|
|
--
|
|
--ALTER TABLE x STORAGE (BUFFER_POOL KEEP);
|
|
-- Buffer Pool Hit Rate
|
|
SELECT Name "Buffer Pool", Physical_Reads, DB_Block_Gets, Consistent_Gets,
|
|
1-(Physical_Reads / DECODE(DB_Block_Gets+Consistent_Gets,0,1,DB_Block_Gets+Consistent_Gets)) "Hit Ratio"
|
|
FROM v$buffer_pool_statistics;
|
|
|
|
/**
|
|
* Redo Log Buffer - Redo Log Retry Ration should be < 1%
|
|
* Init.pra
|
|
* LOG_BUFFERS should be multiple of OS block (Win 4k)
|
|
*/
|
|
SELECT entries.value "redo entries",
|
|
retries.value "redo buffer allocation retries",
|
|
requests.value "redo log space requests",
|
|
ROUND(retries.value/entries.value,6) "Redo Log Retry Ratio"
|
|
FROM v$sysstat retries, v$sysstat entries, v$sysstat requests
|
|
WHERE retries.name = 'redo buffer allocation retries'
|
|
AND entries.name = 'redo entries'
|
|
AND requests.name = 'redo log space requests';
|
|
-- Wait Time
|
|
SELECT *
|
|
FROM v$system_event
|
|
WHERE Event LIKE 'log file switch%';
|
|
|
|
-- Not logged tablespaces
|
|
SELECT TableSpace_Name, Logging
|
|
FROM DBA_TableSpaces;
|
|
|
|
-- Not Logged Tables
|
|
SELECT Table_Name, Logging
|
|
FROM USER_Tables
|
|
WHERE Logging <> 'YES'
|
|
--ALTER TABLE x NOLOGGING;
|
|
|
|
/**
|
|
* IO
|
|
* Init.ora
|
|
* DB_FILE_MULTIBLOCK_READ_COUNT = # >8
|
|
*/
|
|
-- Table Scans
|
|
SELECT Name, Value
|
|
FROM v$sysstat
|
|
WHERE name LIKE 'table scans%';
|
|
|
|
-- Locally Managed Tablespaces
|
|
SELECT TableSpace_Name, Extent_Management
|
|
FROM DBA_TableSpaces;
|
|
|
|
-- Waiting on DBW0
|
|
SELECT *
|
|
FROM v$system_event
|
|
WHERE Event in ('buffer busy waits', 'db file parallel write');
|
|
--
|
|
SELECT scanned.value "DBWR buffers scanned", scans.value "DBWR lru scans",
|
|
ROUND(scanned.value/scans.value,2) "Avg # Buffers Scanned"
|
|
FROM v$sysstat scanned, v$sysstat scans
|
|
WHERE scanned.name = 'DBWR buffers scanned'
|
|
AND scans.name = 'DBWR lru scans';
|
|
|
|
-- Avoiding Dynamic Extent Allocation
|
|
SELECT Table_Name, Num_Rows, Blocks, Empty_Blocks,
|
|
ROUND(1-(Empty_Blocks/(Empty_blocks+Blocks)),2) "Blocks Used Ratio"
|
|
FROM USER_Tables
|
|
WHERE Blocks IS NOT NULL
|
|
AND 1-(Empty_Blocks/(Empty_blocks+Blocks)) > .95
|
|
ORDER BY 5 DESC;
|
|
|
|
-- Chained Rows & Migration
|
|
SELECT Table_Name, Chain_Cnt
|
|
FROM USER_Tables
|
|
WHERE Chain_Cnt > 0;
|
|
--
|
|
SELECT Name, Value
|
|
FROM v$sysstat
|
|
WHERE Name = 'table fetch continued row';
|
|
|
|
/**
|
|
* Sorting - Memory Sort Ratio should > 95%
|
|
* Init.ora
|
|
* SORT_AREA_SIZE = 262144 # 256k = Multiple of Temp Initial/Next (64k)
|
|
* SORT_MULTIBLOCK_READ = 8 # (Sort_Area_Size)/BlockSize - here 64k
|
|
*/
|
|
SELECT mem.value "sorts (memory)", disk.value "sorts (disk)",
|
|
ROUND(mem.value/(disk.value+mem.value),6) "Memory Sort Ratio"
|
|
FROM v$sysstat mem, v$sysstat disk
|
|
WHERE mem.name = 'sorts (memory)'
|
|
AND disk.name = 'sorts (disk)';
|
|
-- Sort Segment
|
|
SELECT TableSpace_Name, Current_Users, Max_Sort_Blocks
|
|
FROM v$sort_segment
|
|
|
|
/**
|
|
* Rollback
|
|
*/
|
|
-- Waiting for ..
|
|
select * from v$waitstat where class like '%undo%';
|
|
select * from v$system_event where event like '%undo%';
|
|
SELECT name, value "reads from rbs" FROM v$sysstat WHERE name = 'consistent gets';
|
|
|
|
-- Get Ration shound be > 95% - wraps from one extent to another (high: too small)
|
|
SELECT n.name, s.gets, s.waits,
|
|
DECODE (s.waits,0,1, 1-(s.waits/s.gets)) "RBS Get Ratio",
|
|
s.wraps, s.extends
|
|
FROM v$rollstat s, v$rollname n
|
|
WHERE s.usn = n.usn;
|
|
|
|
/**
|
|
* Latches - cache buffer key chain should be >= 99
|
|
* Init.ora
|
|
* DB_BLOCK_LRU_LATCHES = 3 # 6*CPU=(6) max DB_BLOCK_BUFFERS/50=(300)
|
|
*/
|
|
SELECT name, gets, misses, sleeps, 1-(sleeps/gets) "Hit Ratio"
|
|
FROM v$latch
|
|
WHERE gets > 0
|
|
AND name = 'cache buffers lru chain'
|
|
ORDER BY 5
|
|
|
|
/**
|
|
* Locks
|
|
*/
|
|
SELECT s.username, l.type, o.owner, o.object_name, o.object_type
|
|
FROM v$session s, v$lock l, dba_objects o
|
|
WHERE s.sid=l.sid
|
|
AND o.object_id=l.id1
|
|
AND s.username IS NOT NULL;
|
|
|
|
/**
|
|
* User Memory
|
|
*/
|
|
SELECT ROUND(SUM(Value)/1024,0) "Session UGA kB"
|
|
FROM v$sesstat s, v$statname n
|
|
WHERE s.statistic#=n.statistic#
|
|
AND n.name='session uga memory';
|
|
select * from v$sysstat where name like '%uga%';
|
|
|
|
/**
|
|
* Sizing
|
|
* SGA Total - 55% of physical memory (60-75% if > 1GB)
|
|
* SharedPool = 45%
|
|
* DatabaseBuffer = 45%
|
|
* ReDo Log = 10%
|
|
*
|
|
* Rollback Segments
|
|
* initial=512k Next=512k MinExtent=20
|
|
*/
|
|
-- init.ora
|
|
select name, value, description, isdefault from v$parameter order by type, name;
|