Oracleの研究ノート(6)

Oralceラインの位置とROWID:

 

テーブルTパージをドロップします。
DBA_OBJECTSから選択*としてテーブルTを作成します。
インデックスtのidx_object_id(OBJECT_ID)を作成します。
セットLINESIZE千
TRACEONLYセットAUTOTRACE 

-方法1(全表扫描)
のobject_id = 2 Tから* / *(T)フル/ * +選択。

-方法2(索引扫描)
のobject_id = 2トンSELECT * FROM。


-方法3(ROWID扫描)
オフセットの自動トレース
のobject_id = 2 Tから選択行ID。

セットAUTOTRACEがTRACEONLY 
T SELECT * FROMここでのobject_id = 2、行ID = 'AAAYiZAALAAAADLAAw'。


SQL>選択/ * +フル(T)* / *のobject_id = 2 Tから。
-------------------------------------------------- ------------------------ 
| 同上| 操作| 名前| 行| バイト| コスト(%のCPU)| 時間|
-------------------------------------------------- ------------------------ 
| 0 | SELECTステートメント| | 1 | 207 | 2(0)| 夜十二時00分01秒|
| 0 | SELECTステートメント| | 1 | 207 | 291(1)| 0時00分04秒| 
| * 1 | TABLE ACCESS FULL | T | 1 | 207 | 291(1)| 0時00分04秒| 
-------------------------------------------------- ------------------------ 
统计信息
------------------------ ---------------------------------- 
          0再帰呼び出し
          0デシベルブロックが取得する
       一貫性のある1044を取得

          

SQL>をトンから選択*ここでのobject_id = 2。
-------------------------------------------------- ------------------------------------------- 
| 1 | TABLE ACCESS BY INDEX ROWID | T | 1 | 207 | 2(0)| 夜十二時00分01秒| 
| * 2 | INDEX RANGE SCAN | IDX_OBJECT_ID | 1 | | 1(0)| 夜十二時00分01秒|
-------------------------------------------------- ------------------------------------------- 
统计信息
----- -------------------------------------------------- --- 
          0再帰呼び出し
          0dBのブロックを取得
          一貫した4が取得する
       


SQL> T SELECT * FROMをここでのobject_id = 2、行ID = 'AAAYiZAALAAAADLAAw'。
-------------------------------------------------- --------------------------------- 
| 0 | SELECTステートメント| | 1 | 219 | 1(0)| 夜十二時00分01秒|  
--------------- ------------------------------------------- 
          0再帰呼び出し
| * 1 | USERのROWID BY表アクセス| T | 1 | 219 | 1(0)| 夜十二時00分01秒|
-------------------------------------------------- --------------------------------- 
統計
          0dBのブロックを取得
          一貫した1が取得します

  

 

 

