MySQLの最大メモリ使用量は、ハードウェア、設定およびに大きく依存します データベース自体。
ハードウェア
ハードウェアは明らかな部分です。 RAMが多いほど、ディスクは高速になります ftw 。しかし、それらの月次または週次のニュースレターを信じないでください。 MySQLは線形にスケーリングしません-Oracleハードウェア上でも。それより少しトリッキーです。
つまり、あなたのに推奨されるものについての一般的な経験則はありません。 MySQLのセットアップ。それはすべて、現在の使用法または予測によって異なります。
設定とデータベース
MySQLは、その動作を最適化するために無数の変数とスイッチを提供しています。問題が発生した場合は、実際に座って(f'ing)マニュアルを読む必要があります。
データベースに関して-いくつかの重要な制約:
- テーブルエンジン(
InnoDB
、MyISAM
、...) - サイズ
- 指標
- 使用法
stackoverflowに関するほとんどのMySQLのヒントでは、5〜8個のいわゆる重要な設定について説明しています。まず、すべてが重要というわけではありません-例:多くのリソースをInnoDBに割り当て、InnoDBを使用しないことは、それらのリソースが無駄になるため、あまり意味がありません。
または-多くの人がmax_connection
を上げることを提案しています 変数-まあ、MySQLがそれらのmax_connections
に対応するためにより多くのリソースを割り当てることも意味することを彼らはほとんど知りません -必要に応じて。より明白な解決策は、DBALのデータベース接続を閉じるか、wait_timeout
を下げることです。 それらのスレッドを解放します。
私のドリフトを捕まえたら、読んで学ぶべきことが本当にたくさんあります。
エンジン
テーブルエンジンは非常に重要な決定です。多くの人は早い段階でそれらを忘れて、突然30GBサイズのMyISAM
と戦っていることに気づきます。 アプリケーション全体をロックしてブロックするテーブル。
MyISAMは最悪だと言うつもりはありません 、ただしInnoDB
MyISAM
とほぼまたはほぼ同じ速さで応答するように調整できます UPDATE
での行ロックなどを提供します 一方、MyISAM
書き込み時にテーブル全体をロックします。
独自のインフラストラクチャでMySQLを自由に実行できる場合は、perconaサーバー
FacebookやGoogleなどの企業からの多くの貢献が含まれているため(彼らはすぐに知っています)、InnoDB
の代わりにPercona独自のドロップインも含まれています 、XtraDB
と呼ばれます 。
percona-server(および-client)のセットアップ(Ubuntuの場合)については、私の要点を参照してください: http://gist.github .com / 637669
サイズ
データベースのサイズは非常に重要です。信じられないかもしれませんが、Intarwebsのほとんどの人は、大規模で強力なMySQLセットアップを処理したことがありませんが、実際に存在します。 「PostgreSQLを使用!!!111」のようにトロールして言う人もいますが、今は無視しましょう。
肝心なのは、サイズから判断して、ハードウェアを決定することです。 80GBのデータベースを1GBのRAMで高速に実行することはできません。
インデックス
そうではありません。必要なインデックスのみを設定し、EXPLAIN
で使用状況を確認する必要があります 。そのMySQLのEXPLAIN
に追加します 本当に限られていますが、それは始まりです。
推奨される構成
これらのmy-large.cnf
について およびmy-medium.cnf
ファイル-私はそれらが誰のために書かれたのかさえ知りません。自分で転がしてください。
チューニング入門書
素晴らしいスタートは、チューニング入門書
です。 。これは、SHOW VARIABLES
の出力を受け取るbashスクリプト(ヒント:Linuxが必要です)です。 およびSHOW STATUS
そしてそれをうまくいけば有用な推薦に包みます。サーバーがしばらく稼働している場合は、それらのベースとなるデータがあるため、推奨事項の方が適しています。
ただし、チューニングプライマーは魔法のソースではありません。それでも、変更が提案されているすべての変数を確認する必要があります。
読書
mysqlperformanceblog をお勧めします。 。これは、MySQL関連のあらゆる種類のヒントの優れたリソースです。また、MySQLだけでなく、適切なハードウェアについてもよく知っているか、AWSなどのセットアップを推奨しています。これらの人は長年の経験があります。
もう1つの優れたリソースは、planet-mysql です。 もちろん。