Gblog

おもにTips

log file sync の調べ方

log file sync をすごく簡単に言うと、、、

 

「コミット時に発生する待機で、LGWRによるREDOログの書込み完了待ち」

 

です。

 

トランザクションがコミットされると、データの整合性が保たれるようREDOログ情報をファイルに書き出す必要があります。

なので、サーバープロセスが commit すると LGWR は REDOログバッファの情報を REDOログファイルに書き出します。

サーバープロセスはそれを待ちます。

 

「commit 時に log file sync で待つ」

 

これは正常な動作です。

 

でも log file sync 待ちが長くなると何か問題があるかもしれません。

 

続きを読む

adaptive log file sync ...

log file sync の待機時間が長いというので、post-wait から polling に変わっていないか調べました。

AWR でここら辺のインスタンス統計が上がると polling になっている可能性があります。

  • redo synch poll writes
  • redo synch polls

意味は、、、よくわかりません。redo synch writes は、

ログ・バッファも適用されている変更を、コミットのためにディスクに書き込む必要があった回数

とあります。poll がついてるのできっとそういうことでしょう。

redo synch polls は polling の回数かな、、、LGWR の?

続きを読む

COMMAND_TYPE

V$SQL の COMMAND_TYPE 列や、V$SESSION の COMMAND列は、NUMBER 型。

これは、V$SQLCOMMAND で定義されている。

SQL> select * from V$SQLCOMMAND order by 1;

COMMAND_TYPE COMMAND_NAME
------------ ------------------------------
           0
           1 CREATE TABLE
           2 INSERT
           3 SELECT
           4 CREATE CLUSTER
           5 ALTER CLUSTER
           6 UPDATE
           7 DELETE
         ...
         220 DROP FLASHBACK ARCHIVE
         222 CREATE SCHEMA SYNONYM
         224 DROP SCHEMA SYNONYM
         225 ALTER DATABASE LINK

225まであんの?(11.2.0.4) って思ったけど、結構番号がとんでる。

 

V$ビューの定義を確認してみると、、、

SQL> select VIEW_DEFINITION from V$FIXED_VIEW_DEFINITION
  2  where VIEW_NAME ='GV$SQLCOMMAND';

VIEW_DEFINITION
----------------------------------------------------------------------
select inst_id, indx, oct_name  from x$oct where indx=oct_type

 

で、除外されているやつをみてみた。

SQL> select *  from x$oct where indx!=oct_type;

ADDR                   INDX    INST_ID   OCT_TYPE OCT_NAME
---------------- ---------- ---------- ---------- ------------------------------
000000000C14EDC0         69          1          0
000000000C14EFB0        100          1          0
000000000C14EFC0        101          1          0
000000000C14EFD0        102          1          0
000000000C14EFE0        103          1          0
000000000C14EFF0        104          1          0
000000000C14F000        105          1          0
...

 

何も面白くなかった。。。

 

 

遅延セグメント作成

パラメータは、DEFERRED_SEGMENT_CREATION でデフォルトが true 。

つまり、デフォルトだと表を作成してもセグメントは作成されない。テストするときとか、たまに不便。

 

segment creation immediate 句をつけてあげると即時にセグメントが作成される。

SQL> create table tab1 (id number) ;

表が作成されました。

SQL> create table tab2 (id number) segment creation immediate;

表が作成されました。

SQL> col table_name for a10
SQL> select table_name, segment_created from user_tables
2 where table_name like 'TAB%';

TABLE_NAME SEGMENT_C
---------- ---------
TAB1       NO
TAB2       YES

逆に、遅延セグメント作成したいときは segment creation deferred 。

これも、忘れがち。。。