Pantheonホスティングアカウントでnewrelicパフォーマンスモニタリングを行っています。 「遅いSQL」レポートが表示されますが、どのページ、ビュー、またはモジュールがSQLステートメントを生成しているかはわかりません。
例えば:
SELECT node.nid AS nid、node.title AS node_title、users_node.name AS users_node_name、users_node.uid AS users_node_uid、node.created AS node_created、 '?' AS field_data_field_photo_node_entity_type FROMノードノードINNER JOIN users users_node ON node.uid = users_node.uid LEFT JOIN field_data_field_photo_topic field_data_field_photo_topic ON node.nid = field_data_field_photo_topic.entity_id AND field_data_field_photo_topic.id_field_photo_topic_photo_topic_photo_topic_photo WHERE((((node.status =:db_condition_placeholder_?)AND(users_node.uid =:users_uid?))AND(((node.type IN(:db_condition_placeholder_?))AND(field_data_field_photo_topic.field_photo_topic_tid IS NULL ))))ORDER BY node_created DESC LIMIT?オフセット?
どうすればその情報を入手できますか?
(あなたの場合のように)クエリがViewsモジュールから実行される場合、そのクエリを実行するビューを探すことができます。
Admin/structure/views/settingsに移動し、「SQLクエリを表示」を選択します。それでも問題が解決しない場合は、[ライブプレビュー中にレンダリング中に実行された他のクエリを表示する]オプションもあります。
たとえば、これはトラッカービューで取得した出力です。
Admin/structure/views/settings/advancedには、次の説明がある「すべてのSQLクエリにビューのシグネチャを追加する」もあります。
ビューが生成するすべてのクエリには、ビューの名前が含まれ、SELECT句の最後に文字列として「view-name:display-name」が表示されます。これにより、データベースサーバーログでのビュークエリの識別が簡単になりますが、トラブルシューティングの場合にのみ使用してください。
前の例では、クエリは次のようになります。 ('tracker:default' AS view_name
一部。)
SELECT node.type AS node_type, node.title AS node_title, node.nid AS nid, node.language AS node_language, users_node.name AS users_node_name, users_node.uid AS users_node_uid, node_comment_statistics.comment_count AS node_comment_statistics_comment_count, node_comment_statistics.last_comment_timestamp AS node_comment_statistics_last_comment_timestamp, history.timestamp AS history_timestamp, node.created AS node_created, node.changed AS node_changed, 'tracker:default' AS view_name
FROM
{node} node
LEFT JOIN {users} users_node ON node.uid = users_node.uid
INNER JOIN {node_comment_statistics} node_comment_statistics ON node.nid = node_comment_statistics.nid
LEFT JOIN {history} history ON node.nid = history.nid AND history.uid = '1'
WHERE (( (node.status = '1') ))
ORDER BY node_comment_statistics_last_comment_timestamp DESC
LIMIT 25 OFFSET 0
あなたのログは MySQL Slow Query Log からの出力であると思います。ここで最終的に何が起こるかはサーバーの構成によって異なりますが、一般的な原因は次のとおりです。
私の提案は、タイムスタンプ(開始時間)をApacheのaccess_logに一致させてページを取得することです。次に、 Devel モジュールを使用して、admin/config/development/develから「クエリログの表示」を有効にします。これにより、クエリが記録され、実行時間とともにログに記録されます。
その悪いクエリはビューに関連付けられているようです。これらについては、[詳細設定]ページで[すべてのSQLクエリにビューの署名を追加]を有効にします。これを行うと、どのビューが遅いかを特定できます。
「遅さ」を解決するには、クエリをコピーして手動で編集し、パラメータを追加します。次に、MySQLツールを開き、 EXPLAIN
ステートメントを使用します。それがあなたに伝えていることを見て、そこから進んでください。