Gblog

おもにTips

AWRで性能分析するための準備

ちょっと用事があったのでまとめます。

AWRの保持期間を変更して、(しばらく運用してから)awrextr.sql で別環境に移行することを想定。

容量のチェックとか必要そうなポイントをまとめました。

 

1. AWRで使用している領域の確認

SQL> select SCHEMA_NAME, trunc(SPACE_USAGE_KBYTES/1024,1) "SPACE_USAGE_MB"
  2    from v$sysaux_occupants
  3   where OCCUPANT_NAME='SM/AWR'

SCHEMA_NAM     SPACE_USAGE_MB
---------- ------------------
SYS                       472
続きを読む

索引の使用状況の監視

列の使用状況を監視する方法を書いたので、ついでに索引も。

 

1. 索引のモニタリング開始

ALTER INDEX ... MONITORING USAGE; を実行して監視を有効にします。

SQL> ALTER INDEX TAB1_PK MONITORING USAGE;

索引が変更されました。

SQL> select * from v$object_usage;

INDEX_NAME TABLE_NAME                     MON USE START_MONITORING    END_MONITORING
---------- ------------------------------ --- --- ------------------- -------------------
TAB1_PK    TAB1                           YES NO  04/02/2016 01:43:15

 こんな感じ。

続きを読む

Selectivity とか Cardinarity

ちょっと統計関係の用語をメモ。すぐ忘れてしまうので。

計算式は、ヒストグラムがない場合の話。

  • セレクティビティ(Selectivity)
    選択率。条件にヒットする行の割合。
    Selectivity = 1 / NDV
  • NDV
    number of distinct values
    NUM_DISTINCT
  • カーディナリティ(Cardinarity)
    戻される行の予測数。
    Cardinarity = 表の行数 * Selectivity
    正確には、(表の行数 - NULLの件数) * Selectivity
  • DENSITY
    列の密度。
    1/NUM_DISTINCT
    要するに Selectivity と同じもののようだが、違いがよくわからず。

 

また必要な用語があれば、UPDATE したい。

Wait-For-Graph の見方(Single)

こっちはおまけです。12.1.0.2 Single 環境でのデッドロック

*** 2016-03-18 21:52:36.564
DEADLOCK DETECTED ( ORA-00060 )
See Note 60.1 at My Oracle Support for Troubleshooting ORA-60 Errors
[Transaction Deadlock]

The following deadlock is not an ORACLE error. It is a
deadlock due to user error in the design of an application
or from issuing incorrect ad-hoc SQL. The following
information may aid in determining the deadlock:

Deadlock graph:  (*1)
                                          ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name                             process session holds waits  process session holds waits
TX-0006001B-0000512C-00000000-00000000         48      10     X             31     364           X
TX-000A0016-000064D4-00000000-00000000         31     364     X              7     355           X
TX-00080015-000052DA-00000000-00000000          7     355     X             48      10           X

session 10: DID 0001-0030-00000014      session 364: DID 0001-001F-00000011
session 364: DID 0001-001F-00000011     session 355: DID 0001-0007-00000005
session 355: DID 0001-0007-00000005     session 10: DID 0001-0030-00000014

Rows waited on:  (*2)
  Session 10: obj - rowid = 0002121D - AAAhIdAAEAAAAD2AAA
  (dictionary objn - 135709, file - 4, block - 246, slot - 0)
  Session 364: obj - rowid = 0002121B - AAAhIbAAEAAAADlAAA
  (dictionary objn - 135707, file - 4, block - 229, slot - 0)
  Session 355: obj - rowid = 0002121C - AAAhIcAAEAAAADuAAA
  (dictionary objn - 135708, file - 4, block - 238, slot - 0)

----- Information for the OTHER waiting sessions -----      (*3)
Session 364:
  sid: 364 ser: 32666 audsid: 266832 user: 146/TEST
    flags: (0x41) USR/- flags_idl: (0x1) BSY/-/-/-/-/-
    flags2: (0x40009) -/-/INC
  pid: 31 O/S info: user: test, term: UNKNOWN, ospid: 5359
    image: oracle@test (TNS V1-V3)
  client details:
    O/S info: user: test, term: pts/4, ospid: 5356
    machine: test program: sqlplus@test (TNS V1-V3)
    application name: SQL*Plus, hash value=3669949024
  current SQL:
  update tab2 set c1=1000

Session 355:
  sid: 355 ser: 61241 audsid: 266833 user: 146/TEST
    flags: (0x41) USR/- flags_idl: (0x1) BSY/-/-/-/-/-
    flags2: (0x40009) -/-/INC
  pid: 7 O/S info: user: test, term: UNKNOWN, ospid: 5360
    image: oracle@test (TNS V1-V3)
  client details:
    O/S info: user: test, term: pts/1, ospid: 5094
    machine: test program: sqlplus@test (TNS V1-V3)
    application name: SQL*Plus, hash value=3669949024
  current SQL:
  update tab1 set c1=1000

----- End of information for the OTHER waiting sessions -----

Information for THIS session:

----- Current SQL Statement for this session (sql_id=01xmdxx2u6ma5) -----   (*4)
update tab3 set c1=1000
===================================================
PROCESS STATE
-------------
Process global information:
...

 (*1) が Deadlock graph。

続きを読む

Wait-For-Graph の見方(RAC)

久しぶりに Wait-for-graph(WFG) を見る用事があったのですが、すっかり忘れていました。
RAC の場合、デッドロック時の待機状況をしめす WFG は LMDプロセスが出力してくれます。基本、全ノードの LMD のトレースを確認するのがよいです。

続きを読む

シェルの話

監視などで常駐させるなら

#!/bin/sh
(
echo "set lin 120 pages 1000 feed off"
echo "conn / as sysdba"
while [ 1 ]
do
echo "select sid,serial#,event,seq# from v\$session  where  username='TEST';"
sleep 1
done
) | sqlplus /nolog

 

 テストなどで都度接続させるなら

#!/bin/sh
while [ 1 ]
do
sleep 1
sqlplus -s /nolog << EOF
set lin 120 pages 1000 feed off
conn / as sysdba
select sid,serial#,event,seq# from v\$session  where  username='TEST';
exit
EOF
done

 

 使い分け。