昨日の続き。
とりあえずデータソースのサイズを2GBとったらロードに成功した。ちなみにVM自体の物理(?)メモリが2GBなのでkswapd0が唸りを上げてベンチマークどころじゃない感じだけどそれはそれ。そもそもVMでベンチマークは取らない。
ロード処理はOracle DB用のスクリプトを元にプライマリキーの作り方だけ変えた(create tableの方に移した)ら、そのまま動いた。ただキーを先に作ったのが拙かったかスワップが激しいのが拙いのかデータ一式挿入して作るのに30分位掛かった。
だがしかし。
本編は動かすが速いか忽ちエラー終了。
var rs01 = fetchAsArray("SELECT /* D-01 */ n1.no_o_id " + "FROM new_orders n1 " + "WHERE n1.no_w_id = $int AND n1.no_d_id = $int " + "AND n1.no_o_id = (" + "SELECT MIN(n2.no_o_id) " + "FROM new_orders n2 " + "WHERE n2.no_w_id = $int AND n2.no_d_id = $int" + ") " + "FOR UPDATE", w_id, d_id, w_id, d_id);
がエラーに。エラー番号1110。TimesTenはFOR UPDATE中で集計関数使っちゃ駄目だそうな。どうしようかねー。先にSELECT MINだけやってJavaScript側の変数に入れれば良いのかも。しかしJavaScriptはよく判らぬ。SQLはもっと判らない。select * from dualより難しいのは無理。
ちなみに同じSQLをttisqlからやったら、このエラーは実はWARNINGで値は返ってきてるんだよな。ループの中でなければException見分けて握りつぶす所だけど。
コメント