У меня 200 кешей загружены в одну область данных. Среди этого у меня есть customerCache с 300 КБ записей. Он имеет много индексированных полей, в том числе номер клиента.
Когда я запрашиваю с помощью SQLFieldsQuery этот конкретный кеш (где условие имеет только номер клиента =?), требуется около 280 мс, чтобы запросить клиент!
При детальном анализе я обнаружил, что SQLFieldQueryCursor.getAll () - это занимает 99% времени (получение экземпляра кеша и выполнение запроса завершение в диапазоне от наносекунды до 1 мс). Есть ли способ настроить cursor.getAll () или любой другой способ получить данные из курсора.
Больше информации
Я аннотировал номер клиента с помощью @Id, поэтому предполагая, что они были проиндексированы, и все запрошенные поля были аннотированы с помощью @QuerySqlField
Конфигурация кеша приведена ниже:
dataRegionCfg.setInitialSize(8L * 1024 * 1024 * 1024);
dataRegionCfg.setMaxSize(8L*1024*1024*1024);
dataRegionCfg.setPersistenceEnabled(false);
dataStorageCfg.setDataRegionConfigurations(dataRegionCfg);
dataStorageCfg.setPageSize(4096);
customerCacheConfig = new CacheConfiguration<>("customerCache");
customerCacheConfig.setIndexedTypes(CustomerKey.class, Customer.class);
customerCacheConfig.setReadThrough(false);
customerCacheConfig.setAtomicityMode(ATOMIC);
customerCacheConfig.setCacheMode(CacheMode.LOCAL);
Мой запрос был:
select customerName,customerId from CustomerMaster where customerNumber = ?;
Пожалуйста, дайте несколько советов по повышению производительности или дайте мне знать, если я что-то здесь не хватает.
@alamar Я обновил вопрос, указав требуемые элементы.
Можете ли вы предоставить источники для CustomerKey и Customer? У меня есть сильное подозрение, что у вас на самом деле нет индекса на customerNumer, поскольку ваш ключ - CustomerKey, и вы должны объявить его с помощью @QuerySqlField(index=true).
Можете ли вы также вставить полный вывод запроса EXPLAIN select customerName,customerId from CustomerMaster where customerNumber = ??
В моем CustomerKey есть только поле UUID, и я не проиндексировал это поле. Но я проиндексировал свою модель клиента, у которой есть номер клиента. Должен ли я также проиндексировать поле ключевого класса?
Кроме того, cache.query () просто возвращает ссылки, а на самом деле результаты получаются в cursor.getAll ()?




Спасибо Аламару за то, что указал правильный путь. Моя банка, развернутая на серверном узле, пропустила параметр index = true.
Также ignite не ожидает индексации в ключевом классе. Опять же, производительность не улучшится за счет увеличения числа или индексов, как у H2.
Предоставьте точную конфигурацию кеша, включая индексы, а также полный исходный запрос во фрагменте.