From user-return-30227-apmail-cassandra-user-archive=cassandra.apache.org@cassandra.apache.org Mon Nov 19 21:40:19 2012 Return-Path: X-Original-To: apmail-cassandra-user-archive@www.apache.org Delivered-To: apmail-cassandra-user-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 008E0D842 for ; Mon, 19 Nov 2012 21:40:19 +0000 (UTC) Received: (qmail 86773 invoked by uid 500); 19 Nov 2012 21:40:16 -0000 Delivered-To: apmail-cassandra-user-archive@cassandra.apache.org Received: (qmail 86749 invoked by uid 500); 19 Nov 2012 21:40:16 -0000 Mailing-List: contact user-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@cassandra.apache.org Delivered-To: mailing list user@cassandra.apache.org Received: (qmail 86741 invoked by uid 99); 19 Nov 2012 21:40:16 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 19 Nov 2012 21:40:16 +0000 X-ASF-Spam-Status: No, hits=-0.1 required=5.0 tests=HTML_MESSAGE,RCVD_IN_DNSWL_MED,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of andras.szerdahelyi@ignitionone.com designates 216.82.249.131 as permitted sender) Received: from [216.82.249.131] (HELO mail28.messagelabs.com) (216.82.249.131) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 19 Nov 2012 21:40:10 +0000 X-Env-Sender: andras.szerdahelyi@ignitionone.com X-Msg-Ref: server-7.tower-28.messagelabs.com!1353361188!26780989!1 X-Originating-IP: [208.52.173.249] X-StarScan-Received: X-StarScan-Version: 6.6.1.8; banners=-,-,- X-VirusChecked: Checked Received: (qmail 2709 invoked from network); 19 Nov 2012 21:39:49 -0000 Received: from mail.dentsunetwork.com (HELO mail.dentsunetwork.com) (208.52.173.249) by server-7.tower-28.messagelabs.com with AES128-SHA encrypted SMTP; 19 Nov 2012 21:39:49 -0000 Received: from ATL02MB02.corp.local ([fe80::7997:c980:b031:df37]) by ATL02HUB01.corp.local ([::1]) with mapi id 14.02.0318.004; Mon, 19 Nov 2012 16:39:49 -0500 From: Andras Szerdahelyi To: "" Subject: Re: row cache re-fill very slow Thread-Topic: row cache re-fill very slow Thread-Index: AQHNxmCnofj/Qg0RfkyyTZAt+Gbix5fx+QAAgAAK2IA= Date: Mon, 19 Nov 2012 21:39:48 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [10.0.90.2] Content-Type: multipart/related; boundary="_004_FE84AE7AAE9A2B4EA73512EED142BEF830BFBFCCATL02MB02corplo_"; type="multipart/alternative" MIME-Version: 1.0 X-Virus-Checked: Checked by ClamAV on apache.org --_004_FE84AE7AAE9A2B4EA73512EED142BEF830BFBFCCATL02MB02corplo_ Content-Type: multipart/alternative; boundary="_000_FE84AE7AAE9A2B4EA73512EED142BEF830BFBFCCATL02MB02corplo_" --_000_FE84AE7AAE9A2B4EA73512EED142BEF830BFBFCCATL02MB02corplo_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Aaron, What version are you on ? 1.1.5 Do you know how many rows were loaded ? INFO [OptionalTasks:1] 2012-11-19 13:08:58,868 ColumnFamilyStore.java (line= 451) completed loading (5175655 ms; 13259976 keys) row cache In both cases I do not believe the cache is stored in token (or key) order. Am i getting this right: the row keys are read and rows are retrieved from= SSTables in the order their keys are in the cache file.. Would something like iterating over SSTables instead, and throwing rows at = the cache that need to be in there feasible ? If the SSTables themselves ar= e written sequentially at compaction time , which is how i remember they ar= e written, SSTable-sized sequential reads with a filter ( bloom filter for = the row cache? :-) ) must be faster than reading from all across the column= family ( i have HDDs and about 1k SSTables ) row_cache_keys_to_save in yaml may help you find a happy half way point. If i can keep that high enough, with my data retention requirements, save f= or the absolute first get on a row, i can operate entirely out of memory. thanks! Andras Andras Szerdahelyi Solutions Architect, IgnitionOne | 1831 Diegem E.Mommaertslaan 20A M: +32 493 05 50 88 | Skype: sandrew84 [cid:7BDF7228-D831-4D98-967A-BE04FEB17544] On 19 Nov 2012, at 22:00, aaron morton > wrote: i was just wondering if anyone else is experiencing very slow ( ~ 3.5 MB/se= c ) re-fill of the row cache at start up. It was mentioned the other day. What version are you on ? Do you know how many rows were loaded ? When complete it will log a message= with the pattern "completed loading (%d ms; %d keys) row cache for %s.%s" How is the "saved row cache file" processed? In Version 1.1, after the SSTables have been opened the keys in the saved r= ow cache are read one at a time and the whole row read into memory. This is= a single threaded operation. In 1.2 reading the saved cache is still single threaded, but reading the ro= ws goes through the read thread pool so is in parallel. In both cases I do not believe the cache is stored in token (or key) order. ( Admittedly whatever is going on is still much more preferable to starting= with a cold row cache ) row_cache_keys_to_save in yaml may help you find a happy half way point. Cheers ----------------- Aaron Morton Freelance Cassandra Developer New Zealand @aaronmorton http://www.thelastpickle.com On 20/11/2012, at 3:17 AM, Andras Szerdahelyi > wrote: Hey list, i was just wondering if anyone else is experiencing very slow ( ~ 3.5 MB/se= c ) re-fill of the row cache at start up. We operate with a large row cache= ( 10-15GB currently ) and we already measure startup times in hours :-) How is the "saved row cache file" processed? Are the cached row keys simply= iterated over and their respective rows read from SSTables - possibly crea= ting random reads with small enough sstable files, if the keys were not sto= red in a manner optimised for a quick re-fill ? - or is there a smarter al= gorithm ( i.e. scan through one sstable at a time, filter rows that should = be in row cache ) at work and this operation is purely disk i/o bound ? ( Admittedly whatever is going on is still much more preferable to starting= with a cold row cache ) thanks! Andras Andras Szerdahelyi Solutions Architect, IgnitionOne | 1831 Diegem E.Mommaertslaan 20A M: +32 493 05 50 88 | Skype: sandrew84 --_000_FE84AE7AAE9A2B4EA73512EED142BEF830BFBFCCATL02MB02corplo_ Content-Type: text/html; charset="us-ascii" Content-ID: <9CD05FE09AA039489933830C189F0298@corp.local> Content-Transfer-Encoding: quoted-printable
Aaron,

