- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ロックテーブルサイズ超えのエラー対処)
ロックテーブルサイズ超えのエラー対処
このQ&Aのポイント
- “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個しかしていないです。) 詳細な内容は提示していないので、わかりにくいですが、ご指摘頂ければ提示します。 設定や状態確認や見ておくべき点などが提案ベースでも教えて頂ければ幸いです。 すいませんがよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>ロックは複数のプロセスから同時にアクセスしないよう トランザクションで処理すればいいだけでは? innoDBでテーブルロックは普通はあり得ない運用スタイルです
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
回答No.1
ちなみにそのテーブルは本当にinnoDBなのでしょうか? (myISAMとかその他エンジンではない?) またinnoDBを利用していてなぜテーブルロックする必要があるのでしょうか?
質問者
補足
連絡ありがとうございます。 まず、innoDBでした。SQL文で全テーブル確認しました。 あと、ロックは複数のプロセスから同時にアクセスしないようにロックしています。 作りは見直すのは大変ですので、何かあれば教えて頂けばと思います。
お礼
なるほど、ありがとうございます。 通常はロックしないんですね。 ちないにロックを外してSQLのUPDATE単体で実行しても 同じでした。 バックアップは良く見ると800Mbyteありましたが、 メモリの2Gまでの容量はありませんでした。 ありがとうございました。