まとまりのないブログ

something which something is something

linux mysql メモリ

ECC機能付きメモリとECC機能付きではないメモリの違い

投稿日:2009年4月12日 更新日:

ecc-memメモリには様々な規格があるが、ECC機能が有るか無いかという違いもある。メモリのECC機能とは簡単に言うとデータのエラーをチェック・修正をする機能のことで、サーバなどの稼動に信頼性が求められるマシンにおいてECC機能付きのメモリが使われる。デスクトップ用PCやノートPCではnon-eccのメモリが使われることが多い。価格面ではECC機能付きのメモリの方が割高であり、私が調べたところでは現在の相場でECC機能付きのメモリは最も安くてkingston製のddr2 2GB×2枚で7000円程度。ちなみにECC機能無しのデスクトップ用PCメモリでは同じくkingston製のddr2 2GB×2枚で4000円程度。右のサンプル画像の上がECC機能無し、下がECC機能有り。上のメモリは高さが半分ほどしかないが、二つとも同じ規格のDDR2 240pinのメモリ。メモリにあるラベルを見た限りではECC機能有りかどうか判別がつく記述は見当たらなかった。メモリ表面のチップの数に違いがあり、ECC機能付きのメモリは1個多いのが確認できる。

私が現在使っているやたらとフリーズを連発してくれて勉強させてくれるDell poweredge T105は仕様ではECC機能付きのメモリを使うように明記されている。知りたいのは、ECC機能付きのメモリとECC機能無しのメモリを混在させて使用することができるのかどうかという点。また、ECC機能付きのメモリを使うように仕様として明記されているサーバマシンでECC機能無しのメモリを使うことはできるのかどうかという点。有るのか無いのかわからないECC機能はどうでもよくて、普通に動かすことができればそれでいいのだけれども、その辺りの詳しい実験をしているサイトの情報というものは見つからなかった・・・。もう少しgoogleで検索してそれでも見つからない場合は人柱になるのも仕方がない。ただメモリを付けて動作確認をするだけなんだが。

ECC機能付きのメモリは高いんでね。そしてECC機能無しメモリを間違って買ってしまってそれを無駄にしたくないというのも。

調べていたらメモリにはUnbufferedとregisteredという規格も存在する模様。一般的なデスクトップ用PCやノートPCではUnbuffered(アンバッファード)のメモリを使い、サーバ用マシンではregisteredという規格のメモリを使う。これもやはりサーバ用のregisteredの規格のメモリの方が高価で安定動作をするようになっている。らしい。
また、同じ規格のメモリを2枚使うことでデュアルチャンネルが有効になり、1枚での使用よりも速度が上がるとのこと。ただ、あまり意味は無いというのが定説となっているようで、速さはベンチマークで測定した時に実感をするという程度のもの。

動作テスト

マシン
Dell poweredge T105
OS
linux ubuntu amd64 コアシステム
マシンのメモリの規格
ECC DDR2 667/800 SDRAM バッファ無し DIMMソケット×4(システム最大8GB)
メモリ(ECC機能有り)
キングストン KVR800D2E5K2/4G (DDR2 PC2-6400 2GB 2枚組 ECC)
メモリ(ECC機能無し)
キングストン KVR800D2N6K2/4G (DDR2 PC2-6400 2GB 2枚組)

ECC機能無しのkingston製メモリ2GB×2枚のみでの起動実験

nakahira@ubuntu-dell:~$ cat /proc/meminfo
MemTotal:      4054752 kB
MemFree:       3946672 kB
Buffers:          4660 kB
Cached:          27428 kB
SwapCached:          0 kB
Active:          21844 kB
Inactive:        20100 kB
SwapTotal:     6164472 kB
SwapFree:      6164472 kB
Dirty:             804 kB
Writeback:           0 kB
AnonPages:        9964 kB
Mapped:           4740 kB
Slab:            16752 kB
SReclaimable:     5600 kB
SUnreclaim:      11152 kB
PageTables:       1276 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
WritebackTmp:        0 kB
CommitLimit:   8191848 kB
Committed_AS:    20504 kB
VmallocTotal: 34359738367 kB
VmallocUsed:     30060 kB
VmallocChunk: 34359707699 kB
HugePages_Total:     0
HugePages_Free:      0
HugePages_Rsvd:      0
HugePages_Surp:      0
Hugepagesize:     2048 kB
DirectMap4k:      9088 kB
DirectMap2M:   4184064 kB

メモリの認識は問題なし。
データベースソフトウェア(mysql)の起動と運用は特に問題無し。
JAVA・Tomcatアプリケーションの動作は特に問題なし。
起動できない・動作しないソフトウェアは特に見つからず。
OSがフリーズをするという現象は動作テスト中には未発生。

