Пытаясь выяснить, почему чтение кассандры занимает так много времени, я использовал трассировку и ограничил количество строк. Как ни странно, когда я запрашиваю 600 строк, я получаю результат примерно за 50 миллисекунд. Но 610 строк занимает почти 1 секунду!
cqlsh> select containerdefinitionid from containerdefinition limit 600;
... lots of output ...
Tracing session: 6b506cd0-83bc-11e3-96e8-e182571757d7
activity | timestamp | source | source_elapsed
-------------------------------------------------------------------------------------------------+--------------+---------------+----------------
execute_cql3_query | 15:25:02,878 | 130.4.147.116 | 0
Parsing statement | 15:25:02,878 | 130.4.147.116 | 39
Peparing statement | 15:25:02,878 | 130.4.147.116 | 101
Determining replicas to query | 15:25:02,878 | 130.4.147.116 | 152
Executing seq scan across 1 sstables for [min(-9223372036854775808), min(-9223372036854775808)] | 15:25:02,879 | 130.4.147.116 | 1021
Scanned 755 rows and matched 755 | 15:25:02,933 | 130.4.147.116 | 55169
Request complete | 15:25:02,934 | 130.4.147.116 | 56300
cqlsh> select containerdefinitionid from containerdefinition limit 610;
... just about the same output and trace info, except...
Scanned 766 rows and matched 766 | 15:25:58,908 | 130.4.147.116 | 739141
Кажется, что в данных в этих конкретных строках нет ничего необычного: - значения аналогичны значениям до и после. - с помощью команды COPY я могу экспортировать всю таблицу и импортировать в другой кластер, и производительность в порядке. - эти строки являются первым примером, но, похоже, есть и другие места, где время запроса также скачкообразно меняется. Вся таблица состоит всего из ~ 3000 строк, но для перечисления всех первичных ключей требуется ~ 15 секунд.
Кажется, что в ХРАНЕНИИ данных есть что-то необычное: - снимок, скопированный в другой кластер и импортированный, дает те же результаты с теми же ограничениями - КОПИРОВАТЬ данные в CSV, а затем в другой кластер - нет, производительность отличная
Пробовали уплотнение, восстановление, переиндексирование, очистку и обновление. Нет эффекта.
Я понимаю, что могу «исправить», копируя данные туда и обратно, но я пытаюсь понять, что здесь происходит, чтобы этого не произошло в производственной среде на таблице, слишком большой для исправления с помощью COPY.
Таблица имеет 17 столбцов, 3 индекса, первичный ключ TEXT, два столбца LIST и два столбца TIMESTAMP; остальные - ТЕКСТ. Может воспроизвести проблему как с SimpleStrategy, так и с репликацией с учетом DC. Может воспроизводиться с 4 копиями данных на 4 серверах, 2 копиями на 2 серверах и 1 копией на 2 серверах (поэтому не имеет значения, выполняется ли запрос локально или задействует несколько серверов). Cassandra-1.2 с использованием cqlsh.
Любые идеи? Предложения?
DELETE
илиUPDATE
трафик за последние несколько дней? Возможно, у вас есть большое количество захороненных ячеек, сгруппированных в несколько больших горячих точек в таблице. Ознакомьтесь с datastax.com/dev/ blog / для получения более подробной информации. - person Daniel S.   schedule 14.02.2014