-
Problem report
-
Resolution: Fixed
-
Trivial
-
6.4.6, 7.0.0alpha5
-
None
-
Sprint 103 (Aug 2023), Sprint 104 (Sep 2023)
-
0.5
Here is slow query
mysql> SELECT DISTINCT ht.templateid FROM hosts_templates ht WHERE ht.hostid IN ( SELECT h.hostid FROM hosts h WHERE h.flags IN (0,4) AND h.status IN (0,1) AND EXISTS ( SELECT NULL FROM hosts_groups hgg JOIN rights r ON r.id=hgg.groupid AND r.groupid=152 WHERE h.hostid=hgg.hostid GROUP BY hgg.hostid HAVING MIN(r.permission)>0 AND MAX(r.permission)>=2 ) );
+------------+
| templateid |
+------------+
| 10440 |
| 25519 |
| 30551 |
| 13324 |
| 10504 |
| 10464 |
| 22142 |
| 22143 |
| 25145 |
| 36200 |
| 10490 |
| 29380 |
| 10705 |
| 10496 |
| 10458 |
| 36505 |
| 27209 |
| 12426 |
| 10509 |
| 24377 |
| 27178 |
| 33479 |
+------------+
22 rows in set (2.64 sec)
mysql> EXPLAIN ANALYZE SELECT DISTINCT ht.templateid FROM hosts_templates ht WHERE ht.hostid IN ( SELECT h.hostid FROM hosts h WHERE h.flags IN (0,4) AND h.status IN (0,1) AND EXISTS ( SELECT NULL FROM hosts_groups hgg JOIN rights r ON r.id=hgg.groupid AND r.groupid=152 WHERE h.hostid=hgg.hostid GROUP BY hgg.hostid HAVING MIN(r.permission)>0 AND MAX(r.permission)>=2 ) );
| EXPLAIN
| -> Table scan on <temporary> (cost=4299.74..4345.36 rows=3450) (actual time=2735.621..2735.624 rows=22 loops=1)
-> Temporary table with deduplication (cost=4299.73..4299.73 rows=3450) (actual time=2735.619..2735.619 rows=22 loops=1)
-> Nested loop inner join (cost=3954.72 rows=3450) (actual time=251.258..2735.198 rows=638 loops=1)
-> Filter: ((h.flags in (0,4)) and (h.`status` in (0,1)) and exists(select #3)) (cost=2783.20 rows=3060) (actual time=251.242..2733.563 rows=399 loops=1)
-> Table scan on h (cost=2783.20 rows=26497) (actual time=0.090..17.028 rows=26285 loops=1)
-> Select #3 (subquery in condition; dependent)
-> Limit: 1 row(s) (cost=4.86 rows=0.3) (actual time=0.108..0.108 rows=0 loops=24917)
-> Filter: ((min(r.permission) > 0) and (max(r.permission) >= 2)) (cost=4.86 rows=0.3) (actual time=0.108..0.108 rows=0 loops=24917)
-> Group aggregate: max(r.permission), min(r.permission) (cost=4.86 rows=0.3) (actual time=0.108..0.108 rows=0 loops=24917)
-> Nested loop inner join (cost=4.84 rows=0.3) (actual time=0.106..0.107 rows=0 loops=24917)
-> Covering index lookup on hgg using hosts_groups_1 (hostid=h.hostid) (cost=0.82 rows=5) (actual time=0.003..0.005 rows=5 loops=24917)
-> Filter: (r.groupid = 152) (cost=0.57 rows=0.05) (actual time=0.019..0.019 rows=0 loops=132861)
-> Index lookup on r using rights_2 (id=hgg.groupid) (cost=0.57 rows=2) (actual time=0.007..0.018 rows=8 loops=132861)
-> Covering index lookup on ht using hosts_templates_1 (hostid=h.hostid) (cost=0.27 rows=1) (actual time=0.003..0.004 rows=2 loops=399)
|
1 row in set, 1 warning (2.74 sec)
Can be optimized
mysql> SELECT DISTINCT ht.templateid
-> FROM hosts_templates ht,hosts h,hosts_groups hg,rights r
-> WHERE ht.hostid=h.hostid
-> AND h.hostid=hg.hostid
-> AND hg.groupid=r.id
-> AND r.groupid=152
-> AND r.permission>=2
-> AND h.flags IN (0,4)
-> AND h.status IN (0,1)
-> AND EXISTS (
-> SELECT NULL
-> FROM hosts_groups hgg
-> JOIN rights r2 ON r2.id=hgg.groupid AND r2.groupid=152
-> WHERE h.hostid=hgg.hostid
-> GROUP BY hgg.hostid
-> HAVING MIN(r2.permission)>0 AND MAX(r2.permission)>=2
-> );
+------------+
| templateid |
+------------+
| 13324 |
| 25519 |
| 30551 |
| 36200 |
| 10440 |
| 10458 |
| 36505 |
| 10464 |
| 10490 |
| 29380 |
| 12426 |
| 10705 |
| 10504 |
| 10496 |
| 22142 |
| 22143 |
| 25145 |
| 27209 |
| 10509 |
| 27178 |
| 24377 |
| 33479 |
+------------+
22 rows in set (0.17 sec)
mysql> EXPLAIN ANALYZE SELECT DISTINCT ht.templateid FROM hosts_templates ht,hosts h,hosts_groups hg,rights r WHERE ht.hostid=h.hostid AND h.hostid=hg.hostid AND hg.groupid=r.id AND r.groupid=152 AND r.permission>=2 AND h.flags IN (0,4) AND h.status IN (0,1) AND EXISTS ( SELECT NULL FROM hosts_groups hgg JOIN rights r2 ON r2.id=hgg.groupid AND r2.groupid=152 WHERE h.hostid=hgg.hostid GROUP BY hgg.hostid HAVING MIN(r2.permission)>0 AND MAX(r2.permission)>=2 );
| EXPLAIN |
| -> Table scan on <temporary> (cost=977.67..981.48 rows=108) (actual time=140.565..140.568 rows=22 loops=1)
-> Temporary table with deduplication (cost=977.63..977.63 rows=108) (actual time=140.563..140.563 rows=22 loops=1)
-> Nested loop inner join (cost=966.80 rows=108) (actual time=0.563..140.006 rows=1421 loops=1)
-> Nested loop inner join (cost=929.99 rows=96) (actual time=0.554..137.096 rows=770 loops=1)
-> Nested loop inner join (cost=638.62 rows=832) (actual time=0.205..2.385 rows=770 loops=1)
-> Filter: (r.permission >= 2) (cost=9.92 rows=12) (actual time=0.157..0.172 rows=35 loops=1)
-> Index lookup on r using rights_1 (groupid=152) (cost=9.92 rows=35) (actual time=0.156..0.165 rows=35 loops=1)
-> Index lookup on hg using hosts_groups_2 (groupid=r.id) (cost=47.37 rows=71) (actual time=0.025..0.061 rows=22 loops=35)
-> Filter: ((h.flags in (0,4)) and (h.`status` in (0,1)) and exists(select #2)) (cost=0.25 rows=0.1) (actual time=0.175..0.175 rows=1 loops=770)
-> Single-row index lookup on h using PRIMARY (hostid=hg.hostid) (cost=0.25 rows=1) (actual time=0.004..0.004 rows=1 loops=770)
-> Select #2 (subquery in condition; dependent)
-> Limit: 1 row(s) (cost=4.86 rows=0.3) (actual time=0.169..0.169 rows=1 loops=770)
-> Filter: ((min(r2.permission) > 0) and (max(r2.permission) >= 2)) (cost=4.86 rows=0.3) (actual time=0.169..0.169 rows=1 loops=770)
-> Group aggregate: max(r2.permission), min(r2.permission) (cost=4.86 rows=0.3) (actual time=0.169..0.169 rows=1 loops=770)
-> Nested loop inner join (cost=4.84 rows=0.3) (actual time=0.073..0.167 rows=3 loops=770)
-> Covering index lookup on hgg using hosts_groups_1 (hostid=h.hostid) (cost=0.82 rows=5) (actual time=0.004..0.007 rows=9 loops=770)
-> Filter: (r2.groupid = 152) (cost=0.57 rows=0.05) (actual time=0.017..0.018 rows=0 loops=6766)
-> Index lookup on r2 using rights_2 (id=hgg.groupid) (cost=0.57 rows=2) (actual time=0.008..0.018 rows=7 loops=6766)
-> Covering index lookup on ht using hosts_templates_1 (hostid=hg.hostid) (cost=0.27 rows=1) (actual time=0.003..0.003 rows=2 loops=770)
|
1 row in set, 1 warning (0.14 sec)
- caused by
-
ZBX-19202 Host dashboard is unavailable for users with admin role
-
- Closed
-