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( +)。