Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
hic
Former Employee
Former Employee

QlikView has a very efficient, patented caching algorithm that effectively eliminates the calculation time for calculations that have been made before. In other words, if you use the “back” button in the toolbar, or if you happen to make a selection that you have made before, you usually get the result immediately. No calculation is necessary.

But how does it work? What is used as lookup ID?

For each object or combination of data set and selection or data sub-set and expression QlikView calculates a digital fingerprint that identifies the context. This is used as lookup ID and stored in the cache together with the result of the calculation.

Image2.png

Here "calculation" means both the Logical Inference and Chart calculation - or in fact, any expression anywhere. This means that both intermediate and final results of a selection are stored.

There are some peculiarities you need to know about the cache…

  • The cache is global. It is used for all users and all documents. A cache entry does not belong to one specific document or one user only. So, if a user makes a selection that another user already has made, the cache is used. And if you have the same data in two different apps, one single cache entry can be used for both documents.
  • Memory is not returned, when the document is unloaded. Cache entries will usually not be purged until the RAM usage is close to or has reached the lower working set limit. QlikView will then purge some entries and re-use the memory for other cache entries. This behavior sometimes makes people believe there is a memory leak in the product. But have no fear – it should be this way. So, you do not need to restart the service to clear the cache.
  • The oldest cache entries are not purged first. Instead several factors are used to calculate a priority for each cache entry; factors like RAM usage, cost to calculate it again and time since the most recent usage. Entries with a combined low priority will be purged when needed. Hence, an entry that is cheap to calculate again will easily be purged, also if it recently was used. And another value that is expensive to recalculate or just uses a small amount of RAM will be kept for a much longer time.
  • The cache is not cleared when running macros which I have seen some people claim.
  • You need to write your expression exactly right. If the same expression is used in several places, it should be written exactly the same way – Capitalization, same number of spaces, etc. – otherwise it will not be considered to be the same expression. If you do, there should be no big performance difference between repeating the formula, referring to a different expression using the label of the expression or using the Column() function.

The cache efficiently speeds up QlikView. Basically it is a way to trade memory against CPU-time: If you put more memory in your server, you will be able to re-use more calculations and thus use less CPU-time.

HIC

Further reading on the Qlik engine internals:

Symbol Tables and Bit-Stuffed Pointers

Colors, States and State vectors

Logical Inference and Aggregations

72 Comments
Not applicable

Very interesting article. Congrats!

0 Likes
5,974 Views
hic
Former Employee
Former Employee

Karthikeyan S Just as Johan Idh points out, the data sets are different (due to Section Access) so the digital fingerprints will not match. Hence, different results if the users have different authorization scopes. (By the way, Johan is one of our developers, so you should listen to him more than to me... )

HIC

5,974 Views
hic
Former Employee
Former Employee

Martin Mahler The Blog post is about the Cache in the QlikView engine, which you can find in the QlikView server service or in QlikView Desktop. It handles selections and calculations. Your question is about managing the QlikView Server, which is something different. It has its own cache, which is implemented differently from the QlikView engine. So - it is not in the same cache.

HIC

5,881 Views
hic
Former Employee
Former Employee

Jerrik Walløe Yes the cache is used for all three apps. But note, what you call "Total", "Level1" and "Level2" are most likely three different data sets, i.e. different digital fingerprints. Whereas "Level3a" and "Level3b" might have the same data set (but different distribution groups) so they would share the cache entries.

HIC

5,881 Views
StefanBackstrand
Partner - Specialist
Partner - Specialist

As Henric already mentioned, the ClearQvsCache method in the QMS API is specific for the QMC cache of QVS entities, not the QVS cache itself. QMS will cache lists of documents and CALs and such, and this method purges that cache.

So (un)fortunately, they have no direct relation.

5,881 Views
Anonymous
Not applicable

Henric,

Thanks for the wonderful post and nice discussion

Barry/Henric,

Apart from settings-> Document properties, where i can find calc time for each chart, [ where most of time i get 0] is there an accurate way of finding how much memory does a chart takes to calculate ?

0 Likes
5,881 Views
Anonymous
Not applicable

Try Document Settings-->Sheets--> Calc Time of objects.

0 Likes
5,881 Views
Not applicable

Great post, Thanks!

0 Likes
5,881 Views
Anonymous
Not applicable

Good post.  Well worth the read.

In QV Desktop when developing I notice that occasionally the dashboard does not datawise truly reflect the changes I have made.  I suspect this is because my changes have confused the caching.  Closing the QV Desktop and restarting it sorts these issues, I guess because the close / restart clears the cache.

Does anyone know of a way of clearing the cache in QV Desktop without the  close / restart ?

Best Regards,     Bill

0 Likes
5,786 Views
pascal_theurot
Partner - Creator II
Partner - Creator II

Very interesting as the "under the Hood" session in Qonnections.

Thanks.

0 Likes
5,786 Views