1

2GB メモリ VPS で mysql の実行を最適化しようとしています。mysqltuner を使用しましたが、次の推奨事項に対処する方法がよくわかり ません。誰かが説明を手伝ってくれますか? ありがとう。

-------- Performance Metrics -------------------------------------------------
[--] Up for: 3h 17m 7s (49K q [4.190 qps], 1K conn, TX: 70M, RX: 7M)
[--] Reads / Writes: 60% / 40%
[--] Total buffers: 314.0M global + 6.4M per thread (300 max threads)
[!!] Maximum possible memory usage: 2.2G (119% of installed RAM)
[OK] Slow queries: 1% (785/49K)
[OK] Highest usage of available connections: 85% (256/300)
[!!] Cannot calculate MyISAM index size - re-run script as root user
[OK] Query cache efficiency: 92.4% (38K cached / 41K selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 633 sorts)
[!!] Temporary tables created on disk: 45% (315 on disk / 699 total)
[OK] Thread cache hit rate: 74% (359 created / 1K connections)
[OK] Table cache hit rate: 95% (141 open / 148 opened)
[OK] Open file limit used: 12% (189/1K)
[OK] Table locks acquired immediately: 99% (6K immediate / 6K locks)

-------- Recommendations -----------------------------------------------------
General recommendations:
    Add skip-innodb to MySQL configuration to disable InnoDB
    MySQL started within last 24 hours - recommendations may be inaccurate
    Reduce your overall MySQL memory footprint for system stability
    When making adjustments, make tmp_table_size/max_heap_table_size equal
    Reduce your SELECT DISTINCT queries without LIMIT clauses
Variables to adjust:
  *** MySQL's maximum memory usage is dangerously high ***
  *** Add RAM before increasing MySQL buffer variables ***
    tmp_table_size (> 32M)
    max_heap_table_size (> 32M)
4

2 に答える 2

2

" [!!] Maximum possible memory usage: 2.2G (119% of installed RAM)"

これは、基本的に MySQL に嘘をつき、2.2G > 2G という実際よりも多くのメモリを使用できると伝えたことを意味します。これは数週間または数か月間機能する可能性がありますが、それは悪い考えです. 使用するように指示したメモリが MySQL にない場合、MySQL は可能な限り最悪のタイミングでランダムにクラッシュします。

/etc/my.cnf ファイルに「skip-innodb」を追加すると、メモリを節約できる場合があります。InnoDB を使用していないと仮定します。これは接線ですが、データを MyISAM から InnoDB に変換することを強くお勧めします。MyISAM は古い技術です。InnoDB はより最新のエンジンです。

メモリを節約するために下げることができるものを my.cnf で探します。私がよく最初に目にするのは、未使用の接続です。接続の 15% が使用されていませんが、「24 時間以内に開始されました」という警告を聞いてください。通常、my.cnf 内の (未使用の) 接続を下げると、多くのメモリが節約されます。あなたのアプリケーションが何をするのかはわかりませんが、256 接続というのは高そうに思えます。したがって、アプリケーションが本当に多くの接続を必要としていることを確認します。サーバー上に 256 の PHP の子があり、12 の子を大幅に減らすことができます。より多くの子供たち != より速い応答。PHP の子が 12 人いる場合、必要なデータベース接続は 13 だけかもしれません。

119%は明らかに高すぎますが、96%も高すぎると思います。(これが、ここで使用するのに最適な % を探している理由です。) 明らかに、オペレーティング システムにもメモリが必要です。オペレーティング システム用にどれだけのメモリを未使用のままにしておくべきか教えてください。まだ質問されていない場合は、ここで別の質問として質問します。(これを行う場合は、ここにリンクを投稿してください。) または、mysqltuner の推奨事項を聞くこともできます。

ここでテストするだけです:

" [!!] Maximum possible memory usage: 3.4G (88% of installed RAM)"

my.cnf 設定を再度下げます。

" [!!] Maximum possible memory usage: 3.3G (86% of installed RAM)"

それでも高すぎる?

" [OK] Maximum possible memory usage: 3.2G (83% of installed RAM)"

于 2013-07-13T23:50:20.510 に答える
0

mysqltuner からのアドバイスは参考程度にしてください。可能な最大メモリ使用量について誤った見積もりを行っています。また、正確な見積もりを行うことはできません。

説明については、 http://www.percona.com/blog/2009/02/12/how-much-memory-can-mysql-use-in-the-worst-case/を参照してください。

確かに、接続ごとにある程度のメモリが使用されますが、その程度は異なります。常に 300 の接続が使用されているとは限りません。また、使用されている場合でも、クエリが常に同時に実行されるとは限りません。また、使用されている場合でも、クエリは常に可能なすべてのバッファーを最大サイズまで使用するとは限りません。

Mysqltuner は、決して起こらない理論上の最大メモリ使用量について警告しています。

別の見方をすると、私は何百もの MySQL 構成を分析しましたが、理論的には、それらのすべてがサーバー上の物理 RAM よりも多くのメモリを割り当てることができました。

于 2014-10-06T06:29:27.057 に答える