Linux システムで HugePages をすばやく構成するための完全な手順

Linux システムで HugePages をすばやく構成するための完全な手順

序文

Linux システムの HugePages と Oracle データベースの最適化については、関連する概念を非常にわかりやすく紹介している Xiong Ye の以前の記事を参照してください。

Linux の大容量メモリ ページ Oracle データベースの最適化

この記事はLinuxシステム上でHugePagesを素早く設定することを目的としています

テスト環境: RHEL6.8 + 512G 物理メモリ、Oracle 11.2.0.4 SGA=400G。

1. memlockを無制限に設定する

/etc/security/limits.conf 構成ファイルで、Oracle ユーザー memlock を unlimited に設定します。

vi /etc/security/limits.conf

オラクル ソフト メモリロック 無制限
Oracle ハード メモリ ロック 無制限

2. 適切なvm.nr_hugepagesを設定する

/etc/sysctl.conf 構成ファイルで、適切な vm.nr_hugepages 値を設定します。

MOS 401749.1 で提供されている hugepages_settings.sh スクリプトを実行して、推奨値を直接取得します。

hugepages_settings.sh スクリプトの内容:

#!/bin/bash
#
# hugepages_settings.sh
#
# Linux bashスクリプトで値を計算する
# 推奨される HugePages/HugeTLB 構成
# Oracle Linux の場合
#
# 注意: このスクリプトはすべての共有メモリの計算を行います
# スクリプトの実行時に利用可能なセグメント。
# は Oracle RDBMS 共有メモリ セグメントであるかどうか。
#
# このスクリプトはMy Oracle SupportのDoc ID 401749.1から提供されています 
# http://support.oracle.com

# ウェルカムテキスト
エコー "
このスクリプトはMy Oracle SupportのDoc ID 401749.1から提供されています。 
(http://support.oracle.com)の値を計算することを目的としています 
現在の共有に推奨されるHugePages/HugeTLB構成 
Oracle Linux 上のメモリ セグメント。実行を続行する前に、次の点に注意してください。
* ASM インスタンスの場合、AMM ではなく ASMM を構成する必要があります。
* 'pga_aggregate_target'はSGA外にあり、 
SGA サイズを計算する際には、これを考慮する必要があります。
* DB SGAサイズを変更する場合、 
新しいSGAは以前のHugePages構成に適合しないため、 
HugePages全体を無効にした方が良いでしょう。 
新しい SGA サイズで DB を起動し、スクリプトを再度実行します。
以下の点を確認してください:
* Oracleデータベースインスタンスが稼働中であること
* Oracle Database 11g 自動メモリ管理 (AMM) が設定されていません 
(文書ID 749851.1を参照)
* 共有メモリセグメントは次のコマンドで一覧表示できます。
# ipcs -m


続行するには Enter キーを押してください..."

読む

# カーネルのバージョンを確認する
KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`

# HugePageのサイズを調べる
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk '{print $2}'`
if [ -z "$HPG_SZ" ];then
echo "スクリプトが実行されているシステムでは、hugepages がサポートされていない可能性があります。"
出口1
フィ

# カウンターを初期化する
数値_PG=0

# 実行中の共有メモリセグメントを処理するために必要なページの累積数
`ipcs -m | cut -c44-300 | awk '{print $1}' | grep "[0-9][0-9]*"` の SEG_BYTES について
する
MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q`
[ $MIN_PG -gt 0 ]の場合;
NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`
フィ
終わり

RES_BYTES=`echo "$NUM_PG * $HPG_SZ * 1024" | bc -q`

# 100MB未満のSGAは意味がありません
# もしそうなら、撤退する
[ $RES_BYTES -lt 100000000 ]の場合;
エコー "***********"
echo "** エラー **"
エコー "***********"
echo "申し訳ありません! 割り当てられた共有メモリセグメントの合計が足りません 
HugePages 構成。HugePages は共有メモリ セグメントにのみ使用できます。 
コマンドでリストできます:

# ipcs -m

Oracle Database SGA に一致するサイズ。次の点を確認してください。
* Oracleデータベースインスタンスが起動して実行中である 
* Oracle Database 11g 自動メモリ管理 (AMM) が構成されていません"
出口1
フィ

# 結果を残しながら終了
$KERNの場合
'2.2') echo "カーネルバージョン $KERN はサポートされていません。終了します。" ;;
'2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`;
echo "推奨設定: vm.hugetlb_pool = $HUGETLB_POOL" ;;
'2.6') echo "推奨設定: vm.nr_hugepages = $NUM_PG" ;;
'3.8') echo "推奨設定: vm.nr_hugepages = $NUM_PG" ;;
'3.10') echo "推奨設定: vm.nr_hugepages = $NUM_PG" ;;
'4.1') echo "推奨設定: vm.nr_hugepages = $NUM_PG" ;;
エサック

# 終わり

スクリプトを実行するだけで、対応する提案が表示されます。

