2016-11-15 4 views
1

У меня есть кластерная кластерная установка (couchbase version 4.1), где есть N узлов данных, 1 узел запросов и 1 индексный узел. Узлы данных имеют примерно 1 миллион пар ключевых значений в одном ведре. Вся эта настройка размещена в Microsoft Azure в виртуальной сети. И может заверить вас, что каждый узел имеет достаточно ресурсов, которые не являются проблемой ОЗУ, ЦП или Диск.Невозможно понять, почему запросы N1QL в couchbase зависают?

Теперь я могу получить/установить документы JSON на моем сервере couchbase без каких-либо проблем. Я просто тестирую, поэтому порты не выдают, поскольку я открыл все порты между машинами.

Но когда я пытаюсь выполнить запросы N1QL (из оболочки couchbase или используя SDK python), это не сработает. Запрос просто зависает, и я не получаю никакого ответа от сервера. С другой стороны, время от времени запрос работает без каких-либо проблем, а затем через минуту он снова перестает работать.

Я создал индекс PRIMARY на моем ковше и любой другой необходимый глобальный вторичный индекс, если это необходимо.

Я также установил образцы ковшей, предоставленные couchbase. Те же проблемы существуют.

Кто-нибудь знает, что может быть проблемой?

+0

Опишите, пожалуйста, что вы делаете, Нравится, поделитесь своим кодом, разделите свои индексы (не первичные) –

+0

Итак, у меня есть ведро, называемое 'клиентами'. Каждый JSON-документ в 'clients' имеет логическое свойство, называемое' transaction_successful'. Так вот что я сделал: 'CREATE INDEX PRIMARY на клиентах ИСПОЛЬЗОВАНИЕ GSI' Тогда я просто пытаюсь запустить: ' SELECT, идентификатор, адрес электронной почты от клиентов, где transaction_successful = ложь LIMIT 100 200' офсетной Тогда я держать увеличивая 'offset' на' limit' в цикле для получения записей. –

+0

Можете ли вы запросить ведра для образцов Couchbase без каких-либо проблем? – geraldss

ответ

0

Ваш запрос зависает, вероятно, потому, что вы слишком сильно нажимаете на сервер, я не знаю, сколько операций N1QL вы используете каждый раз, но для этого типа запросов вы выиграете больше всего с помощью нескольких настроек, использования и повышения эффективности.

  1. Создать конкретный индекс покрытия, такие как:

    создание индекса inx_id_email на клиентах (ID, адрес электронной почты), где transaction_successful = ложь

  2. использование объяснить ключевое слово, чтобы проверить, если ваш запрос с использованием индекса , (explain SELECT id, email FROM clients where transaction_successful = false LIMIT 100 OFFSET 200)

Я считаю, что ваш запрос/индекс узлов используются слишком много, потому что вы на самом деле делаете эквивалент первичного сканирования в реляционных базах данных.

+0

Использование ЦП и ОЗУ в узле запросов и индексов очень низкое. (На самом деле ничего, поскольку я просто тестирую). Я создал GSI или любой требуемый индекс. Объяснение показывает, что запрос использует индекс. Странно, что запрос работает случайным образом, но большую часть времени он просто зависает. –

+0

, за исключением использования ЦП и ОЗУ. что вы видите в статистике сервера по индексу? (в WebUI) –