クエリ:
SELECT COUNT(online.account_id) cnt from online;
しかし、オンライン テーブルもイベントによって変更されるため、 を実行するとロックが発生することがよくありますshow processlist
。
MySQL には、ロックを引き起こさない select ステートメントを作成できる文法はありますか?
また、上記で言及し忘れましたが、これは MySQL スレーブ データベース上にあります。
my.cnf:transaction-isolation = READ-UNCOMMITTED
スレーブに追加した後、エラーが発生します:
エラー「バイナリ ロギングは不可能です。メッセージ: InnoDB のトランザクション レベル「READ-UNCOMMITTED」は、クエリのバイナリログ モード「STATEMENT」では安全ではありません」
それで、これを実行するための互換性のある方法はあるのでしょうか?
ベストアンサー1
「MYSQL WITH NOLOCK」というタイトルの記事を見つけました
https://web.archive.org/web/20100814144042/http://sqldba.org/articles/22-mysql-with-nolock.aspx
MS SQL Server では次の操作を実行します。
SELECT * FROM TABLE_NAME WITH (nolock)
MYSQLの同等品は
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ;
編集
マイケル・ミオール以下を提案しました(コメントより)
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
COMMIT ;