---開始ブロックサイズは2K新しい表領域(のみ2K、WINDOWS、8Kと16Kの下で4Kで  
、ALTER SYSTEM SET DB_2K_CACHE_SIZE = 100M 
内容およびデータ・ファイルを含むドロップTABLESPACEのtbs_ljb_2k; 
TABLESPACE TBS_LJB_2k作成
BLOCKSIZE 2Kの
データファイルを「D:\ ORACLE \ ORADATA \ TEST11G \ TBS_LJB_2K_01.DBF「サイズ100M   
AUTOEXTEND ON   
エクステント管理ローカル
セグメント自動スペース管理、
テーブルを作成しますt_2k TABLESPACE tbs_ljb_2k AS SELECT * DBA_OBJECTSから; 

--- 4K新しい表領域のブロック・サイズを開始
ALTER SYSTEMセットdb_4k_cache_sizeを= 100M; 
内容およびデータ・ファイルを含むドロップTABLESPACEのtbs_ljb_4k; 
TABLESPACE tBS_LJB_4k作成
BLOCKSIZE 4K  
データファイルを'D:\ ORACLE \ ORADATA \ TEST11G \ TBS_LJB_4K_01.DBF'サイズ100M  
AUTOEXTEND ON   
エクステントのローカル管理を
オートスペース管理セグメント、
表作成t_4k TABLESPACE tbs_ljb_4k DBA_OBJECTSからAS SELECT *; 


---開始新しいブロック・サイズが8Kの表領域です(デフォルトは8Kである)

ドロップテーブルt_8kパージ; 
DBA_OBJECTSから*表t_8k AS SELECTを作成します。

--- 16Kの新しい表領域のブロック・サイズ開始し
、ALTER SYSTEM SET db_16k_cache_size = 100M 
内容およびデータ・ファイルを含むドロップ表領域のtbs_ljb_16kを、
表領域TBS_LJB_16k作成
BLOCKSIZE 16Kの
データファイルを'D:\ ORACLE \ ORADATA \ TEST11G \ TBS_LJB_16K_01.DBF'サイズ100M   
AUTOEXTEND ON   
エクステントの管理をローカル
セグメント自動領域管理、
表DBA_OBJECTSからt_16k TABLESPACE tbs_ljb_16k AS SELECT *を作成します。


-------------------------------------------------- --------------------------------------- 
- 、実験を開始したすべてのコストを発見し、論理読み込み、これは少ないです!

AUTOTRACE TRACEONLY SET 

SELECTのCOUNT(*)t_2kから; 
/ 

SELECT COUNT(*)t_4kから; 
/ 

SELECT COUNT(*)t_8kから; 
/ 

SELECT COUNT(*)t_16kから; 
/ 

-より大きく、より良いですが、ブロックしないで、へそのホット・ブロックの競争に注意してください。

t_2kからSQL> SELECT COUNT(*); 
---------------------------------------- --------------------------- 
| 0 | SELECT文| | 1 | 891(1)|夜12時00分11秒| 
| 1 | AGGREGATE SORT | | 1 | | | 
統計 
| 2 | TABLE ACCESS FULL | T_2K | 83292 | 891(1)|夜十二時00分11秒|
-------------------------------------------------- ----------------- 
          0再帰呼び出し
-------------------------------------------------- -------- 
          0再帰呼び出し
          0デシベルブロックが取得
       一貫した4511が取得する
        

SQLを> t_4kからSELECT COUNT(*); 
-------------------------------------------------- ----------------- 
| 0 | SELECTステートメント| | 1 | 480(1)| 夜12時〇 〇分06秒| 
| 1 | SORT AGGREGATE | | 1 | | | 
| 2 | TABLE ACCESS FULL | T_4K | 63139 | 480(1)| 夜12時〇 〇分06秒| 
-------------------------------------------------- ----------------- 
统计信息
------------------------------- --------------------------- 
          0デシベルブロックが取得
       一貫性のある2137を取得し        
 
t_8kからSQL> SELECT COUNT(*)を、
-------------------------------------------------- ----------------- 
| 0 | SELECTステートメント| | 1 | 291(1)| 0時00分04秒| 
| 1 | SORT AGGREGATE | | 1 | | | 
| 2 | TABLE ACCESS FULL | T_8K | 62320 | 291(1)| 0時00分04秒| 
-------------------------------------------------- ----------------- 
统计信息
------------------------------- --------------------------- 
          0再帰呼び出し
          0デシベルブロックが取得
       一貫した1043が取得する
             
SQLを> t_16kからSELECT COUNT(*); 
-------------------------------------------------- ------------------
| 0 | SELECTステートメント| | 1 | 200(1)| 夜12時00分03秒| 
| 1 | SORT AGGREGATE | | 1 | | | 
| 2 | TABLE ACCESS FULL | T_16K | 80144 | 200(1)| 夜12時00分03秒| 
-------------------------------------------------- ------------------ 
统计信息
------------------------------ ---------------------------- 
          0再帰呼び出し
          0デシベルブロックが取得する
        一貫性のある517を取得します

  

 

 

-参照のOracleシステムのブロックサイズの
SQLPLUS "/ AS SYSDBA" 
ショーパラメータDB_BLOCK_SIZE 
SELECT BLOCK_SIZE 
 DBA_TABLESPACESから
TABLESPACE_NAME = 'SYSTEMは'; 


---サイズ2K表領域の新しいブロック(WINDOWS、4Kの下でのみ2Kを開始し、 8Kと16K)
ALTER SYSTEM SET DB_2K_CACHE_SIZE = 100M; 
内容およびデータ・ファイルを含むドロップTABLESPACEのtbs_ljb_2k; 
TABLESPACE tBS_LJB_2k作成
BLOCKSIZE 2Kの
データ・ファイルの'D:\ ORACLE \ ORADATA \ TEST11G \ TBS_LJB_2K_01.DBF'サイズ100M   
AUTOEXTEND ON   
エクステント管理ローカル
セグメントの自動領域管理を; 
; DBA_OBJECTSからROWNUM <= 100表領域tbs_ljb_2k AS SELECT * t_2kテーブル作成


---表領域の新しい4Kブロックサイズの開始を 
ALTER SYSTEMセットdb_4k_cache_size = 100M。
内容やデータファイルを含む表領域のtbs_ljb_4kをドロップします。
作成した表領域TBS_LJB_4k 
ブロックサイズ4K 
のデータ・ファイル「D:\ ORACLE \ ORADATA \ TEST11G \ TBS_LJB_4K_01.DBF」サイズ100Mの   
上の自動拡張   
エクステント管理ローカル
セグメント領域管理の自動; 
ROWNUM <= 100 DBA_OBJECTS SELECT * FROMテーブルとしてt_4k表領域tbs_ljb_4kを作成します。


---启动大小为8K的块新建表空间(默认就是8K)
ドロップテーブルt_8kパージ。
ROWNUM <= 100 DBA_OBJECTS SELECT * FROMテーブルとしてt_8kを作成します。


---启动大小为16K的块新建表空间
ALTER SYSTEMセットdb_16k_cache_size = 100M。
内容やデータファイルを含む表領域のtbs_ljb_16kをドロップします。
表領域TBS_LJB_16k作成
ブロックサイズ16Kを
データ・ファイルの'D:\ ORACLE \ ORADATA \ TEST11G \ TBS_LJB_16K_01.DBF'サイズ100M   
AUTOEXTEND ON   
エクステント管理ローカル
セグメントの自動領域管理は、
; DBA_OBJECTSから* WHERE ROWNUM <= 100表t_16k TABLESPACE tbs_ljb_16k AS SELECTを作成


-ブロックの前にテスト大規模な、より少ない論理読み取りが、現実はもっと大きな、より良いブロックするだけでなく、ホット・ブロックの競争に注意を払っていないです。
-------------------------------------------------- -------------------------------------------------- --------------------------------------- 
SQLPLUS "/ AS SYSDBAの" 
ONにグラントすべてDBMS_LOCK LJB; 

接続LJB / LJB 

-様々なJOBを構築するためのパッケージを作成し、問題分析
作成またはpkg_test_block_sizeのためのパッケージ変更置き換える
 AS 
 プロシージャp_t_2kを、
 手順p_t_4k; 
 手順p_t_8k; 
 プロシージャp_t_16k。
 手続きp_exec_2k_job。
 手続きp_exec_4k_job。
 手続きp_exec_8k_job。
 手続きp_exec_16k_job。
 手続きp_remove_job。
エンドpkg_test_block_size。
/ 

パッケージ本体pkg_test_block_sizeを作成したり、交換する
など
   のような手順のp_t_2k 
      開始
       1 1000ループでjについて
        (t_2kから選択*)ループに私のために
          nullを。
         ループを終了します。
        ループを終了します。
      エンドp_t_2k。

    手続きp_t_4k 
       開始
        1 1000ループでjについて
         (t_4kから選択*)ループに私のために
           nullを。
          ループを終了します。
         ループを終了します。
       エンドp_t_4k。

    手続きp_t_8k 
       開始
        1 1000ループでjについて
         (t_8kから選択*)ループに私のために
           nullを。
          ループを終了します。
         ループを終了します。
       エンドp_t_8k。

    手続きp_t_16k 
       開始
        1 1000ループでjについて
         (t_16kから選択*)ループに私のために
           nullを。
          ループを終了します。
         ループを終了します。
       エンドp_t_16k。


-创建JOBの
   ような手順p_exec_2k_job 
    JOBNO NUMBER。
    BEGIN 
      1..100ループ内で私のために
       DBMS_JOB.SUBMIT(JOBNO、
                       'pkg_test_block_size.p_t_2k;'、 
      1..100ループ内でのiについて 
                        、SYSDATE
                       'SYSDATE + 1440分の1')。
      ループを終了します。
      DBMS_LOCK.SLEEP(120)。
     ENDのp_exec_2k_job。

  手続きp_exec_4k_job 
   JOBNO NUMBER; 
    BEGIN 
      1..100ループでiについて
       DBMS_JOB.SUBMIT(JOBNO、
                       'pkg_test_block_size.p_t_4k;'、
                        SYSDATE、
                       'SYSDATE + 1440分の1')。
      ループを終了します。
      DBMS_LOCK.SLEEP(120)。
     ENDのp_exec_4k_job。

 手続きp_exec_8k_job 
   JOBNO NUMBER; 
    BEGIN 
       DBMS_JOB.SUBMIT(JOBNO、
                       'pkg_test_block_size.p_t_8kを;'、
                        SYSDATE、
                       'SYSDATE + 1440分の1')。
       ループを終了します。
       DBMS_LOCK.SLEEP(120)。
     ENDのp_exec_8k_job。

 手続きp_exec_16k_job 
   JOBNO NUMBER; 
    BEGIN 
       1..100ループでiについて
        DBMS_JOB.SUBMIT(JOBNO、
                        'pkg_test_block_size.p_t_16k;'、
                         SYSDATE、
                        'SYSDATE + 1440分の1')。
       ループを終了します。
       DBMS_LOCK.SLEEP(120)。
     ENDのp_exec_16k_job。


 プロシージャp_remove_job 
     BEGIN  
        (USER_JOBSからジョブを選択)ループ内でのiについて
         DBMS_JOB.REMOVE(i.job)。
        ループを終了します。
      ENDのp_remove_job。

ENDのpkg_test_block_size。

テーブルtest_latchパージをドロップします。
表test_latch作成(BLOCK_SIZE VARCHAR2(10)、ID番号、番号を取得し、ミスの数、番号、immediate_gets番号眠ります)。

-测试1。
BLOCK_SIZE =「2K」test_latchから削除します。
、1「2K」を選択test_latchに挿入、取得、ミス、スリープ、五$ラッチからimmediate_getsどこ名=「キャッシュ・バッファ・チェーン」; 
コミット; 
--exec dbms_workload_repository.create_snapshot()。
execのpkg_test_block_size.p_exec_2k_job; 
--exec dbms_workload_repository.create_snapshot()。 
-测试2。
BLOCK_SIZE =「4K」test_latchから削除します。
、2「2K」を選択test_latchに挿入、取得、ミス、スリープ、五$ラッチからimmediate_getsどこ名=「キャッシュ・バッファ・チェーン」;
コミット; 
-测试结束
execのpkg_test_block_size.p_remove_job。    
--@?/rdbms/admin/awrrpt.sql 


test_latchへの挿入1、「4K」を選択し、取得、ミス、スリープ、五$ラッチからimmediate_getsどこ名=「キャッシュ・バッファ・チェーン」; 
コミット; 
--exec dbms_workload_repository.create_snapshot()。
execのpkg_test_block_size.p_exec_4k_job; 
--exec dbms_workload_repository.create_snapshot()。
、2「4K」を選択test_latchに挿入、取得、ミス、スリープ、五$ラッチからimmediate_getsどこ名=「キャッシュ・バッファ・チェーン」; 
コミット; 
-测试结束
execのpkg_test_block_size.p_remove_job。   
--@?/rdbms/admin/awrrpt.sql 


-测试3。
BLOCK_SIZE =「8K」test_latchから削除します。
、1「8K」を選択test_latchに挿入、取得、ミス、スリープ、五$ラッチからimmediate_getsどこ名=「キャッシュ・バッファ・チェーン」;
--exec dbms_workload_repository.create_snapshot()。
execのpkg_test_block_size.p_exec_8k_job; 
--exec dbms_workload_repository.create_snapshot()。
、2「8K」を選択test_latchに挿入、取得、ミス、スリープ、五$ラッチからimmediate_getsどこ名=「キャッシュ・バッファ・チェーン」; 
コミット; 
-测试结束
execのpkg_test_block_size.p_remove_job。   
--@?/rdbms/admin/awrrpt.sql 


-测试4。
test_latchから削除どこBLOCK_SIZE = '16K'; 
「16K」を選択test_latchに挿入、1、取得、ミス、スリープ、五$ラッチからimmediate_getsどこ名=「キャッシュ・バッファ・チェーン」; 
コミット;
--exec dbms_workload_repository.create_snapshot()。
execのpkg_test_block_size.p_exec_16k_job; 
--exec dbms_workload_repository.create_snapshot()。
「16K」を選択test_latchに挿入、2、取得、ミス、スリープ、五$ラッチからimmediate_getsどこ名=「キャッシュ・バッファ・チェーン」; 
コミット; 
-测试结束 
のEXEC pkg_test_block_size.p_remove_job;    
--@?/rdbms/admin/awrrpt.sql 



WHAT、INTERVAL、ジョブを選択し、失敗のNEXT_DATE、NEXT_SEC、壊れUSER_JOBS FROM INTERVAL =' SYSDATE + 1 /。 1440「; 
                                                                                            
V $ LATCH_CHILDRENからSELECT * WHERE名=」キャッシュバッファチェーン

test_latchからSELECT *; 

-データがない十分に大きい複雑、大規模ではありませんので、以下の結果は、参考のために、実際の実装が可能かもしれされており、違いがあります。

SELECTをBLOCK_SIZE、
       ミス- lag_misses
  (セレクトT *、ラグ(ミス)を超える(ミスによってBLOCK_SIZE順序によってパーティション)lag_misses。
          test_latch Tから)K 
 k.lag_missesがnullではありません。


BLOCK_SIZE MISSES-LAG_MISSES 
---------- ------------------ 
2K 0 
4K 47407 
8K 67769 
16K 86871 
                  (選択デコード(s.session_stateから、

 
観測:
トンを選択します。*、s.sid、s.serial#、s.machine、s.program、s.osuser 
  c.USERNAME、選択(から
               、a.eventを
               "TIME(SECOND)"としてa.cnt、
               a.sql_id 、
               b.sql_fulltext 
          (選択ROWNUMのRN、T。*から 
                          、V $ ACTIVE_SESSION_HISTORY sから
                         どこsample_timeの> SYSDATE - 1440分の15
                                      'WAITING'、
                                      s.event、
                                      'CPU +ウェイトCPUの')イベント、
                               s.sql_id、
                               s.user_id、
                               COUNT(*)CNTの
                         グループs.user_idによって、
                                  デコード(s.session_state、
                                         'WAITING'、
                                         s.event 、
                                         'CPU + CPU待つ')、
                                  s.sql_id 
                         CNTのDESC順)T
                 ここでROWNUM <20)
               のV $ SQLAREAのB、
               DBA_USERS C 
         ここa.sql_id = b.sql_id 
           とa.user_id = c.user_id 
         CNTのDESC順)T、
       Vの$セッションS 
 ここt.sql_id = s.sql_id( +)。

  

おすすめ

転載: www.cnblogs.com/sunliyuan/p/11877742.html