java.lang.OutOfMemory: Java heap space

Hi,

We have a database with 500 mill triples.
With a database with 400 mill triples everything works fine on most queries. But some queries are crashing there to.

The memory settings is -Xms5g -Xmx5g -XX:MaxDirectMemorySize=10g.
According to Home | Stardog Documentation Latest this should be sufficient.

This is the query that crashes on the 400 mill triples

"select  distinct ?registrering ?virksomhet where {",
				"   ?innsynskrav  bruker:innsynskravdel / bruker:rettetMot  ?registrering. ",

				"   ?registrering arkiv:parent* / arkiv:arkivskaper / virksomhet:parent*  ?virksomhet .",
				"   ?virksomhet virksomhet:orgnummer ?orgnummer .",
				"   minus{ ",
					"   ?innsynskrav  bruker:innsynskravdel / bruker:rettetMot  ?registrering. ",
					"       ?registrering arkiv:parent* / arkiv:arkivskaper / virksomhet:parent*  ?virksomhet1, virksomhet.",
				"       ?virksomhet1 virksomhet:orgnummer ?orgnummer .",
				"       ?virksomhet virksomhet:orgnummer ?orgnummer2 .",
				"       ?virksomhet ^virksomhet:parent+ ?virksomhet1.",

				"       FILTER(?virksomhet != ?virksomhet1)",
				"   }",
				"}"

And here are a query that crashes on the 500 mill triples database

PREFIX arkiv: <http://www.arkivverket.no/standarder/noark5/arkivstruktur/>
PREFIX virksomhetmeta: <http://data.einnsyn.no/virksomhetmeta/>

CONSTRUCT {

	?registrering a arkiv:Journalpost.

	?registrering arkiv:offentligTittel_SENSITIV ?offentligTittel_SENSITIV .
	?registrering arkiv:journalpostnummer ?journalpostnummer .
	?registrering arkiv:arkivertDato ?arkivertDato .
	?registrering arkiv:opprettetDato ?opprettetDato .
	?registrering arkiv:journalposttype ?journalposttype .
	?registrering arkiv:journalstatus ?journalstatus .
	?registrering arkiv:dokumentetsDato ?dokumentetsDato .
	?registrering arkiv:publisertDato ?publisertDato .
	?registrering arkiv:journaldato ?journaldato .
	?registrering arkiv:journalsekvensnummer ?journalsekvensnummer .
	?registrering arkiv:journalaar ?journalaar .
	?registrering arkiv:noekkelord ?noekkelord .

	?registrering arkiv:arkivskaper ?arkivskaperparent.
	?arkivskaperparent a virksomhetmeta:Virksomhet.
	?arkivskaperparent virksomhetmeta:epost ?arkivskaperparent_epost.
	?arkivskaperparent virksomhetmeta:telefon ?arkivskaperparent_telefon.

	?registrering arkiv:korrespondansepart ?kp .
	?kp a arkiv:Korrespondansepart.
	?kp arkiv:korrespondansepartNavn_SENSITIV ?korrespondansepartNavn .
	?kp arkiv:korrespondanseparttype ?korrespondanseparttype .

	?registrering arkiv:skjerming ?skjerming .
	?skjerming a  arkiv:Skjerming.
	?skjerming arkiv:skjermingshjemmel ?hjemmel .

	?registrering arkiv:dokumentbeskrivelse ?dokumentbeskrivelse .
	?dokumentbeskrivelse  a arkiv:Dokumentbeskrivelse.
	?dokumentbeskrivelse arkiv:dokumentnummer ?dokumentbeskrivelse_dokumentnummer .
	?dokumentbeskrivelse arkiv:tittel_SENSITIV ?dokumentbeskrivelse_tittel_SENSITIV .
	?dokumentbeskrivelse arkiv:dokumenttype ?dokumentbeskrivelse_dokumenttype .
	?dokumentbeskrivelse arkiv:tilknyttetRegistreringSom  ?dokumentbeskrivelse_tilknyttetRegistreringSom.

	?dokumentbeskrivelse arkiv:dokumentobjekt ?dokumentobjekt.
	?dokumentobjekt a  arkiv:Dokumentobjekt.
	?dokumentobjekt arkiv:referanseDokumentfil ?dokumentobjekt_referanseDokumentfil .
	?dokumentobjekt arkiv:filstoerrelse ?dokumentobjekt_filstoerrelse.
	?dokumentobjekt arkiv:format ?dokumentobjekt_format.


	?registrering arkiv:parent ?parent .
	?parent a arkiv:Saksmappe.
	?parent arkiv:offentligTittel_SENSITIV ?offentligTittel_SENSITIV_parent .
	?parent arkiv:avsluttetDato ?avsluttetDato_parent .
	?parent arkiv:opprettetDato ?opprettetDato_parent .
	?parent arkiv:saksaar ?saksaar_parent .
	?parent arkiv:sakssekvensnummer ?sakssekvensnummer_parent .

}


