ホームページ データベース mysql チュートリアル 通过案例学调优之--动态视图(v$bh和x$bh)

通过案例学调优之--动态视图(v$bh和x$bh)

Jun 07, 2016 pm 02:52 PM
動的 場合 ビュー 合格

通过案例学调优之--动态视图(v$bh和x$bh) v$bh与x$bh v$bh:非常详细地记录了数据块在数据缓冲区内的使用情况,一条记录对应一个block的详细记录。 v$bh来自于基表x$bh与x$le 查看v$bh结构: 13:07:20SYS@test1descv$bhNameNull?Type------------------------

通过案例学调优之--动态视图(v$bh和x$bh)

v$bh与x$bh

v$bh:非常详细地记录了数据块在数据缓冲区内的使用情况,一条记录对应一个block的详细记录。

v$bh来自于基表x$bh与x$le

查看v$bh结构:

13:07:20 SYS@ test1 >desc v$bh
 Name                                                              Null?    Type
 ----------------------------------------------------------------- -------- --------------------------------------------
 FILE#                                                                      NUMBER
 BLOCK#                                                                     NUMBER
 CLASS#                                                                     NUMBER
 STATUS                                                                     VARCHAR2(10)
 XNC                                                                        NUMBER
 FORCED_READS                                                               NUMBER
 FORCED_WRITES                                                              NUMBER
 LOCK_ELEMENT_ADDR                                                          RAW(4)
 LOCK_ELEMENT_NAME                                                          NUMBER
 LOCK_ELEMENT_CLASS                                                         NUMBER
 DIRTY                                                                      VARCHAR2(1)
 TEMP                                                                       VARCHAR2(1)
 PING                                                                       VARCHAR2(1)
 STALE                                                                      VARCHAR2(1)
 DIRECT                                                                     VARCHAR2(1)
 NEW                                                                        CHAR(1)
 OBJD                                                                       NUMBER
 TS#                                                                        NUMBER
 LOBID                                                                      NUMBER
 CACHEHINT                                                                  NUMBER
ログイン後にコピー

STATUS

free - not currently in use

xcur - exclusive current,表示该数据块处于排外模式,正在被当前Instance占用;

scur - shared current,RAC环境中表示该数据库正在和其他实例共享数据。

cr - consistent read,一致性读。

read - being read from disk

mrec - in media recovery mode,表示数据块处于介质恢复模式;

irec - in instance recovery mode ,表示数据块处于实例恢复模式;

write - 表示数据库正在往磁盘写入数据;


13:07:19 SYS@ test1 >select * from v$fixed_view_definition t where t.view_name='GV$BH'

VIEW_NAME                      VIEW_DEFINITION
------------------------------ --------------------------------------------------
GV$BH                          select bh.inst_id, file#, dbablk, class, decode(st
                               ate,0,'free',1,'xcur',2,'scur',3,'cr', 4,'read',5,
                               'mrec',6,'irec',7,'write',8,'pi', 9,'memory',10,'m
                               write',11,'donated', 12,'protected',  13,'securefi
                               le', 14,'siop',15,'recckpt', 16, 'flashfree',  17,
                                'flashcur', 18, 'flashna'), 0, 0, 0, bh.le_addr,
                               le_id1, le_id2, decode(bitand(flag,1), 0, 'N', 'Y'
                               ), decode(bitand(flag,16), 0, 'N', 'Y'), decode(bi
                               tand(flag,1536), 0, 'N', 'Y'), decode(bitand(flag,
                               16384), 0, 'N', 'Y'), decode(bitand(flag,65536), 0
                               , 'N', 'Y'), 'N', obj, ts#, lobid,  bitand(OBJ_FLA
                               G, 240)/16 from x$bh bh, x$le le where bh.le_addr
                               = le.le_addr (+)
ログイン後にコピー

13:08:20 SYS@ test1 >desc x$bh

