Previous Entry Share Next Entry
Почему запрос не использует cache?
v muzee
vitaly_il wrote in ru_mysql
Есть MySQL 5.7.16 на Убунте, который используется как бэкенд для Wordpress.
Куча криво написанных запросов, но после того, как я активизировал cache, большинство запросов выполняется из cache.
Но один почему-то cache не использует.
Заранее спасибо за помощь!



Проблематичный запрос (таблицы статичны и другие запросы с этими же табицами кешируются)

SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID  FROM wp_posts     LEFT JOIN wp_postmeta      ON ( wp_posts.ID = wp_postmeta.post_id )     LEFT JOIN wp_postmeta AS mt1      ON (wp_posts.ID = mt1.post_id      AND mt1.meta_key = '_pagefrog_fbia_status' )  WHERE 1=1     AND (     ( wp_postmeta.meta_key = '_pagefrog_fbia_status'            AND wp_postmeta.meta_value = '1' )           OR     mt1.post_id IS NULL           OR   ( wp_postmeta.meta_key = '_pagefrog_fbia_status'            AND wp_postmeta.meta_value = '' ) )    AND wp_posts.post_type = 'post'    AND ((wp_posts.post_status = 'publish'))  GROUP BY wp_posts.ID  ORDER BY wp_posts.post_date DESC  LIMIT 0, 10


 SHOW STATUS LIKE "qcache%"; +-------------------------+----------+ | Variable_name           | Value    | +-------------------------+----------+ | Qcache_free_blocks      | 1700     | | Qcache_free_memory      | 49555584 | | Qcache_hits             | 17960465 | | Qcache_inserts          | 6928571  | | Qcache_lowmem_prunes    | 1850967  | | Qcache_not_cached       | 924283   | | Qcache_queries_in_cache | 13303    | | Qcache_total_blocks     | 28441    | +-------------------------+----------+


SHOW VARIABLES LIKE 'query_cache*'; SHOW VARIABLES LIKE '%query_cache%'; +------------------------------+----------+ | Variable_name | Value | +------------------------------+----------+ | have_query_cache | YES | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 83886080 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF


  • 1
наверное из за SQL_CALC_FOUND_ROWS
но инфа не 100%

Большое спасибо - так и есть.
Завтра попробую понять что это за SQL_CALC_FOUND_ROWS.
Возможно, чтобы кэшировать с SQL_CALC_FOUND_ROWS надо увеличить query_cache_limit.
Но как минимум понятно куда рыть.

это штука говорит считать, сколько бы строк заселектилось, если бы не было LIMIT в запросе.

потом делаешь SELECT FOUND_ROWS() - и получаешь это кол-во.

Более-менее дошло.
Чего я до сих пор не способен понять - кто пишет такой уродский SQL код для вордпресс и прочих CMS.

умники, вестимо. скорее всего косяк "уровня абстракции баз данных", типа как узнать сколько записей нам придёт, ведь лимита то в запросе нет, а SQL_CALC_FOUND_ROWS звучит красиво и как бы со смыслом.

  • 1
?

Log in

No account? Create an account