web-dev-qa-db-ja.com

サイトのパフォーマンス、キャッシュが適切に機能していない

enter image description here

Performance Logging Module を使用しています。スクリーンショットの上で、奇妙なことに、すべてのページにCache_bootstrapを挿入していることに気付きました。任意のページ(管理テーマとフロントエンドテーマの両方)に移動すると、キャッシュを挿入してからキャッシュを削除します。これは、キャッシュが各ページで設定および破棄され、実際にはキャッシュが発生していないことを意味します。どうすればさらに詳しく説明できますか?現在、サイトのパフォーマンスに取り組んでいるため、その問題を診断します。

enter image description here

パフォーマンスチェックに New Relic も使用しています。また、データベースの負荷が高いことも示しています。

およびmy.cnf情報

enter image description here

8
Mr. J

スライド#85 パフォーマンスプレゼンテーションのMySQLの最大パケットサイズについて説明しているので、その値を増やす必要があります。 SET GLOBAL max_allowed_packet=33554432;または構成ファイル内で変更 https://dev.mysql.com/doc/refman/5.7/en/packet-too-large.html

8
mikeytown2

最大許容パケットサイズは、これが発生している1つの理由である可能性がありますが、この場合はおそらく別の理由であるという複数の理由がわかります。

  1. キャッシュへの書き込みだけでなく、明示的なキャッシュの削除も行われます。キャッシュ書き込みが失敗すると、キャッシュ書き込みが繰り返され、キャッシュミスが繰り返されますが、削除は行われません。
  2. これはcache_bootstrapテーブルです。大きくなる可能性のあるキャッシュがいくつかありますが、それらは通常、そのビンからのものではありません。

このパターンの最も一般的な理由は、すべてのページで発生するvariable_set()呼び出しです。 xhprofを使用するか、xdebugを使用してブレークポイントを設定するか、debug_print_backtrace(DEBUG_BACKTRACE_NO_ARGS)を追加して、これらのキャッシュの削除がどこから行われているかを確認します。そこにvariable_set()の呼び出しが表示されることは間違いありません。

問題は、変数に対して単一のグローバルキャッシュが存在することです。キャッシュへの書き込みが行われるたびにキャッシュが削除され、次のリクエストで{variables}テーブル全体が読み取られ、キャッシュに書き戻されます。

多くの開発者はこれに気づいておらず、.moduleファイルまたはすべてのリクエストで実行される別の場所でvariable_set()を直接呼び出すことにより、「値の保証」のようなことをしています。

3
Berdir

これは単なる仮説ですが、すべてのページの読み込み時にbootstrapキャッシュが再構築される場合、モジュールの一部がモジュールフォルダーに存在せず、システムテーブルにまだ存在する可能性があります。各ページの読み込みdrupalはそれを見つけてbootstrap_cacheを再構築しようとします。

Bootstrap optimizer モジュールを試してください。このようなレコードを見つけて削除するのに役立ちます。

3
Bogdan Tur