Oracle Statspackの導入・インストール手順【実行ログ付き】

  • URLをコピーしました!
Oracle AI Database
僕の作業環境
  • OS:Oracle Linux 9.7
  • 導入製品:Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0

本記事では、Oracle Statspackの導入・インストール手順を実行ログ付きでまとめました。

この記事でわかること
  • Oracle Statspackの概要
  • Oracle Statspackのインストール手順
目次

Oracle Statspackとは

Oracle Statspackは、Oracle AI Database/Oracle Databaseのパフォーマンス問題を調査・分析するための無料のツールです。

Standard EditionとEnterprise Editionのエディション制限がなく、Diagnostic Pack/Tuning Packライセンスを保有していなくても問題ないです。

自動及び手動で統計情報の取得した時点(以下をスナップショットと呼ぶ)を活用して、2つのスナップショットで差分からパフォーマンスの調査・分析を行います。

インストール手順

Oracle Statspackのインストール手順は以下になります。

Oracle Statspackのインストール手順
  • PDBに接続
  • 初期化パラメータの確認
  • 専用の表領域を作成(任意)
  • Statspackのインストールスクリプト実行
  • PERFSTATユーザ・オブジェクトの確認
  • PERFSTATユーザに権限付与

PDBに接続

Oracle Statpackは、プラガブルデータベース (PDB) のインストールを前提にしています。

CDB$ROOTへのインストールはサポートしていません。

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 ORCLPDB1			  READ WRITE NO
SQL> alter session set container=ORCLPDB1;

Session altered.

SQL> show con_name

CON_NAME
------------------------------
ORCLPDB1

Statspackをインストールスクリプトを実行する際には、PDBに接続することを忘れないでください。

初期化パラメータの確認

初期化パラメータtimed_statisticsと初期化パラメータjob_queue_processesの確認を行います。

初期化パラメータtimed_statisticsはTRUEに設定(デフォルト)されている必要があります。

インスタンスレベルではFALSEでセッションレベルはTRUEに設定すると、レポートが不整合になるため、必ずインスタンスレベルでTRUEに統一することが原則です。

初期化パラメータstatistics_levelがTYPICALかALL以外に設定されている場合、timed_statisticsはFALSEに自動設定されてしまうため一応確認しましょう。

SQL> SHOW PARAMETER timed_statistics

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
timed_statistics		     boolean	 TRUE
SQL> show parameter statistics_level

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
client_statistics_level 	     string	 TYPICAL
statistics_level		     string	 TYPICAL

次に、初期化パラメータjob_queue_processesは1以上に設定されていることが重要です。

Statspackはスナップショットを自動取得(スケジュール)する場合は、DBMS_JOB(従来のジョブ機能)を使用します。

そのため、job_queue_processesを1以上に設定する必要があります。

JOB_QUEUE_PROCESSESには、DBMS_JOBジョブおよびOracle Scheduler (DBMS_SCHEDULER)ジョブの実行用に作成可能な、CDBまたはPDBごとのジョブ・ワーカーの最大数を指定します。
引用元:Oracle公式サイト

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> show parameter job_queue_processes

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes		     integer	 80
SQL> alter session set container=ORCLPDB1;

Session altered.

SQL> show con_name

CON_NAME
------------------------------
ORCLPDB1
SQL> show parameter job_queue_processes

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes		     integer	 80

専用の表領域を作成(任意)

必須ではなく任意の工程で、Statspackで使用する専用の表領域を作成します。

Statspackをインストールする際には、最低でも約100MBの空き容量が必要です。

StatspackはSYSAUX表領域をデフォルトで使用することも可能ですが、AWRや監査でデータベースファイルが増大になり管理が複雑になるため、専用表領域を作成することも広く採用されています。

SYSTEM表領域をStatspackに使用することはできず、インストール時にエラーになります。

SQL> CREATE TABLESPACE PERFSTAT
  2  DATAFILE 'データベースファイルのパス' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 10G;

Tablespace created.

Statspack専用の表領域が作成できたら、下記のSELECT文を実行して確認できます。