ECC機能付きのkingston製メモリ2GB×2枚と、 ECC機能無しのkingston製メモリ2GB×2枚を混在させての起動実験

nakahira@ubuntu-dell:~$ cat /proc/meminfo
MemTotal:      8183420 kB
MemFree:       8067900 kB
Buffers:          4664 kB
Cached:          27436 kB
SwapCached:          0 kB
Active:          21936 kB
Inactive:        20156 kB
SwapTotal:     6164472 kB
SwapFree:      6164472 kB
Dirty:             808 kB
Writeback:           0 kB
AnonPages:       10088 kB
Mapped:           4740 kB
Slab:            16984 kB
SReclaimable:     5752 kB
SUnreclaim:      11232 kB
PageTables:       1584 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
WritebackTmp:        0 kB
CommitLimit:  10256180 kB
Committed_AS:    20500 kB
VmallocTotal: 34359738367 kB
VmallocUsed:     37248 kB
VmallocChunk: 34359700531 kB
HugePages_Total:     0
HugePages_Free:      0
HugePages_Rsvd:      0
HugePages_Surp:      0
Hugepagesize:     2048 kB
DirectMap4k:      9088 kB
DirectMap2M:   8378368 kB

メモリの認識は特に問題は無し。
データベースソフトウェア(mysql)の起動と運用は特に問題無し。
JAVA・Tomcatアプリケーションの動作は特に問題なし。
起動できない・動作しないソフトウェアは特に見つからず。
OSがフリーズをするという現象は動作テスト中には未発生。

結果

約30分程度の動作確認のテストでは問題は見つからずに正常に稼動することはできた。メモリ8GBを積んだ状態で問題が見つからないので、とりあえずこのまま稼動させ続けてみることにする。もし異常があればフリーズしたりデータベースのデータがおかしくなったりsyslogにエラーが記録されたりと何かしら兆候が見つかると思うので、その辺りを気にしながら常時稼動をしてみる。
ECC機能有りと無しのメモリを混在させているので、おそらくはECC機能は無しとして稼動することになるんじゃないだろうかと思う。容量とクロックは一緒のメモリで違いはECCだけなので、それが問題になるかどうかがわかるまではしばらく時間がかかりそう。今のところ言えるのは、一応正常に動いているということ。

3日間連続稼動経過後(2009年4月16日追記)

3日間連続稼動をしてみたところ、動作に異常は無し。

さらに追記(2009年4月24日)

ぶっ続けで連続稼動をしてみたところ、動作に異常は発生せず。これだけ連続稼動させて異常が発生しないところを見ると、混在しての使用は特に問題は無しということでいいと思う。ならばECC機能は別に無くてもいいということになってしまうが、あの一個余分に付いたチップにはきっと重大な役目をもっているのだろう。そうに違いない。(多少誇張あり)

あと、以前から主張しているがノーブランドのバルク品のメモリはECC機能があろうとなかろうとやめておいた方がいい。今回のテストではkingston製のメモリを使ったが、個人的にはこのメーカーのメモリの品質は信頼している。チップにはELPIDAとKingstonとある。

Dell PowerEdge T100の場合

Dell PowerEdge T100というT105にそっくりなマシンをテストする機会を得たので手短にメモリのテスト結果をメモしておく。T100 と T105の大きな違いは搭載されているCPUのメーカが異なるというところ。T100はインテルのcore 2 duoが搭載されていて、T105はAMDのopteronが搭載されている。あと、マシン稼動音の騒音具合はT105に比べて非常にうるさい。ラックサーバ並みの騒音で、たとえるなら掃除機を強で動かしたときの騒音に匹敵する。T105のような静音を期待していると面食らうと思われる。linuxのubuntuをインストールしてみると静音マシンとなってしまった・・・。windowsだとダメなんだろうか?あれ? →(後日談 ケースの蓋をきっちり閉めてから電源を入れたら爆音は収まった)

さて、T100でのECCメモリの混在について。軽くテストをしてみたところ、なんとT100ではECCメモリとnon-ECCメモリの混在はできなかった。混在した状態で起動をしてみるとビープ音が鳴り続けてbiosの画面が現れなかった。ECCメモリのみでは起動はできた。non-ECCメモリのみでも起動はできた。しかし、ECCメモリとnon-ECCメモリを混在しての起動はできなかった。T100はT105に比べてメモリの相性がシビアであるという印象を受ける。マザーボードのレイアウトが微妙にT105とは異なっており、メモリを差し込むソケットは4つあるが、差し込む順番は少し特殊で決められた通りに挿さなければならないようになっている。

後日談(1年半後くらい) ECCメモリとNon-ECCメモリの違い