What version are you on ? 

1.1.5 

Do you know how many rows were loaded ?

INFO [OptionalTasks:1] 2012-11-19 13:08:58,868 ColumnFamilyStore.java = (line 451) completed loading (5175655 ms; 13259976 keys) row cache

In both cases I do not believe the cache is stored in token (or key) order.=  

Am i getting this right:  the row keys are read and rows are retr= ieved from SSTables in the order their keys are in the cache file..
Would something like iterating over SSTables instead, and throwing row= s at the cache that need to be in there feasible ? If the SSTables themselv= es are written sequentially at compaction time , which is how i remember th= ey are written, SSTable-sized sequential reads with a filter ( bloom filter for the row cache? :-) ) must be faster= than reading from all across the column family ( i have HDDs and about 1k = SSTables )

row_cache_keys_to_save in yaml may help you find a happy half way point.&nb= sp;

If i can keep that high enough, with my data retention requirements, save f= or the absolute first get on a row, i can operate entirely out of memory.

thanks!
Andras

Andras Szer= dahelyi
Solutions Architect, IgnitionOne | 1831 Di= egem E.Mommaertslaan 20A
M: +32 493 05 50 88 | Skype: sandrew84





On 19 Nov 2012, at 22:00, aaron morton <aaron@thelastpickle.com>
 wrote:

i was just wondering if anyone else is experiencing very slow ( ~ 3.5 MB/se= c ) re-fill of the row cache at start up.
It was mentioned the other day.  

What version are you on ? 
Do you know how many rows were loaded ? When complete it will log a me= ssage with the pattern 

"completed loading (%d ms; %d keys) row cache for %s.%s"

How is the "saved row cache file" processed?

In Version 1.1, after the SSTables have been opened the keys in the sa= ved row cache are read one at a time and the whole row read into memory.&nb= sp;This is a single threaded operation. 

In 1.2 reading the saved cache is still single threaded, but reading t= he rows goes through the read thread pool so is in parallel.

In both cases I do not believe the cache is stored in token (or key) o= rder. 

( Admittedly whatever is going on is still much more preferable to starting= with a cold row cache )
row_cache_keys_to_save in yaml may help you find a happy half way point.&nb= sp;

Cheers


-----------------
Aaron Morton
Freelance Cassandra Developer
New Zealand

@aaronmorton

On 20/11/2012, at 3:17 AM, Andras Szerdahelyi <andras.szerdahelyi@ignitionone.com>= ; wrote:

Hey list,

i was just wondering if anyone else is experiencing very slow ( ~ 3.5 = MB/sec ) re-fill of the row cache at start up. We operate with a large row = cache ( 10-15GB currently ) and we already measure startup times in hours := -)

How is the "saved row cache file" processed? Are the cached = row keys simply iterated over and their respective rows read from SSTables = - possibly creating random reads with small enough sstable files, if the ke= ys were not stored in a manner optimised for a quick re-fill ? -  or is there a smarter algorithm ( i.e. scan thro= ugh one sstable at a time, filter rows that should be in row cache )  = at work and this operation is purely disk i/o bound ?

( Admittedly whatever is going on is still much more preferable to sta= rting with a cold row cache )

thanks!
Andras



Andras Szerdahelyi
Solutions Architect, IgnitionOne | 1831 Diegem E.Mommaertslaan 20A
M: +32 493 05 50 88 | Skype: sandrew84=


= <C4798BB9-9092-4145-880B-A72C6B7AF9A4[41].png>



--_000_FE84AE7AAE9A2B4EA73512EED142BEF830BFBFCCATL02MB02corplo_-- --_004_FE84AE7AAE9A2B4EA73512EED142BEF830BFBFCCATL02MB02corplo_ Content-Type: image/png; name="C4798BB9-9092-4145-880B-A72C6B7AF9A4[41].png" Content-Description: C4798BB9-9092-4145-880B-A72C6B7AF9A4[41].png Content-Disposition: inline; filename="C4798BB9-9092-4145-880B-A72C6B7AF9A4[41].png"; size=9940; creation-date="Mon, 19 Nov 2012 21:39:48 GMT"; modification-date="Mon, 19 Nov 2012 21:39:48 GMT" Content-ID: <7BDF7228-D831-4D98-967A-BE04FEB17544> Content-Transfer-Encoding: base64 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 /wTajUnGEkvXZQAAAABJRU5ErkJggg== --_004_FE84AE7AAE9A2B4EA73512EED142BEF830BFBFCCATL02MB02corplo_--