0

sqlalchemy を使用して (Innodb 経由で) MySQL にアクセスしています。ロックに使用するクエリは次のとおりです。

create_engine('mysql+mysqldb://root:root@localhost/tmp_db')
db_session = scoped_session(sessionmaker(bind=engine))
db_session.query(Transaction).filter_by(key='abc').with_lockmode('update').first()

テーブルに key = 'abc' が見つかりません。ただし、トランザクション テーブル全体がこのクエリによってロックされます。show engine innodb status から確認したところ、このテーブルのすべての行がロックされています。他の db セッションは、テーブル内のどの行にもアクセスできず、タイムアウト エラーが発生します。

sqlalchemyでwith_lockmodeを使用すると、レコードが見つからないためにテーブル全体がロックされるのはなぜですか?

4

1 に答える 1

2

Ok。キー列にインデックスをテーブルに追加すると、問題が解決することがわかりました。

于 2012-10-24T06:11:33.557 に答える