TokuDB 7.5で、バッチごとに約1000レコードの同時バッチ挿入があります。各バッチ更新は、1 つのトランザクション内で行われます。このテーブルには、約 1 億件のレコードも含まれています。
問題は、次の例外が時々スローされることです。
java.sql.BatchUpdateException: ロック待機タイムアウトを超えました。トランザクションを再開してみてください
使用されるトランザクション分離レベルは Repeatable_Read であり、記事で Repeatable_Read を使用すると SELECT クエリのギャップ ロックが発生することを読みました。
しかし、現時点では INSERTS しかありません。
このロック タイムアウトはギャップ ロックが原因である可能性がありますか?もしそうなら、同時 INSERTS はギャップ ロックによってどのように影響を受けますか?
スキーマ
CREATE TABLE `message` (
`id` BIGINT(20) UNSIGNED PRIMARY KEY AUTO_INCREMENT,
`message_id` VARCHAR(255) NOT NULL,
`sent_time` TIMESTAMP DEFAULT '0000-00-00 00:00:00' ,
`type_id` TINYINT(4) NOT NULL,
`correlation_id` BIGINT(20) NOT NULL,
`origination_address` VARCHAR(16) NOT NULL,
`destination_address` VARCHAR(16) NOT NULL,
`created_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
UNIQUE KEY (`message_id`,`sent_time`, `type_id`, `correlation_id`),
KEY `OA` (`origination_address`),
KEY `DA` (`destination_address`)
)