こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ロックテーブルサイズ超えのエラー対処

“ERROR 1206 (HY000): The total number of locks exceeds the lock table size”エラーが発生する場合の対処方法について教えてください。

/etc/my.cnfの“innodb_buffer_pool_size”を大きくするのが解決策ですので

innodb_buffer_pool_size = 2G

のように最大値に変更してみましたが、解決しませんでした。
一応、

max_connections

も減らしてみましたが、解決しません。

PHPからMySQLにコネクションを接続し続けて切断するような処理はしていませんが、問題ありますでしょうか?(最初にmysql_connectで接続し、プログラムが終了するまで、何回もmysql_queryでSQL文(SELECTやUPDATE等)を実行しています。)
一概に言えませんが、データベースをバックアップでテキストで出力しても、300Mbyteくらいのデータですが、2Gのメモリを使うのでしょうか?

物理メモリを増やして
innodb_buffer_pool_size
を増やすしか解決方法がないのかご教授頂きたいです。
(ロックするテーブルは同時に1個しかしていないです。)

詳細な内容は提示していないので、わかりにくいですが、ご指摘頂ければ提示します。
設定や状態確認や見ておくべき点などが提案ベースでも教えて頂ければ幸いです。

すいませんがよろしくお願いします。

投稿日時 - 2014-12-15 13:04:08

QNo.8859076

困ってます

質問者が選んだベストアンサー

>ロックは複数のプロセスから同時にアクセスしないよう

トランザクションで処理すればいいだけでは?
innoDBでテーブルロックは普通はあり得ない運用スタイルです

投稿日時 - 2014-12-16 09:21:27

お礼

なるほど、ありがとうございます。
通常はロックしないんですね。

ちないにロックを外してSQLのUPDATE単体で実行しても
同じでした。
バックアップは良く見ると800Mbyteありましたが、
メモリの2Gまでの容量はありませんでした。


ありがとうございました。

投稿日時 - 2014-12-16 19:29:43

ANo.2

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

ちなみにそのテーブルは本当にinnoDBなのでしょうか?
(myISAMとかその他エンジンではない?)

またinnoDBを利用していてなぜテーブルロックする必要があるのでしょうか?

投稿日時 - 2014-12-15 13:53:52

補足

連絡ありがとうございます。
まず、innoDBでした。SQL文で全テーブル確認しました。

あと、ロックは複数のプロセスから同時にアクセスしないようにロックしています。
作りは見直すのは大変ですので、何かあれば教えて頂けばと思います。

投稿日時 - 2014-12-15 21:50:49

あなたにオススメの質問