限定しりとり

リアルタイムにデータが発生し、Sybase IQ(15.2)のテーブルに随時レコード追加する処理のパフォーマンス改善をしたいです。

Javaでプログラムを書いていて、1スレッドで処理をしていたのですが、レコード総数が多くなってきたせいか処理が重くなってきました。
ですので複数スレッド・コネクションでINSERT文を実行するように修正したところ、以下のエラーが発生しました。

「SQL Anywhere エラー -210 : テーブル名 のローは、ユーザ '別のユーザ' によってロックされています。」

INSERTしているだけなのですが、テーブル全体をロックしているのかエラーが発生してしまいます。

数十件くらいのINSERT文をバッチ処理(executeBatch)で実行するということを、各スレッドで数秒間隔で行っています。UPDATEは一切行いません。

Sybase IQで、複数のコネクションで並列してINSERT文を実行するということはできないのでしょうか?
また他に改善方法がありましたら教えてください。

A 回答 (1件)

ファイルにデータを書き出すときに2つ以上が同時に書き込むと


ファイルが壊れます。

複数が書き込む処理を1つずつ処理するように制御しているというのが
データベースの1つの特徴ですので、言われるような処理はできません。

1つ、あるとすれば一連のINSERTが終了次第、COMMITを挟んでおくと
スレッドの終了を待たなくてもいいので速くなったりエラーが出にくくなるかもしれません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
COMMITは挟んでいるのですが発生してしまいます。
Sybase IQへのINSERTが極端に遅いというのが原因なのですが、改善策を考え中です。

お礼日時:2014/03/28 16:18

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