サポート » その他 » サーバー応答時間が改善できません><

  • 解決済 batasan

    (@batasan)


    600万件のpostデータのインデックスページの表示が遅くて困っています。

    ログイン時はサーバー応答速度が約1~7秒ほど(大体3秒以内)でそれほど問題はないのですが、
    未ログイン時は10~110秒ほど(大体20~30秒)かかります。

    上記の数字はプラグインの「Debug Bar」などで遅いクエリなどの改善を試みた結果です。
    なおクエリなどの計測時間はおおよそ以下になります。
    ——————————————–
    合計クエリー時間:100~250 ms
    TOTAL EXECUTION TIME:200~400 ms
    ——————————————–

    プラグインも一つずつ無効にして確認しましたがほとんど速度に変化はありませんでした。
    index.phpを空にしても未ログイン時の場合、10秒ほど応答に時間がかかります。
    サーバー応答速度は「PageSpeed Insights 」やブラウザの「network」での計測時間です。
    インデックスページ以外は「PageSpeed Insights」でほぼ「medium」か「good」の評価になります。

    どなたかログインしていない状態で応答が遅い原因がわかる方がおられましたらご教授お願い致します。

    ——————————–
    バージョン:
    WordPress 4.9.6
    使用プラグイン:
    Simple WordPress Membership
    Multi Device Switcher

    ※ログインでの速度の変化は「wordpress」のものとなります。「Simple WordPress Membership」へのログインは関係ありませんでした。

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • CG

    (@du-bist-der-lenz)

    「600万件のpostデータのインデックス」に時間がかかるのでしょう。軽量化したサイトと比較して、サーバースペックを検討する必要にあるのでしょう。

    トピック投稿者 batasan

    (@batasan)

    ご返信ありがとうございます。

    ログイン状態ではindex.phpを表示するとサーバー応答時間がほぼ1~7秒以内なのですが、ログアウトして表示すると20~110秒ほど応答に時間がかかります。その後ログインして再び表示すると1~7秒ほどになります。さらにログアウトすると20~110秒ほどかかります。「chrome」「IE」で試しましたが結果は同じです。

    おそらく未ログイン時には600万件のポストデータを検索しているクエリが存在すると思われるのですが、「Debug_bar」はログイン状態でないと表示できないので改善すべきクエリが分かりません。><
    それともログイン状態の場合のみ何かキャッシュされるデータを参照しているため早いのでしょうか?

    ちなみにindex.phpで600万件のpostを検索しないようにWP_Queryを「wp_posts.ID=1」と書き換えています。これで劇的に早くなり、上記のような結果になりました。
    書き換え前は「ログイン時:10~20秒」「未ログイン時:30秒から~120秒」ほどでした。

    ログイン状態での速度は問題がない(速度に問題があるのは未ログイン時のindex.phpページのみ)ので現状のサーバーでなにか改善できる方法を模索中です。

    ちなみに5万件に減らしたテストサイトではクエリを改造しなくても「PageSpeed Insights 」で「good」評価になります。

    もし心当たりがございましたらよろしくお願いいたします。

    CG

    (@du-bist-der-lenz)

    5万件に減らしたテストサイトでは、不満がない。のですから、改造不用かインデックスしているプログラムの合理化を進めるのが良いでしょう。また、アクセス時のサーバーの動作に余裕が有るのか精査した方がいい。カテゴリでサイトを分散させれば、同時アクセスが増えてもサーバーの仕事量も軽減できるのではないでしょうか。

    自分のサイトhttp:URL.jp/wp-admin/でwordpressのダッシュボードにログインできなくなりました。
    英語でこんな表示がされるようになりました。

    Fatal error: Can’t use function return value in write context自分のURL in /.jp/public_html/wordpress/wp-content/plugins/akismet/class.akismet-admin.php on line 1060

    対策方法を教えてください。宜しくお願いします。

    CG

    (@du-bist-der-lenz)

    プラグインが関数の戻り値が空かどうかチェックしていてエラーを見つけたのではないですか。

    こんにちは

    @shincan

    このトピックと同じ現象でないのなら、新しくトピックを立てていただけますでしょうか。
    このトピックが進行できなくなってしまいます。

    トピック投稿者 batasan

    (@batasan)

    CGさん

    ご提案ありがとうございます。
    サーバーを増強すれば改善はされると思われるのですが
    現状index.php(またはfront-page.php)以外は速度に問題がないためプログラムでの解決を目指しています。
    index.php以外は「PageSpeed Insights」でほぼ「medium」か「good」の評価になります。
    これはテーマ作成のために使用しているサンプルデータ5万件の未改造テストサイトと同等レベルの速度です。なお、現在アクセスに余裕はあります。

    サーバー応答速度に問題があるのは「wordpressにログインしていない状態」でトップページ(index.phpまたはfront-page.php)にアクセスしたときのみです。
    「wordpressにログインした状態」でトップページにアクセスしたときは上記のような速度で問題はありません。

    ログイン時に速度が速い理由はプラグイン「Debug_Bar」で遅い処理を洗い出して不要なクエリなどを削除または改造したためです。しかし未ログイン時は「Debug_Bar」を表示できないためどこを直せばいいのかわかりません。(処理が遅いため、wordpressのタグやタクソノミーなどは一切使用していません。)

    ピンポイントですが、
    「wordpressにログインしていない状態」で
    「トップページ(index.phpまたはfront-page.php)」の
    「サーバー応答速度」
    を改善できる方法がありましたら関連サイトなどでもよいのでご教授頂けると幸いです。

    よろしくお願いいたします。

    □トピック作成前に行った改善方法
    ・postテーブルはパーテーションで分割しました。(検索ページ用)
    ・index.php(front-page.php)はデータ量を減らした軽量postテーブルのデータを表示させています。(トップページ用)
    ・WP_Queyが600万件走査しないようにクエリを改造しました。(トップページ用)
    ・remove_action()で必要ないアクションを削除しました。(投稿ページ用)
    ・各種圧縮しました。(全ページ用)
    ・キャッシュを使用しています。(全ページ用)

    トピック投稿者 batasan

    (@batasan)

    shincanさん

    トピックが違うので新しく立ててもらえませんでしょうか?
    ちなみに

    Fatal error: Can’t use function return value in write context自分のURL in /.jp/public_html/wordpress/wp-content/plugins/akismet/class.akismet-admin.php on line 1060

    は「class.akismet-admin.php」の1060行目でisset()やempty()に関数の戻り値を直接渡してしまっている場合に出るエラーです。empty()の場合はphpのバージョンを5.5以上にすると解決します。isset()の場合は戻り値を変数に置き換える必要があります。
    下記サイトなどを参考にしてください。
    (参考:https://gotohayato.com/content/56)

    単にダッシュボードに入るだけでしたら該当プラグイン(akismet)を削除すれば入れるようになります。

    こんにちは

    以下のCODEXベージにある、SAVEQUERIESを試してみてください。
    http://wpdocs.osdn.jp/WordPressでのデバッグ#SAVEQUERIES

    データベースで実行されているSQLクエリが全て出力できます。
    ログインしている/していないかの状態で実行されているSQLクエリを比較し、非ログイン時にのみ実行されているものや、非ログイン時にのみ非常に遅い物を特定し、WordPressのどのクエリでそれが実行されているかを類推することができます。
    そのWordPressのクエリを回避できれば速くなる可能性があります。

    トピック投稿者 batasan

    (@batasan)

    munyaguさん

    ご返信ご回答ありがとうございます。^^

    SAVEQUERIES「define( ‘SAVEQUERIES’, true );」を使用して
    全発行SQLクエリを確認してみたところ、未ログイン時だけ

    ————————————————–
    SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = ‘post’ AND (wp_posts.post_status = ‘publish’) LIMIT 0, 10
    ————————————————–
    というSQLクエリ(WQ_Query)が発行されていることがわかりました。この処理がほぼすべての応答時間を費やしていました。

    ログイン時は
    ————————————————–
    SELECT wp_2_posts.ID FROM wp_2_posts WHERE wp_2_posts.ID=1
    ————————————————–
    と変更して処理を軽くしている部分です。(wp_2_postsは投稿数が数件のテーブルです。)

    WP_Queryを変更しているところ(function.php)を確認したところ
    ————————————————–
    function my_posts_request_filter( $sql ) {
    is_home(){
    str_replace(オリジナルsqlクエリ,新sqlクエリ,$sql)
    }
    }
    ————————————————–
    と$wp_queryを使用してトップサイトかチェックするis_home()を使用していることがわかりました。
    これを削除したことでログオフ時でもログイン時とほぼ同等のサーバー応答時間になりました。

    まだ、「pagespeed insights」でスマホサイトは「Low」となるため改善が必要ですが、体感速度としてはそこそこまでになりました。
    ご教授本当にありがとうございました。

    現在はスマホサイトとPCサイトで評価に大きく違いがあるため(「pagespeed insights」で30点と60点)そちらを検証中です。
    また、行き詰まりましたらご質問させていただきたいと思います。

    みなさまありがとうおございました。

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • トピック「サーバー応答時間が改善できません><」には新たに返信することはできません。