This is also an interesting question, when you are going to drop PageStore? As I wrote we want to contribute `query over snapshot` optimization but it does not make sense for non-snapshotable datastores.
I assume your answer will be related to MVStore maturity, right? Sergi 2015-04-16 21:20 GMT+03:00 Thomas Mueller <[email protected]>: > Hi, > > Thanks a lot for your help! I have merged the pull requests. > > I agree the bit field should not be needed. It is currently needed mainly > for the PageStore storage mechanism; I think this can be removed once we > only need to support the MVStore. > > Regards, > Thomas > > > On Wed, Apr 15, 2015 at 11:38 AM, Sergi Vladykin <[email protected] > > wrote: > >> Thanks, Noel! >> >> But here you are trying to workaround BitField growth while it should not >> grow infinitely at first. Nevertheless your optimization can be helpful. >> I've found out that it was really id leak: in CreateTable.update() we >> allocate object id but since this is a session local object it is not >> getting stored into meta table, then in DropTable we call >> Database.removeMeta, can't find meta entry to drop and don't clear id bit. >> I fixed it and submitted pull request on Github. >> >> Sergi >> >> >> 2015-04-14 17:39 GMT+03:00 Noel Grandin <[email protected]>: >> >>> >>> >>> On 2015-04-14 03:04 PM, Sergi Vladykin wrote: >>> >>>> Guys, >>>> >>>> There is an important performance issue with >>>> Database.allocateObjectId(). Over time it becomes slower and slower. >>>> >>>> >>> Does this patch help? >>> >>> Index: src/main/org/h2/engine/Database.java >>> =================================================================== >>> --- src/main/org/h2/engine/Database.java (revision 6118) >>> +++ src/main/org/h2/engine/Database.java (working copy) >>> @@ -920,6 +920,7 @@ >>> session.log(meta, UndoLogRecord.DELETE, found); >>> } >>> objectIds.clear(id); >>> + objectIdsLastClearBit = Math.min(objectIdsLastClearBit, >>> id); >>> if (SysProperties.CHECK) { >>> checkMetaFree(session, id); >>> } >>> @@ -1421,14 +1422,17 @@ >>> } >>> } >>> >>> + private int objectIdsLastClearBit = 0; >>> + >>> /** >>> * Allocate a new object id. >>> * >>> * @return the id >>> */ >>> public synchronized int allocateObjectId() { >>> - int i = objectIds.nextClearBit(0); >>> + int i = objectIds.nextClearBit(objectIdsLastClearBit); >>> objectIds.set(i); >>> + objectIdsLastClearBit = i; >>> return i; >>> >>> } >>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "H2 Database" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To post to this group, send email to [email protected]. >>> Visit this group at http://groups.google.com/group/h2-database. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "H2 Database" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To post to this group, send email to [email protected]. >> Visit this group at http://groups.google.com/group/h2-database. >> For more options, visit https://groups.google.com/d/optout. >> > > -- > You received this message because you are subscribed to the Google Groups > "H2 Database" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/h2-database. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "H2 Database" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/h2-database. For more options, visit https://groups.google.com/d/optout.
