Hi, some time ago we started suffering slow queries on our production site. We tested the K2 query issue on separate workstation from exactly same tables and there caching and query execution seems to work fine.
However, the query takes long time in production database without exceptions. It seems like the query-cache doesn't work correctly. ( variable query_cache_type | ON ) slow-log says that typically query takes over 2 seconds.
Our site has constantly approx. 200-500 active users opening K2 items, some of those registered and thus going past cache.
Site has some 65 000 to 100 000+ page views daily.
We have 200 000+ K2 items and more added daily
Site has 3 minutes cache set
System info
PHP Built On Linux www 4.4.0-53-generic #74-Ubuntu SMP Fri Dec 2 15:59:10 UTC 2016 x86_64
Database Version 5.5.56-MariaDB
Database Collation latin1_swedish_ci
Database Connection Collation utf8mb4_general_ci
PHP Version 7.0.13-0ubuntu0.16.04.1
Web Server nginx/1.10.0
WebServer to PHP Interface fpm-fcgi
Joomla! Version Joomla! 3.6.4 Stable [ Noether ] 21-October-2016 16:33 GMT
Joomla! Platform Version Joomla Platform 13.1.0 Stable [ Curiosity ] 24-Apr-2013 00:00 GMT
I can send URLs and more details privately.
Query:
SELECT i.*, c.name as categoryname,c.id as categoryid, c.alias as categoryalias, c.params as
categoryparams FROM xxx_k2_items as i RIGHT JOIN xxx_k2_categories AS c ON c.id = i.catid
WHERE i.published = 1 AND i.access IN(1,1) AND i.trash = 0 AND c.published = 1 AND c.access
IN(1,1) AND c.trash = 0 AND ( i.publish_up = '0000-00-00 00:00:00' OR i.publish_up <= '2017-
05-17 07:01:49' ) AND ( i.publish_down = '0000-00-00 00:00:00' OR i.publish_down >= '2017-05-
17 07:01:49' ) AND c.id IN (269,270,271,272,273,274,276,402) ORDER BY i.publish_up DESC
LIMIT 0, 15;
Test database:
Server: MariaDB
Server version: 10.1.22-MariaDB-1~xenial mariadb.org binary distribution
Protocol version: 10
At test database (with no external load) query times: 1.38s, 0s, 0s, 0s, 0s
Test database variables:
| query_alloc_block_size | 16384
| query_cache_limit | 131072
| query_cache_min_res_unit | 4096
| query_cache_size | 67108864
| query_cache_strip_comments | OFF
| query_cache_type | ON
Production database:
Server: MariaDB
Server version: 5.5.56-MariaDB MariaDB Server
Protocol version: 10
At production database query times: 3.23s, 2.89s, 2.99s, 2.93s, 2.78s
Production database variables:
| query_cache_limit | 33554432
| query_cache_min_res_unit | 4096
| query_cache_size | 134217728
| query_cache_strip_comments | OFF
| query_cache_type | ON
Slow log occurence (trigger time 2s)
SET timestamp=1495005105;
SET timestamp=1495005155;
SET timestamp=1495005174;
SET timestamp=1495005179;
SET timestamp=1495005220;
SET timestamp=1495005227;
SET timestamp=1495005256;
SET timestamp=1495005308;
SET timestamp=1495005333;
SET timestamp=1495005364;
SET timestamp=1495005366;
SET timestamp=1495005366;
SET timestamp=1495005398;
SET timestamp=1495005400;
SET timestamp=1495005434;
SET timestamp=1495005509;
SET timestamp=1495005536;
SET timestamp=1495005541;
SET timestamp=1495005550;
SET timestamp=1495005555;
SET timestamp=1495005557;
SET timestamp=1495005592;
SET timestamp=1495005612;
SET timestamp=1495005614;
SET timestamp=1495005622;
SET timestamp=1495005670;
SET timestamp=1495005681;
SET timestamp=1495005683;
SET timestamp=1495005687;
SET timestamp=1495005706;
SET timestamp=1495005715;
SET timestamp=1495005719;
SET timestamp=1495005727;
SET timestamp=1495005746;
SET timestamp=1495005748;
SET timestamp=1495005757;
SET timestamp=1495005763;
SET timestamp=1495005766;
SET timestamp=1495005769;
Profiled query information:
Running first time:
+
+
+
| Status | Duration |
+
+
+
| starting | 0.000024 |
| Waiting for query cache lock | 0.000004 |
| checking query cache for query | 0.000075 |
| checking permissions | 0.000004 |
| checking permissions | 0.000004 |
| Opening tables | 0.000016 |
| After opening tables | 0.000005 |
| System lock | 0.000006 |
| Table lock | 0.000003 |
| After table lock | 0.000004 |
| Waiting for query cache lock | 0.000003 |
| After table lock | 0.000017 |
| init | 0.000051 |
| optimizing | 0.000030 |
| statistics | 0.000173 |
| preparing | 0.000042 |
| executing | 0.000005 |
| Creating tmp table | 0.000249 |
| Copying to tmp table | 2.228058 |
| Sorting result | 0.505713 |
| Sending data | 0.000511 |
| end | 0.000010 |
| removing tmp table | 0.124335 |
| end | 0.000022 |
| query end | 0.000005 |
| closing tables | 0.000024 |
| freeing items | 0.000022 |
| updating status | 0.000045 |
| logging slow query | 0.000060 |
| cleaning up | 0.000006 |
+
+
+
Running second time:
+
+
+
| Status | Duration |
+
+
+
| starting | 0.000042 |
| Waiting for query cache lock | 0.000006 |
| checking query cache for query | 0.000104 |
| checking permissions | 0.000006 |
| checking permissions | 0.000006 |
| Opening tables | 0.000026 |
| After opening tables | 0.000006 |
| System lock | 0.000006 |
| Table lock | 0.000004 |
| After table lock | 0.000005 |
| Waiting for query cache lock | 0.000003 |
| After table lock | 0.000023 |
| init | 0.000065 |
| optimizing | 0.000039 |
| statistics | 0.000132 |
| preparing | 0.000043 |
| executing | 0.000005 |
| Creating tmp table | 0.000272 |
| Copying to tmp table | 2.357103 |
| Sorting result | 0.768763 |
| Sending data | 0.000117 |
| Waiting for query cache lock | 0.000005 |
| Sending data | 0.000099 |
| Waiting for query cache lock | 0.000005 |
| Sending data | 0.000065 |
| Waiting for query cache lock | 0.000005 |
| Sending data | 0.000113 |
| Waiting for query cache lock | 0.000005 |
| Sending data | 0.000032 |
| Waiting for query cache lock | 0.000004 |
| Sending data | 0.000251 |
| end | 0.000054 |
| removing tmp table | 0.127060 |
| end | 0.000023 |
| query end | 0.000006 |
| closing tables | 0.000119 |
| freeing items | 0.000024 |
| updating status | 0.000007 |
| Waiting for query cache lock | 0.000003 |
| updating status | 0.000040 |
| Waiting for query cache lock | 0.000004 |
| updating status | 0.000002 |
| storing result in query cache | 0.000040 |
| logging slow query | 0.000074 |
| cleaning up | 0.000007 |
+
+
+
When I tried to run it third time, the result was something similar to step one, thus running the query again instead of fetching cached results.
So, it seems that query cache is invalidated too frequently, may be due to the heavy use of k2_items and k2_categories tables.
Is there something we could do to get the cache working correctly and get less slow queries?
Thank you!
However, the query takes long time in production database without exceptions. It seems like the query-cache doesn't work correctly. ( variable query_cache_type | ON ) slow-log says that typically query takes over 2 seconds.
Our site has constantly approx. 200-500 active users opening K2 items, some of those registered and thus going past cache.
Site has some 65 000 to 100 000+ page views daily.
We have 200 000+ K2 items and more added daily
Site has 3 minutes cache set
System info
PHP Built On Linux www 4.4.0-53-generic #74-Ubuntu SMP Fri Dec 2 15:59:10 UTC 2016 x86_64
Database Version 5.5.56-MariaDB
Database Collation latin1_swedish_ci
Database Connection Collation utf8mb4_general_ci
PHP Version 7.0.13-0ubuntu0.16.04.1
Web Server nginx/1.10.0
WebServer to PHP Interface fpm-fcgi
Joomla! Version Joomla! 3.6.4 Stable [ Noether ] 21-October-2016 16:33 GMT
Joomla! Platform Version Joomla Platform 13.1.0 Stable [ Curiosity ] 24-Apr-2013 00:00 GMT
I can send URLs and more details privately.
Query:
SELECT i.*, c.name as categoryname,c.id as categoryid, c.alias as categoryalias, c.params as
categoryparams FROM xxx_k2_items as i RIGHT JOIN xxx_k2_categories AS c ON c.id = i.catid
WHERE i.published = 1 AND i.access IN(1,1) AND i.trash = 0 AND c.published = 1 AND c.access
IN(1,1) AND c.trash = 0 AND ( i.publish_up = '0000-00-00 00:00:00' OR i.publish_up <= '2017-
05-17 07:01:49' ) AND ( i.publish_down = '0000-00-00 00:00:00' OR i.publish_down >= '2017-05-
17 07:01:49' ) AND c.id IN (269,270,271,272,273,274,276,402) ORDER BY i.publish_up DESC
LIMIT 0, 15;
Test database:
Server: MariaDB
Server version: 10.1.22-MariaDB-1~xenial mariadb.org binary distribution
Protocol version: 10
At test database (with no external load) query times: 1.38s, 0s, 0s, 0s, 0s
Test database variables:
| query_alloc_block_size | 16384
| query_cache_limit | 131072
| query_cache_min_res_unit | 4096
| query_cache_size | 67108864
| query_cache_strip_comments | OFF
| query_cache_type | ON
Production database:
Server: MariaDB
Server version: 5.5.56-MariaDB MariaDB Server
Protocol version: 10
At production database query times: 3.23s, 2.89s, 2.99s, 2.93s, 2.78s
Production database variables:
| query_cache_limit | 33554432
| query_cache_min_res_unit | 4096
| query_cache_size | 134217728
| query_cache_strip_comments | OFF
| query_cache_type | ON
Slow log occurence (trigger time 2s)
SET timestamp=1495005105;
SET timestamp=1495005155;
SET timestamp=1495005174;
SET timestamp=1495005179;
SET timestamp=1495005220;
SET timestamp=1495005227;
SET timestamp=1495005256;
SET timestamp=1495005308;
SET timestamp=1495005333;
SET timestamp=1495005364;
SET timestamp=1495005366;
SET timestamp=1495005366;
SET timestamp=1495005398;
SET timestamp=1495005400;
SET timestamp=1495005434;
SET timestamp=1495005509;
SET timestamp=1495005536;
SET timestamp=1495005541;
SET timestamp=1495005550;
SET timestamp=1495005555;
SET timestamp=1495005557;
SET timestamp=1495005592;
SET timestamp=1495005612;
SET timestamp=1495005614;
SET timestamp=1495005622;
SET timestamp=1495005670;
SET timestamp=1495005681;
SET timestamp=1495005683;
SET timestamp=1495005687;
SET timestamp=1495005706;
SET timestamp=1495005715;
SET timestamp=1495005719;
SET timestamp=1495005727;
SET timestamp=1495005746;
SET timestamp=1495005748;
SET timestamp=1495005757;
SET timestamp=1495005763;
SET timestamp=1495005766;
SET timestamp=1495005769;
Profiled query information:
Running first time:
+
+
+
| Status | Duration |
+
+
+
| starting | 0.000024 |
| Waiting for query cache lock | 0.000004 |
| checking query cache for query | 0.000075 |
| checking permissions | 0.000004 |
| checking permissions | 0.000004 |
| Opening tables | 0.000016 |
| After opening tables | 0.000005 |
| System lock | 0.000006 |
| Table lock | 0.000003 |
| After table lock | 0.000004 |
| Waiting for query cache lock | 0.000003 |
| After table lock | 0.000017 |
| init | 0.000051 |
| optimizing | 0.000030 |
| statistics | 0.000173 |
| preparing | 0.000042 |
| executing | 0.000005 |
| Creating tmp table | 0.000249 |
| Copying to tmp table | 2.228058 |
| Sorting result | 0.505713 |
| Sending data | 0.000511 |
| end | 0.000010 |
| removing tmp table | 0.124335 |
| end | 0.000022 |
| query end | 0.000005 |
| closing tables | 0.000024 |
| freeing items | 0.000022 |
| updating status | 0.000045 |
| logging slow query | 0.000060 |
| cleaning up | 0.000006 |
+
+
+
Running second time:
+
+
+
| Status | Duration |
+
+
+
| starting | 0.000042 |
| Waiting for query cache lock | 0.000006 |
| checking query cache for query | 0.000104 |
| checking permissions | 0.000006 |
| checking permissions | 0.000006 |
| Opening tables | 0.000026 |
| After opening tables | 0.000006 |
| System lock | 0.000006 |
| Table lock | 0.000004 |
| After table lock | 0.000005 |
| Waiting for query cache lock | 0.000003 |
| After table lock | 0.000023 |
| init | 0.000065 |
| optimizing | 0.000039 |
| statistics | 0.000132 |
| preparing | 0.000043 |
| executing | 0.000005 |
| Creating tmp table | 0.000272 |
| Copying to tmp table | 2.357103 |
| Sorting result | 0.768763 |
| Sending data | 0.000117 |
| Waiting for query cache lock | 0.000005 |
| Sending data | 0.000099 |
| Waiting for query cache lock | 0.000005 |
| Sending data | 0.000065 |
| Waiting for query cache lock | 0.000005 |
| Sending data | 0.000113 |
| Waiting for query cache lock | 0.000005 |
| Sending data | 0.000032 |
| Waiting for query cache lock | 0.000004 |
| Sending data | 0.000251 |
| end | 0.000054 |
| removing tmp table | 0.127060 |
| end | 0.000023 |
| query end | 0.000006 |
| closing tables | 0.000119 |
| freeing items | 0.000024 |
| updating status | 0.000007 |
| Waiting for query cache lock | 0.000003 |
| updating status | 0.000040 |
| Waiting for query cache lock | 0.000004 |
| updating status | 0.000002 |
| storing result in query cache | 0.000040 |
| logging slow query | 0.000074 |
| cleaning up | 0.000007 |
+
+
+
When I tried to run it third time, the result was something similar to step one, thus running the query again instead of fetching cached results.
So, it seems that query cache is invalidated too frequently, may be due to the heavy use of k2_items and k2_categories tables.
Is there something we could do to get the cache working correctly and get less slow queries?
Thank you!
Edited 9 years 5 months ago by Kmedia · Reason: Solved