Name                                                              Null?    Type
 ----------------------------------------------------------------- -------- --------------------------------------------
 ADDR                                                                       RAW(4)
 INDX                                                                       NUMBER
 INST_ID                                                                    NUMBER
 HLADDR                                                                     RAW(4)
 BLSIZ                                                                      NUMBER
 NXT_HASH                                                                   RAW(4)
 PRV_HASH                                                                   RAW(4)
 NXT_REPL                                                                   RAW(4)
 PRV_REPL                                                                   RAW(4)
 FLAG                                                                       NUMBER
 FLAG2                                                                      NUMBER
 LOBID                                                                      NUMBER
 RFLAG                                                                      NUMBER
 SFLAG                                                                      NUMBER
 LRU_FLAG                                                                   NUMBER
 TS#                                                                        NUMBER
 FILE#                                                                      NUMBER
 DBARFIL                                                                    NUMBER
 DBABLK                                                                     NUMBER
 CLASS                                                                      NUMBER
 STATE                                                                      NUMBER
 MODE_HELD                                                                  NUMBER
 CHANGES                                                                    NUMBER
 CSTATE                                                                     NUMBER
 LE_ADDR                                                                    RAW(4)
 DIRTY_QUEUE                                                                NUMBER
 SET_DS                                                                     RAW(4)
 OBJ                                                                        NUMBER
 BA                                                                         RAW(4)
 CR_SCN_BAS                                                                 NUMBER
 CR_SCN_WRP                                                                 NUMBER
 CR_XID_USN                                                                 NUMBER
 CR_XID_SLT                                                                 NUMBER
 CR_XID_SQN                                                                 NUMBER
 CR_UBA_FIL                                                                 NUMBER
 CR_UBA_BLK                                                                 NUMBER
 CR_UBA_SEQ                                                                 NUMBER
 CR_UBA_REC                                                                 NUMBER
 CR_SFL                                                                     NUMBER
 CR_CLS_BAS                                                                 NUMBER
 CR_CLS_WRP                                                                 NUMBER
 LRBA_SEQ                                                                   NUMBER
 LRBA_BNO                                                                   NUMBER
 HSCN_BAS                                                                   NUMBER
 HSCN_WRP                                                                   NUMBER
 HSUB_SCN                                                                   NUMBER
 US_NXT                                                                     RAW(4)
 US_PRV                                                                     RAW(4)
 WA_NXT                                                                     RAW(4)
 WA_PRV                                                                     RAW(4)
 OQ_NXT                                                                     RAW(4)
 OQ_PRV                                                                     RAW(4)
 AQ_NXT                                                                     RAW(4)
 AQ_PRV                                                                     RAW(4)
 OBJ_FLAG                                                                   NUMBER
 TCH                                                                        NUMBER
 TIM                                                                        NUMBER
 CR_RFCNT                                                                   NUMBER
 SHR_RFCNT                                                                  NUMBER
ログイン後にコピー

x$bh中“touch count”信息对应到x$bh的tch字段,而段的data_object_id信息对应到x$bh的obj,或者是v$bh的objd。

案例分析:

(1)对象有多少个数据块缓存到Data buffer中

13:29:01 SCOTT@ test1 >truncate table t1;
13:29:09 SCOTT@ test1 >begin
13:29:12   2  for i in 1..5000 loop
13:29:25   3  insert into t1 values (i);
13:29:35   4  end loop;
13:29:38   5  end;
13:29:39   6  /
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.67
13:29:41 SCOTT@ test1 >commit;
ログイン後にコピー
创建一存储过程:show space读取数据块信息

