Skip to content Skip to sidebar

This is the technical support forum for WPML - the multilingual WordPress plugin.

Everyone can read, but only WPML clients can post here. WPML team is replying on the forum 6 days per week, 22 hours per day.

Tagged: 

This topic contains 26 replies, has 0 voices.

Last updated by David Gaitan 1 month, 2 weeks ago.

Assisted by: David Gaitan.

Author Posts
February 16, 2026 at 1:23 pm #17825830

rogelioP-4

Here is the response I received from my host provider:

I have generated a log file for the specific request (full SQL, not summarized), ideally for queries with Query_time > 5s, about 20 most recent records and can be found in public_html/slow_queries_over5s_recent20.log or by accessing the URL: hidden link

These are the IP address recorded accessing the site in relation to the log with Query_time: 72.953276

69 172.71.167.174 hidden link
64 172.70.94.195 hidden link
60 162.158.174.122 hidden link
58 172.68.27.81 hidden link
57 172.71.167.173 hidden link
54 198.41.227.131 hidden link
54 172.68.27.82 hidden link
53 162.159.106.54 hidden link
52 162.159.104.104 hidden link
49 172.69.65.194 hidden link

February 17, 2026 at 5:38 pm #17830138

Lauren

Thanks — this is progress.

1. Cloudflare note: the IPs listed (172.x / 162.x / 198.41.x) are Cloudflare edge IPs, so they don’t identify the real visitor. To pinpoint the source, we’ll need the requested URLs and/or the real client IP via Cloudflare headers (e.g. CF-Connecting-IP / X-Forwarded-For) or Cloudflare analytics/logs for that same time window.

2. Raw slow queries: could you please paste here the full content of 1–3 slow-query blocks from slow_queries_over5s_recent20.log, especially the one with Query_time: 72.953276? Each block should include the # Query_time… header lines and the full SELECT … statement. With that, we can identify which post type/meta keys/taxonomies are involved and whether it originates from a specific plugin/theme filter/search page.

3. Immediate mitigation: please ensure page caching is enabled for non-logged-in visitors, and if you’re using Cloudflare, add a rate limit / cache rule for common heavy endpoints (/wp-admin/admin-ajax.php, /wp-json/) and any filter/listing pages. This reduces repeated uncached DB-heavy requests and usually prevents another spike even before the root cause is confirmed.

February 20, 2026 at 4:02 pm #17838999

rogelioP-4

Hello, here is the response I received from my host provider:

The available logged queries that required ~70s to be executed were exported to the 70squeries.txt file present in the home directory of the plalla.com cPanel. Here is the exact location:

/home/plallaco/

An additional file named slowqueries.log was created, and all logged slower queries were exported to it. This file is present in the same location. You can obtain both files and share them with your web developer so they can review the matter.

February 20, 2026 at 9:13 pm #17839463

Lauren

We don't have cpanel access, so please upload the logs/files to something like DropBox or Google Drive and share the links here. You can use my email lauren.j@onthegosystems.com to share the documents with. Thanks!

February 26, 2026 at 1:49 pm #17856764

rogelioP-4

This is the response I received from the host provider:

I have generated a log file for the specific request (full SQL, not summarized), ideally for queries with Query_time > 5s, about 20 most recent records and can be found in public_html/slow_queries_over5s_recent20.log or by accessing the URL:

hidden link

These are the IP address recorded accessing the site in relation to the log with Query_time: 72.953276

69 172.71.167.174 hidden link
64 172.70.94.195 hidden link
60 162.158.174.122 hidden link
58 172.68.27.81 hidden link
57 172.71.167.173 hidden link
54 198.41.227.131 hidden link
54 172.68.27.82 hidden link
53 162.159.106.54 hidden link
52 162.159.104.104 hidden link
49 172.69.65.194 hidden link

I also had another MySQL query spikes few hours ago:

These are the MySQL queries which were recorded by the server at that moment:

