2011年11月28日月曜日

[ASMLIB]EMC PowerPathの場合のお作法_6

前回:[ASMLIB]EMC PowerPathの場合のお作法_5


今回はまとめや参考情報について

1.EMC PowerPath環境でのASMLIBの設定方法
 通常のoracleasmコマンドを使用するとエラーになったりするので、
 emcpowerの時はasmtoolコマンドを使用する。
 投稿はこちら

2.マルチパスと(マルチデバイスパス)とは
 疑似デバイスとも言われるが、LU(ディスク)へのパスが複数存在しており、
 冗長化やI/Oの効率化を図ること出来る仕組み。
 特徴としては、1つのLUに対してパス+マルチパス分の複数デバイスが存在するように、
 OS上からは見える。/dev/配下など
 投稿はこちら

3.マルチパス環境におけるASMLIBのお作法
 /etc/sysconfig/oracleasmのORACLEASM_SCANORDERと
 (または)ORACLEASM_SCANEXCLUDEを設定して、
 誤ってシングルパスを読み込まないように、マルチパス優先して読み込ませたり、
 シングルパスを読み込ませない設定を行う。
 投稿はこちら

4.その他参考情報
 <参考資料>
 ・Oracle Databaseストレージ管理者ガイド 11gリリース1(11.1)マニュアル
 ・Dell™ PowerEdge™ Systems Oracle® Database on Enterprise Linux® x86_64
  Troubleshooting Guide Version 4.3 (p14ページ)

 ・Dell PowerEdge Systems Oracle 11g R2 Database on Enterprise Linux x86_64
  Getting Started Guide


 <参考情報>
 My Oracle Support情報
 ・ASMLib: oracleasm createdisk command fails:
  Device '/dev/emcpowera1 is not a partition [Failed] [ID 469163.1]

 ・Collecting The Required Information For Support To Troubleshot ASM/ASMLIB Issues.
  [ID 869526.1]

 ・Troubleshooting a multi-node ASMLib installation [ID 811457.1]

[ASMLIB]EMC PowerPathの場合のお作法_5

前回:[ASMLIB]EMC PowerPathの場合のお作法_4


前回は、はまらないためには?
って話を書きました。


今回はその他色々を見ていきます。

1.マルチパスと/proc/partitions
 /proc/partitionsの内容を見るとなんとなく、
 マルチパスとそれを構成しているパーティション、
 シングルデバイスパスの関係が見えてきます。
 
# cat /proc/partitions
major minor #blocks name

8 0 292421632 sda
8 1 104391 sda1
8 2 100663290 sda2
8 3 191647417 sda3
8 32 1059840 sdc --emocpoweraを構成するシングルパス1●
8 16 10598400 sdb --emocpowerbを構成するシングルパス1▲
8 48 1059840 sdd --emocpoweraを構成するシングルパス2●
8 64 1048780804 sde --emocpowerdを構成するシングルパス1★
8 80 1048780804 sdf --emocpowerdを構成するシングルパス2★
8 96 10598400 sdg --emocpowerbを構成するシングルパス2▲
8 112 52439040 sdh --emocpowercを構成するシングルパス1■
8 128 52439040 sdi --emocpowercを構成するシングルパス2■
253 0 1059840 emcpowera --●で構成されるマルチデバイスパス
253 1 10598400 emcpowerb --▲で構成されるマルチデバイスパス
253 2 52439040 emcpowerc --■で構成されるマルチデバイスパス
253 3 1048780804 emcpowerd --★で構成されるマルチデバイスパス