13:29:43 SCOTT@ test1 >create or replace procedure show_space
13:34:44   2
13:34:44   3    ( p_segname in varchar2,
13:34:44   4
13:34:44   5    p_owner   in varchar2 default user,
13:34:44   6
13:34:44   7    p_type    in varchar2 default 'TABLE',
13:34:44   8
13:34:44   9    p_partition in varchar2 default NULL )
13:34:44  10
13:34:44  11  as
13:34:44  12
13:34:44  13      l_total_blocks              number;
13:34:44  14
13:34:44  15      l_total_bytes               number;
13:34:44  16
13:34:44  17      l_unused_blocks             number;
13:34:44  18
13:34:44  19      l_unused_bytes              number;
13:34:44  20
13:34:44  21      l_LastUsedExtFileId         number;
13:34:44  22
13:34:44  23      l_LastUsedExtBlockId        number;
13:34:44  24
13:34:44  25      l_last_used_block           number;
13:34:44  26
13:34:44  27      procedure p( p_label in varchar2, p_num in number )
13:34:44  28
13:34:44  29      is
13:34:44  30
13:34:44  31      begin
13:34:44  32
13:34:44  33          dbms_output.put_line( rpad(p_label,40,'.') ||
13:34:44  34
13:34:45  35                                p_num );
13:34:45  36
13:34:45  37      end;
13:34:45  38
13:34:45  39  begin
13:34:45  40
13:34:45  41
13:34:45  42
13:34:45  43      dbms_space.unused_space
13:34:45  44
13:34:45  45      ( segment_owner     => p_owner,
13:34:45  46
13:34:45  47        segment_name      => p_segname,
13:34:45  48
13:34:45  49        segment_type      => p_type,
13:34:45  50
13:34:45  51        partition_name    => p_partition,
13:34:45  52
13:34:45  53        total_blocks      => l_total_blocks,
13:34:45  54
13:34:45  55        total_bytes       => l_total_bytes,
13:34:45  56
13:34:45  57        unused_blocks     => l_unused_blocks,
13:34:45  58
13:34:45  59        unused_bytes      => l_unused_bytes,
13:34:45  60
13:34:45  61        last_used_extent_file_id => l_LastUsedExtFileId,
13:34:45  62
13:34:45  63        last_used_extent_block_id => l_LastUsedExtBlockId,
13:34:45  64
13:34:45  65        last_used_block => l_last_used_block );
13:34:45  66
13:34:45  67
13:34:45  68
13:34:45  69      p( 'Total Blocks', l_total_blocks );
13:34:45  70
13:34:45  71      p( 'Total Bytes', l_total_bytes );
13:34:45  72
13:34:45  73      p( 'Unused Blocks', l_unused_blocks );
13:34:45  74
13:34:45  75      p( 'Unused Bytes', l_unused_bytes );
13:34:45  76
13:34:45  77      p( 'Last Used Ext FileId', l_LastUsedExtFileId );
13:34:45  78
13:34:45  79      p( 'Last Used Ext BlockId', l_LastUsedExtBlockId );
13:34:45  80
13:34:45  81      p( 'Last Used Block', l_last_used_block );
13:34:45  82
13:34:45  83  end;
13:34:47  84  /
ログイン後にコピー

13:34:49 SCOTT@ test1 >set serverout on

13:35:01 SCOTT@ test1 >exec show_space(p_segname=>'T1');
Total Blocks............................16
Total Bytes.............................131072
Unused Blocks...........................0
Unused Bytes............................0
Last Used Ext FileId....................4
Last Used Ext BlockId...................136
Last Used Block.........................8
PL/SQL procedure successfully completed.
ログイン後にコピー

数据文件id为4,t1表总共使用了16个块


分析数据块的rowid:

13:35:40 SCOTT@ test1 >select f,b from (
13:41:15   2   select dbms_rowid.rowid_relative_fno(rowid) f,
13:41:44   3          dbms_rowid.rowid_block_number(rowid) b
13:42:04   4  from t1) group by f,b;
         F          B
---------- ----------
         4        143
        11        691
         4        142
        11        693
        11        694
         4        141
        11        692
        11        695
8 rows selected.
ログイン後にコピー

Users 表空间有两个datafile,id为4,11

13:42:52 SYS@ test1 >select file#,name from v$datafile;
     FILE# NAME
---------- --------------------------------------------------
         1 /u01/app/oracle/oradata/test1/system01.dbf
         2 /u01/app/oracle/oradata/test1/sysaux01.dbf
         3 /u01/app/oracle/oradata/test1/undotbs01.dbf
         4 /u01/app/oracle/oradata/test1/users01.dbf
        10 /u01/app/oracle/oradata/test1/index01.dbf
        11 /dsk1/oradata/test1/users02.dbf
