2016-07-25 96 views
1

我們有一個表,看起來像:卡桑德拉性能問題

CREATE TABLE arc_dynamic.transit_map (
    sal text, 
    pfn text, 
    transit_map_id text, 
    create_program_id text, 
    create_timestamp timestamp, 
    cutoff_times map<text, text>, 
    derived_priority int, 
    effective_date text, 
    modify_program_id text, 
    modify_timestamp timestamp, 
    relationship_type_id text, 
    solr_query text, 
    stop set<text>, 
    transit_days map<text, int>, 
    trigger_id text, 
    PRIMARY KEY (sal, pfn, transit_map_id) 
) WITH CLUSTERING ORDER BY (pfn ASC, transit_map_id ASC) 
    AND bloom_filter_fp_chance = 0.01 
    AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}' 
    AND comment = '' 
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'} 
    AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'} 
    AND dclocal_read_repair_chance = 0.1 
    AND default_time_to_live = 0 
    AND gc_grace_seconds = 864000 
    AND max_index_interval = 2048 
    AND memtable_flush_period_in_ms = 0 
    AND min_index_interval = 128 
    AND read_repair_chance = 0.0 
    AND speculative_retry = '99.0PERCENTILE'; 

CREATE CUSTOM INDEX arc_dynamic_transit_map_create_timestamp_index ON arc_dynamic.transit_map (create_timestamp) USING 'com.datastax.bdp.search.solr.Cql3SolrSecondaryIndex'; 
CREATE CUSTOM INDEX arc_dynamic_transit_map_derived_priority_index ON arc_dynamic.transit_map (derived_priority) USING 'com.datastax.bdp.search.solr.Cql3SolrSecondaryIndex'; 
CREATE CUSTOM INDEX arc_dynamic_transit_map_modify_timestamp_index ON arc_dynamic.transit_map (modify_timestamp) USING 'com.datastax.bdp.search.solr.Cql3SolrSecondaryIndex'; 
CREATE CUSTOM INDEX arc_dynamic_transit_map_relationship_type_id_index ON arc_dynamic.transit_map (relationship_type_id) USING 'com.datastax.bdp.search.solr.Cql3SolrSecondaryIndex'; 
CREATE CUSTOM INDEX arc_dynamic_transit_map_solr_query_index ON arc_dynamic.transit_map (solr_query) USING 'com.datastax.bdp.search.solr.Cql3SolrSecondaryIndex'; 
CREATE CUSTOM INDEX arc_dynamic_transit_map_trigger_id_index ON arc_dynamic.transit_map (trigger_id) USING 'com.datastax.bdp.search.solr.Cql3SolrSecondaryIndex'; 

當我運行:

select * from transit_map where sal='XXX_953'; 

超時:

ReadTimeout: code=1200 [Coordinator node timed out waiting for replica nodes' 
responses] message="Operation timed out - received only 0 responses." info= 
{'received_responses': 0, 'required_responses': 1, 'consistency': 'ONE'} 

如果我把它限制在10行或更少,它會回來。任何更多,超時。我試圖找出它出錯的地方(無論是太多的sstables,墓碑還是別的東西),但我無法弄清楚如何解決這個問題。

我已啓用跟蹤。對於10行或更少的行,它不會「看起來太糟糕」(至少它有一些輸出)。

當我放入11行限制或將其留空(無限制)時,沒有輸出從跟蹤返回。

任何幫助去哪裏都不勝感激。我來自Oracle長期以來的背景,並且在如何在Cassandra中弄清楚這一點已經失敗了。

+0

你期望得到那個查詢的行數? – Aaron

回答

1

創建地圖和其他對象是Cassandra的繁重操作。 如果這個地圖在大小超時方面不受限制,像這樣很常見。

從個人體驗地圖大小不應該超過幾十個左右。

以一種方式嘗試和建模您的數據地圖非常受限制,甚至更好,您根本不使用它們。一個解決方案可以改變transit_daysuuid類型並且具有連接表看起來是這樣的:

CREATE TABLE arc_dynamic.transit_map_days_per ( transit_day_id uuid, data text PRIMARY KEY (transit_day_id) )

那麼您需要能夠得到從這個表元組的列表,「地圖」和操縱它在你的末端

+0

raam86,我真的很感激你花時間在這方面提供你的建議。當我在火中學習時,我的下一個問題是:如何知道這確實是問題?我在哪裏看?由於跟蹤不會輸出任何內容,我甚至不知道我還有什麼地方需要注意。我試圖通過在我的cqlshrc文件中設置client_timeout值來增加我的客戶端超時,但它沒有幫助。我的猜測是用於連接,而不是查詢,但不確定。即使它確實起作用了,並且我收到了行,是否會有任何線索表明地圖是問題? –

+0

最簡單的方法是刪除違規地圖,看看會發生什麼。你總是可以線程轉儲。 JVM轉儲和搜索卡桑德拉基準,他們有一些工具,我目前還沒有記住,也http://aryanet.com/blog/cassandra-garbage-collector-tuning – raam86

+0

raam86,謝謝你在這個。我從團隊的其他人那裏得到的發現是,他們在地圖上從來沒有超過14個項目,而且問題實際上是一個數據存儲版本發佈的錯誤,而壓縮和修復可以解決問題。儘管我非常感謝你的迴應,並且將會更多地與它一起玩。每天學習更多... –