2016-12-27 11 views
3

私は、oracleのデータをRDMSとIgnite Integrationを介してIgniteキャッシュにロードします。キャッシュのサイズは4000万です。 私は、次の3つのようないくつかの単純な集計SQLを実行すると:count、max、minのような簡単な集計は極端に遅い

select count(id) from Person

select max(id) from Person

、彼らは非常に遅いです

select min(id) from Person

は、それぞれが約5分かかります。

これらは非常に簡単な操作であり、データを移動させずにマップを縮小したメカニズムで行うことができるので、非常に高速でなければなりません。

バレンティンのコメント@パー

:私はidカラムがインデックスを有効にしていると思います

。出力は

で、

を私は計画 explain select min(id) from Personを説明するためにSQLを実行すると

idxs.add(new QueryIndex("id", true, "PK_ID"));

:私はCacheConfigクラスを生成するためにignite-schema-import.shを使用しています、そして、それは次のコードが含まれています SELECT MIN(ID) AS __C0 FROM "Person".PERSON /* "Person".PK_ID */, SELECT MIN(__C0) AS __C0 FROM PUBLIC.__T0 /* "Person"."merge_scan" */,

また、次のコードのOFFHEAP_TIEREDメモリモードを使用しています。

cacheConfig.setCacheMode(CacheMode.PARTITIONED); 
cacheConfig.setBackups(0); 
cacheConfig.setMemoryMode(CacheMemoryMode.OFFHEAP_TIERED); 
cacheConfig.setOffHeapMaxMemory(0); 
cacheConfig.setOffHeapMaxMemory(48*1024*1024*1024); 
cacheConfig.setStatisticsEnabled(true); 
cacheConfig.setCopyOnRead(false); 

答えて

1

idフィールドがインデックスに登録されていないようです。その場合、これらのクエリはキャッシュスキャンを意味します。スケールアウトすることでパフォーマンスを向上させることができますが、インデックスは特にminmaxクエリの方がずっと良い解決策です。


UPDATE。この場合、インデックスは使用されていないことが判明しました。最適化のチケットは以下の通りです:https://issues.apache.org/jira/browse/IGNITE-4524

+0

ありがとう@Valentin。あなたのコメントごとに質問を更新しました。どうぞご覧ください。 – Tom

+0

https://apacheignite.readme.io/docs/sql-performance-and-debugging#section-using-h2-debug-consoleツールでインデックス情報を確認しました。インデックスが正しいかどうかを調べます。 – Tom

+0

@Tom、私の応答の更新を参照してください。 –

関連する問題