RavenDB 3.0 New Stable Release
We have just released build 3785 of RavenDB 3.0. This build has quite a bit of changes (for the full gory details, see the pull request).
This release includes about 3 months of bug fixes, performance improvements and the like. We have been testing this on our own systems for a few weeks now, as well as on multiple live production sites, and the results have been nothing but encouraging.
Major changes
- Voron & map/reduce optimizations. We have done major work to optimize how RavenDB uses map/reduce on Voron. As a result, map/reduce performance on Voron has improved tremendously. However, this require a migration step during the first startup. If you have a large RavenDB database using Voron, and you are making heavy use of map/reduce, take into account that on first start, RavenDB will need to perform an internal migration, which can take a while.
- Lucene & memory allocation reduction on queries. We have drastically reduced the amount of memory that is allocated per query, and improved the performance of queries substantially.
Improvements:
- Many small perf optimizations, memory allocations reductions, object pooling, etc. Drastic reduction in memory allocations on common code paths.
- Better handling of buffer allocations in websockets, reduces memory fragmentation.
- Better handling of Take() / Skip() inside an index.
- Allow only a single index to use the fast precomputation optimization at a time (reduce memory usage if multiple medium sized indexes are changed concurrently).
- Better handling of concurrent addition of multiple indexes to large databases, will now run in the same set of indexing batches, instead of each having their own.
- Re-implemented memory statistics checks using native calls to avoid expensive allocations.
- Provide more detailed information when an index is corrupted.
- Adding endpoint for stopping / starting just reduce work.
- Less aggressive changes to the batch size at scale, being more cautious gives us a bit slower perf but more stable system under load.
- Optimized Voron recovery code heavily to support slow I/O systems on large databases.
- Allow to mark individual databases as development / staging /production.
- Better handling of Lucene file usage, using mmap to avoid all allocations when querying the indexes. Significant improvements to both memory usage and querying speeds.
- Subscriptions can now start from a given etag.
- Subscriptions now offer more robust handling for attempting to open an existing subscription.
- Subscriptions will now send a “no results found” so we won’t time out for mostly idle subscriptions.
- Allow to manage scripted index scripts from code using AbstractScriptedIndexCreationTask.
- Fixing replication issue with RavenFS with large number of files being modified all the time.
- Track the query parse time as well, for certain queries the expensive part is parsing the query, rather than executing it.
- Can lock transformers for modifications now as well as indexes.
- Better heuristics for calculating how much memory (native & managed) we are actually using.
- Add debug endpoint to track how much map/reduce work we still have to do.
Bug Fixes:
- Don’t update a side by side index if it already exits.
- Allow to update a side by side index while it is still running.
- Fixing index compilation error on .NET 4.6 using “new string[0]”.
- Fixed an NRE when the index definition was removed forcibly when using dynamic queries.
- Fixed error handling during disposal causing an exception to escape thread boundary and crashing.
- Fixed FIPS licensing issue on embedded dbs.
- Admin logs are not capturing logs protected by IsDebugEnabled statement
- Fixed a finalizer usage bug causing us to try to read from a closed handle.
- Prevent corrupted index warning when creating a map-reduce index and indexing is disabled.
- Preventing code from trying to use disposed internal transactions.
- Installed fix - check and revoke URL reservation options when Use existing website is selected.
- Properly dispose of timer instance when shutting down a database using expiration bundle.
- Prevent an error loading ICSharpCode.NRefactory from killing RavenDB client startup.
- When disk space is very low, stop indexing and warn about it, rather than index to full disk error (and probable index corruption).
- Fixing stack trace generation in generate debug info when we have spaces in the temp path.
- Moved default db locations outside of the IIS directory to avoid IIS bug causing restarts.
- When out of memory, replication will back off and retry, rather than fail continuously.
- Better handling of deleted then created indexes and transformer replicating to sibling nodes.
- Fixing case sensitivity issue when returning document ids.
- Fixing an issue with file names in RavenFS containing #.
Comments
Congratulations team Rhinos!
Hi Oren,
This is good news, especially if it's addressing the memory issues we have been hit by. Please can I ask about this one:
http://issues.hibernatingrhinos.com/issue/RavenDB-3415.
I saw in a previous message that this would not be fixed until 3.5, however when I look at this issue it says it is fixed in 3.0. Please can you confirm whether it is indeed fixed in this latest Stable release because that will be a huge drive for me to proceed with the upgrade.
Cheers,
Ian
Yes, that is in the new release. See commit: https://github.com/ravendb/ravendb/commit/d468bb0eecc30030d6d73d5ee2dba0b3ac88b55e
Good stuff - I need to learn how to use GitHub some day... we're still in TFS land...
Congrats! I'm curious - what version of Lucene port do you use? I thought the development of Lucene in .NET has stopped a few years ago. Do you maintain your own fork?
Gleb, 3.0.3 - we have our own fork, yes. But development on Lucene.NET is much more active now and the team is trying to get 4.8 out the door
Great! I'll give it a spin on my sites and see how it works out.
That last fix about ICSharpCode.NRefactory is the big one for me. That bug has plagued me, and I've tried a million things to repro and find the root cause. Crossing my fingers in hopes it is indeed fixed.
Comment preview