WHERE {

	{
		?registrering arkiv:offentligTittel_SENSITIV ?offentligTittel_SENSITIV.
		OPTIONAL{?registrering arkiv:journalpostnummer ?journalpostnummer. }
		OPTIONAL{?registrering arkiv:arkivertDato ?arkivertDato. }
		OPTIONAL{?registrering arkiv:opprettetDato ?opprettetDato. }
		OPTIONAL{?registrering arkiv:journalposttype ?journalposttype. }
		OPTIONAL{?registrering arkiv:journalstatus ?journalstatus. }
		OPTIONAL{?registrering arkiv:dokumentetsDato ?dokumentetsDato. }
		OPTIONAL{?registrering arkiv:publisertDato ?publisertDato. }
		OPTIONAL{?registrering arkiv:journaldato ?journaldato. }
		OPTIONAL{?registrering arkiv:noekkelord ?noekkelord. }
		OPTIONAL{?registrering arkiv:journalsekvensnummer ?journalsekvensnummer. }
		OPTIONAL{?registrering arkiv:journalaar ?journalaar. }

	}

	UNION {
		?registrering arkiv:korrespondansepart ?kp.

		?kp arkiv:korrespondansepartNavn_SENSITIV ?korrespondansepartNavn.
		?kp arkiv:korrespondanseparttype ?korrespondanseparttype.
	}

	UNION {
		?registrering arkiv:skjerming ?skjerming.
	}

	UNION {
		?registrering arkiv:skjerming ?skjerming.
		?skjerming arkiv:skjermingshjemmel ?hjemmel.
	}

	UNION {
		?registrering arkiv:parent ?parent.

		OPTIONAL{?parent arkiv:offentligTittel_SENSITIV ?offentligTittel_SENSITIV_parent .}
		OPTIONAL{?parent arkiv:avsluttetDato ?avsluttetDato_parent .}
		OPTIONAL{?parent arkiv:opprettetDato ?opprettetDato_parent .}
		OPTIONAL{?parent arkiv:saksaar ?saksaar_parent .}
		OPTIONAL{?parent arkiv:sakssekvensnummer ?sakssekvensnummer_parent .}


	}


	UNION {
		?registrering arkiv:dokumentbeskrivelse ?dokumentbeskrivelse.
		?dokumentbeskrivelse arkiv:tittel_SENSITIV ?dokumentbeskrivelse_tittel_SENSITIV.

		OPTIONAL{ ?dokumentbeskrivelse arkiv:dokumentnummer  ?dokumentbeskrivelse_dokumentnummer. }
		OPTIONAL{ ?dokumentbeskrivelse arkiv:dokumenttype  ?dokumentbeskrivelse_dokumenttype. }
		OPTIONAL{ ?dokumentbeskrivelse arkiv:tilknyttetRegistreringSom  ?dokumentbeskrivelse_tilknyttetRegistreringSom. }


	}

	UNION {
		?registrering arkiv:dokumentbeskrivelse ?dokumentbeskrivelse.
		?dokumentbeskrivelse arkiv:dokumentobjekt ?dokumentobjekt.

		OPTIONAL{ ?dokumentobjekt arkiv:referanseDokumentfil ?dokumentobjekt_referanseDokumentfil.}
		OPTIONAL{ ?dokumentobjekt arkiv:filstoerrelse ?dokumentobjekt_filstoerrelse.}
		OPTIONAL{ ?dokumentobjekt arkiv:format ?dokumentobjekt_format.}
	}

	UNION{

		?registrering arkiv:parent* / arkiv:arkivskaper ?arkivskaper.
		?arkivskaper virksomhetmeta:parent* ?arkivskaperparent.
		?arkivskaperparent virksomhetmeta:epost ?arkivskaperparent_epost.
		?arkivskaperparent virksomhetmeta:telefon ?arkivskaperparent_telefon.

	}
}

cheers,
Øystein

Hi Øystein,

You can help us by providing the following information:

  • version of Stardog
  • query plans

Also please consider using the -XX:+HeapDumpOnOutOfMemoryError JVM option to grab the heap dump on OOM and sending to us (via dropbox or something).

Thanks,
Pavel

We are using version 5.0.2

Here are the queryplans. The "queyrplan_innsynskrav" is for the first query

queryplan_getregistrering.log (34.1 KB)
queryplan_innsynskrav.log (3.2 KB)

How did you collect the plans? Esp. the first one seems completely garbled. We’re aware of the non-ASCII characters in the output which will be fixed in 5.0.3 but AFAICT they couldn’t have caused such a broken output. Do you have CLI access to the server? If not, you can use HTTP.

One possibility is some poor planning of property paths with *. The only way to test whether it’s the problem is to rewrite sequences like ?x :p*/:q ?y into {?x :q ?y} union {?x :p+/:q ?y} to get rid of :p*. It’s a bit more complicated in your case but you get the idea. You can also completely drop the last part of the UNION from the 2nd query to see if it still fails without property path.

Also, please, try to collect heap dumps on OOM. Those will tell us explicitly what consumed the heap.

Thanks,
Pavel

PS. Reasoning isn’t enabled for your queries, is it?

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.