core-jgi/db/maintain/Other/Performance.sql

237 lines
6.8 KiB
MySQL
Raw Normal View History

2006-11-17 10:06:54 +07:00
/**
* 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;