--SGA_MAX_SIZE=12G でインスタンスを起動する場合、次の推奨事項があります。
推奨設定: vm.nr_hugepages = 6148

--SGA_MAX_SIZE=400G でインスタンスを起動する場合、次の推奨事項があります。
推奨設定: vm.nr_hugepages = 204805

--インスタンスが起動されていない場合は、エラー メッセージが表示されます。
***********
** エラー **
***********
申し訳ありません!割り当てられた共有メモリセグメントの合計が足りません 
HugePages 構成。HugePages は共有メモリ セグメントにのみ使用できます。 
コマンドでリストできます:

# ipcs -m

Oracle Database SGA に一致するサイズ。次の点を確認してください。
* Oracleデータベースインスタンスが起動して実行中である 
* Oracle Database 11g 自動メモリ管理 (AMM) が構成されていません

推奨値 vm.nr_hugepages = 204805 を /etc/sysctl.conf 構成ファイルに追加し、sysctl -p を実行して構成を有効にします。

3. HugePagesが正常にセットアップされていることを確認する

HugePages に関する情報を表示し、HugePages_Total 値が 204805 であり、これは以前に設定されたものであることを確認します。

grep 巨大な /proc/meminfo

# grep 巨大な /proc/meminfo 
AnonHugeページ: 0 kB
巨大なページの合計: 204805
巨大なページ_無料: 168475
巨大ページ_Rsvd: 168471
巨大ページ_過剰: 0
巨大ページサイズ: 2048 kB

データベースが起動すると、対応するアラート ログに「Large Pages Information」が含まれます。

2018年11月14日水曜日 14:38:12
ORACLEインスタンスの起動(正常)
************************ ラージページ情報 ********************
プロセスごとのシステム memlock (ソフト) 制限 = 無制限

ラージページ内の共有グローバル領域の合計 = 400 GB (100%)

このインスタンスで使用されるラージページ: 204801 (400 GB)
システム全体で未使用のラージページ = 4 (8192 KB)
システム全体で構成されたラージページ = 204805 (400 GB)
ラージページサイズ = 2048 KB
********************************************************************

これで、HugePages が正常に設定されたことを確認できます。

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

<<:  JavaScriptでカレンダー効果を素早く実装

>>:  MySQL innodb例外の修復に関する経験の共有

推薦する

アップロード画像コントロールを実現するネイティブ js

この記事の例では、アップロード画像コントロールを実装するためのjsの具体的なコードを参考までに共有し...

CentOS7 で jar アプリケーションの起動を設定する方法

プロジェクトの展開中に遭遇した落とし穴Zhihudemo を展開する際、Jenkins などの自動展...

nginxで静的リソースを公開する方法

ステップ準備した静的リソースファイルを指定されたフォルダに配置しますnginx 設定ファイルを変更す...

docker-compose.yml ファイル内の一般的なテンプレート コマンドの詳細な説明

注意: docker-compose.yml ファイルを書き込むときは、すべてのコロン (:) とダ...

数十行のjsを使用してクールなキャンバスインタラクティブ効果を実現する方法を教えます

目次1. 円を描く2. マウスで動かした円3. マウスでドラッグした粒子4. カラーグラデーション粒...

MySQLのunion allとunionの違いを簡単に理解する

Union は、重複行を除外し、デフォルトのソートを実行する、データに対する結合操作です。Union...

WeChat アプレット uniapp は左スワイプによる削除効果を実現します (完全なコード)

WeChatアプレットuniappは左スワイプで削除効果を実現成果を達成する1. スワイプしてリス...

MySQLのスリープ関数の特殊現象例の詳しい説明

序文MySQL のスリープ システム機能は、実用的な適用シナリオが少なく、通常は実験的なテストに使用...

nginx でネストされた if メソッドを実装する方法

Nginx はネストされた if ステートメントをサポートしておらず、if ステートメントでの論理判...

mysql5.7.14 解凍版インストールグラフィックチュートリアル

MySQL は、コミュニティ エディション (コミュニティ サーバー) とエンタープライズ エディシ...

CSS scroll-snap スクロールイベント停止と要素位置検出の実装

1. スクロールスナップはフロントエンド開発者にとって必須のスキルですCSS スクロール スナップは...

VMware での Ubuntu 16.04 イメージの完全インストール チュートリアル

この記事では、VMware 12でのUbuntu 16.04イメージのインストールチュートリアルを参...

年末ですが、MySQL パスワードは安全ですか?

序文:年末です。データベースを検査する時期ではないでしょうか?一般的に、検査では、パスワードの複雑さ...

JavaScriptアニメーション関数のカプセル化の詳細な説明

目次1. アニメーション機能の原理2. アニメーション関数のシンプルなカプセル化3. アニメーション...

MySQL 8.0.15 バージョンのインストールチュートリアル Navicat.list への接続

落とし穴1. ネット上の多くのチュートリアルでは環境変数を設定するファイル名はmy.iniと書いてあ...