6 rows selected.
ログイン後にコピー

T1表总共为16个块,数据占用了8个块

13:47:43 SYS@ test1 >select file#,dbablk,tch from x$bh where obj=

2 (select data_object_id from dba_objects

3 where owner='SCOTT' AND object_name='T1')

4* order by dbablk

     FILE#     DBABLK        TCH
---------- ---------- ----------
         4        136          2
         4        137          2
         4        138          2
         4        139          2
         4        140          2
         4        141          2
         4        142          2
         4        143          2
        11        688          1
        11        689          1
        11        690          4
        11        690          1
        11        691          2
        11        692          2
        11        693          2
        11        694          2
        11        695          2
17 rows selected.
ログイン後にコピー

13:48:59 SYS@ test1 >select file#,block#,status from v$bh where objd=

13:49:18 2 (select data_object_id from dba_objects

13:49:33 3 where owner='SCOTT' and object_name='T1')

13:49:51 4 order by block#;

 FILE#     BLOCK# STATUS
---------- ---------- ----------
         4        136 xcur
         4        137 xcur
         4        138 xcur
         4        139 xcur
         4        140 xcur
         4        141 xcur
         4        142 xcur
         4        143 xcur
        11        688 xcur
        11        689 xcur
        11        690 xcur
        11        690 cr
        11        691 xcur
        11        692 xcur
        11        693 xcur
        11        694 xcur
        11        695 xcur
17 rows selected.
ログイン後にコピー

查看x$bh,返回了block的touch count信息,表示了块的热点程度,现在最热的块是690,此块应该是段头块。

13:56:05 SYS@ test1 >select header_file,header_block from dba_segments
13:56:25   2   where owner='SCOTT' and segment_name='T1';
HEADER_FILE HEADER_BLOCK
----------- ------------
         11          690
ログイン後にコピー

手工清空buffer_cache:

14:03:30 SYS@ test1 >alter system flush buffer_cache;
System altered.

14:06:02 SYS@ test1 >select file#,dbablk,tch from x$bh where obj=(select data_object_id from dba_objects where owner='SCOTT' AND object_name='T1') order by dbablk;
no rows selected

14:06:16 SYS@ test1 >select file#,block#,status from v$bh where objd=(select data_object_id from dba_objects where owner='SCOTT' and object_name='T1') order by block#;
no rows selected
ログイン後にコピー

统计一个object的非free状态的v$bh的记录数,基本就反映了一个对象再data buffer中被cache的块数。

14:10:29 SYS@ test1 >select count(*) from v$bh where objd=

14:10:45 2 (select data_object_id from dba_objects

14:10:59 3 where owner='SCOTT' and object_name='T1')

14:11:23 4 and status !='free';

COUNT(*)

----------

0

对t1表进行事务操作:

14:12:05 SCOTT@ test1 >insert into t1 values (5001);
1 row created.
Elapsed: 00:00:00.00

14:13:38 SCOTT@ test1 >commit;
Commit complete.

14:13:12 SYS@ test1 >select count(*) from v$bh where objd=
  2  (select data_object_id from dba_objects
  3   where owner='SCOTT' and object_name='T1')
  4* and status !='free'
  COUNT(*)
----------
         4
ログイン後にコピー

14:13:43 SYS@ test1 >select file#,block#,status from v$bh where objd=(select data_object_id from dba_objects where owner='SCOTT' and object_name='T1') order by block#;

 FILE#     BLOCK# STATUS
---------- ---------- ----------
         4        143 xcur
        11        688 xcur
        11        689 xcur
        11        690 xcur
ログイン後にコピー

(2)热点块问题
x$bh的touch count,这个数字将作为LRU算法的一个重要参考信息,如果一个块被多次访问,每次访问都会导致该块的记录加一。

1)查看t1的object_id

