> 80 ms per request sounds high. I'm doing some guessing here, i am guessing memory usage is the problem..
* I assume you are not longer seeing excessive GC activity. * The key cache will not get used when you hit the row cache. I would disable the row cache if you have a random workload, which it looks like you do. * 500 million is a lot of keys to have on a single node. At the default index sample of every 128 keys it will have about 4 million samples, which is probably taking up a lot of memory. Is this testing a real world scenario or an abstract benchmark ? IMHO you will get more insight from testing something that resembles your application. Cheers ----------------- Aaron Morton Freelance Developer @aaronmorton http://www.thelastpickle.com On 26/05/2012, at 8:48 PM, Gurpreet Singh wrote: > Hi Aaron, > Here is the latest on this.. > i switched to a node with 6 disks and running some read tests, and i am > seeing something weird. > > setup: > 1 node, cassandra 1.0.9, 8 cpu, 16 gig RAM, 6 7200 rpm SATA data disks > striped 512 kb, commitlog mirrored. > 1 keyspace with just 1 column family > random partitioner > total number of keys: 500 million (the keys are just longs from 1 to 500 > million) > avg key size: 8 bytes > bloom filter size: 1 gig > total disk usage: 70 gigs compacted 1 sstable > mean compacted row size: 149 bytes > heap size: 8 gigs > keycache size: 2 million (takes around 2 gigs in RAM) > rowcache size: 1 million (off-heap) > memtable_total_space_mb : 2 gigs > > test: > Trying to do 5 reads per second. Each read is a multigetslice query for just > 1 key, 2 columns. > > observations: > row cache hit rate: 0.4 > key cache hit rate: 0.0 (this will increase later on as system moves to > steady state) > cfstats - 80 ms > > iostat (every 5 seconds): > > r/s : 400 > %util: 20% (all disks are at equal utilization) > await: 65-70 ms (for each disk) > svctm : 2.11 ms (for each disk) > r-kB/s - 35000 > > why this is weird is because.. > 5 reads per second is causing a latency of 80 ms per request (according to > cfstats). isnt this too high? > 35 MB/s is being read from the disk. That is again very weird. This number is > way too high, avg row size is just 149 bytes. Even index reads should not > cause this high data being read from the disk. > > what i understand is that each read request translates to 2 disk accesses > (because there is only 1 sstable). 1 for the index, 1 for the data. At such a > low reads/second, why is the latency so high? > > would appreciate help debugging this issue. > Thanks > Gurpreet > > > On Tue, May 22, 2012 at 2:46 AM, aaron morton <aa...@thelastpickle.com> wrote: > With > >> heap size = 4 gigs > > I would check for GC activity in the logs and consider setting it to 8 given > you have 16 GB. You can also check if the IO system is saturated > (http://spyced.blogspot.co.nz/2010/01/linux-performance-basics.html) Also > take a look at nodetool cfhistogram perhaps to see how many sstables are > involved. > > > I would start by looking at the latency reported on the server, then work > back to the client…. > > I may have missed it in the email but what recent latency for the CF is > reported by nodetool cfstats ? That's latency for a single request on a > single read thread. The default settings give you 32 read threads. > > If you know the latency for a single request, and you know you have 32 > concurrent read threads, you can get an idea of the max throughput for a > single node. Once you get above that throughput the latency for a request > will start to include wait time. > > It's a bit more complicated, because when you request 40 rows that turns into > 40 read tasks. So if two clients send a request for 40 rows at the same time > there will be 80 read tasks to be processed by 32 threads. > > Hope that helps. > > ----------------- > Aaron Morton > Freelance Developer > @aaronmorton > http://www.thelastpickle.com > > On 20/05/2012, at 4:10 PM, Radim Kolar wrote: > >> Dne 19.5.2012 0:09, Gurpreet Singh napsal(a): >>> Thanks Radim. >>> Radim, actually 100 reads per second is achievable even with 2 disks. >> it will become worse as rows will get fragmented. >>> But achieving them with a really low avg latency per key is the issue. >>> >>> I am wondering if anyone has played with index_interval, and how much of a >>> difference would it make to reads on reducing the index_interval. >> close to zero. but try it yourself too and post your findings. > >