• 検索結果がありません。

メモリについて考えてみよう_REL_

N/A
N/A
Protected

Academic year: 2021

シェア "メモリについて考えてみよう_REL_"

Copied!
26
0
0

読み込み中.... (全文を見る)

全文

(1)
(2)

Agenda



はじめに



「メモリ」って何だろう?



SQL Server

で使うメモリ



メモリ関連の設定



メモリ周りのトラブル



モニタリング

(3)

はじめに



全体のテーマ

 本セッションではSQL Serverのメモリを理解するための知識 とその挙動を説明します



ゴール

 メモリに関わる知識を整理し、わからない単語を無くす  自分の関わるシステムをメモリを切り口に振り返ってみる  トラブルが起きたときに何が起きたのか想像できるように なる

(4)



物理メモリと仮想メモリ

 物理メモリと仮想メモリの違いは説明できますか?  mallocやnewで確保できるメモリはどちらでしょうか?



物理メモリについて

 物理メモリはマザーボードに刺さっているあの「メモリ」  物理メモリの詳細については今回は触れない → 内部の動きはハードウェア屋さんへ

(5)

「メモリ」って何だろう?



昔は仮想メモリなんて無かった

 プログラムが使うメモリ=物理メモリ(少ない)  マルチスレッドで動かすことは稀だった  プログラムがOSを暴走させるなんて当たり前だった



もう我慢の限界!!

 もっとメモリが使いたい!  プログラム間でメモリのやりくりなんてしたくない!  ちょっとくらいマナーが悪いプログラムも許してくれ!

(6)



そこで仮想メモリです

 プログラムごとに独立した(比較的大きな)メモリ空間  独立しているからプログラム同士が干渉しあわない  物理メモリサイズ以上の大きさの空間を使える  OSの動作は保護される 等々のメリットがある



昨今の

OS

は全て仮想メモリが利用できます

(7)

「メモリ」って何だろう?



仮想メモリとは

 プロセスごとに用意された仮想のメモリ空間  プロセスは仮想メモリに対して読み書きを行う  OSは仮想メモリアドレスを物理メモリアドレスに変換する



Windows

では

 32ビットの場合、4Gが表現上の最大  OSとプロセスでそれぞれ2GBまで使える

(8)

Address 仮想メモリ Page Director y Page Table 物理メモリ CR3 レジスタ

(9)

「メモリ」って何だろう?

用語 用語 用語 用語 説明説明説明説明 ワーキングセット プロセスが使っている仮想メモリの内、物理メモリに乗っているメ モリページ ページング ワーキングセットの内、あまり使われないメモリをページファイル に書き出す、またはページファイルから物理メモリに書き戻す動 作 TLB (Translation Look aside Buffer) 仮想アドレスと物理アドレスの変換テーブルをバッファリングする 領域。プロセッサ上に存在する ページファイル 物理メモリからページアウトされたデータを待避するファイル

(10)

用語 用語 用語 用語 説明説明説明説明 ヒープ プロセスごとに存在するメモリの「山」。メモリ要求を出すと、適宜 切り出して使える。戻すと山に残っている隣り合ったメモリのかた まりとくっついて、次の要求に備える。Mallocやnewで取られる。 プール カーネルが持っているメモリの「池」。OSやカーネルが使うメモリ。 ページプールや非ページプールなどがある。ページング処理より 高いレベルで動作する場合は非ページプールを使う必要がある。 仮想メモリの状態 Committed/Reserved/Freeの3つがある。利用されている場合は Committed。後から使うので予約しておきたいときはReserved。 perfmon パフォーマンスカウンタ。Windows OSでは標準的にパフォーマ ンス取得に利用される。SQL Serverのカウンタも取得できる。内部 的にはレジストリアクセスし、定期的に計上される値を取得する。

(11)

SQL Server

が使うメモリ



Buffer Pool

8kbで管理され、メモリ空間の大半を占める

 Data Page Cache  Plan Cache  Lock  Sort



Mem To Leave

8kbで収まらないオブジェクトの管理や非定 型な利用が多い  Call Stack  CLR/Xp Buffer Pool Mem To Leave Data Page Cache

Plan Cache Lock

(12)

SQL Server

が使うメモリ



Buffer Pool

の管理方法

 LRU-Kアルゴリズム  よく使われるものはメモリ上に残る  8KBの単位で利用される



Cache Hit

 オブジェクトを要求したとき、そのオブジェクトがメモリ上に あった → Cache Hit!!

(13)

SQL Server

が使うメモリ



バッファプールとディスク

I/O

 LRU-Kアルゴリズムでデータはメモリから追い出される  バッファのデータはデータファイルへ書き込まれる  書き込みはLazywriterが行う



Lazywriter

 定期的にメモリをチェックし、不必要なデータをファイルに 書き出す  メモリ不足(=メモリプレッシャー)になってくるとチェック間隔 が短くなる

(14)

SQL Server

が使うメモリ



仮想メモリの上限

 32ビットの場合、4Gが表現上の最大  2^32 = 4G  32ビットではOSとプロセスでそれぞれ2GBまで使える  ユーザ空間を3GBにすること(4GT)が可能だが非推奨 http://support.microsoft.com/kb/171793/ja  ページテーブル不足、プール不足を招く  64ビットは現時点では事実上の無制限

(15)

メモリ関連の設定



最大サイズと最小サイズ

 Max server memory

 SQL Serverが使うメモリの最大値

 Min server memory

 メモリを縮小していくときの最小値

 実は最もメモリが小さいのは起動直後

 起動直後は

