我有两个并发进程:
1。)Writer - 定期将新行插入MySQL数据库(10-20行/秒)
2。)Reader - 从插入
的同一个表中读取我注意到Reader进程在启动时似乎只看到了数据库的快照。找到此启动之前发生的插入,但之后发生的插入不是。如果我关闭Reader进程并重新启动它(但让Writer继续运行),它有时(但不总是)会看到更多数据,但似乎又得到了数据库的时间点视图。
我在每次插入后运行一个提交(下面的代码片段)。我调查了这是否是改变缓冲/池化的功能,但做了“设置@@ global.innodb_change_buffering = none;”没有效果。此外,如果我通过MySQL工作台进入,我可以查询Writer插入的最新数据。所以这似乎是如何设置Python / MySQL连接的函数。
我的环境是:
Windows 7
MySQL 5.5.9
Python 2.6.6 - EPD 6.3-1(32位)
MySQL python连接器
插入代码为:
def insert(dbConnection, statement):
cursor = dbConnection.cursor()
cursor.execute(statement)
warnings = cursor.fetchwarnings()
if warnings:
print warnings
rowid = []
else:
rowid = cursor.lastrowid
cursor.close()
dbConnection.commit()
return rowid
读者代码是:
def select(dbConnection, statement):
cursor = dbConnection.cursor()
cursor.execute(statement)
warnings = cursor.fetchwarnings()
if warnings:
print warnings
values = []
else:
values = np.asarray(cursor.fetchall())
cursor.close()
return values
答案 0 :(得分:1)
阅读方面是什么样的?
我敢打赌这是读取端隔离级别的问题。很可能您的读取连接正在获取隐式事务,默认的InnoDB隔离级别为:
尝试发出:
cursor.execute("SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED")
在阅读方面。