- 締切済み
Sybase IQでのINSERT速度改善
リアルタイムにデータが発生し、Sybase IQ(15.2)のテーブルに随時レコード追加する処理のパフォーマンス改善をしたいです。 Javaでプログラムを書いていて、1スレッドで処理をしていたのですが、レコード総数が多くなってきたせいか処理が重くなってきました。 ですので複数スレッド・コネクションでINSERT文を実行するように修正したところ、以下のエラーが発生しました。 「SQL Anywhere エラー -210 : テーブル名 のローは、ユーザ '別のユーザ' によってロックされています。」 INSERTしているだけなのですが、テーブル全体をロックしているのかエラーが発生してしまいます。 数十件くらいのINSERT文をバッチ処理(executeBatch)で実行するということを、各スレッドで数秒間隔で行っています。UPDATEは一切行いません。 Sybase IQで、複数のコネクションで並列してINSERT文を実行するということはできないのでしょうか? また他に改善方法がありましたら教えてください。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- maiko0318
- ベストアンサー率21% (1483/6969)
回答No.1
ファイルにデータを書き出すときに2つ以上が同時に書き込むと ファイルが壊れます。 複数が書き込む処理を1つずつ処理するように制御しているというのが データベースの1つの特徴ですので、言われるような処理はできません。 1つ、あるとすれば一連のINSERTが終了次第、COMMITを挟んでおくと スレッドの終了を待たなくてもいいので速くなったりエラーが出にくくなるかもしれません。
お礼
回答ありがとうございます。 COMMITは挟んでいるのですが発生してしまいます。 Sybase IQへのINSERTが極端に遅いというのが原因なのですが、改善策を考え中です。