WordPress

mysql — Jak zoptymalizować zapytanie „select found_rows()”? Kilka alertów o „wysokim średnim obciążeniu” dziennie

  • 5 lutego, 2013
  • 3 min read
mysql — Jak zoptymalizować zapytanie „select found_rows()”?  Kilka alertów o „wysokim średnim obciążeniu” dziennie


Mam 5000 zwykłych postów, 6000 postów w jednym typie postów i 2000 postów w innym typie postów. Nie trzeba dodawać, że sprawiło, że wp_posts stół dość duży. Nie wspominając o tym, że mam skonfigurowane niestandardowe taksonomie, aby naśladować typy postów, więc dla każdej firmy A wprowadzonej do typu postu firmy istnieje firma A, ręcznie wprowadziłem firmę A do taksonomii firmy. W ten sposób, kiedy robię regularny post o Firmie A, mogę skutecznie etykietka Firmę A do posta, a następnie ten post pojawi się na stronie niestandardowego typu posta Firmy A.

Specyfikacja: Uruchamianie WP Super Cache z Cloudflare jako CDN. Tematem jest WordPress TwentyEleven, ale mocno dostosowany. serwer: 2048 RAM, 80 GB Raid, 8 + CPU 4x priorytet, przepustowość 5000 GB. Ruch to 750 000 wyświetleń miesięcznie i 200 000 unikatów.

Zaczynam zauważać, że problemy z wydajnością narastają dość szybko, z dwoma przypadkami w zeszłym tygodniu, kiedy otrzymałem błąd

błąd połączenia z bazą danych

wiadomość na stronie i musiałem zrestartować usługę mysql. Nie wspominając już o wysokim średnim obciążeniu e-maili kilka razy dziennie.

Warto przeczytać!  Jak dodać niestandardowe typy postów do głównego kanału RSS WordPress

Uruchomiono zapytania debugowania. Uruchomiłem go za pomocą WP Super Cache. Odinstalowałem WP Super Cache i wypróbowałem W3 Total Cache z większością włączonych opcji. W obu próbach widziałem najdłuższy czas ładowania spowodowany tymi dwoma zapytaniami (ale tylko przy pierwszym ładowaniu! Prawie 0 przy kolejnych ładowaniach):

Time: 7.79628753662E-5
Query: SELECT FOUND_ROWS()
Call from: require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), include('/themes/child-theme/index.php'), WP_Query->__construct, WP_Query->query, WP_Query->get_posts, WP_Query->set_found_posts, W3_Db->query, W3_DbCache->query, W3_DbCallUnderlying->query, W3_Db->query, W3_DbProcessor->query, W3_Db->default_query

Time: 6.29425048828E-5
Query: SET SESSION query_cache_type = 0;
Call from: require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), include('/themes/child-theme/index.php'), get_footer, locate_template, load_template, require_once('/themes/child-theme/footer.php'), wp_footer, do_action('wp_footer'), call_user_func_array, Debug_Queries->the_queries, Debug_Queries->get_queries, W3_Db->query, W3_DbCache->query, W3_DbCallUnderlying->query, W3_Db->query, W3_DbProcessor->query, W3_Db->default_query

Usunąłem tablicę, która sprawiła, że ​​oprócz zwykłych postów szukaliśmy typów postów, ale to nie miało znaczenia.

Pełny przykładowy wynik zapytania:

Oto także kod szablonu dla głównego indeksu:

    <?php if ( have_posts() ) : ?>

        <?php /* Start the Loop */ ?>

            <?php while ( have_posts() ) : the_post(); ?>

            <?php if ( 'status' == get_post_format() ) {

                get_template_part( 'content-status', get_post_format() );

            } else get_template_part( 'excerpt', get_post_format() );

        ?>

        <?php endwhile; ?>

Naprawdę nie jestem pewien, gdzie się udać.

Warto przeczytać!  Ajax pokaż więcej postów z alpine js, które nie pokazują przycisku/ukrywania


Źródło