あれからそれぞれのメモリをデータベースサーバにて使ってみたところ,ECCとNon-ECCでの違いが顕著に現れた。(サーバでECCとNon-ECCを混在させて運用はちょっと気持ちが悪いので混在はやめるようにしている) 
24時間常時稼働で1秒間に数十回程度の書込と読込を頻繁に行うMysql専用サーバにてNon-ECCメモリのみで使ってみたところ,データの不整合が起こってテーブルがクラッシュするという事態が何度か(2~3日に一度ほど)あった。ECCメモリのみ使ったデータベースサーバでは,観測した範囲(半年以上)では,そういったテーブルのクラッシュのようなことは起こっていない。割とハードな使い方をしていたが,ECCメモリ搭載のサーバがあまりにも快調でそれが普通になってしまったため,メモリも安くなったことだしNon-ECCメモリ(Transcend JM1333KLN-8GK Hynixチップで品質はそこそこなメモリだと思うが・・・)で新サーバを組んで移行してみるかと気楽に考えていたらやたらとクラッシュするものだから戸惑った。ECC機能は伊達じゃないというか,個人的な経験を元にした結論では,読込と書込みを頻繁に行うデータベースサーバにはECC機能付きのメモリは必須であると思う。読込のみのデータベースサーバならNon-ECCでもいけそうだが,それは未検証。

追記

いや,そういえば以前ElpidaのNon-ECCメモリでも同様な使い方でデータベースサーバを運用したことがあったが,その時は特に今回のようなテーブルクラッシュするというトラブルはなかったような気がする・・・。なにがなにやらわからない。長々と書いておいて結局ECC機能は働いているのかいないのかというのは,この程度の負荷をかけた使用方法ではわからないとしか言えない。Hynixチップが品質的にいまいちなだけかもしれないし,もっとほかのメモリでもテストしないことにはECCメモリだから安定している,という結論は出ない。わかったのはElpidaチップのメモリは信頼できるということぐらい・・・。とほほ。

追記

Trancendのチップメーカー不明のECCメモリでも試してみた(安かったから)。問題無く稼働できている。データベースサーバにはECCメモリを絶対推奨。それがElpidaチップなら尚良い。

まとめ

Q.DBサーバでECCメモリ使わなかったらどうなるの?
A.データベースのテーブルが壊れる

-linux, mysql, メモリ
-,

執筆者:


  1. 匿名 より:

    参考になりました。ありがとう!

  2. 匿名 より:

    同一PC内で2つのソケットにECCありとECCなしを使うと不具合が出ますか?

  3. nakahira より:

    普段使いのパソコンであれば普通に使うことができるかもしれません。常時稼働・高負荷・高アクセスのサーバでECCは必要とされるように思います。

  4. 匿名 より:

    T105を検討中の者です。とても参考になりました。

  5. 匿名 より:

    参考になりました。ありがとうございます。

  6. 匿名 より:

    勉強させて頂きました。

  7. 匿名 より:

    勉強になりました!

  8. 匿名 より:

    参考になりました。

  9. 匿名 より:

    勉強になりました。ありがとうございます!!

  10. ajeropuromotion より:

    最近になって疑問に思ったことを検索してみたら本当に長い期間をかけて検証されてる方が居られるのですね、
    大変勉強になりました。
    メモを取っておきました。

  11. 匿名 より:

    なるほど!
    有り難うございました。勉強になります。

  12. 匿名 より:

    検証ありがとうございました。
    初めてECCのメモリを買ってみようか悩んでいたところです。

  13. 匿名 より:

    メモリエラーに気づけないので、ECCメモリ構成のPCを購入することにしました。
    データ破損は嫌ですからね。

  14. ヨッシー より:

    memoryについての実験結果ですので、大変参考になりました。ありがとうございます。

  15. んけけ より:

    大変参考になりました!

nakahira へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

no image

HAPROXYを使ってmysqlサーバーの負荷分散

備忘録 listen mysql-db bind *:3306 mode tcp option mysql-check user haproxy1 balance roundrobin server …

no image

sennaのインストール

かなり嵌ったので備忘録。sennaをインストールする際、configureのオプションを指定しないと、デフォルトの文字コードはeuc-jpでconfigureをすることになる。mecabで文字コードを …

no image

mysqlのテーブルのクラッシュ

/usr/local/mysql/bin/myisamchk –recover –force –sort_buffer_size=2048M /usr/local/mysql/data/auc/ …

no image

ssdでデータベースサーバを構築してみた

現状ではまだ手を出すのは早いかもしれないssdでデータベースサーバを構築してみた。実験的な意味で。

no image

mroongaよりsennaの方が検索速度が速い場合がある

DBのレコード件数1800~2000万件程度のテーブルで全文検索した場合に、mroongaを使って検索した時にやたら時間がかかった。大体3秒~10秒ほどselect count(*)を実行するのにかか …