Eu gostaria de monitorar quantas vezes determinadas consultas são executadas. Dê uma olhada nas 3 consultas abaixo, a segunda e a terceira são escritas como declaração preparada.
SELECT COUNT(*) FROM TABLE1
UPDATE TABLE2 SET `last_parsed` = NOW() WHERE `id` = ?
SELECT 1 FROM TABLE2 WHERE (`last_parsed` IS NULL OR `last_parsed` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 7 DAY)) AND `id` = ?
O mariadb/mysql dbms acompanha quantas vezes cada consulta é executada? Ele agrupa as declarações preparadas em uma listagem, de modo que, se id
for 10 ou 20, ambas apareçam na mesma categoria?
MySQL e MariaDB...
Plano A: Ative o slowlog. Tenha
long_query_time = 0
. Usept-query-digest
para resumir o log. (Isso também fornecerá informações sobre consultas com desempenho insatisfatório.)Plano B: Ligue o log geral. Use
pt-query-digest
para resumir o log.Cuidado: Ambas as técnicas usam muito espaço em disco e não limpam depois de si mesmas. Ou seja, você precisará lidar com o espaço em disco usado. se você executar isso por um longo tempo.
O 'digest' remove valores numéricos e de string reais. Ou seja, "... WHERE x=2" e "... WHERE x=987" são considerados o "mesmo". Se você precisar de "mesmo" para incluir os mesmos valores, planeje usar o log geral e fazer seu próprio pós-processamento.