sdc,sdb,emcpoweraは同じブロック数です。
なんとなく想像できますが、実際のLUだとかパーティションは1つですが、
同一のパーティションに対して2つのパスがあるので
sdc、sdbという形でデバイス(orパーティション)が見えており、
その二つのパスを束ねたマルチパスemcpoweraも見えています。
ls -l /dev/*で確認すると/dev/sdbcや/dev/emcpowera等が確認できます。
また、LU(ディスク)までの経路でポートなどが冗長化されている場合は、
4つ等に見える場合にもあります。


2./proc/partitionsと/dev/oracleasm/disks
 /dev/oracleasm/disks配下にはASMLIBでラベルマーキングした、
 ラベル名のブロックデバイスが存在します。

# ls -l /dev/oracleasm/disks
合計 0
brw-rw---- 1 grid asmadmin 253, 0 11月 28 02:00 CRS
brw-rw---- 1 grid asmadmin 253, 1 11月 28 02:00 DG1
brw-rw---- 1 grid asmadmin 253, 2 11月 28 02:00 DG2
brw-rw---- 1 grid asmadmin 253, 3 11月 28 02:00 DG3 

真ん中のの数字は/proc/partitionsにも似たようなのがありました。

デバイス番号 253,0 = CRS用ディスク(ラベル) = emcpoweraディスク(orデバイス)
というの関係が読み取れます。
ディスクスキャン時に誤ってシングルデバイスパスを読み込んでしまうと、
この部分の関係が崩れることによってトラブルが発生します。


また、DELLさんのEqualLogicの場合は、/dev/mapper配下のブロックデバイスを
ORACLEASM_SCANORDERに指定しますが、
この場合もデバイス番号から、
/dev/mapper/配下のブロックデバイスとマルチデバイスパス、
ASMディスクの関係を読み取ることが出来ます。

# cat /proc/partitions grep dm
253 0 1059840 dm-0 --マルチデバイスパス
253 1 10598400 dm-1 --マルチデバイスパス
253 2 52439040 dm-2 --マルチデバイスパス
253 3 1048780804 dm-3 --マルチデバイスパス

# ls -l /dev/mapper/db*
合計 0
brw-rw---- 1 root disk 253, 0 11月 28 02:00 db-crs
brw-rw---- 1 root disk 253, 3 11月 28 02:00 db-data
brw-rw---- 1 root disk 253, 1 11月 28 02:00 db-redo
brw-rw---- 1 root disk 253, 2 11月 28 02:00 db-arc

# ls -l /dev/oracleasm/disks
合計 0
brw-rw---- 1 grid asmadmin 253, 0 11月 28 02:00 CRS
brw-rw---- 1 grid asmadmin 253, 1 11月 28 02:00 DG1
brw-rw---- 1 grid asmadmin 253, 2 11月 28 02:00 DG2
brw-rw---- 1 grid asmadmin 253, 3 11月 28 02:00 DG3


3.ASMLIBによるディスクスキャン時のログファイル
 /var/log/oracleasmファイルから、
 ASMLIBによるディスクスキャン時のログを見ることが出来ます。


以上、取りとめなく書きましたが、次回はまとめ

2011年11月22日火曜日

[ASMLIB]EMC PowerPathの場合のお作法_4

前回:[ASMLIB]EMC PowerPathの場合のお作法_3


前回は、どんな時になぜはまるのか?
って話を書きました。

今回は、はまらないための話

ASMの設定ファイルとして、/etc/sysconfig/oracleasmというファイルがあります。
このファイルに、優先して読み込むべきデバイス名や読み込む対象から除外する
デイバス名を指定することにより、擬似デバイスを優先して読み込むか、
シングルデバイスを読み込まない設定を行います。

# cat /etc/sysconfig/oracleasm

==================================================
#
# This is a configuration file for automatic loading of the Oracle
# Automatic Storage Management library kernel driver. It is generated
# By running /etc/init.d/oracleasm configure. Please use that method
# to modify this file
#

# ORACLEASM_ENABELED: 'true' means to load the driver on boot.
ORACLEASM_ENABLED=true

# ORACLEASM_UID: Default user owning the /dev/oracleasm mount point.
ORACLEASM_UID=grid

# ORACLEASM_GID: Default group owning the /dev/oracleasm mount point.
ORACLEASM_GID=asmadmin

# ORACLEASM_SCANBOOT: 'true' means scan for ASM disks on boot.
ORACLEASM_SCANBOOT=true

# ORACLEASM_SCANORDER: Matching patterns to order disk scanning
ORACLEASM_SCANORDER=""

# ORACLEASM_SCANEXCLUDE: Matching patterns to exclude disks from scan
ORACLEASM_SCANEXCLUDE=""
==================================================
※ASMのセットアップが終わった状態のファイルになります。

簡単な英語なので読めば分かると思いますが、
変更するのは、ORACLEASM_SCANORDERと(または)ORACLEASM_SCANEXCLUDE。


■設定例

例)以下のようなデバイスが見えている場合
/dev/sdc -----------擬似デバイス/dev/emcpoweraを構成するシングルデイバスパス
/dev/sdd -----------擬似デバイス/dev/emcpoweraを構成するシングルデイバスパス
/dev/sde -----------擬似デバイス/dev/emcpoweraを構成するシングルデイバスパス
/dev/sdf -----------擬似デバイス/dev/emcpoweraを構成するシングルデイバスパス
/dev/emcpowera ----上記4つのシングルデバイスから構成される擬似デバイス

-------------------------------
ORACLEASM_SCANORDER="emcpower" ←emcpoweraもbもこれ1つでOK
ORACLEASM_SCANEXCLUDE="sd"   ←sdb sdc sde,sdfもこれ1つでOK
-------------------------------
と編集して保存。
複数指定したい場合はスペース入れて複数記述。

この設定は、ラベル後でも前でもOKだけど、
サーバの再起動前にはやっておく。

知ってれば、それまでの内容ですね。

ちなみに、DELLさんのEqualLogicの場合は、
/dev/mapper配下のブロックデバイスをORACLEASM_SCANORDERに指定するようです。
(しました。)
出典:Dell PowerEdge Systems Oracle 11g R2 Database on Enterprise Linux x86_64 Getting Started Guide


次回は、ASMLIB周りのその他色々を書いていきます。

[ASMLIB]EMC PowerPathの場合のお作法_3

前回:[ASMLIB]EMC PowerPathの場合のお作法_2


前回は、そもそもemcpowera1やらマルチパスって何?
って話を書きました。


さて、はまりポイント。

===========================================
ASMとマルチパス化の併用

ASMでディスクの複数のデバイス・パスを検出するとエラーが発生します。
マルチパス構成では単一のディスクが複数回現れる可能性があるため、
マルチパス・ディスクのみを検出するようにASMを構成する必要があります。


ASMでは、初期化パラメータASM_DISKSTRINGの値を、
マルチパス・ディスクを表す疑似デバイス名に設定することにより、
マルチパス・ディスクを確実に検出できます。
たとえば、EMC PowerPathマルチパス化ソフトウェアを使用している場合は、
ASM_DISKSTRINGを'/dev/rdsk/emcpower*'に設定できます。
I/Oが疑似デバイスへ送られると、マルチパス・ドライバはそれを検出し、
基礎となるサブパスにロード・バランシングを提供します。
Linux上でASMとともにASMLIBを使用する場合は、マルチパス・ディスクを最初に
スキャンするようにASMを構成するか、またはスキャン時にシングルパス・ディスクを
除外するようにASMを構成することにより、マルチパス・ディスクを確実に検出できます。
===========================================
出典:Oracle Databaseストレージ管理者ガイド 11gリリース1(11.1)


つまり、ASMLIBが間違えることなく複数のディスクの中から、
正しいマルチデバイスパス(擬似デバイス)を認識出来るように設定してね。
って言っています。

ASMLIBで特定デバイスにラベルを設定すると、
OSが起動後にinit.dのからASMLIBのディスク検出などが実行されます。
その際にマルチパス環境では、ASMLIBが誤って異なるシングルデバイス
(マルチパスを構成している内の1つ)をラベルした擬似デバイスと誤って、
検出してしまう。
そうすると色々と問題が発生します。

小生が遭遇した事象はサーバの再起動後にラベルが吹っ飛び、
ラベルしたASMLIBとして正常に認識されなくなりました。。
再度ラベルリングしようとすると既に使用済みだと言われ
るし。。。


では、どうすればよかったか?

(上のマニュアルに記載されていますが)、
[ASMLIB]EMC PowerPathの場合のお作法_4に続く

[ASMLIB]EMC PowerPathの場合のお作法_2

[ASMLIB]EMC PowerPathの場合のお作法

書きっ放しでした。
続きを書こう書こうとして滞ってました。

前回の投稿見て設定して、別の問題にはまった人がいたらすみません。
前回の内容だけだとはまります。。


では、気を取り直して。

正確にはマルチパスのお話になりますが、その2

emcpoweraやマルチパスとは次のような状態です。

マルチパス化ソリューションは、冗長な物理パス・コンポーネントを使用することで
フェイルオーバーを提供します。
これらのコンポーネントとして、サーバーとストレージ・サブシステムの間に存在するアダプタ、
ケーブルおよびスイッチなどがあります。
これらのコンポーネントの1つ以上に障害が発生した場合、
アプリケーションは引き続きデータにアクセスできるため、ストレージ・エリア・ネットワーク(SAN)、
ホスト・バス・アダプタ、インタフェース・ケーブル、またはマルチポート・ストレージ・アレイ上の
ホスト・ポートでのシングル・ポイント障害はなくなります。

マルチパス化は、オペレーティング・システムのデバイス・ドライバ・レベルで実装される
ソフトウェア・テクノロジです。マルチパス化では疑似デバイスが作成され、
使用可能なすべてのI/Oパスの間でI/O操作を共有し、それらの操作のバランスを取ることが
容易になります。
また、使用可能なすべてのパスにI/O負荷を分散させることで
システムのパフォーマンスも向上します。
その結果、自動フェイルオーバーやフェイルバックによる、
より高いレベルのデータ可用性が提供されます。

出典:Oracle Databaseストレージ管理者ガイド 11gリリース1(11.1)


要は、1つのLUやディスクに対して複数のI/Oパスをボンディングしているような状態。
特定パスが切れても、ディスクへのアクセスを継続できるし、
I/Oパス間でI/O負荷をいい感じにしてくれる。
そのようにしてボンディングされた状態のディスクパスが、
擬似デバイスやらマルチ・ディスクやらと言われる。
emcpoweraもそのひとつ。


はまりポイントになるのは、
OS上では1つのLUやディスクが、複数のデバイス(ディスク)に見えていること。
(LUへのデバイスパス分+擬似デバイスパス)

ASMLIBではもちろん、/dev/emcpoweraという擬似デバイスを指定するのですが、、、


[ASMLIB]EMC PowerPathの場合のお作法_3につづく

2011年11月15日火曜日

Oracle DBA & Developer Days 2011の資料が公開されましたよっ♪

ほんとは、参加したセミナーの感想なんて書かずに、
学んだ知識を備忘録として書きとめていけばいいのですが、
なんとなく書いておきます。

2011/11/14(月)の本日、Oracle DBA & Developer Days 2011の資料が
以下のサイトからダウンロード出来るようになりました↓
Oracle DBA & Developer Days 2011資料ダウンロードサイト
惜しくも参加出来なかった方は、是非ダウンロードして勉強してみてはどうでしょうか?

さて、小生は早期申し込みで4200円を払って三日間行ってきました。
お昼のお弁当やデザートが三日間分付いてこの価格なので、
ちょっと高目のお昼を3食とった金額でOracleの技術を勉強できるのは、
大変お得だった気がします。

小生は真面目に勉強すべく、セミナーを呟かせたら神クラスの@yoshikawさんと並んで
ほんとんどのセッションを最前列の席で受けました。

ちなみに、Macを颯爽と駆ってスマートに呟いているのが@yoshikawさんで、
その隣で携帯をポチポチやって呟いていたダサ男
(見様によっては最前列で携帯いじっている態度の悪い奴)が小生でした。

・・・

まぁ、そんなことはどうでもよく、全てのセッションが大変面白かったのですが、
小生が受けた中で、お勧めのセッションを以下に記載しておきます。
※あくまでも個人的なお勧めです。

E-4:オラクルコンサルが語る!Exadataの性能を最大限に引き出すための性能管理Tips
 ⇒Exadataのチューニング等をされる方にはとても面白い内容です。

B-5:シバタツ流!チューニングの極意「パフォーマンス・チューニングの勘どころ」
 ⇒とてもベーシックな内容ですが、それ故、
  パフォーマンス・チューニングは小手先のテクニックではなく
  基本や基礎を身につけておくことが重要だと再認識させられます。
  小生が受けた中では一番面白いセッションでした。

C-13:サポートエンジニアが語る!RAC 環境のトラブルシューティング
 ⇒RACにおける11.2.0.2.0での仕様変更やトラブル時の注目すべきログや
  メッセージについてのセッションで、とても勉強になる内容です。
 
B-14:オラクルコンサルが語る!新しいチューニング&運用アプローチ
 ⇒結構挑戦的な内容ではあったのですが、
  講師の「Oracleの仕様(あるいは仕様変更)なので、良くも悪くも知っておくべきことです。」
  という言葉(考え方)にはとても共感を覚えました。
  11.2.0.1.0以降で知っておくべきことが書いてあります。


あとは、受けてないですが、ここらへんも面白そうでした。
B-2:実践!Oracle Data Guard の導入から有効活用までのポイント解説
B-3:解説!Oracle RACへの接続ロードバランスと接続フェイルオーバー
D-5:実践!高可用性システム構築 ~RAC詳細編 ~


また、特にキーワードとして引っ掛かった(押しが強かった)のは、
SQL Plan Management(EE+Diag+Tuning),SQLリアルタイム監視(EE+Diag+Tuning)、
Oracle Application Testing Suite、SQL Developer
の気がします。


等々、来年も是非参加したいと思った三日間でした。


※セミナー会場で見かけたりしたら、気軽に声掛けて下さいね。
 セッションの感想やOracle話などで盛り上がりましょう(^o^)/
 ↑これが書きたかっただけかも。。

2011年11月13日日曜日

HugePagesとその設定_8

前回はこちら:Hugepagesとその設定_7

まぁ、よくもHugepagesだけでダラダラ8回も書いたものです。。
小生なりのまとめです。(この回だけ書きゃいいじゃん。という感じです。。。)

1.HugePagesって?
 Linuxカーネル2.4から使用できる1ページのサイズが大きいページ。
 Oracleでは、9.2.0.1以降のリリースから使えるよ。


2.HugePagesのメリットデメリット、注意点
1)メリット
 ・OSの仮想メモリの管理負荷が低減する
  -とても大きいサイズのSGA環境において、デフォルトのスモールページ4KBによる
   ページ管理では、メモリの管理負荷が高い。
 ・ページをメモリー内にロックでき、スワップ・アウトをさせない。
  -SGAのような共有メモリーがRAMに残ります。

2)デメリット
 ・Oracleの自動メモリ管理機能(AMM≒memory_target)が使用できなくなる。

3)注意点
 ・HugePagesを設定することにより、物理メモリをHugePagesとして取得(予約)する。
  あまりに大きいサイズを設定すると、他のプロセスで使用できるメモリ量が減少することや
  予約してるが使用していないなどの無駄使いには注意が必要。
 ・HugePagesを使用するのSGA領域。
  PGAやサーバプロセスなどは通常メモリ領域から取得される。
  HugePages≒MEMORY_TARGETではないので、
  SGA_TARGETやPGA_AGGREGATE_TARGETの設定値には注意

3.設定手順
0)現状のHugePagesの設定確認
1)memlockの値確認ならびに修正(物理メモリ以下、SGA_TARGET以上の値に設定)
2)AMM(MEMORY_TARGET等)の設定解除、
 SGA_TARGET・PGA_AGGREGATE_TARGETの修正

 2-1)spfileからPfileの作成
 2-2)MEMORY_TARGET(or MEMORY_MAX_TARGET)の記述削除
 2-3)SGA_TARGET・PGA_AGGREGATE_TARGETの修正または設定
 2-4)インスタンス停止
 2-5)pfileからspfileの再作成
 2-6)インスタンス起動
 2-7)/dev/shmのumount(必要に応じて)

3)hugepage見積もり用スクリプトの作成
4)hugepage見積もり用スクリプト実行により、vm.nr_hugepagesの推奨値を取得
5)コマンドまたはsysctl.confにvm.nr_hugepagesを設定
 -sysctl.conに設定した場合はsysctl -pでOKだと思います。
6)HugePagesの値確認
7)インスタンスの再起動
8)HugePagesを使用しているか確認

4.その他
 ・新規導入の場合の見積もりは?
  -想定のSGA_TARGETで起動してみて、スクリプトを実行してみるか、
   他のインスタンスやミドルウェア等がなければ、
   想定のSGA_TARGETの値を2MBで割った値を設定でいい気もする。

5.参考文献
Oracle® Database管理者リファレンス
11g リリース2(11.2)for Linux and UNIX-Based Operating Systems

 -Hugepages概要&設定手順&制限事項
Slow Performance with High CPU Usage on 64-bit Linux with Large SGA[ID 361670.1]
 -大規模SGAを通常のページで使用するとCPUが高騰する問題について
HugePages on Oracle Linux 64-bit [ID 361468.1]
 -HugePages概要&設定手順&制限事項&設定時のトラブルシュート
HugePages on Linux: What It Is... and What It Is Not... [ID 361323.1]
 -HugePagesって何?(メモリの使用状況の図解が載ってて分かりやすい)
USE_LARGE_PAGES 初期化パラメータについて[KROWN#153045]


ここ最近は、大規模メモリ環境がどんどん手に入り易くなっている(と感じています)。
環境やシステム内容に応じてHugePagesを検討してみてはどうでしょう?

HugePagesとその設定_7

前回はこちら:Hugepagesとその設定_6

ベースはOracle® Database管理者リファレンス
11g リリース2(11.2)for Linux and UNIX-Based Operating Systems
の手順に沿っています。


今回で纏めの予定だったのですが、
ちょっと書き漏らしたので、諸々補足回とします。


1.USE LARGE_PAGES初期化パラメータ
上記マニュアルからはkernel 2.6以上がうんぬんと書いてありますが、
設定サイズ確認用スクリプト等諸々見ると2.4においても使用できるようです。
というのはおいといて、11.2.0.2.0以上では初期化パラメータによって
HugePagesの使用可否を設定できます。


 11.2.0.2.0以上のリリースに存在するパラメータになります。
 TRUE(デフォルト):Hugepagesが使用可能であれば使用する。
              使用不可の場合は、通常のsmall Pageを使用して起動
        FALSE:Hugepagesを使用しない
          ONLY:Hugepagesを使用して起動する。
              使用不可の場合は、エラーを出力してインスタンスは起動しない。

11.2.0.2.0未満はどうか?という話ですが、
9.2.0.1.0以上でHugePagesが使用可能な状態であれば使用するようです。

出典:HugePages on Oracle Linux 64-bit [ID 361468.1]


2.HugePagesを使用状態の確認方法?
 検証内では、HugePagesのFreeやRsvdが減ったから使ってるっぽいぜ?
 と結構いい加減にやりましたが、以下の方法で確認できます。

■alertログを見る!
 とてもシンプル・・・(>_<;)

A.HugePagesを使用してインスタンスが起動した場合の出力例
****************** Huge Pages Information *****************
Huge Pages memory pool detected (total: 5123 free: 5123)
DFLT Huge Pages allocation successful (allocated: 5121)
***********************************************************

やっぱり、Rsvdと同じ値5121ページしか獲得していないようですね。


B.HugePagesの獲得に失敗してインスタンスが起動した場合の出力例
※出力例はmemlockを設定していなかった場合の例

****************** Huge Pages Information *****************
Huge Pages memory pool detected (total: 5123 free: 5123)
Memlock limit too small: 32768 to accommodate segment size: 10739515392
Huge Pages allocation failed (free: 5123 required: 5121)
Allocation will continue with default/smaller page size
**********************************************************

とても分かりやすくて、優しさを感じる英語文ですね(笑)


ということで、次回こそ最終回

2011年11月11日金曜日

HugePagesとその設定_6

前回はこちら:Hugepagesとその設定_5

ベースはOracle® Database管理者リファレンス
11g リリース2(11.2)for Linux and UNIX-Based Operating Systems
の手順に沿っています。

前回は
HugePages_Total: 5123
HugePages_Free: 4673
HugePages_Rsvd: 4671

HugePages_Total-HugePages_Free=5123-4679=444ページ=使用済みHugePage?
使用済みhugepaeメモリ=444*2MB=888MB
SGA_MAX_SIZEは10GBなのに???

というところで終わりました。


まぁ、DB起動したばっかりだし、
色々トランザクションをかけてみます。

・・・・

# cat /proc/meminfo |grep Huge
HugePages_Total: 5123
HugePages_Free: 4407
HugePages_Rsvd: 4405
Hugepagesize: 2048 kB

増えてる!

HugePages_Free前回との差分=4679-4407=272ページ
HugePages_Rsvdの差分=4677-4405=272ページ

おっ!ぴったり!!

HugePages_Total-HugePages_Free:使用済みHupage数
HugePages_Total-HugePages_Free=5123-4407=716ページ=716*2MB=1432MB
というところか。。。

HugePages_Rsvd:獲得済みHugepeだが使用されていないHugepage?
HugePages_FreeとHugePages_Rsvdの差分(2ページ8MB)はなんだろう・・・


という謎を残したまま、次回はまとめと補足(笑)

HugePagesとその設定_5

前回はこちら:HugePagesとその設定_4

ベースはOracle® Database管理者リファレンス
11g リリース2(11.2)for Linux and UNIX-Based Operating Systems
の手順に沿っています。

前回はHugePagesを設定できたはずなのに、なんかオカシイ気がする・・・
ということろで終わりました。

今回は原因を調べてみます。

といっても、彼のOracle社が誤った情報を流したり、
手順が抜けてたりする筈がないんです!!
きっと小生が悪いに違いないんです!!

マニュアルを読み直します。(本当に昔に比べて質が高くなった。)

・・・・

あれ?関係ないと思って読み飛ばした上の方を呼んでみると・・・

G.1.4 Oracle DatabaseのVery Large Memoryの構成
/etc/security/limits.confファイルを編集し、次のエントリを追加して、メモリー・ロックの上限値を大きくします。
soft memlock 3145728
hard memlock 3145728

メモリ・ロック。。。なんか関係ありそう。。


5.メモリー・ロックの上限値を大きくする。
 memlockの値は物理メモリ以下でSGAやHugePagesのサイズより大きいサイズがいいよな。
 /etc/security/limits.confファイルを編集し、次のエントリを追加して、
 メモリー・ロックの上限値を設定または編集します。(単位はKB)
 今回は15GBを設定。

oracle soft memlock 15728640
oracle hard memlock 15728640

もちろん、設定したら一度sudoし直します。
$ exit
# su - oracle
$ ulimit -l
15728640

よし!!

6.インスタンスの起動
SQL> startup
ORACLEインスタンスが起動しました。

Total System Global Area 1.0689E+10 bytes
Fixed Size 2235904 bytes
Variable Size 2650800640 bytes
Database Buffers 8019509248 bytes
Redo Buffers 16928768 bytes
データベースがマウントされました。
データベースがオープンされました。

7.HugePagesの使用状況を確認します。
cat /proc/meminfo |grep Huge
HugePages_Total: 5123
HugePages_Free: 4673
HugePages_Rsvd: 4671
Hugepagesize: 2048 kB

YES!!きたきたきたきた!!!

# free -m
(DB起動前)
total used free shared buffers cached
Mem:24109 12048 12061    0 294 1079

(DB起動後)
   total used free shared buffers cached
Mem:24109 12127 11982   0 294 1079

数十MBしか変化なし!
HugePagesを使うのはSGAだけだったはず。
正常な動作っぽいぞ。



・・・・でも、この値は何を意味しているのだろう。。
HugePages_Total: 5123
HugePages_Free: 4673
HugePages_Rsvd: 4671

HugePages_Total-HugePages_Free=5123-4679=444ページ=使用済みHugePage?
使用済みhugepaeメモリ=444*2MB=888MB
SGA_MAX_SIZEは10GBなのに???

HugePages_Rsvd: 4677 は何????



HugePagesとその設定_6に続く。。。

HugePagesとその設定_4

前回はこちら:HugePagesとその設定_3

ベースはOracle® Database管理者リファレンス
11g リリース2(11.2)for Linux and UNIX-Based Operating Systems
の手順に沿っています。

ちょっと寄り道して、データベースを停止します。
SQL> shutdown immediate

# free -m
total used free shared buffers cached
Mem:24109 1795 22314 0 294 1071
22GB前後空いてます。


さてカーネルパラメータvm.nr_hugepagesの設定をしていきます。

3.カーネルパラメータ vm.nr_hugepagesの設定

コマンド)
# sysctl -w vm.nr_hugepages=5123

または

コンピュータの再起動時に常にこのパラメータ値が使用されるようにするには、
/etc/sysctl.confファイルを編集して、次のエントリを追加します。
vm.nr_hugepages=5123


4.変更後の使用可能なHugePagesを確認します。

# cat /proc/meminfo |grep Huge
HugePages_Total: 5123
HugePages_Free: 5123
HugePages_Rsvd: 0
Hugepagesize: 2048 kB

HugePagesページは2MBで、5123ページ空いてます。
5123ページ×2MB=10246MB≒10.005859375GB≒SGA_MAX_SIZEの値!!

おぉーーー
ちゃんとHugePagesとして獲得できているかのかしら?

total used free shared buffers cached
Mem:24109 12048 12061    0 294 1079

おぉー!!DBは起動していないのに、10GB位なんか使ってるっぽい。
よしっ!いける!!

5.インスタンスの起動
SQL> startup
ORACLEインスタンスが起動しました。

Total System Global Area 1.0689E+10 bytes
Fixed Size 2235904 bytes
Variable Size 2650800640 bytes
Database Buffers 8019509248 bytes
Redo Buffers 16928768 bytes
データベースがマウントされました。
データベースがオープンされました。

6.hugepagesの使用状況を確認します。
# cat /proc/meminfo |grep Huge
HugePages_Total: 5123
HugePages_Free: 5123
HugePages_Rsvd: 0
Hugepagesize: 2048 kB

変化なし???こんなもんなの?

# free -m
total used free shared buffers cached
Mem:24109 12771 11338 0 294 1724

ありりり???
DB起動しただけなのに700MBも使ってる。。。
HugePagesが取得したメモリ領域にSGA取ってくれるんじゃなかったの????


HugePagesとその設定_5に続く。。。。

2011年11月10日木曜日

HugePagesとその設定_3

前回はこちら:Hugepagesとその設定_2

前回は手順通りやったはずなのに見事に失敗。。。なぜ!?

よくよくマニュアル読むと。。。

G.2.3 HugePages構成の制限
 HugePagesを使用した場合の制限は次のとおりです。
 自動メモリー管理(AMM)とHugePagesは、互換性がありません。
 AMMを使用すると、SGAメモリー全体は/dev/shmの下にファイルを
 作成することによって割り当てられます。
 Oracle Databaseがこの方法でSGAを割り当てると、HugePagesは予約されません。
 HugePagesを使用するには、Oracle Database 11gでAMMを無効にする必要があります。

AMM(memory_target)は/dev/shm配下にファイルを作って割り当てるのか。。

# ls -l /dev/shm
-rw-r----- 1 oracle oinstall 32M 11月 10 22:35 ora_orcl_2293761_0
-rw-r----- 1 oracle oinstall 32M 11月 10 22:35 ora_orcl_2293761_1
・・・・ずっと続く
うわぁ・・・めちゃくちゃある。

AMM(memory_target)は/dev/shm配下にファイルを作って割り当てるってあるから、
共有メモリの獲得方法とはちょっと違うのかな・・・
memory_targetやめてみるか。

SQL> create pfile='/home/oracle/pfile.ora' from spfile;

$ vi pfile.ora
memory_targetとmemory_max_targetの行を削除

SQL> create spfile from pfile='/home/oracle/pfile.ora'
SQL> startup



環境
=========================================================
CPU: Intel(R) Xeon(R) CPU E5630 @ 2.53GHz×4
メモリ:24GB
OS:Red Hat Enterprise Linux Server release 5.4 (Tikanga)
カーネル:2.6.18-164.el5
Bit:64
# df -h |grep shm
shmfs 15G 766M 15G 5% /dev/shm

#free -m
   total used  free shared buffers cached
Mem:24109 12838 11271     0 293 1819
=========================================================
Oracle:11.2.0.2
Bit:64
MEMORY_MAX_TRAGET:14GB ====> 0
SGA_TARGET:10GB
PGA_AGGREGATE_TARGET:3GB
=========================================================

2.hugepages_settings.shスクリプトを実行して、hugepages構成の値を計算します。
$ ./hugepages_settings.sh
Recommended setting: vm.nr_hugepages = 5123

ふぅ・・・5123ね。OKOK。


#ls -l /dev/shm

もう使わないし、
#umount /dev/shm


HugePagesとその設定_4からvm.nr_hugepagesを設定していきます。

HugePagesとその設定_2

前回はこちら:HugePagesとその設定_1

ベースはOracle® Database管理者リファレンス
11g リリース2(11.2)for Linux and UNIX-Based Operating Systems
の手順に沿っています。

では設定していきます。

環境
=========================================================
CPU: Intel(R) Xeon(R) CPU E5630 @ 2.53GHz×4
メモリ:24GB
OS:Red Hat Enterprise Linux Server release 5.4 (Tikanga)
カーネル:2.6.18-164.el5
Bit:64
# df -h |grep shm
shmfs 15G 766M 15G 5% /dev/shm

#free -m
total used free shared buffers cached
Mem:24109 12838 11271 0 293 1819
=========================================================
Oracle:11.2.0.2
Bit:64
MEMORY_MAX_TRAGET:14GB
SGA_TARGET:10GB
PGA_AGGREGATE_TARGET:3GB
=========================================================

0.現状の確認(未設定)
# cat /proc/meminfo |grep Huge
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 2048 kB

HugePages_Total: < 確保されているHugepageの数 >
HugePages_Free: < 空きHugepageの数 >
HugePages_Rsvd: < 予約済みHugepageの数 >
Hugepagesize: < 1 Hugepageのサイズ >

1.現行の共有メモリー・セグメントのhugepages構成の推奨値を計算する
 スクリプトを作成します。

 OracleR Database管理者リファレンス
 11g リリース2(11.2) for Linux and UNIX-Based Operating Systems
 G.2.2 RHEL/ Oracle LinuxでのHugePagesの構成
からコピって作ります。

 割愛します。

2.hugepages_settings.shスクリプトを実行して、hugepages構成の値を計算します。
 $ ./hugepages_settings.sh
 Recommended setting: vm.nr_hugepages = 1


あれれれれれ????
1って。。


HugePagesとその設定_3につづく

HugePagesとその設定_1

2011/11/09のOracle DBA & Developer Days 2011のE-5セッション
シバタツ流!チューニングの極意「パフォーマンス・チューニングの勘どころ」でも
シバタツさんが説明されていたので、ちょうど前日検証していたところもあり、
書いておきたいと思います。


■HugePages
 Linuxカーネル2.6に統合された機能です。これは大きいページを使用する方法で、
 大規模メモリーで作業する際に便利です。
 32ビットおよび64ビット構成の両方で使用できます。HugePageサイズは、
 カーネル・バージョンおよびハードウェア・アーキテクチャに応じて、
 2MBから256MBと異なります。
 Oracle Databaseの場合、HugePagesを使用すると、
 ページ状態のオペレーティング・システム・メンテナンスが軽減され、
 Translation Lookaside Buffer(TLB)ヒット率が向上します。

■なぜ大規模メモリにHugePagesなのか?
 HugePagesを使用しない場合、1ページ当たり4KBのメモリーがオペレーティング・システムに
 保持され、SGAに割り当てられる際に、
 ページのライフサイクル(ダーティ、空き、プロセスにマップ済など)が
 オペレーティング・システム・カーネルによって最新に保たれます。
 HugePagesを使用する場合、各ページ表エントリが2MBから256MBのページを指すため、
 オペレーティング・システム・ページ表(仮想メモリーから物理メモリーへのマッピング)は
 小さくなります。
 また、カーネルでは、ライフサイクルを監視する必要があるページが少なくなります。

⇒Oracleが何を言いたいかと言うと、大きな物理メモリを積んでいるようなマシンで、
 Oracleに割り当てるでっかいメモリ領域(SGA)を4KB単位とのページを
 OSが管理するのは負荷(CPU負荷)が高いんです。
 なので、1ページが大きいHugePagesを使用した方がOSの管理負荷(CPU負荷)が
 低減されてよいんです。と言っているんだと思う。

また、HugePagesを使うと以下のメリットがあります。

1.TLBヒットが増加することによってパフォーマンスが向上します。
2.ページがメモリー内でロックされ、スワップ・アウトされないため、
 SGAのような共有メモリーがRAMに残ります。
3.連続するページを事前に割り当てるため、
 System V共有メモリー(SGAなど)以外に使用できなくなります。
4.より大きなページ・サイズによる仮想メモリーの部分のため、カーネル用の記録操作が
  削減されます。

⇒2.がポイントかしら。要は、SGAをメモリ上にロックできるんですね。
 それにより、スワップ・イン/スワップ・アウトを食らわなくてすむ。
 SGAの情報は常にRAM上にキャッシュできる。
 (そもそも、キャッシュ上のデータ管理はSGAのLRUがあるし。)
 ⇒OSのページ管理による負荷(CPU負荷)を軽減できる。


なお、大規模メモリ環境におけるOSのページ管理による負荷(CPU負荷)は
MOSでも障害として取り上げられています。
[ID 361670.1]Slow Performance with High CPU Usage on 64-bit Linux with Large SGA

大規模メモリ&大規模SGAを積んでる環境で、なんかSYSTEM CPU負荷が高いんだけど。。。
という環境は確認&検討してみるといいかもですね。
※大規模メモリ:シバタツさんのセミナーでは32GBが目安とご説明されていました。


ちなみに、HugePagesはmemory_targetでは使えないので注意が必要。
でも、それは次回のHugepagesとその設定_2で。。。


出典:Oracle® Database管理者リファレンス 11g リリース2(11.2)
  for Linux and UNIX-Based Operating Systems