それもChatGPT!?と驚いた使用方法を教えてください

“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個しかしていないです。)

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

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

A 回答 (2件)

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



トランザクションで処理すればいいだけでは?
innoDBでテーブルロックは普通はあり得ない運用スタイルです
    • good
    • 0
この回答へのお礼

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

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


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

お礼日時:2014/12/16 19:29

ちなみにそのテーブルは本当にinnoDBなのでしょうか?


(myISAMとかその他エンジンではない?)

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

この回答への補足

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

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

補足日時:2014/12/15 21:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報