質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

16584閲覧

swapの使われ方について

tk_flavor

総合スコア104

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

1クリップ

投稿2016/07/22 09:36

編集2016/07/22 09:44

mysqlが動いているdbサーバでのswapの使い方について質問します

50GBのメモリが搭載されているサーバで、swap領域は4GBに設定されています。
このサーバでalterなどをクエリ実行した後に、使われるswap領域が500MB⇒2.2GBまで増加しました
swapが使われているのですが、実際のメモリ空きは25GB程度あります

私の中では、物理メモリいっぱいまで使われた時に初めてswap領域が使われる事になるのかと
思っていますが、25GB程度のメモリ空きがあるのにswap使われた原因がよくわかりません

そこで、4点ほど質問します
冗長となりますがよろしくお願いします


  • 1.

システム領域でのメモリ空きがあるのに、swapが使われた理由は、
msyql側に割り当てられたメモリが足りなかった事でswapが使われたと考えていいでしょうか


  • 2.

alterクエリ発行作業が完了後、vmstatコマンドsoの値は0です。
クエリ作業にあたってswap outが使われたならが、swap領域が解放されていくと思うのですが、
swapのused領域は解放されていきません
使われたswap領域は解放していかないのでしょうか


  • 3.

そもそも、物理メモリ50GBに対して4GBのswap領域しか割り当てていない事も少しは問題があるのかと思いますが、
10年前のように、物理メモリの2倍をswap領域に割り当てる事が今も推奨されていると考えていいのでしょうか
https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/ch-swapspace.html#s1-swap-what-is
を見ると、

Swap は、物理 RAM サイズが 2 GB までは、物理 RAM の2倍として、2 GB を超えると、1物理 RAM ごとに同量を追加します

とあります。みなさんも運用しているサーバで2×2+物理メモリ量をswapに割り当てているのでしょうか


  • 4.

swap領域を8GBまで拡張したところ、拡張前後のfreeコマンド結果を確認したところ、
Mem: usedの値が拡張後に6GB程度増加しました。

拡張後にmemory used領域が増加した理由は何が考えられるのでしょうか

▼拡張前

[root@abc ~]# free -m total used free shared buffers cached Mem: 50319 40420 10899 0 153 3770 -/+ buffers/cache: 36495 15824 Swap: 4095 2253 1842

▼拡張後
[root@abc ~]# free -m
total used free shared buffers cached
Mem: 50319 46123 4096 0 154 7426
-/+ buffers/cache: 36542 15777
Swap: 8191 2253 5938

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/07/22 09:44

HDD と メモリを混同していませんか?
tk_flavor

2016/07/22 10:03

すみません どういう事でしょうか? sarのログから当該時間帯のメモリ使用率を見ますと %memusedが99%になっていました。 物理メモリの容量をあけるために当面の間必要無い内容をハードディスクに書き出された事でswapが使われたと思っています
退会済みユーザー

退会済みユーザー

2016/07/22 10:05

「50GBのメモリが搭載されているサーバで、swap領域は4GBに設定されています。」
tk_flavor

2016/07/22 10:15

すみません 何をおっしゃりたいのか、把握出来ません ベンダーから導入されたサーバで、freeコマンドを打つとそうなっていました。
tk_flavor

2016/07/24 15:37

何をおっしゃっているのでしょうか? 理解できません
guest

回答1

0

ベストアンサー

私の中では、物理メモリいっぱいまで使われた時に初めてswap領域が使われる事になるのかと

思っていますが、25GB程度のメモリ空きがあるのにswap使われた原因がよくわかりません

まずここが誤りです。
一次ソースがすぐに見つからなかったので提示出来なくて申し訳ないのですが、
使用頻度の低いメモリ上のデータについてメモリが余っていてもswapに退避されることがあります。

1.

システム領域でのメモリ空きがあるのに、swapが使われた理由は、
msyql側に割り当てられたメモリが足りなかった事でswapが使われたと考えていいでしょうか

MySQLから見た場合は割り当てられたメモリはあくまで仮想メモリ(物理+swap)であり、
割り当てられたメモリ上限を超えた分をswapで賄うというようなことは発生しません。
「割り当てたメモリ上限」の設定に誤解があり、実は使用メモリが物理メモリを超えていたという事はありえると思います。

2.

alterのクエリ作業にあたってswap outが使われたなら、当該作業が完了後、vmstatコマンドsoの値は
0なのですが、swap領域が解放されていくと思うのですが、swapのused領域は解放されていきません
使われたswap領域は解放していかないのでしょうか

swapはOSがいい感じのタイミングで開放するか、明示的に開放するまでは解放されなかったと思います。
MySQLから見た場合、swapを使ったかどうかは意識されないので処理が終わった直後に開放されるかどうかはOS次第です。

3.

そもそも、物理メモリ50GBに対して4GBのswap領域しか割り当てていない事も少しは問題があるのかと思いますが、

私の場合は50GBのメモリを積むサーバであれば、そもそもswap-outが発生しないようにチューニングするので、その倍の100GBのswapを確保するようなことは無いかと思います。
何らかの理由でチューニングが不可能であれば、出来るだけ高速なストレージをswapとして用意するしかないでしょうね。

4.

swap領域を8GBまで拡張したところ、拡張前後のfreeコマンド結果を確認したところ、
Mem: usedの値が拡張後に6GB程度増加しました

わかりません。が、そもそもUsedは
バッファキャッシュやページキャッシュなどOSがディスクキャッシュのために使用しているメモリも含まれる数値なので、メモリの直接の空き容量ではありません。
自由に使えるメモリ量としてはfreeが妥当に近い(カーネル3.14および2.6.27以降のfreeで表示されるavailableの方が正確)で、こちらはあんまり変わっていないので、OSが気を利かせて何かキャッシュしてくれた可能性が高いと思われます。

投稿2016/07/22 10:02

編集2016/07/22 10:04
tanat

総合スコア18709

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tk_flavor

2016/07/22 10:13

ご回答ありがとうございます >私の場合は50GBのメモリを積むサーバであれば、そもそもswap-outが発生しないようにチューニングする 今回、max_allowed_packetを開発側の希望で上げました この設定変更前は大幅にswapが使われた事はなかったと記憶しています 仮説レベルですが、max_allowed_packetを見直してみます >Usedは バッファキャッシュやページキャッシュなどOSがディスクキャッシュのために使用しているメモリも含まれる数値 はい。LinuxOSでは、実際のメモリ空き容量はfree+buffer+cacheであると認識していますが、swap拡張後にusedの使用率が上がりましたので、 これが何故なのかと疑問を抱きました
tanat

2016/07/22 10:19

max_allowed_packetの詳細な挙動は確認していないのですが、 性質からするとMySQL全体のメモリ使用量を制限するものではなく、 並列でクエリが発行された場合、クエリ数*max_allowed_packet分だけメモリ使用量は上がってしまいそうな気がしますね。
tanat

2016/07/22 10:30

> はい。LinuxOSでは、実際のメモリ空き容量はfree+buffer+cacheであると認識していますが、 厳密には違います。 http://nopipi.hatenablog.com/entry/2015/09/13/181026 > swap拡張後にusedの使用率が上がりましたので、これが何故なのかと疑問を抱きました すみません、質問の意図は把握しましたが、原因はわかりません。 以下は単なる想像です。 仮想メモリが増えたことでOSが何かいい感じにキャッシュしようと思ったのかもしれませんし、拡張前後に実は何か他の作業が並行で行われていてusedが増えた可能性もあるかなと思います(拡張前後の状況は質問から読み取れないので、可能性としてです)。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問