(memory size) < (min server memory) があり得る

Buffer

Pool Buffer Pool Buffer Pool 起動 直後 最大 拡張 縮小 Min server memory Max server memory

(16)

 32bit で4GB以上のメモリを使う設定

 /PAEオプションをつけたOS起動(bcdeditやboot.ini)

 Lock Page in Memory 権限

 SQL Serverの起動アカウントに権限を付与する

 AWE領域を確保するAPI(AllocateUserPhysicalPage)の実行条件となる

 AWE enabled

 SQL ServerがAWE領域を使えるように設定

 Max server memoryの指定

 AWE領域は開放されないので領域確保には上限を設ける

(17)

メモリ関連の設定



AWE

って何?

 AWEはAddress Windowing Extensionsの略で、OSに搭載 された機能の1つ  仮想メモリ空間に「Window」 を作り、物理メモリをマッピン グすることで4GB以上のメモリ を利用できる

 SQL ServerはData Page Cache しかAWE領域を使えない Buffer Pool Data Page Cache Plan Cache Lock Sort AWE Area

(18)



個人的なお勧め

 OSもSQL Serverも64bitを利用する

 Lock Page in Memory権限を付与する

 Max server memoryを指定し、OSに十分なメモリを残す

(19)

メモリ周りのトラブル

 ワーキングセットのトリミング  OSは物理メモリが極端に不足するとワーキングセット(=プロセスが 使っている物理メモリ)を強制的に取り上げる → ワーキングセットのトリミング  Sqlservr.exeだけではなく、他のプロセスもワーキングセットが減少する  64bitOSでよく発生し、パフォーマンス劣化を起こしやすい  回避策

 Lock Page in Memory権限を起動アカウントに与える  Max server memoryを設定する

(20)

 処理量に対してメモリが不足している  大量のバッファが必要になると、SQL Serverはlazywriterがデータファ イルへバッファを書き出す  その結果、バッファだけのデータ参照ができる確率が下がり、パ フォーマンスが劣化する  一見I/Oのネックに見えることもある  回避策  物理メモリを増やす  不必要なデータスキャンが起きていないか調べてみる  システムテストでメモリ不足が起きないか事前にチェックする

(21)

モニタリング

 モニタリングの意義  障害分析、警戒のため何らかのモニタリングが必要  パフォーマンス値は後からは取れない!  モニタリング対象  物理メモリの空き容量  SQL Serverがどれくらい効率的にメモリを再利用しているか  過度なページングが発生していないか  等々。 他にも観点はたくさん  http://msdn.microsoft.com/ja-jp/library/ms176018.aspx

(22)

監視対象 監視対象 監視対象 監視対象 閾値閾値閾値閾値 説明説明説明説明 Memory: Available Bytes OS でFreeであると認識されている物理メ モリの容量 Process(SQL Server): Pages/sec Sqlservr.exe が秒当たりページングした回 数 Process(SQL Server):

Working set Sqlservr.exe

が使っている物理メモリの容

量 SQL Server:

Buffer Manager: Cache Hit Ratio

90%以上 Buffer poolでのキャッシュヒット率。高い ほどメモリが効率的に使われていること を示す

SQL Server:

Buffer Manager: Page Life Expectancy

300以上 Buffer pool上にページが乗っている時間 (=ページの寿命)。高い方がメモリが効 率的に使われていることを示す

(23)

モニタリング

 パフォーマンス値解釈の注意点  閾値超過が起きても必ず問題となるわけではない  アプリケーションが性能要件を満たしていれば何の問題もな い!!必要以上に閾値監視にこだわらない (一瞬の閾値超過でも影響が少なければ無視で良いはず)  注意すべき動作  SQL Serverはメモリの先読みをするので、メモリプレシャーになっ ていてもキャッシュヒット率が高い場合がある

(24)

 仮想メモリと物理メモリの違い

 プロセスが使うのは仮想メモリ。OSが物理メモリに変換

 SQL Serverのメモリコンポーネント

 Buffer PoolとMem To Leave

 メモリ制御のパラメータ

 Max/min server memory, AWE, Lock Page in Memory

 よくあるメモリトラブル

 ページング、ワーキングセットのトリミング、メモリプレッシャー

 モニタリングの方法

(25)

まとめ



本セッションで話さなかった

/

話せなかったこと

 SQL Server内のさらに細かいメモリ割り当ての話  仮想メモリの断片化の話  メモリリークやメモリ破壊の話  OSが持っている特殊なメモリの話  NUMAに関わる話

(26)

参照

関連したドキュメント

Scival Topic Prominence

指標名 指標説明 現 状 目標値 備 考.

一五七サイバー犯罪に対する捜査手法について(三・完)(鈴木) 成立したFISA(外国諜報監視法)は外国諜報情報の監視等を規律する。See

対象自治体 包括外部監査対象団体(252 条の (6 第 1 項) 所定の監査   について、監査委員の監査に

(154kV群馬幹線(金井~群馬)ノンファーム型接続対象エリア25/34 ノンファーム型接続対象エリア 〇群馬県: 沼田市、高崎市、渋川市、 利根郡

・HSE 活動を推進するには、ステークホルダーへの説明責任を果たすため、造船所で働く全 ての者及び来訪者を HSE 活動の対象とし、HSE

このアプリケーションノートは、降圧スイッチングレギュレータ IC 回路に必要なインダクタの選択と値の計算について説明し

さらに, 会計監査人が独立の立場を保持し, かつ, 適正な監査を実施してい るかを監視及び検証するとともに,