Please see the attachment.
I have set query parallelism to 30. it took 42 seconds.
But it is not enough.
I excepted it took less than 3 seconds.
then,I have 3 nodes.
As for the 3589 number, we need to check the number of ID using in conditions.
Only the number of times used is equal to the record in the in condition.
That's the record we need. This is the business scenario required. I can't
change this.
Thanks for your suggestion.
Lucky
2017年09月18日 21:55,Vladimir Ozerov<[email protected]> :
Hi Lucky,
Could you please share you data model and node/cache configuration? I want to
make sure that proper indexes are set. I will be able to advise something then.
As I quick suggestion you may try to increase query parallelism on your
"databaseDAssignCache". Please try setting it to the number of cores on your
server nodes. Relevant property - CacheConfifuration.queryParallelism. Btw, how
many nodes do you have?
Also I am struggling to understand the number "3589". Why this number appears
both as ">= 3589" condition and as a number of parameters inside "IN" clause?
Vladimir.
package com.kingdee.ignite.module.basedata.customer.entity;
import java.io.Serializable;
import java.sql.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.apache.ignite.cache.query.annotations.QuerySqlField;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name = "t_Bd_Databasedassign")
public class DatabaseDAssign implements Serializable {
private static final long serialVersionUID = 7117461037272988577L;
@QuerySqlField(index = true)
private String FID;
@QuerySqlField
private String FCREATORID;
@QuerySqlField
private Date FCREATETIME;
@QuerySqlField
private String FLASTUPDATEUSERID;
@QuerySqlField
private Date FLASTUPDATETIME;
@QuerySqlField
private String FCONTROLUNITID;
@QuerySqlField(index=true, orderedGroups={@QuerySqlField.Group(
name = "IX_BDFW_DBDAACUD", order = 1), @QuerySqlField.Group(
name = "IX_BDFW_FASS", order = 2)})
private String FDATABASEDID;
@QuerySqlField(index = true, orderedGroups={@QuerySqlField.Group(
name = "IX_BDFW_DBDAACUD", order = 0), @QuerySqlField.Group(
name = "IX_BDFW_FASS", order = 0)})
private String FASSIGNCUID;
@QuerySqlField(orderedGroups={@QuerySqlField.Group(
name = "IX_BDFW_FASS", order = 1)})
private String FBOSOBJECTTYPE;
@QuerySqlField
private Integer FSTATUS;
/********** Getters and Setters ******************/
@Id
@GeneratedValue(generator = "personGenerator")
@GenericGenerator(name = "personGenerator", strategy = "assigned")
@Column(name = "FID")
public String getFID() {
return FID;
}
public void setFID(String id) {
this.FID = id;
}
@Column(name = "FCONTROLUNITID")
public String getFCONTROLUNITID() {
return FCONTROLUNITID;
}
public void setFCONTROLUNITID(String fCONTROLUNITID) {
FCONTROLUNITID = fCONTROLUNITID;
}
@Column(name = "FLASTUPDATETIME")
public Date getFLASTUPDATETIME() {
return FLASTUPDATETIME;
}
public void setFLASTUPDATETIME(Date fLASTUPDATETIME) {
FLASTUPDATETIME = fLASTUPDATETIME;
}
@Column(name = "FLASTUPDATEUSERID")
public String getFLASTUPDATEUSERID() {
return FLASTUPDATEUSERID;
}
public void setFLASTUPDATEUSERID(String fLASTUPDATEUSERID) {
FLASTUPDATEUSERID = fLASTUPDATEUSERID;
}
@Column(name = "FCREATETIME")
public Date getFCREATETIME() {
return FCREATETIME;
}
public void setFCREATETIME(Date fCREATETIME) {
FCREATETIME = fCREATETIME;
}
@Column(name = "FCREATORID")
public String getFCREATORID() {
return FCREATORID;
}
public void setFCREATORID(String fCREATORID) {
FCREATORID = fCREATORID;
}
@Column(name = "FDATABASEDID")
public String getFDATABASEDID() {
return FDATABASEDID;
}
public void setFDATABASEDID(String fDATABASEDID) {
FDATABASEDID = fDATABASEDID;
}
@Column(name = "FASSIGNCUID")
public String getFASSIGNCUID() {
return FASSIGNCUID;
}
public void setFASSIGNCUID(String fASSIGNCUID) {
FASSIGNCUID = fASSIGNCUID;
}
@Column(name = "FBOSOBJECTTYPE")
public String getFBOSOBJECTTYPE() {
return FBOSOBJECTTYPE;
}
public void setFBOSOBJECTTYPE(String fBOSOBJECTTYPE) {
FBOSOBJECTTYPE = fBOSOBJECTTYPE;
}
@Column(name = "FSTATUS")
public Integer getFSTATUS() {
return FSTATUS;
}
public void setFSTATUS(Integer fSTATUS) {
FSTATUS = fSTATUS;
}
}
package com.kingdee.ignite.common.config;
import javax.cache.configuration.MutableConfiguration;
import org.apache.ignite.cache.CacheMode;
import org.apache.ignite.cache.CacheWriteSynchronizationMode;
import org.apache.ignite.configuration.CacheConfiguration;
import com.kingdee.ignite.common.dao.SqlCustomFunction;
public abstract class AbstractCacheConfiguration<K, V> extends
CacheConfiguration<K, V>{
private static final long serialVersionUID = 6000710247906756326L;
public AbstractCacheConfiguration(){
initialization();
}
public void initialization(){
//设置é»è®¤å¤ä»½èç¹0
setDefaultBackups();
//设置é»è®¤ååºç¼å
setDefaultCacheMode();
//设置é»è®¤åæ¥å¤ä»½
//çå¾
主èç¹çåæè
æäº¤æä½å®æ
//使¯ä¸çå¾
å¤ä»½èç¹æ´æ°å®æ
setDefaultWriteSynchronizationMode();
//éå
setDefaultWriteThrough();
//é»è®¤å¯ç¨åå
setDefaultWriteBehindEnabled();
//é»è®¤å¯ç¨é读
setDefaultReadThrough();
//ååå·æ°é»è®¤è®¾ç½®ä¸º10240
setDefaultWriteBehindFlushSize();
//æ¯é10ç§ ååå·æ°
setDefaultWriteBehindFlushFrequency();
//设置æä¹
åå°æ°æ®åºçè®°å½æ°ï¼10000
setWriteBehindBatchSize();
setWriteBehindFlushThreadCount();
//åå¹³è¡¡æ¶æ¯ç大å°ï¼è®¾ç½®ä¸º4M
setRebalanceBatchSize();
setIndexedTypes();
//åå¹³è¡¡å»¶è¿æ¶é´ï¼è®¾ç½®ä¸º100 ms
setRebalanceThrottle();
//å®ä¹è·åbosUidçsql彿°
setSqlFunctionBosUid();
//æ¥è¯¢å¹¶è¡å
super.setQueryParallelism(30);
}
/**
* 使ç¨é»è®¤ååºæ¨¡å¼
* @return CacheConfigurationå®ä¾
*/
public CacheConfiguration<K, V> setDefaultCacheMode() {
CacheMode partitioned = CacheMode.PARTITIONED;
return super.setCacheMode(partitioned);
}
/**
* åºäºæ§è½åå , 设置å¤ä»½èç¹ä¸º1
* @return CacheConfigurationå®ä¾
*/
public CacheConfiguration<K, V> setDefaultBackups() {
return super.setBackups(1);
}
/**
* é»è®¤è®¾ç½®å®¢æ·ç«¯èç¹ä¼çå¾
主èç¹çåæè
æäº¤æçºµå®æï¼ä½ä¸ä¼çå¾
å¤ä»½èç¹çæ´æ°å®æ
* @return CacheConfigurationå®ä¾
*/
public CacheConfiguration<K, V> setDefaultWriteSynchronizationMode() {
CacheWriteSynchronizationMode primarySync =
CacheWriteSynchronizationMode.FULL_ASYNC;
return super.setWriteSynchronizationMode(primarySync);
}
/**
* 设置ååå¯ç¨
* @return CacheConfigurationå®ä¾
*/
public CacheConfiguration<K, V> setDefaultWriteBehindEnabled() {
return super.setWriteBehindEnabled(true);
}
/**
* 设置é读å¯ç¨
* @return CacheConfigurationå®ä¾
*/
public MutableConfiguration<K, V> setDefaultReadThrough() {
return super.setReadThrough(true);
}
public MutableConfiguration<K, V> setDefaultWriteThrough() {
return super.setWriteThrough(true);
}
/**
* ååç¼åçæå¤§å¼ï¼å¦æè¶
è¿äºè¿ä¸ªéå¼ï¼
* ææçç¼åæ°æ®é½ä¼è¢«å·å
¥ç¼ååå¨ç¶ååç¼å被æ¸
空ã
* 妿å¼ä¸º0ï¼å·æ°æä½å°ä¼ä¾æ®å·æ°é¢çé´éï¼
* 注æä¸è½å°åç¼å大å°åå·æ°é¢çé½è®¾ç½®ä¸º0
* @return CacheConfigurationå®ä¾
*/
public CacheConfiguration<K, V> setDefaultWriteBehindFlushSize() {
return super.setWriteBehindFlushSize(10240);
}
public CacheConfiguration<K, V> setWriteBehindBatchSize() {
return super.setWriteBehindBatchSize(10000);
}
public CacheConfiguration<K, V> setDefaultWriteBehindFlushFrequency() {
return super.setWriteBehindFlushFrequency(10000);
}
public CacheConfiguration<K, V> setIndexedTypes(Class<?> clazz){
return super.setIndexedTypes(String.class,clazz);
}
public CacheConfiguration<K, V> setWriteBehindFlushThreadCount(){
return super.setWriteBehindFlushThreadCount(3);
}
public CacheConfiguration<K,V> setRebalanceBatchSize(){
return super.setRebalanceBatchSize(4*1024*1024);
}
public CacheConfiguration<K,V> setRebalanceThrottle(){
return super.setRebalanceThrottle(100);
}
public CacheConfiguration<K,V> setSqlFunctionBosUid(){
return super.setSqlFunctionClasses(SqlCustomFunction.class);
}
}