| 75835 | plallaco_live_with_wpml | localhost | plallaco_live_with_wpml | Query | 3 | executing | SELECT wpci_posts.*
FROM wpci_posts INNER JOIN wpci_postmeta ON ( wpci_posts.ID = wpci_post |
| 75836 | plallaco_live_with_wpml | localhost | plallaco_live_with_wpml | Query | 2 | executing | SELECT wpci_posts.*
FROM wpci_posts INNER JOIN wpci_postmeta ON ( wpci_posts.ID = wpci_post |
| 75837 | plallaco_live_with_wpml | localhost | plallaco_live_with_wpml | Query | 1 | executing | SELECT wpci_posts.*
FROM wpci_posts INNER JOIN wpci_postmeta ON ( wpci_posts.ID = wpci_post |
| 75838 | plallaco_live_with_wpml | localhost | plallaco_live_with_wpml | Query | 1 | executing | SELECT wpci_posts.*
FROM wpci_posts INNER JOIN wpci_postmeta ON ( wpci_posts.ID = wpci_post |
| 75839 | plallaco_live_with_wpml | localhost | plallaco_live_with_wpml | Query | 0 | executing | SELECT wpci_posts.*
FROM wpci_posts INNER JOIN wpci_postmeta ON ( wpci_posts.ID = wpci_post |
| 75840 | plallaco_live_with_wpml | localhost | plallaco_live_with_wpml | Query | 0 | executing | SELECT wpci_posts.*
FROM wpci_posts INNER JOIN wpci_postmeta ON ( wpci_posts.ID = wpci_post |
| 75841 | plallaco_live_with_wpml | localhost | plallaco_live_with_wpml | Query | 0 | executing | SELECT wpci_posts.*
FROM wpci_posts INNER JOIN wpci_postmeta ON ( wpci_posts.ID = wpci_post |
| 75842 | plallaco_live_with_wpml | localhost | plallaco_live_with_wpml | Sleep | 0 |

and a lot of PHP processes:

2829079 plallaco 20 0 818324 180932 130612 R 5.9 1.1 0:00.44 lsphp:/home/plallaco/public_html/index.php
2829080 plallaco 20 0 808020 168928 128936 R 5.9 1.0 0:00.35 lsphp:/home/plallaco/public_html/index.php
2829085 plallaco 20 0 808020 168776 128744 R 5.9 1.0 0:00.34 lsphp:/home/plallaco/public_html/index.php
2829222 plallaco 20 0 805652 165876 127728 R 5.9 1.0 0:00.30 lsphp:/home/plallaco/public_html/index.php
2829231 plallaco 20 0 805652 154756 116848 R 5.9 0.9 0:00.30 lsphp:/home/plallaco/public_html/index.php
2829238 plallaco 20 0 805392 151276 113672 R 5.9 0.9 0:00.28 lsphp:/home/plallaco/public_html/index.php
2829240 plallaco 20 0 796628 132316 103412 R 5.9 0.8 0:00.15 lsphp:/home/plallaco/public_html/index.php
2829241 plallaco 20 0 796984 129572 100660 R 5.9 0.8 0:00.16 lsphp:/home/plallaco/public_html/index.php
2829245 plallaco 20 0 796560 124388 97844 R 5.9 0.8 0:00.14 lsphp:/home/plallaco/public_html/index.php
2829254 plallaco 20 0 793868 121680 95260 R 5.9 0.7 0:00.12 lsphp:/home/plallaco/public_html/index.php

Here are the top IPs with most access during the last hour:

55 162.159.104.105
46 172.69.67.121
44 172.71.167.174
44 162.159.106.54
44 162.158.174.122
43 162.159.106.55
42 162.159.104.104
39 198.41.227.130
38 172.68.26.84
37 162.158.174.123

As of now, the server is stable again and we will continue to monitor it closely.

February 26, 2026 at 2:14 pm #17856919

rogelioP-4

The available logged queries that required ~70s to be executed were uploaded to this drive:

hidden link

February 27, 2026 at 12:28 am #17858427

Lauren

Thanks — the raw slow query log identifies the source. The slowest queries are property listing/filter queries on wpci_4_* tables (post_type = 'property') with taxonomy property_status=pre-construction and multiple postmeta joins using fave_* meta keys (e.g. fave_agents, fave_property_agency). These queries are examining ~5M rows and taking ~70 seconds, which will spike MySQL load under traffic.

WPML’s language joins can appear in regular content queries, but in this case the bottleneck is the theme/plugin’s property filtering query structure (multiple meta joins + COUNT DISTINCT), especially when hit repeatedly.

While we continue investigating, please enable/confirm caching for logged-out visitors and add Cloudflare rate limiting for likely hotspots (/wp-admin/admin-ajax.php, /wp-json/, and the property filter/search URLs). This typically prevents repeat spikes immediately.

Next, please share the top requested URL(s) during the spike (via Cloudflare analytics or access logs including CF-Connecting-IP) so we can identify exactly which page/endpoint is triggering these property queries and advise the best long-term fix (theme/plugin configuration or query optimization).

March 3, 2026 at 1:07 pm #17868543

rogelioP-4

Hello, here is the response I received from my host provider:

The last load spike is related to (207.180.211.2) and the fact that it made a lot of hits towards URLs like this:

207.180.211.2 [28/Feb/2026:21:36:21 +0000] 104.200.19.32 443 "GET /%c0 HTTP/2.0" 404 53193 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
207.180.211.2 [28/Feb/2026:21:36:23 +0000] 104.200.19.32 443 "GET /nginx.conf HTTP/2.0" 404 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
207.180.211.2 [28/Feb/2026:21:36:22 +0000] 104.200.19.32 443 "GET /.env.production.local HTTP/2.0" 404 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
207.180.211.2 [28/Feb/2026:21:36:20 +0000] 104.200.19.32 443 "GET /secured/phpinfo.php HTTP/2.0" 404 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
207.180.211.2 [28/Feb/2026:21:36:21 +0000] 104.200.19.32 443 "GET /server-info HTTP/2.0" 404 53234 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
207.180.211.2 [28/Feb/2026:21:36:23 +0000] 104.200.19.32 443 "GET /nginx_status HTTP/2.0" 404 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
207.180.211.2 [28/Feb/2026:21:36:22 +0000] 104.200.19.32 443 "GET /admin/stats HTTP/2.0" 404 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
207.180.211.2 [28/Feb/2026:21:36:23 +0000] 104.200.19.32 443 "GET /back/config.env HTTP/2.0" 404 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
207.180.211.2 [28/Feb/2026:21:36:23 +0000] 104.200.19.32 443 "GET /backend/.env.local HTTP/2.0" 404 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
207.180.211.2 [28/Feb/2026:21:36:23 +0000] 104.200.19.32 443 "GET /magmi/web/js/magmi_utils.js HTTP/2.0" 404 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
207.180.211.2 [28/Feb/2026:21:36:21 +0000] 104.200.19.32 443 "GET /application/.env HTTP/2.0" 404 53247 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
207.180.211.2 [28/Feb/2026:21:36:22 +0000] 104.200.19.32 443 "GET /.env.sample.php HTTP/2.0" 404 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"

Since this does not look legitimate, my colleague blocked that IP address, but the server load spike was caused by it, so I am unable to provide other top URL hits as your developers want, because there are simply none.

You can request this next time when the load spike is increased, and if it's strictly caused by your website.

March 4, 2026 at 3:46 pm #17872520

David Gaitan
Supporter

Languages: English (English ) Spanish (Español )

Timezone: America/Managua (GMT-06:00)

Hello Rogelio!

I am David, from the WPML dev team. I am going to take over this ticket, so I'll be here to help you solve this situation. Please give me a moment just to hook up on the issue and try to have my own findings.

Will back with soon!
Best
David

March 4, 2026 at 10:06 pm #17873254

David Gaitan
Supporter

Languages: English (English ) Spanish (Español )

Timezone: America/Managua (GMT-06:00)

Hi Rogelio!

Thank you for your patience! I have read all the conversation and now I have a better sense of the situation.

Let me start with the mysql spikes situation:
This a problem that is going beyond to the WPML ecosystem because this situation brings more things in context like the following:

1. A large and heavy query generated by a filtering feature. Sometimes, filters bring situations like this in the way how the database increase or the site start receiving visits.
2. A weird quantity of visits from an origin as reported in the logs.

So, based on this knowledge, let's start with some "short terms" improvements:

1. Page caching: Enable full page cache for logged-out visitors on listing and archive pages so repeated hits do not hit MySQL. (think that Lauren already recommended this before)
2. Cloudflare (or similar): Rate limiting for admin-ajax.php, /wp-json/, and for the main property listing/filter URLs. It will help to mitigate possible DDoS or weird requests (looks like we are experimenting this)
Cache rules so that listing pages (or their main variants) can be cached where possible.
3. Object cache: If the server offers Redis or Memcached, enable WordPress object cache. This reduces repeated meta/option lookups and can lower DB load during spikes. (This is so so important when we have filtering features like the one you have on your site)
4. Block/limit bad traffic: As done for 207.180.211.2, block or challenge IPs that hit suspicious URLs and cause unnecessary load.

Now, I have reviewed the theme code in order to see what else we can do and found some "long terms" improvements to follow (these probably will require a developer):

1. Target AJAX first: Rate-limit or cache responses for:
- admin-ajax.php with action=houzez_loadmore_properties
- admin-ajax.php with action=houzez_half_map_listings
Cache key should include a hash of the request params (filters, paged, etc.) so different filter combinations get different cache entries. Short TTL (e.g. 1–5 minutes) is often enough to absorb traffic spikes.

2. Sort by title: If listing or search default sort is "Sort by Title" (a_title / d_title), consider changing the default to "Newest first" (d_date) in theme options (listing page meta fave_properties_sort, or options search_default_order / taxonomy_default_order). Title ordering on large posts + postmeta joins is expensive.

3. Indexes: Since we have hard filtering, always indexing is important to improve the performance on SQL queries. So, ensure

wp_postmeta

has a composite index on (meta_key, meta_value(X)) for the main filter keys (fave_property_price, fave_property_bedrooms, fave_property_bathrooms, fave_agents, fave_property_agency, fave_featured).

Your site uses several filters: price, bedrooms, bathrooms, agents, agencies, etc. We are not asking for a different index for each of those. We’re asking for one index that works for all of them.

That one index is built so the server can quickly find rows by:
- first “type of data” (e.g. price, bedrooms, agents), and
- then the value (e.g. “between 100k and 500k”, “2 or more”, etc.).

So the same index helps when someone filters by price, by bedrooms, by agents, or by any combination. One change, all those lookups get faster.

IMPORTANT: For this improvement, I do recommend do this first on a test or staging environment. Would be great to have a developer to attack this one. Please let me know if you need more information about it.

4. Reduce meta_query clauses: Where possible, avoid stacking many fave_* meta_query conditions in a single query. The theme's Houzez_Data_Source::property_filter_callback and Houzez_Property_Search::properties_search add all active filters; if the site uses many filters at once, consider (with theme/developer) a two-step approach (e.g. taxonomy + one main meta filter first, then refine) or a denormalized table for filterable fields.

Conclusions
It is important that this situation will probably continue if we do not cover at least one of the recommendations. The main problem is that we have hard queries created by the filtering feature for properties. Personally, having the object-cache running with Redis or Memcached is really important, almost crucial to improve all this.

March 7, 2026 at 6:06 pm #17879620

rogelioP-4

Hi David,

Thank you for the detailed breakdown. Since I don't have a technical background, I’m going to look for a developer to help me implement these recommendations

Could you tell me what specific kind of developer I should be looking for? Do you have any recommendations on where I can find someone reliable—would a platform like Fiverr be a good place to look?

One last thing: I urgently need to translate the website into two more languages this month using WPML. Is it possible to do that before these issues are resolved without making the performance worse, or is it absolutely necessary to fix the MySQL spikes first?

March 9, 2026 at 3:53 pm #17882623

David Gaitan
Supporter

Languages: English (English ) Spanish (Español )

Timezone: America/Managua (GMT-06:00)

Hi Rogelio,

I have dedicated some extra time investigating here the situation because we have similar situation like this in our track list. So, from our end we are working on finding an improvement for these filtering cases. However, your particular issue is more focused on the theme you are using right now. Here are some thoughts about it:

- The Houzez theme is causing the heavy database load; it does not follow good practices on the main listing/search paths (caching exists but isn’t used there, and there’s no protection against repeated heavy requests).
- WPML only adds language filtering to the same queries; it is not the root cause of the spikes.
- Implementing caching (theme + page + object cache), rate limiting, and database indexes will reduce or prevent the MySQL spikes. The customer should involve their developer for theme/cache changes and their host for server cache, object cache, and indexes.

So, this information is helpful to provide to a developer in order to improve the theme. Important to clarify that main issue is on the theme and the way how it runs queries on the filtering features.

Regarding the other question on adding the new languages. Adding more languages will be equal to have the same issue. The problem is not how many languages do you have, the problem is the way how the queries are running on the theme when customer navigates/uses the filtering.

If you need more information about the issue, I'll happy to help.

Best,
Ddavid