2010-11-13 30 views
0

Exécuté avec -Xmx1024m, en essayant d'ouvrir 100 fichiers CSV en tant que CREATE TEXT TABLE, . Quelque part au milieu, obtenir OOM. Essayé de réduire cache_scale à 1. Fonctionne mieux, mais toujours MOO à un moment donné. Quelle est la raison?Quelle est la raison de l'obtention de MOO lors de l'ouverture de centaines de tables TEXT à l'aide de HSQLDB CREATE TEXT TABLE

J'ai trouvé que la mémoire est utilisée agressivelly pour allouer beaucoup de org.hsqldb.PointerNode instances. Une raison pour éviter cela?

Répondre

1

Les tables TEXT sont des tables spéciales qui utilisent un fichier CSV (valeur séparée par des virgules) ou un fichier similaire comme source de données. Ces tables peuvent être utilisées comme n'importe quelle table SQL pour interroger et écrire des données.

Bien que les données soient stockées dans le fichier CSV, les index et les pointeurs vers les lignes de données sont stockés en mémoire. Par défaut, il existe un seul index sur chaque table qui prend également en charge la PRIMARY KEY de la table s'il y en a une. Les contraintes UNIQUE ou FOREIGN KEY sur ces tables sont sauvegardées par des index en mémoire.

Le cache_scale (avec HSQLDB 1.8.x) est utilisé pour contrôler la quantité de données de ligne qui est mise en mémoire cache à tout moment. Une valeur plus petite réduit la mémoire utilisée pour la mise en cache des données mais ne modifie pas la mémoire nécessaire pour les index.

+0

Fred. Comment éviter la création de cet index? Je n'en ai vraiment pas besoin car je sélectionne les tables de formes ligne par ligne ... – Archer

+0

Une forme d'index est nécessaire même si les données sont sélectionnées ligne par ligne. Nous allons améliorer la prise en charge de la table TEXT dans les futures versions et éventuellement prendre en charge les index de base de disque. Pour votre utilisation, vous pouvez réduire le nombre de tables chargées simultanément avec SET SET T SOURCE OFF et Set SET T SOURCE ON – fredt

+0

Merci beaucoup pour votre clarification. – Archer