2016-11-07 11 views
3

マイorientdbデータベースは約230万レコードを持っています。私は、文 SELECT FROM (select PROP1, PROP2, count(*) as c from vin_data group by PROP1) where c > 1を使用して(それらの75万の周りにあります)すべての重複レコードを照会しようとしています。私は限界を200に設定すると、クエリには約180秒かかります(これは遅いと思います)。しかし、私は750000に制限を設定すると、それは私にメモリ不足エラーを与える。私のRAMは4GBで、Xms64mとXmx3600mを設定しました。私はPROP1とPROP1 + PROP2(コンポジット)にインデックスを設定しました。私の質問は - 230万レコードのデータベースでは4GBのRAMで十分ですか?彼らはGROUP BYで使用されていないので、両方の索引上記のクエリのためにOrientdb GCオーバーヘッドの制限は、メモリエラーやパフォーマンスの低下のうち、/超過

答えて

2

は、無価値です。 「where」条件がない場合、クラス全体がスキャンされます。あなたは文の最後にPARALLELキーワードを追加することでそれを最適化しようとすることができます。複数のコアを使用している場合は、はるかに高速でなければなりません。とにかく

、あなたがはるかに高速でなければなりませんように(まだプレアルファで)次期リリースv3.0のに多くの労力が新しいSQLエンジンとクエリに置かれています。

+0

私は理解しています。応答していただきありがとうございます。私は別の目的のためにクラスを索引付けしました。したがって、クエリの種類を考慮すると、230万レコードが4GB RAMを占有するのは正常ですか?今私の目的は、私のデータベースから重複を削除することです。あなたの質問をスピードアップすることを提案するどんなトリックですか?ところで –

+0

、私は(それが重要な場合)8つのコアおよびSSDに並列、Xmxのために20ギガバイトを割り当てる、24ギガバイトのRAMを搭載したシステム上でクエリを実行します。私はまだGCオーバーヘッドの限界を超えて取得します。私はこれが正常ではないと確信しています。トラブルシューティングの提案はありますか? v3.0はいつリリースされるのですか? –

+0

残念ながら 'group by'と' order by'はRAMで動作します。最終結果セットのレコードが2つ以上グループ化されているレコードはいくつありますか?この 'SELECT count(*)FROM(PROP1によってvin_dataグループからcとしてPROP1、PROP2、count(*)を選択する)を実行できますか? – Lvca

関連する問題