Skip to main content

Tizra gets faster

Non-technical summary: things are lots faster at Tizra sites and admin tools. There's certainly more to do, but we've got more tricks up our sleeves! Because the big current speed boost is related to one cause, and it took me a while to track down, the geek appendage to this post describes what we found and how we fixed it.

Geekly details

I spent a bunch of time last week looking at system performance. As we've been adding customers and usage, we were beginning to feel the pinch. Performance always varies, but the range of response times was getting wider as things slowed, leading me to think that there might be some systemic issues that would give us a quick improvement (and indeed there was some Linux tuning that helped a bit). But data access seemed to be the real issue, so I spent a bunch of time looking into hibernate, and our caching and querying, and then wound up spending a day or so basically watching all the queries go through Postgres. And you know what? most of them seemed much slower than they should be, even though they are pretty hairy.

Of course, the next step was to check for database indexes, and how the query plans were using them. But in hand testing the plans looked good, and the indexes were sensible. But when run by hand the queries were also significantly faster than when hibernate ran them! This was much easier to see now that we have a live load, which is inevitably different from a test setup. So why the difference? Postgres was ignoring our indexes only when Tizra publisher made the queries.

Turns out that there's an old bug in Postgres where it would ignore indexes on bigint fields in prepared statements unless there was an explicit data type cast. (That type confusion was an obscure result of skew between Postgresql and the SQL standard.) And that was the behavior I was seeing, even though we were using a much more recent vintage of all the software. This was terrible for us, because we have a multi-tenant publishing system for large document collections and we use bigints as primary object identifiers!

So, why the old problem if the bug is gone, and we are not using postgres 7? It turns out that we dynamically build those hairy queries, in HQL (hibernate query language), using the String trick. But nowadays instead of making your indexes work, it breaks them! The differences are invisible in the SQL. It turned out that we were in a version "donut hole." Our database was recent enough so the String trick worked the opposite way (preventing fast queries for our prepared statements), but the JDBC driver wasn't making the calls in the right way to make the old trick work. End result: we're now running the latest JDBC driver with compatibility options set while we update our hairy query generator. And now we can really start tuning our setup!

If the web had not provided the history of the old bug, I would have had a much worse time even knowing where to look to find our somewhat subtle configuration issue. So enjoy the speedup, I sure am!

Comments

Anonymous said…
This is pretty wierd, any chance you can post the exact version numbers of Postgres, Hibernate, and JDBC involved?

Popular posts from this blog

See Tizra at the Frankfurt Book Fair

Guten Tag! If you are attending the Frankfurt Book Fair and thinking about your digital publishing strategy, we’d like to meet with you to tell you about all the great things happening at Tizra including: Our recent partnership with HighWire to power their Folio ebook platform (see below) How Goodheart-Willcox uses Tizra to create digital first content Exciting new features such as an improved e-reading experience , new mobile responsive design templates , and new APIs for faster uploading and better design integration Plus, some big news we can't tell you about until the show! Find Tizra at: The American Collective Stand Hall 8.0 S31 or email us at carlos.martinez@tizra.com to arrange a meeting. Please join us in congratulating HighWire on the launch of Folio! Built on the HighWire Open Platform and leveraging Tizra for ebook integration, Folio is a flexible, scalable, ebook solution, providing a user-friendly, intuitive reading experience t...

Case Study: Orca Book Publishers Unifies its Digital Offerings Using the Tizra Platform

"We needed to find a way to keep all our of customers together on the same site," --Melanie Jeffs, Director of Digital Products, Orca Book Publishers Orca, a Canadian-based publisher of award-winning books for children, teens and reluctant readers, used to maintain separate websites and e-commerce platforms for its various digital offerings. The company had its free teaching resources under its own domain, separate e-commerce stores for the U.S. and Candian booklists, and a third site supporting paid subscriptions to its Text2Reader language arts resources. Maintaining these disparate platforms was a headache and didn't provide a smooth customer experience. "We needed to find a way to keep all our of customers together on the same site," said Melanie Jeffs, Director of Digital Products at Orca. After closely examining a number of different e-commerce solutions, Orca selected the Tizra Digital Publishing Platform because it offered: The ability...

Tizra Upgrade Provides a Crisper, More Interactive E-Reading Experience

In the print world, when you think about a reader’s user experience, you consider factors like the size and weight of a book, paper quality, typeface, layout and design.  Moving to digital, some of these factors still hold true, but others are replaced with concerns such as speed, intuitive controls, cross-platform compatibility, plus as with any human interface, a host of intangibles.  We’re always working to make the Tizra reading experience crisper, easier, and less distracting, because happier readers mean happier publishers. Tizra reader upgrade makes it easy to enhance content with interactive lightbox effects. The update builds on Tizra’s ability to provide usability and compatibility across all the most popular web browsers and viewing devices, and is now available to all Tizra customers. Enhancements include:   Speed -- e-reading should be as crisp, fast and simple as turning a page. Your readers are not going to tolerate delays waiting for cont...