usbmonkey
@usbmonkey

Как дебажить запросы в query-cache?

Привет!
Заметил вот такую интересную штуку.
Входные данные:
5.6.30-76.3-log Percona Server (GPL), Release 76.3, Revision 3850db5

pymysqlpool==0.4.1
API на python ну и, само собой, mysql-client.

Задача настроить query cache.

Проблема заключается вот в чем.
API делает что-то вроде:
SELECT something FROM somethings WHERE something;

Когда я первый раз (на самое деле второй) делаю такой запрос через mysql-client
SET AUTOCOMMIT = 0;
SELECT something FROM somethings WHERE something;

А затем тоже самое только с AUTOCOMMIT = 1.
То оба запроса берутся из кеша.
После того, как я делаю ровно такой же запрос, через вызов API, то cache-hit'a уже нет.
И что самое интересное.
Если после дерганья API вернутся и повторить теже самые запросы через mysql-client, то в кеш попадает только те, перед которыми я выставляю AUTOCOMMIT в 1.

Кусочек кода API.
from pymysqlpool import pool
import pymysql
...
...
...
if kwargs.has_key('max_active_connections'):
    self.ConnectionPool.maxActiveConnections = kwargs.get('max_active_connections')

def getConnection(self):
    return self.ConnectionPool.GetConnection()

def query(self, query):
    connection = self.getConnection()
    cursor = connection.getCursor()
    rresult = None
        try:
           cursor.execute(query)

...
...
...


P.S.
C маном dev.mysql.com/doc/refman/5.6/en/query-cache-operat... ознакомился.
Проблема воспроизводиться на 5.6 разных ревизий.
pymysqlpool устанавливает AUTOCOMMIT = 0 по умолчанию.
Для чистоты эксперимента, хотя это не важно, попробовал делать запросы без ConnectionPool.
Ну и самый главный вопрос, как можно выявить почему некоторые запросы в кеш попадают, а некоторые нет.

Идеи закончились. Подскажите, куда копать.
  • Вопрос задан
  • 137 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы