35 '/oradata/NEDCPRD/data02/lob_data01.dbf', 36 '/oradata/NEDCPRD/data02/retek_data01.dbf', 37 '/oradata/NEDCPRD/index02/retek_index01.dbf' 38 CHARACTER SET UTF8 39 ; CREATE CONTROLFILE set DATABASE "RWMS905" RESETLOGS NOARCHIVELOG * ERROR at line 1: ORA-01503: CREATE CONTROLFILE failed ORA-01159: file is not from same database as previous files - wrong database id ORA-01110: data file 11: '/oradata/NEDCPRD/index01/ind1_01.dbf'
---copy files
µ±lru_file_repageÉèÖÃΪ0µÄʱºò, Èç¹ûclient pagesµÄÊýÄ¿´óÓÚminperm,½«Ñ¡Ôñfile pages±»Ìæ»».Èç¹ûСÓÚminperm,ÈκÎûÓб»referencedµÄpage½«±»Ìæ»».
µ±lru_file_repageÉèÖÃΪ1µÄʱºò,Èç¹ûclient pagesµÄÊýÄ¿½éÓÚminpermºÍmaxclientÖ®¼ä,
LRUËã·¨½«²Î¿¼repageµÄ¼ÆÊý. ×î½üûÓб»referencedµÄpage½«±»stolen. defalut value
Subject: How to Use DBMS_STATS to Move Statistics to a Different Database ²é¿´È«ÎÄ
Using the Range Partitioning Method
-----------------------------------
Range partitioning maps rows to partitions based on a range of column values.
This type of partitioning is best suited when dealing with data that has logical
ranges into it can be distributed by. For example, months of the year, or
a numeric value. Performance is best when the data is evenly distributed across
the range. If partitioning by range causes partitions to vary dramatically in
size because of unequal distribution, you may want to consider one of the other
methods of partitioning.
When creating range partitions, you must specify the method as "RANGE", the
partitioning column(s) in the RANGE, and the partition boundaries. ²é¿´È«ÎÄ
3¿é½ðÅÆ£¬¼ÓÓÍ
recursive cpu usage = This component can be high if large amounts of PL/SQL are being processed. It is outside the scope of this document to go into detail with this, but you will need to identify your complete set of PL/SQL, including stored procedures, finding the ones with the highest CPU load and optimize these. If most work done in PL/SQL is procedural processing (rather than executing SQL), a high recursive cpu usage can actually indicate a potential tuning effort.
parse time cpu= Parsing SQL statements is a heavy operation, that should be avoided by reusing SQL statements as much as possible. In precompiler programs, unnecessary parting of implicit SQL statements can be avoided by increasing the cursor cache (MAXOPENCURSORS parameter) and by reusing cursors. In programs using Oracle Call Interface, you need to write the code, so that it re-executes (in stead of reparse) cursors with frequently executed SQL statements. The v$sql view contains PARSE_CALLS and EXECUTIONS columns, that can be used to identify SQL, that is parsed often or is only executed once per parse.
other cpu= The source of other cpu is primarily handling of buffers in the buffer cache. It can generally be assumed, that the CPU time spent by a SQL statement is approximately proportional to the number of buffer gets for that SQL statements, hence, you should identify and sort SQL statements by buffer gets in v$sql. In your statspack report, look at the part ¡®SQL ordered by Gets for DB¡¯. Start tuning SQL statements from the top of this list. In Oracle9i, the v$sql view contain a column, CPU_TIME, which directly shows the cpu time associated with executing the SQL statement.
²é¿´È«ÎÄSelect ..for update£¨nowait)
Select * from tab1 for update
Óû§·¢³öÕâÌõÃüÁîÖ®ºó£¬oracle½«»á¶Ô·µ»Ø¼¯ÖеÄÊý¾Ý½¨Á¢Ðм¶·âËø£¬ÒÔ·ÀÖ¹ÆäËûÓû§µÄÐ޸ġ£
Èç¹û´ËʱÆäËûÓû§¶ÔÉÏÃæ·µ»Ø½á¹û¼¯µÄÊý¾Ý½øÐÐdml»òddl²Ù×÷¶¼»á·µ»ØÒ»¸ö´íÎóÐÅÏ¢»ò·¢Éú×èÈû¡£
1£º¶Ô·µ»Ø½á¹û¼¯½øÐÐupdate»òdelete²Ù×÷»á·¢Éú×èÈû¡£
2£º¶Ô¸Ã±í½øÐÐddl²Ù×÷½«»á±¨£ºOra-00054:resource busy and acquire with nowait specified.
ÔÒò·ÖÎö
´ËʱOracleÒѾ¶Ô·µ»ØµÄ½á¹û¼¯ÉϼÓÁËÅÅËüµÄÐм¶Ëø£¬ËùÓÐÆäËû¶ÔÕâЩÊý¾Ý½øÐеÄÐ޸Ļòɾ³ý²Ù×÷¶¼±ØÐëµÈ´ýÕâ¸öËøµÄÊÍ·Å£¬²úÉúµÄÍâÔÚÏÖÏó¾ÍÊÇÆäËûµÄ²Ù×÷½«·¢Éú×èÈû£¬Õâ¸öÕâ¸ö²Ù×÷commit»òrollback.
ͬÑùÕâ¸ö²éѯµÄÊÂÎñ½«»á¶Ô¸Ã±í¼Ó±í¼¶Ëø£¬²»ÔÊÐí¶Ô¸Ã±íµÄÈκÎddl²Ù×÷£¬·ñÔò½«»á±¨³öora-00054´íÎó£º:resource busy and acquire with nowait specified
Specify the maximum number of concurrent transactions that can update a data block allocated to the database object. This limit does not apply to queries. This value can range from 1 to 255 and the default is a function of the data block size. You should not change the MAXTRANS value from its default.
If the number of concurrent transactions updating a block exceeds the INITRANS value, then Oracle dynamically allocates transaction entries in the block until either the MAXTRANS value is exceeded or the block has no more free space.
The MAXTRANS parameter serves the same purpose in the PARTITION description, clusters, materialized views, and materialized view logs as in tables.
SELECT * FROM DBA_PROFILES;
ALTER PROFILE PRO_1 LIMIT CPU_PER_CALL UNLIMITED;
aix
System configuration: lcpu=36 mem=44031MB ent=18.00
ÎÊÌâȷʵ»¹Äѽâ¾ö£¬ÓÈÆä²»ÔÊÐíÍ£»úµÄ×´¿öÏ¡£
Éú²úϵͳԼ 1.7 T;
dbms_transaction.purge&tijiao
show parameter undo_suppress_errors=true
The role of the KEEP buffer pool is to cache those static or non-updating objects that have a lot of select activity for example, lookup tables and some indexes. Once the KEEP buffer pool is correctly sized, the blocks for objects assigned to this pool are never removed. As a result, access to the objects in this pool doesn¡¯t require disk operation, greatly increasing the query performance. The famous DEPT table would be a good example of a reference table that would have little DML activity and can be cached in the KEEP pool.
The RECYCLE pool
The role of the RECYCLE buffer pool is just the opposite. It¡¯s designed for those objects that will be accessed once, such as a full table scan on a large object, or objects that have many DML statements that won¡¯t be referenced again by the application, such as transaction logs or audit trail type logs.
The DEFAULT pool
The DEFAULT buffer pool is really the area of the buffer cache that isn¡¯t being used by the KEEP buffer pool or the RECYCLE buffer pool. All other objects not directed specifically at the KEEP buffer pool or the RECYCLE buffer pool will remain in the DEFAULT buffer pool. ²é¿´È«ÎÄ
v$db_object_cacheÖеij£ÓÃÁУº
l OWNER£º¶ÔÏóÓµÓÐÕß
l NAME£º¶ÔÏóÃû³Æ
l TYPE£º¶ÔÏóÀàÐÍ(È磬sequence,procedure,function,package,package body,trigger)
l KEPT£º¸æÖªÊÇ·ñ¶ÔÏó³£×¤shared pool(yes/no)£¬ÓÐÀµÓÚÕâ¸ö¶ÔÏóÊÇ·ñÒѾÀûÓÃPL/SQL ¹ý³ÌDBMS_SHARED_POOL.KEEP¡°±£³Ö¡±£¨ÓÀ¾Ã¹Ì¶¨ÔÚÄÚ´æÖУ©
l SHARABLE_MEM£º¹²ÏíÄÚ´æÕ¼ÓÃ
l PINS£ºµ±Ç°Ö´ÐжÔÏóµÄsessionÊý
l LOCKS£ºµ±Ç°Ëø¶¨¶ÔÏóµÄsessionÊý
˲¼ä״̬ÁУº
ÏÂÁÐÁб£³Ö¶ÔÏó×Ô³õ´Î¼ÓÔØÆðµÄͳ¼ÆÐÅÏ¢£º
l LOADS£º¶ÔÏó±»¼ÓÔØ´ÎÊý¡£
ʾÀý£º
1.shared poolÖ´ÐÐÒÔ¼°ÄÚ´æÊ¹ÓÃ×ܼÆ
ÏÂÁвéѯÏÔʾ³öshared poolÄÚ´æ¶Ô²»Í¬Àà±ðµÄ¶ÔÏó
ͬʱҲÏÔʾÊÇ·ñÓжÔÏóͨ¹ýDBMS_SHARED_POOL.KEEP()¹ý³Ì³£×¤shared pool¡£
SELECTtype, kept, COUNT(*), SUM(sharable_mem)
FROM V$DB_OBJECT_CACHE
GROUPBYtype, kept;
2.ͨ¹ýÔØÈë´ÎÊýÕÒ³ö¶ÔÏó
SELECT owner, name sharable_mem, kept, loads
FROM V$DB_OBJECT_CACHE
WHERE loads > 1ORDERBY loads DESC;
3.ÕÒ³öʹÓõÄÄڴ泬¹ý10M²¢ÇÒ²»ÔÚ³£×¤ÄÚ´æµÄ¶ÔÏó¡£
SELECT owner, name, sharable_mem, kept
FROM V$DB_OBJECT_CACHE
WHERE sharable_mem > 102400AND kept = 'NO'
ORDERBY sharable_mem DESC;
select (1 - (sum(decode(name, physical reads, value, 0)) /
(sum(decode(name, db block gets, value, 0)) +
sum(decode(name, consistent gets, value, 0))))) * 100
"hit ratio"
from v$sysstat;
1£©v$lock ¸ø³öÁËËøµÄÐÅÏ¢£¬Èçtype×ֶΣ¬ user type locksÓÐ3ÖÖ£ºTM£¬TX£¬UL£¬system type locksÓжàÖÖ£¬³£¼ûµÄÓУºMR£¬RT£¬XR£¬TSµÈ¡£ÎÒÃÇÖ»¹ØÐÄTM£¬TXËø¡£ µ±TMËøÊ±£¬id1×ֶαíʾobject_id£»µ±TXËøÊ±£¬trunc(id1/power(2,16))´ú±íÁ˻عö¶ÎºÅ¡£ lmode×ֶΣ¬session³ÖÓеÄËøµÄģʽ£¬ÓÐ6ÖÖ£º 0 - none 1 - null (NULL) 2 - row-S (SS) 3 - row-X (SX) 4 - share (S) 5 - S/Row-X (SSX) 6 - exclusive (X) request×ֶΣ¬processÇëÇóµÄËøµÄģʽ£¬È¡Öµ·¶Î§ÓëlmodeÏàͬ¡£ ctime×ֶΣ¬ÒѳÖÓлòµÈ´ýËøµÄʱ¼ä¡£ block×ֶΣ¬ÊÇ·ñ×èÈûÆäËüËøÉêÇ룬µ±block=1ʱ˵Ã÷Õâ¸ösession×èÈûÁ˱ðµÄsession¡£
2£©v$sqlarea ¹²Ïí³ØÖд洢µÄsqlºÍһЩÏà¹ØµÄÐÅÏ¢£¬ÈçÀۼƵÄÖ´ÐдÎÊý£¨executions£©£¬Âß¼¶Á£¨buffer_gets£©£¬ÎïÀí¶Á£¨disk_reads£©µÈͳ¼ÆÐÅÏ¢¡£ ¸ù¾ÝaddressºÍhash_value¿ÉÒÔ¶¨Î»Ò»Ìõsql¡£sql_text×ֶδæµÄÕâ¸ösqlµÄǰ1000¸ö×Ö·û¡£²éÕÒÕû¸öµÄsql»¹ÐèÈ¥v$sqltext»òÕßv$sqltext_with_newlines¡£
3£©v$session ËùÓе±Ç°sessionµÄÐÅÏ¢£¬°üÀ¨Ò»Ð©Óû§ÐÅÏ¢Èçusername£¬terminal£¬program£¬logon_timeµÈ£¬command×ֶαíʾsessionÖ´ÐеÄʲôÃüÁî¡£ ͨ¹ýv$session.paddr=v$process.addr¸úprocessÏà¹Ø£¬Í¨¹ýv$session.taddr=v$transaction.addr¸útrancationÏà¹Ø¡£ ͨ¹ýsid¿ÉÒÔµ½Ïà¹ØÊÓͼÖвéѯÓëÕâ¸ösessionÏà¹ØµÄ¸÷ÖÖÐÅÏ¢£¬Èçv$sesstatÖÐÓÐsessionµÄͳ¼ÆÐÅÏ¢£¬v$sess_ioÖÐÓÐsessionµÄioͳ¼ÆÐÅÏ¢£¬v$session_waitÖÐÓÐsessionµÄµÈ´ýÐÅÏ¢£¬v$session_eventÖÐÓÐsessionÔÚÒ»¶Îʱ¼äÄÚËùµÈ´ýµÄ¸÷ÖÖʼþµÄÐÅÏ¢¡£ ¸ù¾Ýlockwait×ֶοÉÒÔ²éѯµ±Ç°ÕýÔڵȴýµÄËøµÄÏà¹ØÐÅÏ¢£º select * from v$lock where kaddr in (select lockwait from v$session where sid=&sid); (sql_address,sql_hash_value)£¬(prev_sql_addr,prev_hash_value) ¸ù¾ÝÕâÁ½×é×Ö¶Î, ¿ÉÒÔ²éѯµ½µ±Ç°sessionÕýÔÚÖ´ÐеĻòÕß×î½üÒ»´ÎÖ´ÐеÄsqlÓï¾äµÄÏêϸÐÅÏ¢£º select * from v$sqltext where address = &sql_address and hash_value = &sql_hash_value;
4£©v$sesstat ¸ù¾Ýsession id¿ÉÒԵõ½Õâ¸ösessionµÄͳ¼ÆÐÅÏ¢£º select a.name,b.value from v$statname a,v$sesstat b where a.STATISTIC#=b.STATISTIC# and b.sid=&sid and b.value <>0 order by b.value;
5£©v$session_wait --Õⲿ·Ö³Ï® xzhµÄblog ¸ù¾Ýsession id¿ÉÒԵõ½Õâ¸ösessionµÄµÈ´ýÇé¿ö¡£ event×ֶαíʾµÈ´ýʼþ¡£ p1¡¢p2¡¢p3¸æËßÎÒÃǵȴýʼþµÄ¾ßÌ庬Ò壬Èç¹ûwait eventÊÇdb file scattered read£¬p1=file_id/p2=block_id/p3=blocks£¬È»ºóͨ¹ýdba_extents¼´¿ÉÈ·¶¨³öÈȵã¶ÔÏó£»Èç¹ûÊÇlatch freeµÄ»°£¬p2ΪãÅËøºÅ£¬ËüÖ¸Ïòv$latch¡£ P1RAW,P2RAW,P3RAWÁжÔÓ¦P1,P2,P3µÄÊ®Áù½øÖÆÖµ£»P1TEXT,P2TEXT,P3TEXTÁжÔÓ¦P1,P2,P3ÁеĽâÊÍ¡£ --ÇóµÈ´ýʼþ¼°Æä¶ÔÓ¦µÄlatch col event format a32 col name format a32 select sid,event,p1 as file_id, p2 as "block_id/latch", p3 as blocks,l.name from v$session_wait sw,v$latch l where event not like '%SQL%' and event not like '%rdbms%' and event not like '%mon%' and sw.p2 = l.latch#(+); --ÇóµÈ´ýʼþ¼°ÆäÈȵã¶ÔÏó col owner format a18 col segment_name format a32 col segment_type format a32 select owner,segment_name,segment_type from dba_extents where file_id = &file_id and &block_id between block_id and block_id + &blocks - 1; --×ÛºÏÒÔÉÏÁ½Ìõsql£¬Í¬Ê±ÏÔʾlatch¼°Èȵã¶ÔÏó(ËٶȽÏÂý) select sw.sid,event,l.name,de.segment_name from v$session_wait sw,v$latch l,dba_extents de where event not like '%SQL%' and event not like '%rdbms%' and event not like '%mon%' and sw.p2 = l.latch#(+) and sw.p1 = de.file_id(+) and p2 between de.block_id and de.block_id + de.blocks - 1; --Èç¹ûÊÇ·Ç¿ÕÏеȴýʼþ£¬Í¨¹ýµÈ´ý»á»°µÄsid¿ÉÒÔÇó³ö¸Ã»á»°ÔÚÖ´ÐеÄsql select sql_text from v$sqltext_with_newlines st,v$session se where st.address=se.sql_address and st.hash_value=se.sql_hash_value and se.sid =&wait_sid order by piece;
6£©v$process ¸ù¾Ýsession id¿ÉÒԲ鵽²Ù×÷ϵͳ½ø³ÌµÄÐÅÏ¢£º select * from v$process where addr in (select paddr from v$session where sid=&sid ); spid×Ö¶ÎÊDzÙ×÷ϵͳ½ø³ÌºÅ£¬¿ÉÒÔÓÃÀ´½øÐÐ kill -9 spid Õâôһ¸ö²Ù×÷¡£ ¿ÉÒÔÕÒµ½ unixÃüÁî top ³öÀ´µÄ×îºÄcpu×ÊÔ´µÄpid£¬¸ù¾Ýpid×îºÄ×ÊÔ´µÄsql£º SELECT /*+ ORDERED */ sql_text FROM v$sqltext a WHERE (a.hash_value, a.address) IN ( SELECT DECODE (sql_hash_value, 0, prev_hash_value, sql_hash_value ), DECODE (sql_hash_value, 0, prev_sql_addr, sql_address) FROM v$session b WHERE b.paddr = (SELECT addr FROM v$process c WHERE c.spid = '&pid')) ORDER BY piece ASC /
7£©v$transaction ¸ù¾Ýsession id¿ÉÒԲ鵽µ±Ç°sessionÕýÔÚÖ´ÐеÄÊÂÎñÐÅÏ¢£º select * from v$transaction where addr in (select taddr from v$session where sid=&sid ); ¿´ÏÂÃæÕâÁ½¸ö×ֶοÉÒÔ¿´µ½ÊÂÎñ½øÐе½Ê²Ã´³Ì¶ÈÁË£º USED_UBLK NUMBER Number of undo blocks used USED_UREC NUMBER Number of undo records used ÖØ¸´²éѯÕâÁ½¸öÖµ£¬¿ÉÒÔ¿´µ½±ä»¯£¬¿ÉÒÔ¹À¼ÆÊÂÎñµÄ½ø¶È£¬ÓÈÆäÊdz¤Ê±¼äµÄ»Ø¹ö²Ù×÷£¬µ±ÕâÁ½¸öֵΪ0£¬»Ø¹öÒ²¾ÍÍê³ÉÁË¡£
8£©v$sort_usage temp±í¿Õ¼äµÄʹÓÃÇé¿ö£¬µ±temp±í¿Õ¼ä±äµÃ¾Þ´óµÄʱºò£¬¸ù¾Ýsession_addr¿ÉÒԵõ½session id£¬¸ù¾ÝsqladdrºÍsqlhash¿ÉÒԵõ½ÕýÔÚÖ´ÐеÄsql£º select se.username,se.sid,su.extents,su.blocks*to_number(rtrim(p.value)) as Space,tablespace,segtype,sql_text from v$sort_usage su,v$parameter p,v$session se,v$sql s where p.name='db_block_size' and su.session_addr=se.saddr and s.hash_value=su.sqlhash and s.address=su.sqladdr order by se.username,se.sid;
9£©v$sysstat ËùÓÐinstanceµÄͳ¼ÆÐÅÏ¢¡£
1£©´´½¨µÄË÷ÒýÐèÒª¼¸¸ögµÄ´ÅÅ̿ռ䡣
2£©´´½¨Ë÷ÒýÐèÒªÅÅÐò£¬Ê¹ÓÃpga_aggregate_target£¬Òª°ÑÕâ¸öÖµ´Ó200m¼Ó´óµ½2g¡£
3£©Èç¹ûÄÚ´æ²»¹»£¬ÐèÒªtemp±í¿Õ¼ä£¬ÔòÒª°Ñtemp±í¿Õ¼ä¼Ó´óµ½8g¡ª¡ªitpubÉÏÓÐÒ»¸öÌû×Ó˵¹ý£¬15ÒÚÌõ¼Ç¼ÓÃÁË34g¿Õ¼ä¡£
4£©ÔÚÏß´´½¨£¬Ê±¼ä»á±È½Ï³¤¡£ÌÖÂÛºó£¬Í£Ö¹Õâ¸ö±íµÄ²Ù×÷£¬·Çonline´´½¨¡£
3. ʵ¼Ê²Ù×÷¹ý³Ì
1£©Êý¾ÝÎļþ¹»£¬²»À©Õ¹£»tempÊý¾ÝÎļþÀ©Õ¹£º
alter database tempfile '/bgdata/oracle/temp01.dbf' resize 8192m;
2£©ÔÚworkarea_size_policy=autoµÄÇé¿öÏ£¬¸Äpga_aggregate_target=2048m¡£¶ÔÓÚ´®ÐвÙ×÷£¬Ò»¸ösessionÄÜʹÓõÄpga=min(5%pga_aggregate_target,100mb)£¬ÕâÑù¿ÉÒÔʹµÃpgaÓõ½×î´óµÄÖµ£º
alter system set pga_aggregate_target=2048m;
3£©ÒòΪÕâÊÇÒ»¸ö±È½Ï³¤µÄ¹ý³Ì£¬ËùÒÔд½Å±¾Èúǫ́ÔËÐУº
nohup time createind.sh &
vi createind.sh
#!/bin/sh
sqlplus user/password <
exit
eof
4£©´´½¨¹ý³ÌÖпÉÒÔ¹Û²ìv$sort_segment£¬v$sort_usage¿´ÅÅÐòÇé¿ö£º
nohup time createind.sh &
vi createind.sh
#!/bin/sh
sqlplus user/password <
exit
eof
5£©´´½¨Íê³Éºó£¬°ÑtempfileºÍpga_aggregate_target¸Ä»ØÔÖµ£º
alter database tempfile '/bgdata/oracle/temp01.dbf' resize 4096m;
alter system set pga_aggregate_target=500m;
²é¿´È«ÎÄhttp://www.eygle.com/digest/2006/11/hotblock_analyze.html
Èȵã¿éµÄ¶¨Òå
Êý¾Ý¿âµÄÈȵã¿é£¬´Ó¼òµ¥Á˽²£¬¾ÍÊǼ«¶ÌµÄʱ¼äÄÚ¶ÔÉÙÁ¿Êý¾Ý¿é½øÐÐÁ˹ýÓÚÆµ·±µÄ·ÃÎÊ¡£¶¨Òå¿´ÆðÀ´×ÜÊǺܼòµ¥µÄ£¬µ«Êµ¼ÊÔÚÊý¾Ý¿âÖУ¬ÎÒÃÇҪȥ¹Û²ì»òÕßÈ·¶¨Èȵã¿éµÄÎÊÌ⣬ȴ²»ÊÇÄÇô¼òµ¥ÁË¡£ÒªÉî¿ÌµØÀí½âÊý¾Ý¿âÊÇÔõôͨ¹ýһЩÊý¾ÝÌØÕ÷À´±íʾÈȵã¿éµÄ£¬ÎÒÃÇÐèÒªÁ˽âһЩÊý¾Ý¿âÔÚÕâ·½Ãæ´¦Àí»úÖÆµÄÌØÐÔ¡£
Êý¾Ý»º³åÇøµÄ½á¹¹
ÎÒÃǶ¼ÖªµÀ£¬µ±²éѯ¿ªÊ¼µÄʱºò£¬½ø³ÌÊ×ÏÈÈ¥Êý¾Ý»º³åÇøÖвéÕÒÊÇ·ñ´æÔÚ²éѯËùÐèÒªµÄÊý¾Ý¿é£¬Èç¹ûûÓУ¬¾ÍÈ¥´ÅÅÌÉϰÑÊý¾Ý¿é¶Áµ½ÄÚ´æÖÐÀ´¡£ÔÚÕâ¸ö¹ý³ÌÖУ¬Éæ¼°µ½Êý¾Ý»º³åÇøÖÐLRUÁ´µÄ¹ÜÀí£¨8i¿ªÊ¼ÒÔ½Ó´¥µã¼ÆÊýΪ±ê×¼ºâÁ¿bufferÀäÈÈ´Ó¶ø¾ö¶¨bufferÊÇÔÚLRUµÄÀä¶Ë»¹ÊÇÈȶˣ©£¬¹ØÓÚÕⲿ·ÖÄÚÈÝ£¬´Óoracle concepts ÖоÍÄܵõ½Ï꾡µÄÎĵµ£¬ÎÒ²»×¼±¸È¥ÂÛÊöÕⲿ·ÖÄÚÈÝ£¬ÕâÒ²²»ÊDZ¾ÎĵÄÖØµã¡£ÏÖÔÚÎÒÃǵÄÖØµãÊÇ£¬µ½µ×½ø³ÌÊÇÈçºÎµØÈ¥¿ìËÙ¶¨Î»µ½×Ô¼ºËùÏëÒªµÄblockµÄ£¬»òÕßÈçºÎ¿ìËÙÈ·¶¨ÏëÒªµÄblock²»ÔÚÄÚ´æÖжøÈ¥½øÐÐÎïÀí¶ÁµÄ¡£
ÎÒÃÇ×ÐϸÏëÒ»Ïë£¬Ëæ×ÅÓ²¼þµÄ·¢Õ¹£¬ÄÚ´æÔ½À´Ô½´ó£¬cache bufferÒ²Ô½À´Ô½´ó£¬ÎÒÃÇÈçºÎ²ÅÄÜÔÚ´óÁ¿µÄÄÚ´æÖÐѸËÙ¶¨Î»µ½×Ô¼ºÏëÒªµÄblock£¿×ܲ»ÄÜÈ¥ËùÓÐbufferÖбéÀú°É£¡ÔÚ´ËÊý¾Ý¿âÒý³öÁËhashµÄ¸ÅÄoracleÖпìËÙ¶¨Î»ÐÅÏ¢×ÜÊÇͨ¹ýhashËã·¨µÄ£¬±ÈÈç¿ìËÙ¶¨Î»sqlÊÇ·ñÔÚshared pool sizeÖдæÔÚ¾ÍÊÇͨ¹ýhash valueÀ´¶¨Î»µÄ£¬Ò²¾ÍÊÇ˵shared pool sizeÖжÔÏóÒ²ÊÇͨ¹ýhash tableÀ´¹ÜÀíµÄ£©£¬Á˽âÒ»µãÊý¾Ý½á¹¹µÄ»ù±¾ÖªÊ¶¾ÍÖªµÀ£¬hash µÄÒ»´óÖØÒª¹¦ÄܾÍÊÇ¿ìËٵزéÕÒ¡£¾Ù¸ö×î¼òµ¥µÄÀý×Ó£¬¼ÙÉèÎÒÃÇÓÐÒ»¸öhash table ¾ÍÊÇÒ»¸ö¶þάÊý×éa[200][100],ÏÖÔÚÓÐ1000¸öÎÞÐòÊý×Ö£¬ÎÒÃÇÒª´ÓÕâ1000¸öÊý×ÖÀïÃæ²éÕÒij¸öÖµÊÇ·ñ´æÔÚ£¬»òÕß˵µ±ÎÒÃǽÓÊÕµ½Ä³¸öÊý×ÖµÄʱºò±ØÐëÅжÏÊÇ·ñÒѾ´æÔÚ£¬µ±È»£¬ÎÒÃÇ¿ÉÒÔ±éÀúÕâ1000¸öÊý×Ö£¬µ«ÕâÑùµÄЧÂʾͺܵ͡£µ«ÏÖÔÚÎÒÃÇ¿¼ÂÇÕâÑùÒ»ÖÖ·½·¨£¬ÄǾÍÊǰÑ1000¸öÊý×Ö³ýÒÔ200£¬¸ù¾ÝÆäÓàÊý£¬·ÅÔÚa[200][100]ÀïÃæ(¼ÙÉèÏàͬÓàÊýµÄ×î´óÊýÁ¿²»³¬¹ý100)£¬ÓàÊý¾ÍÊÇÊý×éµÄϱꡣÕâÑù£¬Æ½¾ùÀ´ËµÒ»¸öÊý×éa[i]ÀïÃæ¿ÉÄÜÓÐ5¸ö×óÓÒµÄÊý×Ö¡£µ±ÎÒÃÇҪȥÅбðÒ»¸öÊý×ÖÊÇ·ñ´æÔÚµÄʱºò£¬¶ÔÕâ¸öÊý×Ö³ýÒÔ200(Õâ¾ÍÊÇÒ»¸ö×î¼òµ¥µÄhashËã·¨)£¬¸ù¾ÝÓàÊýi×÷ΪϱêÈ¥Êý×éa[i]ÖвéÕÒ£¬´óÔ¼½øÐÐ5´Î²éÕÒ¾ÍÄÜÅбðÊÇ·ñÒѾ´æÔÚ£¬ÕâÑùͨ¹ý¿ª±ÙÄÚ´æ¿Õ¼äa[200][100]À´»»È¡ÁËʱ¼ä(µ±È»hash Ëã·¨µÄѡȡºÍhash tableµÄ´óСÊÇÒ»¸öºÜ¹Ø¼üµÄÎÊÌâ)¡£
Ã÷°×ÁË»ù±¾µÄhashÔÀíÖ®ºó£¬ÎÒÃÇÔÙÀ´¿´oracleµÄblockµÄ¹ÜÀí¡£Êý¾Ý¿âΪÕâЩblockÒ²¿ª±ÙÁËhash table£¬¼ÙÉèÊÇa,ÔòÔÚһάÉϵÄÊýÁ¿ÊÇÓɲÎÊý_db_block_hash_buckets À´¾ö¶¨µÄ£¬Ò²¾ÍÊÇ´æÔÚhash table a[_db_block_hash_buckets ],´Óoracle8i¿ªÊ¼£¬_db_block_hash_buckets =db_block_buffers*2¡£¶øÒ»¸öblock±»·Åµ½ÄĸöbucketsÀïÃæ£¬ÔòÊÇÓÉblockµÄÎļþ±àºÅ¡¢¿éºÅ(x$bh.dbarfl¡¢x$bh.dbablk¶ÔÓ¦ÁËblockµÄÎļþÊôÓÚ±í¿Õ¼äÖеÄÏà¹Ø±àºÅºÍblockÔÚÎļþÖеıàºÅ£¬x$bhÊÇËùÓÐcache bufferµÄheaderÐÅÏ¢£¬Í¨¹ý±í¸ñµÄÐÎʽ¿ÉÒÔ²éѯ)×öhash Ëã·¨¾ö¶¨·Åµ½ÄĸöbucketµÄ£¬¶øbucketÀïÃæ¾Í´æ·ÅÁËÕâЩbuffersµÄµØÖ·¡£ÕâÑùµ±ÎÒÃÇÒª·ÃÎÊÊý¾ÝµÄʱºò£¬¿ÉÒÔ»ñµÃsegmentµÄextent(¿ÉÒÔͨ¹ýdba_extents²éµ½¿´£¬ÏêϸµÄÐÅÏ¢À´Ô´ÕâÀï²»×ö̽ÌÖ)£¬×ÔȻ֪µÀÒª·ÃÎʵÄÎļþ±àºÅºÍblock±àºÅ£¬¸ù¾ÝÎļþºÍblock±àºÅ¿ÉÒÔͨ¹ýhashËã·¨¼ÆËã³öhash bucket,È»ºó¾Í¿ÉÒÔÈ¥hash bucketÀïÃæÈ¥ÕÒblock¶ÔÓ¦µÄbuffer¡£
³ý´ËÖ®Í⣬ΪÁËά»¤¶ÔÕâЩblockµÄ·ÃÎʺ͸ü¸Ä£¬oracle»¹ÌṩÁËÒ»ÖÖlatchÀ´±£»¤ÕâЩblock¡£ÒòΪҪ±ÜÃⲻͬµÄ½ø³ÌËæÒâµØ¾¶Ö±²¢·¢Ð޸ĺͷÃÎÊÕâЩblock£¬ÕâÑùºÜ¿ÉÄÜ»áÆÆ»µblockµÄ½á¹¹µÄ¡£latchÊÇÊý¾Ý¿âÄÚ²¿ÌṩµÄÒ»ÖÖά»¤ÄÚ²¿½á¹¹µÄÒ»Öֵͼ¶Ëø£¬latchµÄÉú´æÖÜÆÚ¼«¶Ì(΢ÃëÒÔϼ¶±ð)£¬½ø³Ì¼Ólatchºó¿ìËٵĽøÐÐij¸ö·ÃÎÊ»òÕßÐ޸͝×÷È»ºóÊÍ·Ålatch(¹ØÓÚlatch²»ÔÙ¹ý¶àµÄ²ûÊö£¬ÄÇ¿ÉÄÜÓÖÊÇÐèÒªÁíһƪÎÄÕ²ÅÄܲûÊöÇå³þ)¡£ÕâÖÖlatchÊýÁ¿ÊÇͨ¹ý²ÎÊý_db_block_hash_latches À´¶¨ÒåµÄ£¬Ò»¸ölatch¶ÔÓ¦µÄ±£»¤Á˶à¸öbuckets¡£´Ó8i¿ªÊ¼£¬Õâ¸ö²ÎÊýµÄdefault¹æÔòΪ:
µ±cache buffers ÉÙÓÚ2052 buffers
_db_block_hash_latches = power(2,trunc(log(2, db_block_buffers - 4) - 1))
µ±cache buffers¶àÓÚ131075 buffers
_db_block_hash_latches = power(2,trunc(log(2, db_block_buffers - 4) - 6))
µ±cache buffersλÓÚ2052Óë131075 buffersÖ®¼ä
_db_block_hash_latches = 1024
ͨ¹ýÕâ¸ö¹æÔòÎÒÃÇ¿ÉÒÔ¿´³ö£¬Ò»¸ölatch´óÔ¼¿ÉÒÔά»¤128¸ö×óÓÒµÄbuffers¡£ÓÉÓÚlatchʹµÃ¶ÔblockµÄ²Ù×÷µÄ´®Ðл¯(9iÖÐÓиĽø£¬¶ÁÓë¶Á¿ÉÒÔ²¢ÐУ¬µ«¶ÁÓëд¡¢Ð´ÓëдÒÀȻҪ´®ÐÐ)£¬ºÜÏÔÈ»ÎÒÃÇ¿ÉÒÔÏëµ½Ò»¸öµÀÀí£¬Èç¹û´óÁ¿½ø³Ì¶ÔÏàͬµÄblock½ø³Ì½øÐвÙ×÷£¬±ØÈ»ÔÚÕâЩlatchÉÏÔì³É¾ºÕù£¬Ò²¾ÍÊÇ˵±ØÈ»ÐγÉlatchµÄµÈ´ý¡£ÕâÔÚºê¹ÛÉϾͱíÏÖΪϵͳ¼¶µÄµÈ´ý¡£Ã÷°×ÁËÕâЩÔÀí£¬ÎªÎÒÃÇÏÂÃæµÄÔÚÊý¾Ý¿âÖеÄÕï¶Ïµì¶¨ÁË»ù´¡¡£
ÈçºÎÈ·¶¨Èȵã¶ÔÏó
Èç¹ûÎÒÃǾ³£¹Ø×¢statspack±¨¸æ£¬»á·¢ÏÖÓÐʱºò³öÏÖcache buffer chainsµÄµÈ´ý¡£Õâ¸öcache buffer chains¾ÍÊÇ_db_block_hash_latchesËù¶¨ÒåµÄlatchµÄ×ܳƣ¬Í¨¹ý²éѯv$latchÒ²¿ÉµÃµ½£º
select">sys@OCN>select latch#,name,gets,misses,sleeps from v$latch where name like 'cache buffer%';
LATCH# NAME GETS MISSES SLEEPS
---------- ------------------------------ ---------- ---------- ----------
93 cache buffers lru chain 54360446 21025 238
98 cache buffers chains 6760354603 1680007 27085
99 cache buffer handles 554532 6 0
ÔÚÕâ¸ö²éѯ½á¹ûÀïÎÒÃÇ¿ÉÒÔ¿´µ½¼Ç¼ÁËÊý¾Ý¿âÆô¶¯ÒÔÀ´µÄËùÓÐcahce buffer chainsµÄlatchµÄ×´¿ö£¬gets±íʾ×ܹ²ÓÐÕâô¶à´ÎÇëÇó£¬misses±íʾÇëÇóʧ°ÜµÄ´ÎÊý(¼ÓËø²»³É¹¦)£¬¶øsleeps ±íʾÇëÇóʧ°ÜÐÝÃߵĴÎÊý£¬Í¨¹ýsleepsÎÒÃÇ¿ÉÒÔ´óÌåÖªµÀÊý¾Ý¿âÖÐlatchµÄ¾ºÕùÊÇ·ñÑÏÖØ£¬ÕâÒ²¼ä½ÓµÄ±íÕ÷ÁËÈȵã¿éµÄÎÊÌâÊÇ·ñÑÏÖØ¡£ÓÉÓÚv$latchÊÇÒ»¸ö¾ÛºÏÐÅÏ¢£¬ÎÒÃDz¢²»ÄÜ»ñµÃÄÄЩ¿é¿ÉÄÜ´æÔÚÆµ·±·ÃÎÊ¡£ÄÇÎÒÃÇÒªÀ´¿´ÁíÒ»¸öviewÐÅÏ¢£¬ÄǾÍÊÇv$latch_children,v$latch_children.addr¼Ç¼µÄ¾ÍÊÇÕâ¸ölatchµÄµØÖ·¡£
select">sys@OCN>select addr,LATCH#,CHILD#,gets,misses,sleeps from v$latch_children
2 where name = 'cache buffers chains' and rownum < 21;
ADDR LATCH# CHILD# GETS MISSES SLEEPS
-------- ---------- ---------- ---------- ---------- ----------
91B23B74 98 1024 10365583 3957 33
91B23374 98 1023 5458174 964 25
91B22B74 98 1022 4855668 868 15
91B22374 98 1021 5767706 923 22
91B21B74 98 1020 5607116 934 31
91B21374 98 1019 9389325 1111 25
91B20B74 98 1018 5060207 994 31
91B20374 98 1017 18204581 1145 18
91B1FB74 98 1016 7157081 920 23
91B1F374 98 1015 4660774 922 22
91B1EB74 98 1014 6954644 976 32
91B1E374 98 1013 4881891 970 19
91B1DB74 98 1012 5371135 971 28
91B1D374 98 1011 5154497 990 26
91B1CB74 98 1010 5013796 936 18
91B1C374 98 1009 5667446 939 25
91B1BB74 98 1008 4673421 883 14
91B1B374 98 1007 4589646 986 17
91B1AB74 98 1006 10380781 1020 20
91B1A374 98 1005 5142009 1110 19
20 rows selected.
µ½´ËÎÒÃÇ¿ÉÒÔ¸ù¾Ýv$latch_child.addr¹ØÁªµ½¶ÔÓ¦µÄx$bh.hladdr(ÕâÊÇbuffer headerÖмǼµÄµ±Ç°bufferËù´¦µÄlatchµØÖ·)£¬Í¨¹ýx$bh¿ÉÒÔ»ñµÃ¿éµÄÎļþ±àºÅºÍblock±àºÅ¡£
select">sys@OCN>select dbarfil,dbablk
from x$bh
where hladdr in
(select addr
from (select addr
from v$latch_children
order by sleeps desc)
where rownum < 11);
DBARFIL DBABLK
---------- ----------
4 6498
40 14915
15 65564
28 34909
40 17987
1 24554
8 21404
39 29669
28 46173
28 48221
¡¡¡¡¡¡¡¡
ÓÉ´ËÎÒÃǾʹòͨÁËcache buffers chainsºÍ¾ßÌåblockÖ®¼äµÄ¹ØÏµ£¬ÄÇÔÙ¼ÌÐøÏÂÀ´£¬ÖªµÀÁËblock£¬ÎÒÃÇÐèÒªÖªµÀ¾¿¾¹ÊÇÄÄЩsegment¡£Õâ¸ö¿ÉÒÔͨ¹ýdba_extentsÀ´»ñµÃ¡£
select distinct a.owner,a.segment_name from
dba_extents a,
(select dbarfil,dbablk
from x$bh
where hladdr in
(select addr
from (select addr
from v$latch_children
order by sleeps desc)
where rownum < 11)) b
where a.RELATIVE_FNO = b.dbarfil
and a.BLOCK_ID <= b.dbablk and a.block_id + a.blocks > b.dbablk;
OWNER SEGMENT_NAME SEGMENT_TYPE
------------------------------ ------------------------------ ------------------
ALIBABA BIZ_SEARCHER TABLE
ALIBABA CMNTY_USER_MESSAGE TABLE
ALIBABA CMNTY_VISITOR_INFO_PK INDEX
ALIBABA COMPANY_AMID_IND INDEX
ALIBABA COMPANY_DRAFT TABLE
ALIBABA FEEDBACK_POST TABLE
ALIBABA IM_BLACKLIST_PK INDEX
ALIBABA IM_GROUP TABLE
ALIBABA IM_GROUP_LID_IND INDEX
ALIBABA MEMBER TABLE
ALIBABA MEMBER_PK INDEX
ALIBABA MLOG$_SAMPLE TABLE
¡¡¡¡¡¡¡¡
ÎÒÃÇ»¹ÓÐÁíÍâÒ»ÖÖ·½Ê½
select object_name
from dba_objects
where data_object_id in
(select obj
from x$bh
where hladdr in
(select addr
from (select addr
from v$latch_children
order by sleeps desc)
where rownum < 11)) ;
OBJECT_NAME
------------------------------------
I_CCOL2
RESOURCE_PLAN$
DUAL
FGA_LOG$
AV_TRANSACTION
COMPANY_DRAFT
MEMBER
SAMPLE
SAMPLE_GROUP
VERTICAL_COMPONENT
MEMBER_PK
SAMPLE_GROUP_PK
IM_BLACKLIST_PK
IM_CONTACT
IM_GROUP
CMNTY_USER_MESSAGE
CMNTY_VISITOR_INFO_PK
IM_OFFLINEMSG_TID_IND
OFFER
OFFER_PK
OFFER_EMAIL_IND
OFFER_DRAFT
CMNTY_USER_MESSAGE_TD_BSM_IND
CMNTY_MESSAGE_NUM_PK
BIZ_EXPRESS_MEMBER_ID_IND
¡¡¡¡¡¡¡¡
µ½ÕâÀïÎÒÃÇ»ù±¾ÄÜÕÒµ½Èȵã¿é¶Ô¶ÔÓ¦µÄ¶ÔÏó¡£µ«Êµ¼ÊÉÏ»¹ÓÐÁíÍâÒ»¸ö;¾¶À´»ñÈ¡ÕâЩÐÅÏ¢£¬ÄǾÍÊǺÍx$bh.tch Ïà¹ØµÄÒ»ÖÖ·½·¨¡£¶ÔÓÚ8i¿ªÊ¼oracleÌṩÁ˽Ӵ¥µã(touch count)À´×÷ΪblockÊÇÀäÈȵıêÖ¾£¬ÔÚÒ»¶¨Ìõ¼þÂú×ãµÄÇé¿öÏÂblock±»½ø³Ì·ÃÎÊÒ»´Îtouch count Ôö¼ÓÒ»£¬µ½Ä³¸ö±ê×¼Ö®ºó±»Òƶ¯µ½LRUÈȶË(¹ØÓÚtouch count ÔÚÕâÀï²»×öÏêϸ½éÉÜ£¬ÄÇÓÖ½«ÊÇÒ»´óƪÎÄÕÂ)¡£ÄÇÔÚ¶Ìʱ¼äÄÚ´ÓijÖÖÒâÒåÉϽ²£¬touch count ´óµÄblock¿ÉÄܰµÊ¾×ÅÔÚµ±Ç°Ä³¸öÖÜÆÚÄÚ±»·ÃÎÊ´ÎÊý±È½Ï¶à¡£
select distinct a.owner,a.segment_name,a.segment_type from
dba_extents a,
(select dbarfil,dbablk
from (select dbarfil,dbablk
from x$bh order by tch desc) where rownum < 11) b
where a.RELATIVE_FNO = b.dbarfil
and a.BLOCK_ID <= b.dbablk and a.block_id + a.blocks > b.dbablk;
OWNER SEGMENT_NAME SEGMENT_TYPE
------------------------------ ------------------------------ ------------------
ALIBABA CMNTY_USER_MESSAGE TABLE
ALIBABA MEMBER_PK INDEX
ALIBABA OFFER_DRAFT_GMDFY_IND INDEX
ͬÉÏÃæÒ»Ñù»¹ÓÐÕâ¸ö·½·¨
select object_name
from dba_objects
where data_object_id in
(select obj
from (select obj
from x$bh order by tch desc) where rownum < 11) ;
OBJECT_NAME
---------------------------------------------------
DUAL
MEMBER_PK
SAMPLE_GROUP_PK
CMNTY_USER_MESSAGE_TD_BSM_IND
OFFER_DRAFT_MID_GMDFY_IND
OFFER_MID_GPOST_IND
OFFER_DRAFT_PK
MEMBER_GLLOGIN_IND
OFFER_MID_STAT_GEXPIRE_IND
SAMPLE_MID_STAT_IND
10 rows selected.
µ½ÕâÀÎÒÃÇѰÕÒÈȵã¿éºÍÈȵã¶ÔÏóµÄ¹¤×÷ËãÊÇÍê³ÉÁË£¬µ«ÎÒÃÇ»¹²¢Ã»Óнâ¾öÎÊÌâ¡£
ÈȵãÎÊÌâµÄ½â¾ö
Èȵã¿éºÍÈȵã¶ÔÏóÎÒÃǶ¼ÕÒµ½ÁË£¬µ«ÊÇÎÒÃǸÃÔõôÀ´½â¾öÕâ¸öÎÊÌâÄØ£¿Ò»°ãÀ´Ëµ£¬Èȵã¿é»áµ¼ÖÂcache buffers chains¾ºÕùµÈ´ý£¬µ«²¢²»ÊÇ˵cache buffer chainsÒ»¶¨ÊÇÒòΪÈȵã¿é¶øÆð£¬ÔÚÌØ±ðÇé¿öÏÂÓпÉÄÜÊÇÒòΪlatchÊýÁ¿µÄÎÊÌâµ¼Öµģ¬Ò²¾ÍÊÇÒ»¸ölatch¹ÜÀíµÄbuffersÊýÁ¿Ì«¶à¶øµ¼Ö¾ºÕù¼¤ÁÒ¡£µ«ÊÇlatchÊýÁ¿ÎÒÃÇÒ»°ãÊDz»»áÇáÒ×È¥ÉèÖõģ¬ÕâÊÇoracleµÄÒþ²Ø²ÎÊý¡£
ʵ¼ÊÉÏ×îÓÐЧµÄ°ì·¨£¬ÊÇ´ÓÓÅ»¯sqlÈëÊÖ£¬²»Á¼µÄsqlÍùÍù´øÀ´´óÁ¿µÄ²»±ØÒªµÄ·ÃÎÊ£¬ÕâÊÇÔì³ÉÈȵã¿éµÄ¸ùÔ´¡£±ÈÈç±¾¸Ãͨ¹ýÈ«±íɨÃèµÄ²éѯȴ×ßÁËË÷ÒýµÄrange scan£¬ÕâÑù½«´øÀ´´óÁ¿µÄ¶Ô¿éµÄÖØ¸´·ÃÎÊ¡£´Ó¶øÐγÉÈȵãÎÊÌâ¡£ÔÙ»òÕß±ÈÈç²»µ±µØ×ßÁËnested loopsµÄ±íÁ¬½Ó£¬Ò²¿ÉÄܶԷÇÇý¶¯±íÔì³É´óÁ¿µÄÖØ¸´·ÃÎÊ¡£ÄÇôÔÚÕâ¸öʱºò£¬ÎÒÃǵÄÄ¿±ê¾ÍÊÇÕÒ³öÕâЩsqlÀ´²¢³¢ÊÔÓÅ»¯¡£ÔÚstatspack±¨¸æÖУ¬¸ù¾Ý±¨¸æÖÐsqlÁÐ±í£¬ÎÒÃÇÈç¹ûÊÇͨ¹ýdba_extentsÈ·¶¨µÄÈȵã¶ÔÏó¶ø²»ÊÇͨ¹ýdba_objectsÈ·¶¨µÄ£¬Ôò¿ÉÒÔͨ¹ý²éÕÒ³öµÄÈȵãsegmentת»»Îª¶ÔÓ¦µÄ±í£¬¶ÔÓÚ·Ç·ÖÇøµÄË÷Òý£¬index_name¾ÍÊÇsegment_name,ͨ¹ýdba_indexesºÜÈÝÒ×µÄÕÒµ½¶ÔÓ¦µÄtable_name,¶ÔÓÚ·ÖÇø±íºÍ·ÖÇøË÷ÒýÒ²ÄÜͨ¹ýºÍdba_tab_partitionºÍdba_ind_partitionsÕÒµ½segmentºÍtableµÄ¶ÔÓ¦¹ØÏµ¡£Í¨¹ýÕâЩtableµ½statspack±¨¸æÖÐÈ¥ÕÒÏà¹ØµÄsql¡£
select sql_text
from stats$sqltext a,
(select distinct a.owner,a.segment_name,a.segment_type from
dba_extents a,
(select dbarfil,dbablk
from (select dbarfil,dbablk
from x$bh order by tch desc) where rownum < 11) b
where a.RELATIVE_FNO = b.dbarfil
and a.BLOCK_ID <= b.dbablk and a.block_id + a.blocks > b.dbablk) b
where a.sql_text like '%'||b.segment_name||'%' and b.segment_type = 'TABLE'
order by a.hash_value,a.address,a.piece;
SQL_TEXT
----------------------------------------------------------------
SELECT SEQ_SMS_TRANSACTION.nextval FROM DUAL
SELECT SEQ_BIZ_EXPRESS.nextval FROM DUAL
SELECT bizgroup.seq_grp_post.NextVal FROM DUAL
SELECT SEQ_SAMPLE.nextval FROM DUAL
SELECT bizgroup.seq_grp_user.NextVal FROM DUAL
SELECT SEQ_BIZ_SEARCHER.nextval FROM DUAL
SELECT SEQ_OFFER_DRAFT.nextval FROM DUAL
select seq_Company_Draft.NextVal from DUAL
SELECT SEQ_SAMPLE_GROUP.nextval FROM DUAL
SELECT SEQ_CMNTY_USER_MESSAGE.nextval FROM DUAL
SELECT SYSDATE FROM DUAL
select seq_News_Forum.NextVal from DUAL
SELECT SEQ_SMS_USER.nextval FROM DUAL
select seq_Biz_Member.NextVal from DUAL
select seq_Pymt_Managing.NextVal from DUAL
E= '+08:00' NLS_DUAL_CURRENCY = '$' NLS_TIME_FORMAT = 'HH.MI.SSX
SELECT SEQ_COMPANY_DRAFT.nextval FROM DUAL
SELECT 1 FROM DUAL
select seq_offer_draft.NextVal from DUAL
select seq_Biz_Express_Category.NextVal from DUAL
20 rows selected.
µ±È»ÕâÀïÊÇ´ÓstatspackËѼ¯µÄstats$sqltextÖÐÈ¥ÕÒµÄ(Äã¿ÉÒÔÔÚstatspackµÄÎı¾±¨¸æÖÐÈ¥ÕÒ)£¬Êµ¼ÊÉÏ£¬ÎÒÃÇ¿ÉÒÔÖ±½ÓÔÚµ±Ç°Êý¾Ý¿âÖеÄv$sqlarea»òÕßv$sqltextÀïÃæÈ¥ÕÒµ½ÕâЩsql£¬È»ºóÀ´³¢ÊÔÓÅ»¯¡£
select sql_text
from v$sqltext a,
(select distinct a.owner,a.segment_name,a.segment_type from
dba_extents a,
(select dbarfil,dbablk
from (select dbarfil,dbablk
from x$bh order by tch desc) where rownum < 11) b
where a.RELATIVE_FNO = b.dbarfil
and a.BLOCK_ID <= b.dbablk and a.block_id + a.blocks > b.dbablk) b
where a.sql_text like '%'||b.segment_name||'%' and b.segment_type = 'TABLE'
order by a.hash_value,a.address,a.piece;
SQL_TEXT
----------------------------------------------------------------
SELECT NULL FROM DUAL FOR UPDATE NOWAIT
SELECT SEQ_SMS_TRANSACTION.nextval FROM DUAL
SELECT SEQ_BIZ_EXPRESS.nextval FROM DUAL
SELECT SEQ_IM_GROUP.nextval FROM DUAL
SELECT SEQ_SAMPLE.nextval FROM DUAL
='DD-MON-RR HH.MI.SSXFF AM TZR' NLS_DUAL_CURRENCY='$' NLS_COMP='
SELECT SEQ_BIZ_SEARCHER.nextval FROM DUAL
SELECT SEQ_OFFER_DRAFT.nextval FROM DUAL
SELECT SEQ_SAMPLE_GROUP.nextval FROM DUAL
DD-MON-RR HH.MI.SSXFF AM TZR' NLS_DUAL_CURRENCY='$' NLS_COMP='BI
SELECT SEQ_CMNTY_USER_MESSAGE.nextval FROM DUAL
SELECT SYSDATE FROM DUAL
SELECT SEQ_SMS_USER.nextval FROM DUAL
IMESTAMP_TZ_FORMAT='DD-MON-RR HH.MI.SSXFF AM TZR' NLS_DUAL_CURRE
SELECT SEQ_COMPANY_DRAFT.nextval FROM DUAL
SELECT 1 FROM DUAL
SELECT USER FROM DUAL
SELECT DECODE('A','A','1','2') FROM DUAL
18 rows selected.
³ýÁËÓÅ»¯sqlÍ⣬µ±È»¶ÔÓÚÈȵãµÄ±í»òÕßË÷ÒýÀ´Ëµ£¬Èç¹ûСµÄ»°£¬ÎÒÃÇ¿ÉÒÔ¿¼ÂÇcacheÔÚÄÚ´æÖУ¬ÕâÑù¿ÉÄܽµµÍÎïÀí¶ÁÌá¸ßsqlÔËÐÐËÙ¶È(Õâ²¢²»»á¼õÉÙcache buffer chainsµÄ·ÃÎÊ´ÎÊý)£¬¶ÔÓÚÐòÁУ¬ÎÒÃÇ¿ÉÒÔ¶ÔÐòÁжàÉèÖÃһЩcache¡£Èç¹ûÊDz¢ÐзþÎñÆ÷»·¾³ÖеÄË÷Òý¶ÔÏ󣬲¢ÇÒÕâ¸öË÷ÒýÊÇϵÁеÝÔöÀàÐÍ£¬ÎÒÃÇ¿ÉÒÔ¿¼ÂÇ·´ÏòË÷Òý(¹ØÓÚ·´ÏòË÷ÒýÕâÀï¾Í²»¹ý¶àµØ×ö½éÉÜÁË)¡£
1)pfileÊÇÎı¾Îļþ£¬spfileÊǶþ½øÖÆÎļþ£»
2)¶ÔÓÚ²ÎÊýµÄÅäÖã¬pfile¿ÉÒÔÖ±½ÓÒÔÎı¾±à¼Æ÷´ò¿ªÊÖ¹¤ÅäÖ㬶øspfile²»ÐУ¬±ØÐëÔÚÊý¾Ý¿âÆô¶¯ºó£¬Í¨¹ýsqlÃüÁî½øÐÐÔÚÏßÐ޸쬵±È»spfileÒ²¿ÉÓÃÎı¾±à¼Æ÷´ò¿ª£¬°ÑÀïÃæÎı¾µÄÄÚÈݸ´ÖƳöÀ´·ÅÔÚpfileÖУ¬µ«¾ö¶Ô²»¿ÉÒÔÖ±½ÓÐ޸ģ¬Ö±½ÓÐ޸ĺó»áʹÎļþÎÞ·¨¶ÁÈ¡¡£
3)pfileÅäÖøıäºó£¬ÒªÊ¹ÓÃÆäÉúЧ£¬±ØÐëÖØÐÂÆô¶¯Êý¾Ý¿â£¬spfileµÄÅäÖÃÉúЧʱÏÞºÍ×÷ÓÃÓò¿ÉÒÔÓÉÐ޸IJÎÊýµÄsqlÃüÁîÖ¸¶¨£¬¿ÉÒÔÁ¢¼´ÉúЧ£¬Ò²¿ÉÒÔ²»Á¢¼´ÉúЧ¡£µ±È»ÓÐЩ²ÎÊýµÄÐ޸ıØÐëÖØÆôÊý¾Ý¿â²ÅÄÜÉúЧ£»
4)¿ÉÒÔÓÃsqlÃüÁîÓÉpfile´´½¨spfile,Ò²¿ÉÒÔÓÉspfile´´½¨pfile£»
5)Èç¹ûÊÇÊÖ¶¯´´½¨Êý¾Ý¿â¶ø²»ÊÇͨ¹ýDBCA£¬Ôò¿ªÊ¼´´½¨Êý¾Ý¿âʱ£¬ÄãÖ»Äܶ¨Òåpfile ¡£ÒòΪËüÊÇÎı¾¸ñʽµÄ£»
ÏÖÔÚÒ»°ãÆÕͨÉú²ú¿â¶¼²ÉÓÃspfileÆô¶¯Êý¾Ý¿â£¬pfileȷʵûÓÐÓõÄÀíÓÉÁË£¬¸Ð¾õÖ»ÓÐÒÔÏÂÇé¿ö²Å»áʹÓÃpfile£º
1)ÈëÃÅѧϰʱ£¬ÎªÁËÀí½â³õʼ»¯²ÎÊý
2)´´½¨Êý¾Ý¿âʱ£¬ÒòΪÕâʱ»¹Ã»spfile
3)»Ö¸´Êý¾Ý¿âʱ
4)²ÉÓÃRACµÄÉú²ú¿âÖÐÈç¹ûÒª¹²ÓÃspfile£¬¿ÉÒÔ½¨Ò»¸ö³õʼµÄpfile,È»ºóÔÚpfileÖ¸¶¨spfileΪ¹²ÏíÉ豸Îļþ
1.7T´óÔ¼1¸öʱ½â¾öcopy ºÃ
ds8100
Cswitch£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓÄÚÈÝת»»µÄ´ÎÊý£»
Syscall£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓÔËÐÐϵͳºô½ÐµÄ×Ü´ÎÊý£»
Reads£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓÔËÐжÁϵͳºô½ÐµÄ´ÎÊý£»
Writes£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓÔËÐÐдϵͳºô½ÐµÄ´ÎÊý£»
Forks£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓÔËÐÐÅÉÉúϵͳºô½ÐµÄ´ÎÊý£»
Execs£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓÔËÐÐÖ´ÐÐϵͳºô½ÐµÄ´ÎÊý£»
Runqueue£ºµÈ´ý´¦ÀíÆ÷¿ÕÏÐÒÔ±ãÔËÐеÄÏß³ÌÆ½¾ùÊý£»
Waitqueue£ºµÈ´ý·ÖÒ³Íê³ÉµÄÏß³ÌÆ½¾ùÊý£»
Readch£ºÔÚ¼à¿ØÆÚ¼äͨ¹ý¶Áϵͳºô½ÐÿÃëÖÓ¶Á³öµÄ×Ö½ÚÊý£»
Writech£ºÔÚ¼à¿ØÆÚ¼äͨ¹ýдϵͳºô½ÐÿÃëÖÓдÈëµÄ×Ö½ÚÊý£»
Rawin£ºÔÚ¼à¿ØÆÚ¼äͨ¹ýTTYsÿÃëÖÓ¶ÁÈëµÄÂã×Ö½ÚÊý£»
Ttyout£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓдÈëTTYsµÄ×Ö½ÚÊý£»
Igets£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓµ½½Úµã²éÕÒÀýÐгÌÐòµÄºô½ÐÊý£»
Namei£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓ·¾¶²éÕÒÀýÐгÌÐòµÄºô½ÐÊý£»
Dirblk£ºÔÚ¼à¿ØÆÚ¼äͨ¹ýĿ¼ËÑË÷ÀýÐгÌÐòÿÃëÖÓɨÃèµ½µÄĿ¼¿éÊý£»
PAGING²¿·ÖÏÔʾµÄÊÇ·ÖҳÿÃëÖÓ´ÎÊýµÄͳ¼Æ£º
Faults£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓ·¢ÉúµÄ·ÖÒ³´íÎó×ÜÊý£»
Steals£ºÔÚ¼à¿ØÆÚ¼ä±»ÐéÄâÄÚ´æ¹ÜÀíÆ÷ÿÃëÖÓ͵×ßµÄÎïÀíÄÚ´æ4kµÄÖ¡£»
PgspIn£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓ´Ó·ÖÒ³¿Õ¼äÖжÁÈ¡µÄ4k·ÖÒ³Êý£»
PgspOut£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓдÈë·ÖÒ³¿Õ¼äµÄ4k·ÖÒ³Êý£»
PageIn£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓ¶ÁÈ¡µÄ4k·ÖÒ³Êý£¬Õâ°üÀ¨´ÓÎļþϵͳ¶Á²Ù×÷Ïà¹ØµÄ·ÖÒ³»î¶¯£¬´ÓÕâ¸öÖµ¼õÈ¥PgspInµÄÖµ¾ÍÊÇÿÃëÖÓ´ÓÎļþϵͳ¶Á²Ù×÷Ïà¹ØµÄ·ÖÒ³»î¶¯Êý£»
PageOut£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓдÈëµÄ4k·ÖÒ³Êý£¬Õâ°üÀ¨ÏòÎļþϵͳд²Ù×÷Ïà¹ØµÄ·ÖÒ³»î¶¯£¬´ÓÕâ¸öÖµ¼õÈ¥PgspOutµÄÖµ¾ÍÊÇÿÃëÖÓÏòÎļþϵͳд²Ù×÷Ïà¹ØµÄ·ÖÒ³»î¶¯Êý£»
Sios£ºÔÚ¼à¿ØÆÚ¼äͨ¹ýÐéÄâÄÚ´æ¹ÜÀíÆ÷µÃµ½µÄI/OÇëÇóÊý£»
Momory²¿·ÖÏÔʾµÄÊÇʵ¼ÊÄÚ´æºÍÔÚʹÓÃÖеÄÄڴ棺
Real,MB£ºÒÔMΪµ¥Î»µÄʵ¼ÊÄڴ棻
£¥Comp£ºµ±Ç°·ÖÅ䏸¼ÆËã·ÖҳƬ¶ÏµÄÄÚ´æÕ¼Êµ¼ÊÄÚ´æµÄ°Ù·Ö±È¡£¼ÆËã·ÖҳƬ¶ÏÓÉ·ÖÒ³¿Õ¼ä²úÉú¡£
£¥Nocomp£ºµ±Ç°·ÖÅä·Ç¼ÆËã·ÖҳƬ¶ÏµÄÄÚ´æÕ¼Êµ¼ÊÄÚ´æµÄ°Ù·Ö±È¡£·Ç¼ÆËã·ÖҳƬ¶Ï°üÀ¨ÄÇЩÎļþ¿Õ¼ä£¬Êý¾ÝÎļþ¡¢¿ÉÖ´ÐÐÎļþ¡¢»òÕß¹²Ïí¿âÎļþ¡£
£¥Client£ºµ±Ç°·ÖÅ䏸ÓÃÀ´»º³åÔ¶³Ì¹ÒÔØÎļþµÄÄÚ´æÕ¼Êµ¼ÊÄÚ´æµÄ°Ù·Ö±È¡£
PAING SPACEÏÔʾ·ÖÒ³¿Õ¼äµÄ´óСºÍʹÓÃÂÊ£º
Size,MB£ºÏµÍ³ÀïËùÓзÖÒ³¿Õ¼äµÄ´óС£¬ÒÔMΪµ¥Î»£»
£¥Used£ºµ±Ç°Ê¹ÓõķÖÒ³¿Õ¼äÕ¼×ܿռäµÄ°Ù·Ö±È£»
£¥Free£ºµ±Ç°¿ÕÏеķÖÒ³¿Õ¼äÕ¼×ܿռäµÄ°Ù·Ö±È¡£
CPU¹¤¾ß£º
User£¥£ºÏÔʾÔËÐеÄÓû§³ÌÐòËùÕ¼ÓõÄCPU°Ù·Ö±È£»
Kern%£ºÏÔʾÔËÐеÄÄں˳ÌÐòËùÕ¼ÓõÄCPU°Ù·Ö±È£»
Wait%£ºÏÔʾµÈ´ýIO²Ù×÷ËùÕ¼ÓõÄCPU°Ù·Ö±È£»
Idel%£ºÏÔʾCPU¿ÕÏеİٷֱȡ£
ÍøÂç½Ó¿Ú£º
Interf£ºÍøÂç½Ó¿ÚµÄÃû³Æ£»
KBPS£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓͨ¹ýµÄÒÔMΪµ¥Î»µÄ×ÜÁ÷Á¿£¬Õⲿ·Ö°üÀ¨Ã¿ÃëÖÓ½ÓÊպͷ¢Ë͵Ä×ܺ͡£
I-Pack£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓ½ÓÊÕµ½µÄÊý¾Ý°üÊý£»
O-Pack£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓ·¢Ë͵ÄÊý¾Ý°üÊý£»
KB-In£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓ½ÓÊÕµ½µÄ×Ö½ÚÊý£¨ÒÔKΪµ¥Î»£©£»
KB-Out£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓ·¢Ë͵Ä×Ö½ÚÊý£¨ÒÔKΪµ¥Î»£©¡£
ÎïÀí´ÅÅÌ£º
Disk£ºÎïÀí´ÅÅ̵ÄÃû³Æ£»
Busy%£ºÖ¸Ã÷ÎïÀí´ÅÅÌÔڻ״̬µÄʱ¼ä°Ù·Ö±È£»
KBPS£ºÔÚ¼à¿ØÆÚ¼äÿÃëÖÓ¶ÁдµÄ×Ö½ÚÊý£¨ÒÔKΪµ¥Î»£©£»
TPS£ºÃ¿ÃëÖÓÎïÀí´ÅÅ̵ÄÊý¾Ý´«ÊäÁ¿¡£Ò»´Î´«ÊäÖ¸µÄÊÇÒ»´ÎI/OÇëÇó£»
KB-Read£ºÃ¿ÃëÖÓ´ÓÎïÀí´ÅÅ̶Á³öµÄK×Ö½ÚÊý£»
KB-Write£ºÃ¿ÃëÖÓÏòÎïÀí´ÅÅÌдÈëµÄK×Ö½ÚÊý¡£
WLM£¨¸ºÔعÜÀí£©Àࣺ
£¥CPU Utilization£ºCPUµÄƽ¾ùÀûÓÃÂÊ£»
£¥Mem Utilization£ºÄÚ´æµÄƽ¾ùÀûÓÃÂÊ£»
£¥Blk I/O£º¿éI/OµÄƽ¾ùÀûÓÃÂÊ£»
½ø³Ì£º
NAME£º¿ÉÖ´ÐгÌÐòµÄÃû³Æ£»
Process ID£º½ø³ÌµÄIDºÅ£»
£¥CPU Utilization£º½ø³ÌµÄCPUƽ¾ùʹÓÃÂÊ£¬Õâ¸öÖµÖ¸µÄÊǽø³ÌÔÚÉúÃüÖÜÆÚÖÐµÄÆ½¾ùʹÓÃÂÊ£»
Paging Space Used£º·ÖÅ䏸½ø³ÌµÄ·ÖÒ³¿Õ¼ä´óС£»
Process Owner£ºÓµÓÐÕâ¸ö½ø³ÌµÄÓû§Ãû£»
Workload Management£¨WLM£©Class£º½ø³ÌÊôÓÚÄĸöWLM class¡£ ²é¿´È«ÎÄ
Ëæ×ÅÊý¾Ý¿â¼¼ÊõµÄ·¢Õ¹ £¬ÆäÓ¦ÓÃÔ½À´Ô½¹ã·º£¬ÒÑÖð½¥³ÉΪÏÖ´ú¼ÆËã»úÐÅϢϵͳºÍ¼ÆËã»úÓ¦ÓÃϵͳµÄ»ù´¡ºÍºËÐÄ¡£»ùÓÚÊý¾Ý¿âµÄÁª»úÊÂÎñ´¦Àí£¨£Ï£Ì£Ô£Ð£©ÒÔ¼°Áª»ú·ÖÎö´¦Àí£¨OLAP£©ÒøÐС¢ÆóÒµ¡¢ Õþ¸®µÈ²¿ÃÅ×îÎªÖØÒªµÄ¼ÆËã»úÓ¦ÓÃÖ®Ò»£¬²¢×÷Ϊµç×ÓÕþÎñ¡¢ÃÅ»§ÍøÕ¾µÈÓ¦ÓÃϵͳµ×²ãÊý¾Ý¹ÜÀíµÄ¹¤¾ß¡£
Êý¾Ý¿â×î»ù±¾µÄÈÎÎñÊÇ´æ´¢¡¢¹ÜÀíÊý¾Ý£¬¶øÖÕ¶ËÓû§Î¨Ò»ÄÜ¿´µ½µÄÊý¾Ý¿âÌØÐÔ¾ÍÊÇÆäÐÔÄÜ£ºÊý¾Ý¿âÒÔºÎËÙ¶È´¦Àíijһָ¶¨²éѯµÄ½á¹û£¬²¢ÇÒ½«½á¹û·µ»Øµ½Óû§ËùÓõŤ¾ßºÍÓ¦ÓóÌÐò¡£´Ó´ó¶àÊýϵͳµÄÓ¦ÓÃʵÀýÀ´¿´£¬²éѯ²Ù×÷ÔÚ¸÷ÖÖÊý¾Ý¿â²Ù×÷ÖÐËùÕ¼¾ÝµÄ±ÈÖØ×î´ó¡¢²éÔÄÐÂÎÅ¡¢ ²é¿´Îļþ¡¢ ²éѯͳ¼ÆÐÅÏ¢µÈ¡£Òò´Ë£¬Êý¾Ý¿â²éѯ²Ù×÷µÄЧÂÊÊÇÓ°ÏìÒ»¸öÓ¦ÓÃϵͳÏìӦʱ¼äµÄ¹Ø¼üÒòËØ¡£Ëæ×ÅÒ»¸öÓ¦ÓÃϵͳÖÐÊý¾ÝµÄ¶¯Ì¬Ôö³¤£¬Êý¾ÝÁ¿±ä´ó£¬Êý¾Ý¿â²éѯЧÂʾͻáÓÐËù½µµÍ£¬Ó¦ÓÃϵͳµÄÏìÓ¦ËÙ¶ÈÒ²ËæÖ®¼õÂý£¬ÓÈÆä¶ÔÓÚº£Á¿Êý¾ÝµÄ¹ÜÀíºÍ²éѯÎÊÌâ¾Í¸ü¼ÓÍ»³ö£¬ÈçºÎÌá¸ß¶¯Ì¬Ôö³¤µÄÊý¾Ý¿âµÄ²éѯЧÂʾÍÏÔµÃÓÈÎªÖØÒª¡£
ĿǰͨÓõÄÊý¾Ý¿â²úÆ·ÓкܶàÖÖ£¬ÆäÖÐORACLEÊý¾Ý¿âÒÔÆäÖ§³Ö´óÊý¾Ý¿â¡¢¶àÓû§µÄ¸ßÐÔÄÜÊÂÎñ´¦Àí, ¶ÔÒµ½ç¸÷Ïҵ±ê×¼µÄÖ§³Ö,ÍêÕûµÄ°²È«ºÍÍêÕûÐÔ¿ØÖÆ£¬Ö§³Ö·Ö²¼Ê½Êý¾Ý¿âÀû·Ö²¼´¦Àí ¾ßÓпÉÒÆÖ²ÐÔ¡¢¿É¼æÈÝÐԺͿÉÁ¬½ÓÐÔµÈÍ»³öÓŵ㱶ÊÜÓû§Ï²°®£¬Ó¦ÓýÏΪ¹ã·º£¬ÔÚ»¥ÁªÍøÊý¾Ý¿âƽ̨ÉÏ´¦ÓÚÁìÏȵØÎ»¡¢Æä£Ó£ð£á£ô£é£á£ì¼¼ÊõÄܸü¼ÓÓÐЧµØ¹ÜÀíµØÀíÐÅÏ¢£¬ÊµÏÖº£Á¿¿Õ¼äÐÅÏ¢µÄ´æ´¢ºÍ¹ÜÀí¡£±¾ÎĽáºÏORACLEÊý¾Ý¿âÓ¦ÓþÑ飬´ÓÃüÖÐÂÊÌá¸ß¡¢¶à±í²éѯÓÅ»¯¡¢´ó±í²éѯÓÅ»¯ºÍ£Ó£ÑLÓÅ»¯µÈËĸö·½Ãæ²ûÊö£Ï£Ò£Á£Ã£Ì£ÅÊý¾Ý¿â²éѯЧÂÊÌá¸ßµÄ¾ÑéºÍ·½·¨¡£
²é¿´È«ÎÄsort_area_sizeÊǵ±²éѯÐèÒªÅÅÐòµÄʱºò£¬Êý¾Ý¿â»á»°½«Ê¹ÓÃÕⲿ·ÖÄÚ´æ½øÐÐÅÅÐò£¬µ±ÄÚ´æ´óС²»×ãµÄʱºò£¬Ê¹ÓÃÁÙʱ±í¿Õ¼ä½øÐдÅÅÌÅÅÐò¡£ÓÉÓÚ´ÅÅÌÅÅÐòЧÂʺÍÄÚ´æÅÅÐòЧÂÊÏà²îºÃ¼¸¸öÊýÁ¿¼¶£¬ËùÒÔÕâ¸ö²ÎÊýµÄÉèÖúÜÖØÒª¡£
µ±³öÏÖ´óÁ¿ÅÅÐòʱµÄ´ÅÅÌI/O²Ù×÷ʱ£¬¿ÉÒÔ¿¼ÂÇÔö¼Ósort_area_sizeµÄÖµ¡£sort_area_sizeÊÇOracleÓÃÓÚÒ»´ÎÅÅÐòËùÐèµÄ×î´óÄÚ´æÊý£¬ÔÚÅÅÐò½áÊøµ«Êǽá¹ûÁзµ»ØÖ®Ç°£¬Oracle»áÊÍ·Åsort_area_size´óСµÄÄڴ棬µ«ÊǻᱣÁôsort_area_retained_size´óСµÄÄڴ棬֪µÀ×îºóÒ»Ðнá¹ûÁзµ»ØÒԺ󣬲ÅÊÍ·ÅËùÓеÄÄÚ´æ¡£
»áµ¼ÖÂÅÅÐòµÄÓï¾äÓÐ Select DISTINCT , MINUS , INTERSECT , UNION ºÍ min()¡¢max()¡¢count() ²Ù×÷£»¶ø²»»áµ¼ÖÂÅÅÐòµÄÓï¾äÓÐ Update , ´øBETWEEN×Ó¾äµÄSelect µÈµÈ¡£
¼à¿ØÄÚ´æºÍÓ²Å̵ÄÅÅÐò±ÈÂÊ£¬×îºÃʹËüСÓÚ .10£¬Ôösort_area_size
Select name, value FROM v$sysstat Where name IN ('sorts (memory)', 'sorts (disk)');
sorts (memory) 59310076
sorts (disk) 4789
Á˽âIBM p595/590/570»úÆ÷ÖÐ;
ÐèÒªÂýÂýÊìϤÐÂϵͳ:
ºÍ2²ã¼Ü¹¹ºÜ²»Ò»Ñù,Ŀǰ»¹²»Öª¸ö±ð»¹ÊÇÌØÊ⻯...
metalinkµÄsolutionÈçÏ£º
Solution
1.
Make sure to have a valid backup
2.
In the environment file set:
ORA_NLS oa_var="s_db_oranls"
to:
<DB-ORACLE_HOME>/nls/data/9idata"
3.
Run the updated environment script
4.
Start the database and the applications tier processes
5..
In the context XML file set:
ORA_NLS oa_var="s_db_oranls"
to:
<DB-ORACLE_HOME>/nls/data/9idata".
5.
Run AutoConfig on the DB tier
The current location of the controlfiles can be queried from the V$CONTROLFILE view, as shown below.
select name from v$controlfile;
NAME
---------------------------------------------------------------
/u01/app/oracle/product/9.2.0/oradata/DEVSOL/control01.ctl
/u01/app/oracle/product/9.2.0/oradata/DEVSOL/control02.ctl
/u01/app/oracle/product/9.2.0/oradata/DEVSOL/control03.ctl
In order to rename or move these files we must alter the value of the control_files instance parameter.
show parameter control_files
NAME VALUE
---------------- ------------------------------------------ ------------------------------
control_files /u01/app/oracle/product/9.2.0/oradata/DEVSOL/control01.ctl, /u01/app/oracle/product/9.2.0/oradata/DEVSOL/control02.ctl, /u01/app/oracle/product/9.2.0/oradata/DE
To move or rename a controlfile do the following:
* Alter the control_files parameter using the ALTER SYSTEM comamnd.
* Shutdown the database.
* Rename the physical file on the OS.
* Start the database.
The following SQL*Plus output shows how this is done for an instance using an spfile. For instances using a pfile replace the spfile manipulation steps with an amendment of the parameter in the init.ora file.
ALTER SYSTEM SET control_files='/new_path/control01.ctl', '/new_path/control02.ctl', '/new_path/control03.ctl' SCOPE=SPFILE;
SHUTDOWN IMMEDIATE!mv /old_path/control01.ctl /new_path/control01.ctl!mv /old_path/control02.ctl /new_path/control02.ctl!mv /old_path/control03.ctl /new_path/control03.ctl
STARTUP
Repeating the initial query shows that the the CONTROLFILES has been renamed in the data dictionary.
select name from v$controlfile;
SELECT member FROM v$logfile;
MEMBER
--------------------------------------------------------
/u01/app/oracle/product/9.2.0/oradata/DEVSOL/redo01.log
/u01/app/oracle/product/9.2.0/oradata/DEVSOL/redo02.log
/u01/app/oracle/product/9.2.0/oradata/DEVSOL/redo03.log
To move or rename a logfile do the following:
* Shutdown the database.
* Rename the physical file on the OS.
* Start the database in mount mode.
* Issue the ALTER DATABASE RENAME FILE command to rename the file within the Oracle dictionary.
* Open the database.
The following SQL*Plus output shows how this is done.
SHUTDOWN IMMEDIATE!mv /old_path/redo01.log /new_path/redo01.log
!mv /old_path/redo02.log /new_path/redo02.log
!mv /old_path/redo03.log /new_path/redo03.log
STARTUP MOUNT
ALTER DATABASE RENAME FILE '/old_path/redo01.log'' TO '/new_path/redo01.log';
ALTER DATABASE RENAME FILE '/old_path/redo02.log'' TO '/new_path/redo02.log';
ALTER DATABASE RENAME FILE '/old_path/redo03.log'' TO '/new_path/redo03.log';
ALTER DATABASE OPEN;
Repeating the initial query shows that the the logfile has been renamed in the data dictionary.
SELECT member FROM v$logfile;
db file sequential read
db file scattered read
buffer busy waits
Use the following query to find the object being accessed:
SELECT segment_owner, segment_name FROM DBA_EXTENTS WHERE file_id = &p1 AND &p2 between block_id AND block_id + blocks - 1 ;
¼ò¶øÑÔÖ®£¬Êý¾Ý¿âÊÇÃæÏòÊÂÎñµÄÉè¼Æ£¬Êý¾Ý²Ö¿âÊÇÃæÏòÖ÷ÌâÉè¼ÆµÄ¡£Êý¾Ý¿âÒ»°ã´æ´¢ÔÚÏß½»Ò×Êý¾Ý£¬Êý¾Ý²Ö¿â´æ´¢µÄÒ»°ãÊÇÀúÊ·Êý¾Ý¡£
Êý¾Ý¿âÉè¼ÆÊǾ¡Á¿±ÜÃâÈßÓ࣬һ°ã²ÉÓ÷ûºÏ·¶Ê½µÄ¹æÔòÀ´Éè¼Æ£¬Êý¾Ý²Ö¿âÔÚÉè¼ÆÊÇÓÐÒâÒýÈëÈßÓ࣬²ÉÓ÷´·¶Ê½µÄ·½Ê½À´Éè¼Æ¡£
Êý¾Ý¿âÊÇΪ²¶»ñÊý¾Ý¶øÉè¼Æ£¬Êý¾Ý²Ö¿âÊÇΪ·ÖÎöÊý¾Ý¶øÉè¼Æ£¬ËüµÄÁ½¸ö»ù±¾µÄÔªËØÊÇά±íºÍÊÂʵ±í¡£Î¬ÊÇ¿´ÎÊÌâµÄ½Ç¶È£¬±ÈÈçʱ¼ä£¬²¿ÃÅ£¬Î¬±í·ÅµÄ¾ÍÊÇÕâЩ¶«Î÷µÄ¶¨Ò壬ÊÂʵ±íÀï·Å×ÅÒª²éѯµÄÊý¾Ý£¬Í¬Ê±ÓÐάµÄID¡£
µ¥´Ó¸ÅÄîÉϽ²£¬ÓÐЩ»Þɬ¡£Èκμ¼Êõ¶¼ÊÇΪӦÓ÷þÎñµÄ£¬½áºÏÓ¦ÓÿÉÒÔºÜÈÝÒ×µØÀí½â¡£ÒÔÒøÐÐÒµÎñΪÀý¡£Êý¾Ý¿âÊÇÊÂÎñϵͳµÄÊý¾Ýƽ̨£¬¿Í»§ÔÚÒøÐÐ×öµÄÿ±Ê½»Ò×¶¼»áдÈëÊý¾Ý¿â£¬±»¼Ç¼ÏÂÀ´£¬ÕâÀ¿ÉÒÔ¼òµ¥µØÀí½âΪÓÃÊý¾Ý¿â¼ÇÕÊ¡£Êý¾Ý²Ö¿âÊÇ·ÖÎöϵͳµÄÊý¾Ýƽ̨£¬Ëü´ÓÊÂÎñϵͳ»ñÈ¡Êý¾Ý£¬²¢×ö»ã×Ü¡¢¼Ó¹¤£¬Îª¾ö²ßÕßÌṩ¾ö²ßµÄÒÀ¾Ý¡£±ÈÈç£¬Ä³ÒøÐÐij·ÖÐÐÒ»¸öÔ·¢Éú¶àÉÙ½»Ò×£¬¸Ã·ÖÐе±Ç°´æ¿îÓà¶îÊǶàÉÙ¡£Èç¹û´æ¿îÓֶ࣬Ïû·Ñ½»Ò×Óֶ࣬ÄÇô¸ÃµØÇø¾ÍÓбØÒªÉèÁ¢ATMÁË¡£
ÏÔÈ»£¬ÒøÐеĽ»Ò×Á¿ÊǾ޴óµÄ£¬Í¨³£ÒÔ°ÙÍòÉõÖÁǧÍò´ÎÀ´¼ÆËã¡£ÊÂÎñϵͳÊÇʵʱµÄ£¬Õâ¾ÍÒªÇóʱЧÐÔ£¬¿Í»§´æÒ»±ÊÇ®ÐèÒª¼¸Ê®ÃëÊÇÎÞ·¨ÈÌÊܵģ¬Õâ¾ÍÒªÇóÊý¾Ý¿âÖ»ÄÜ´æ´¢ºÜ¶ÌÒ»¶Îʱ¼äµÄÊý¾Ý¡£¶ø·ÖÎöϵͳÊÇʺóµÄ£¬ËüÒªÌṩ¹Ø×¢Ê±¼ä¶ÎÄÚËùÓеÄÓÐЧÊý¾Ý¡£ÕâЩÊý¾ÝÊǺ£Á¿µÄ£¬»ã×ܼÆËãÆðÀ´Ò²ÒªÂýһЩ£¬µ«ÊÇ£¬Ö»ÒªÄܹ»ÌṩÓÐЧµÄ·ÖÎöÊý¾Ý¾Í´ïµ½Ä¿µÄÁË¡£
Êý¾Ý²Ö¿â£¬ÊÇÔÚÊý¾Ý¿âÒѾ´óÁ¿´æÔÚµÄÇé¿öÏ£¬ÎªÁ˽øÒ»²½ÍÚ¾òÊý¾Ý×ÊÔ´¡¢ÎªÁ˾ö²ßÐèÒª¶ø²úÉúµÄ£¬Ëü¾ö²»ÊÇËùνµÄ¡°´óÐÍÊý¾Ý¿â¡±¡£ÄÇô£¬Êý¾Ý²Ö¿âÓ봫ͳÊý¾Ý¿â±È½Ï£¬ÓÐÄÄЩ²»Í¬ÄØ?ÈÃÎÒÃÇÏÈ¿´¿´W.H.Inmon¹ØÓÚÊý¾Ý²Ö¿âµÄ¶¨Òå:ÃæÏòÖ÷ÌâµÄ¡¢¼¯³ÉµÄ¡¢Óëʱ¼äÏà¹ØÇÒ²»¿ÉÐ޸ĵÄÊý¾Ý¼¯ºÏ¡£
¡°ÃæÏòÖ÷ÌâµÄ¡±:´«Í³Êý¾Ý¿âÖ÷ÒªÊÇΪӦÓóÌÐò½øÐÐÊý¾Ý´¦Àí£¬Î´±Ø°´ÕÕͬһÖ÷Ìâ´æ´¢Êý¾Ý;Êý¾Ý²Ö¿â²àÖØÓÚÊý¾Ý·ÖÎö¹¤×÷£¬Êǰ´ÕÕÖ÷Ìâ´æ´¢µÄ¡£ÕâÒ»µã£¬ÀàËÆÓÚ´«Í³Å©Ã³Êг¡Ó볬ÊеÄÇø±ð¡ªÊг¡ÀïÃæ£¬°×²Ë¡¢Âܲ·¡¢Ïã²Ë»áÔÚÒ»¸ö̯λÉÏ£¬Èç¹ûËüÃÇÊÇÒ»¸öС··ÂôµÄ;¶ø³¬ÊÐÀ°×²Ë¡¢Âܲ·¡¢Ïã²ËÔò¸÷×ÔÒ»¿é¡£Ò²¾ÍÊÇ˵£¬Êг¡ÀïµÄ²Ë(Êý¾Ý)Êǰ´ÕÕС··(Ó¦ÓóÌÐò)¹é¶Ñ(´æ´¢)µÄ£¬³¬ÊÐÀïÃæÔòÊǰ´Õղ˵ÄÀàÐÍ(ͬÖ÷Ìâ)¹é¶ÑµÄ¡£
¡°Óëʱ¼äÏà¹Ø¡±:Êý¾Ý¿â±£´æÐÅÏ¢µÄʱºò£¬²¢²»Ç¿µ÷Ò»¶¨ÓÐʱ¼äÐÅÏ¢¡£Êý¾Ý²Ö¿âÔò²»Í¬£¬³öÓÚ¾ö²ßµÄÐèÒª£¬Êý¾Ý²Ö¿âÖеÄÊý¾Ý¶¼Òª±êÃ÷ʱ¼äÊôÐÔ¡£¾ö²ßÖУ¬Ê±¼äÊôÐÔºÜÖØÒª¡£Í¬Ñù¶¼ÊÇÀۼƹºÂò¹ý¾Å³µ²úÆ·µÄ¹Ë¿Í£¬Ò»Î»ÊÇ×î½üÈý¸öÔ¹ºÂò¾Å³µ£¬Ò»Î»ÊÇ×î½üÒ»Äê´ÓδÂò¹ý£¬Õâ¶ÔÓÚ¾ö²ßÕßÒâÒåÊDz»Í¬µÄ¡£
¡°²»¿ÉÐ޸ġ±:Êý¾Ý²Ö¿âÖеÄÊý¾Ý²¢²»ÊÇ×îÐµģ¬¶øÊÇÀ´Ô´ÓÚÆäËüÊý¾ÝÔ´¡£Êý¾Ý²Ö¿â·´Ó³µÄÊÇÀúÊ·ÐÅÏ¢£¬²¢²»ÊǺܶàÊý¾Ý¿â´¦ÀíµÄÄÇÖÖÈÕ³£ÊÂÎñÊý¾Ý(ÓеÄÊý¾Ý¿âÀýÈçµçÐżƷÑÊý¾Ý¿âÉõÖÁ´¦ÀíʵʱÐÅÏ¢)¡£Òò´Ë£¬Êý¾Ý²Ö¿âÖеÄÊý¾ÝÊǼ«ÉÙ»ò¸ù±¾²»Ð޸ĵÄ;µ±È»£¬ÏòÊý¾Ý²Ö¿âÌí¼ÓÊý¾ÝÊÇÔÊÐíµÄ¡£
Êý¾Ý²Ö¿âµÄ³öÏÖ£¬²¢²»ÊÇҪȡ´úÊý¾Ý¿â¡£Ä¿Ç°£¬´ó²¿·ÖÊý¾Ý²Ö¿â»¹ÊÇÓùØÏµÊý¾Ý¿â¹ÜÀíϵͳÀ´¹ÜÀíµÄ¡£¿ÉÒÔ˵£¬Êý¾Ý¿â¡¢Êý¾Ý²Ö¿âÏศÏà³É¡¢¸÷ÓÐǧÇï¡£
²é¿´È«ÎĽñÌìÓÐÅóÓÑÎÊÆð,ºÃ¾ÃûÓÃ,Ò²¶¼ÍüÁ˲¶àÁË.
SQL> oradebug setmypid //This will set the current session's pid.
SQL> oradebug dump events 1 //This will dump the events information in the tracefile based on the level
SQL> oradebug tracefile_name //This will return the trace file generated for this event.
²é¿´È«ÎÄhistogram·ÖΪ2ÖÖÀàÐÍ£¬»ùÓڸ߶ȵÄhistogramºÍ»ùÓÚÖµµÄhistogram ²é¿´È«ÎÄ
ÒòÒ»¿ª·¢ÅóÓÑÎÊ,¹ÊתÌù.
²é¿´È«ÎÄ