4

最適なパフォーマンスが得られるようにMagentoDBを調整しようとしています。

私はnginx、php-fpm、mysqlを4GB RAM、4GBRAMを搭載した8CPUコア仮想マシンで実行しています。

Mysql Tuning Primerを実行しましたが、テーブルキャッシュを除けばすべてが良好に見えます。

TABLE CACHE
Current table_open_cache = 1000 tables
Current table_definition_cache = 400 tables
You have a total of 2510 tables
You have 1000 open tables.
Current table_cache hit rate is 3%
, while 100% of your table cache is in use
You should probably increase your table_cache
You should probably increase your table_definition_cache value.

とmysqltunerから

[!!] Table cache hit rate: 9% (1K open / 10K opened)
[!!] Query cache efficiency: 0.0% (0 cached / 209 selects)

my.cnfファイルの関連設定:

table_cache            = 1000
query_cache_limit = 1M
query_cache_size        = 64M

問題は、table_cacheを何に増やしても、ほとんどすぐに消費されるようです。これはMagentoにとって正常ですか?異常に高いようですか?

これを改善するために私ができることについて誰かが何かヒントがありますか?

ありがとう、

エド

4

1 に答える 1

1

MySQL 構成のクエリ キャッシュ タイプの設定を確認します。

http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_query_cache_type

0 または 2 に設定すると、クエリをキャッシュしないか、キャッシュするように特に要求したクエリのみをキャッシュします。つまり、Magento は、キャッシュされたクエリ結果を明示的に要求する必要があります (そうするかどうかはわかりません)。1 に設定すると、クエリ キャッシュを明示的に要求しないク​​エリを除くすべてのクエリがキャッシュされます。

テーブル キャッシュは、開いている可能性のあるファイル ポインターを参照します。かなり早く消費される可能性があり、必要に応じて未使用のエントリをロールオフします。MySQLのドキュメントから:

table_cache および max_connections システム変数は、サーバーが開いたままにしておくファイルの最大数に影響します。これらの値のいずれかまたは両方を増やすと、プロセスごとに開いているファイル記述子の数に対してオペレーティング システムによって課せられた制限に達する可能性があります。多くのオペレーティング システムでは、開いているファイルの制限を増やすことができますが、その方法はシステムによって大きく異なります。オペレーティング システムのマニュアルを参照して、制限を増やすことができるかどうか、およびその方法を判断してください。

table_cache は max_connections に関連しています。たとえば、200 の同時実行接続の場合、少なくとも 200 * N のテーブル キャッシュ サイズが必要です。ここで、N は、実行するクエリの結合ごとのテーブルの最大数です。また、一時テーブルとファイル用にいくつかの追加のファイル記述子を予約する必要があります。

オペレーティング システムが、table_cache 設定によって示されるオープン ファイル記述子の数を処理できることを確認してください。table_cache の設定が高すぎると、MySQL はファイル記述子を使い果たし、接続を拒否し、クエリの実行に失敗し、信頼性が非常に低くなる可能性があります。また、MyISAM ストレージ エンジンでは、開いている一意のテーブルごとに 2 つのファイル記述子が必要であることも考慮する必要があります。--open-files-limit 起動オプションを mysqld に使用して、MySQL で使用可能なファイル記述子の数を増やすことができます。セクションC.5.2.18「'File' Not Found および同様のエラー」を参照してください。

開いているテーブルのキャッシュは、table_cache エントリのレベルで保持されます。デフォルト値は 64 です。これは、mysqld の --table_cache オプションで変更できます。MySQL はクエリを実行するために一時的にこれよりも多くのテーブルを開く場合があることに注意してください。

次の状況では、MySQL は未使用のテーブルを閉じ、テーブル キャッシュから削除します。

キャッシュがいっぱいで、スレッドがキャッシュにないテーブルを開こうとした場合。

キャッシュに table_cache より多くのエントリが含まれており、キャッシュ内のテーブルがどのスレッドにも使用されていない場合。

テーブルのフラッシュ操作が発生したとき。これは、誰かが FLUSH TABLES ステートメントを発行するか、mysqladmin flush-tables または mysqladmin refresh コマンドを実行したときに発生します。

テーブル キャッシュがいっぱいになると、サーバーは次の手順を使用して、使用するキャッシュ エントリを見つけます。

現在使用されていないテーブルは、使用頻度の低いテーブルから順に解放されます。

新しいテーブルを開く必要があるが、キャッシュがいっぱいでテーブルを解放できない場合、キャッシュは必要に応じて一時的に拡張されます。キャッシュが一時的に拡張された状態で、テーブルが使用された状態から使用されていない状態になると、テーブルは閉じられ、キャッシュから解放されます。

于 2012-10-11T16:35:10.353 に答える