Привет!
Заметил вот такую интересную штуку.
Входные данные:
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.
Ну и самый главный вопрос, как можно выявить почему некоторые запросы в кеш попадают, а некоторые нет.
Идеи закончились. Подскажите, куда копать.