set pages 300
set lines 300
col tablespace_name for a50
col NOW_SIZE[MB] for 9999999999
col USED_SIZE[MB] for 9999999999
col USED_PER for 999990.99
SELECT
	df.tablespace_name,
	SUM(df.bytes/(1024*1024)) as "NOW_SIZE[MB]",
	SUM((df.bytes-NVL(fs.free_bytes,0))/(1024*1024)) as "USED_SIZE[MB]",
	ROUND(SUM((df.bytes-NVL(fs.free_bytes,0))/(1024*1024))/SUM(df.bytes/(1024*1024)) * 100,2) as "USED_PER"
FROM
	dba_data_files df
LEFT JOIN (
		SELECT
			file_id,
			SUM(bytes) as free_bytes
		FROM
			dba_free_space
		GROUP BY
			file_id
	) fs
ON
	df.file_id = fs.file_id
GROUP BY
	df.tablespace_name
;
あわせて読みたい
【Oracleの便利SQL】表領域とデータファイルのサイズと使用率、空き率を確認するSQL 動作確認環境 導入製品:Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 本記事では、表領域とデータファイルのサイズと拡張サイズ、最大サイズ、使...

Statspackのインストールスクリプト実行

インストールスクリプト$ORACLE_HOME/rdbms/admin/spcreateを実行して、データベースにStatspackをインストールします。

Statspackのインストール時に、以下の指定が求められます。

  • perfstatユーザのパスワード
  • perfstatユーザのデフォルト表領域
  • perfstatユーザのデフォルト一時表領域
SQL> @?/rdbms/admin/spcreate

Session altered.


Choose the PERFSTAT user's password
-----------------------------------
Not specifying a password will result in the installation FAILING

Enter value for perfstat_password: *********
*********


Choose the Default tablespace for the PERFSTAT user
---------------------------------------------------
Below is the list of online tablespaces in this database which can
store user data.  Specifying the SYSTEM tablespace for the user's
default tablespace will result in the installation FAILING, as
using SYSTEM for performance data is not supported.

Choose the PERFSTAT users's default tablespace.  This is the tablespace
in which the STATSPACK tables and indexes will be created.

TABLESPACE_NAME 				   CONTENTS		 STATSPACK DEFAULT TABLESPACE
-------------------------------------------------- --------------------- ----------------------------
PERFSTAT					   PERMANENT
SYSAUX						   PERMANENT		 *
USERS						   PERMANENT

Pressing <return> will result in STATSPACK's recommended default
tablespace (identified by *) being used.

Enter value for default_tablespace: PERFSTAT

Using tablespace PERFSTAT as PERFSTAT default tablespace.


Choose the Temporary tablespace for the PERFSTAT user
-----------------------------------------------------
Below is the list of online tablespaces in this database which can
store temporary data (e.g. for sort workareas).  Specifying the SYSTEM
tablespace for the user's temporary tablespace will result in the
installation FAILING, as using SYSTEM for workareas is not supported.

Choose the PERFSTAT user's Temporary tablespace.

TABLESPACE_NAME 				   CONTENTS		 DB DEFAULT TEMP TABLESPACE
-------------------------------------------------- --------------------- --------------------------
TEMP						   TEMPORARY		 *

Pressing <return> will result in the database's default Temporary
tablespace (identified by *) being used.

Enter value for temporary_tablespace: TEMP

Using tablespace TEMP as PERFSTAT temporary tablespace.

<省略>

Creating Package STATSPACK...

Package created.

No errors.
Creating Package Body STATSPACK...

Package body created.

No errors.

NOTE:
SPCPKG complete. Please check spcpkg.lis for any errors.

SQL> 
SQL> -- Bug#25233027: xxx Set this parameter to FALSE for creating common objects in consolidated database
SQL> alter session set "_oracle_script" = FALSE;

Session altered.

インストールに失敗した際は、$ORACLE_HOME/rdbms/admin/spdropを実行することが削除することができます。

@?/rdbms/admin/spdrop
@?/rdbms/admin/spcreate

SQL*PLUS起動時のカレントディレクトリに、spcreate.sqlを実行したログが出力されます。

ログファイルからもインストール時にエラーが発生していないことを確認できます。

[oracle@learnbytebybyte ~]$ ls -la spc*.lis
-rw-r--r--. 1 oracle oinstall  195 May  4 11:56 spcpkg.lis
-rw-r--r--. 1 oracle oinstall 7082 May  4 11:56 spctab.lis
-rw-r--r--. 1 oracle oinstall 4417 May  4 11:56 spcusr.lis
[oracle@learnbytebybyte ~]$ grep -i "ORA-\|error" sp*.lis
spcpkg.lis:No errors.
spcpkg.lis:No errors.
spcpkg.lis:SPCPKG complete. Please check spcpkg.lis for any errors.
spctab.lis:SPCTAB complete. Please check spctab.lis for any errors.
spcusr.lis:SPCUSR complete. Please check spcusr.lis for any errors.

PERFSTATユーザ・オブジェクトの確認

Statspackをインストールすると、perfstatユーザが作成されるため接続してみましょう。

#PDBにインストールした場合
connect perfstat/<password>@<PDB接続文字列>

#非CDBにインストールした場合
connect perfstat/<password>

perfstatユーザでINVALID(無効)なオブジェクトがないか確認しましょう。

SQL> set pages 300
SQL> set lines 300
SQL> col object_type for a20
SQL> SELECT
  2  object_type,
  3  count(*)
  4  FROM
  5  user_objects
  6  GROUP BY
  7  object_type
  8  ORDER BY
  9  object_type
  10  ;

OBJECT_TYPE	       COUNT(*)
-------------------- ----------
INDEX			     73
PACKAGE 		      1
PACKAGE BODY		      1
SEQUENCE		      1
TABLE			     73
VIEW			      1

6 rows selected.

SQL> col object_name for a50
SQL> col object_type for a20
SQL> col status for a15
SQL> SELECT
  2  object_name,
  3  object_type,
  4  status
  5  FROM
  6  user_objects
  7  WHERE
  8  status != 'VALID'
  9  ORDER BY
  10  object_type,
  11  object_name
  12  ;

no rows selected

これでOracle Statspackのインストールまでは完了です。

PERFSTATユーザに権限付与

自動取得ジョブを登録する上で、PERFSTATユーザにCREATE JOB権限が必要です。

12c以降は自分自身のスキーマにジョブを作成する場合でもCREATE JOB権限が必要です。

SQL> connect / as sysdba
Connected.
SQL> alter session set container = orclpdb1;

Session altered.

SQL> grant create job to perfstat;

Grant succeeded.

Oracle Statspackの使い方

スナップショットの取得・レポート出力・自動取得設定など、Statspackの実運用について以下の記事で解説しています。

あわせて読みたい
Oracle Statspackのスナップショットの取得からレポート作成、削除までの使い方【実行ログ付き】 僕の作業環境 OS:Oracle Linux 9.7 導入製品:Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 Oracle Statspackは、Oracle Databaseのパフォーマン...

まとめ

本記事では、Oracle Statspackのインストールを、検証ログとともに以下の流れでまとめました。

  • PDBに接続
  • 初期化パラメータの確認
  • 専用の表領域を作成(任意)
  • Statspackのインストールスクリプト実行
  • PERFSTATユーザ・オブジェクトの確認
  • PERFSTATユーザに権限付与

Statspackは追加ライセンス不要で利用できる貴重なパフォーマンス診断ツールです。

Standard EditionとEnterprise Editionのエディション制限がなく、Diagnostic Pack/Tuning Packライセンスを保有していなくても活用できます。

本手順を参考にぜひ導入してみてください。

最後までご愛読ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Fラン卒・未経験からデータベースエンジニアに転身。
使用技術:Oracle製品
資格取得:情報処理安全確保支援士試験|応用情報技術者試験|OracleMaster Gold DBA|OCI Architect Associate

目次