14:26:37 SYS@ test1 >select data_object_id from dba_objects
14:26:56   2   where owner='SCOTT' and object_name='T1';
DATA_OBJECT_ID
--------------
         16399
ログイン後にコピー

2)查看block 143的tch

14:29:05 SYS@ test1 >select tch from x$bh
14:29:20   2   where obj=16399 and dbablk=143 and file#=4 and tch>0;
       TCH
----------
         1
ログイン後にコピー

3)访问block 143

采用了dbms_rowid.rowid_create函数来创建rowid,表示新创建的rowid类型为扩展rowid,类型为1;data_object_id为16399;数据文件id为4;块的id为143;行数为一行(0)。

ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

修正: Windows 11 の動的リフレッシュ レートが機能しない 修正: Windows 11 の動的リフレッシュ レートが機能しない Apr 13, 2023 pm 08:52 PM

1 秒あたりの画像の更新回数をカウントすることで、画面のリフレッシュ レートを測定できます。 DRR は Windows 11 に含まれる新機能で、スムーズな表示を提供しながらバッテリー寿命を節約するのに役立ちますが、適切に動作しないことがあっても不思議ではありません。より多くのメーカーが 60Hz モニターの生産を中止する計画を発表するため、より高いリフレッシュ レートの画面がより一般的になることが予想されます。これにより、スクロールがスムーズになり、ゲームの質も向上しますが、その代償としてバッテリー寿命が短くなります。ただし、この OS の動的リフレッシュ レート機能は、全体的なエクスペリエンスに大きな影響を与える可能性がある気の利いた追加機能です。 Windows 11 の動的リフレッシュ レートが機能しない場合の対処法について説明しますので、読み続けてください。

iPhone画面録画でダイナミックアイランドと赤いインジケーターを非表示にする方法 iPhone画面録画でダイナミックアイランドと赤いインジケーターを非表示にする方法 Apr 13, 2023 am 09:13 AM

iPhone では、Apple の画面録画機能が画面上で行っていることのビデオを録画します。これは、ゲームプレイをキャプチャしたり、アプリのチュートリアルを誰かに説明したり、バグをデモしたりする場合に便利です。ディスプレイの上部にノッチのある古い iPhone では、画面録画ではノッチが表示されるはずですが、表示されません。ただし、「iPhone 14 Pro」や「iPhone 14 Pro」Max など、「ダイナミック アイランド」のカットアウトを備えた新しい iPhone では、「ダイナミック アイランド」のアニメーションに赤い録画インジケーターが表示され、キャプチャされたビデオにカットアウトが表示されます。これはもしかしたら

VirtualBox 固定ディスクをダイナミック ディスクに、またはその逆に変換します VirtualBox 固定ディスクをダイナミック ディスクに、またはその逆に変換します Mar 25, 2024 am 09:36 AM

仮想マシンを作成するときに、ディスクの種類を選択するように求められます。固定ディスクまたはダイナミック ディスクを選択できます。固定ディスクを選択した後でダイナミック ディスクが必要であることに気付いた場合、またはその逆の場合はどうすればよいでしょうか? いいですね!一方をもう一方に変換できます。この記事では、VirtualBox 固定ディスクをダイナミック ディスクに、またはその逆に変換する方法を説明します。ダイナミック ディスクは、最初は小さいサイズですが、仮想マシンにデータを保存するにつれてサイズが大きくなる仮想ハード ディスクです。ダイナミック ディスクは、必要なだけのホスト ストレージ スペースのみを使用するため、ストレージ スペースを節約するのに非常に効率的です。ただし、ディスク容量が増加すると、コンピュータのパフォーマンスがわずかに影響を受ける可能性があります。仮想マシンでは固定ディスクとダイナミック ディスクが一般的に使用されます

Windows 11でダイナミックディスクをベーシックディスクに変換する方法 Windows 11でダイナミックディスクをベーシックディスクに変換する方法 Sep 23, 2023 pm 11:33 PM

Windows 11 でダイナミック ディスクをベーシック ディスクに変換する場合は、プロセスによってその中のすべてのデータが消去されるため、最初にバックアップを作成する必要があります。 Windows 11 でダイナミック ディスクをベーシック ディスクに変換する必要があるのはなぜですか? Microsoft によると、ダイナミック ディスクは Windows から廃止され、その使用は推奨されなくなりました。さらに、Windows Home Edition はダイナミック ディスクをサポートしていないため、これらの論理ドライブにアクセスできません。より多くのディスクを結合してより大きなボリュームを作成する場合は、ベーシック ディスクまたは記憶域スペースを使用することをお勧めします。この記事では、Windows 11 でダイナミック ディスクをベーシック ディスクに変換する方法を説明します。 Windows 11 でダイナミック ディスクをベーシック ディスクに変換するにはどうすればよいですか?初めに

Vue で編集可能なテーブルを実装する方法 Vue で編集可能なテーブルを実装する方法 Nov 08, 2023 pm 12:51 PM

テーブルは、多くの Web アプリケーションにおいて不可欠なコンポーネントです。通常、テーブルには大量のデータが含まれるため、ユーザー エクスペリエンスを向上させるためにテーブルにはいくつかの特定の機能が必要です。重要な機能の 1 つは編集可能性です。この記事では、Vue.js を使用して編集可能なテーブルを実装する方法を検討し、具体的なコード例を示します。ステップ 1: データを準備する まず、テーブルのデータを準備する必要があります。 JSON オブジェクトを使用してテーブルのデータを保存し、それを Vue インスタンスの data プロパティに保存できます。この場合

iOS 17のスタンバイモードは充電中のiPhoneをホームハブに変える iOS 17のスタンバイモードは充電中のiPhoneをホームハブに変える Jun 06, 2023 am 08:20 AM

iOS 17 で Apple は、iPhone を水平方向に充電するために設計された新しいディスプレイ エクスペリエンスであるスタンバイ モードを導入します。この位置では、iPhone は一連の全画面ウィジェットを表示でき、便利なホームハブになります。 iOS 17 を実行している iPhone を充電器に水平に置くと、スタンバイ モードが自動的に有効になります。時間、天気、カレンダー、音楽コントロール、写真などを表示できます。左または右にスワイプして利用可能なスタンバイ オプションを選択し、長押しするか上下にスワイプしてカスタマイズできます。たとえば、アナログ ビュー、デジタル ビュー、バブル フォント、および時間の経過とともに背景色が時間に基づいて変化するデイライト ビューから選択できます。いくつかのオプションがあります

Windows 11のデスクトップとスタートメニューにライブタイルを表示する方法 Windows 11のデスクトップとスタートメニューにライブタイルを表示する方法 Apr 14, 2023 pm 05:07 PM

システム上で何かを探しているが、どのアプリケーションを開いて選択すればよいかわからないと想像してください。ここでライブ タイル機能が役に立ちます。サポートされているアプリケーションのライブ タイルをデスクトップまたは Windows システムの [スタート] メニューに追加でき、そのタイルは頻繁に変更されます。 LiveTiles は、アプリケーション ウィジェットを非常に快適な方法で生き生きとさせます。見た目だけでなく、利便性にも優れています。システムで whatsapp または Facebook アプリケーションを使用しているとします。通知の数がアプリケーションのアイコンに表示されたら便利だと思いませんか?これは、サポートされているアプリがライブ タイルとして追加されている場合に可能です。 Windows でそれを行う方法を見てみましょう

SpringBoot と SpringMVC の違いと比較を理解する SpringBoot と SpringMVC の違いと比較を理解する Dec 29, 2023 am 09:20 AM

SpringBoot と SpringMVC を比較し、その違いを理解する Java 開発の継続的な発展に伴い、Spring フレームワークは多くの開発者や企業にとって最初の選択肢となっています。 Spring エコシステムでは、SpringBoot と SpringMVC の 2 つの非常に重要なコンポーネントです。どちらも Spring フレームワークをベースにしていますが、機能や使用方法にいくつかの違いがあります。この記事では、SpringBoot と Spring の比較に焦点を当てます。

See all articles