मैंने TiDB, TiKV और PD क्लस्टर को MySQL ड्राइवर से जुड़े YCSB टूल के साथ बेंचमार्क करने के लिए सेट किया। क्लस्टर में प्रत्येक TiDB, TiKV और PD के लिए 5 उदाहरण हैं। प्रत्येक नोड एक एकल TiDB, TiKV और PD उदाहरण चलाता है।

हालांकि, जब मैं अद्यतन विवरण में वाईसीएसबी कोड के आसपास खेलता हूं, तो मैंने देखा कि यदि अद्यतन फ़ील्ड का मान निश्चित और हार्डकोड किया गया है, तो कुल थ्रूपुट ~ 30K tps और विलंबता ~ 30ms है। यदि अद्यतन फ़ील्ड मान यादृच्छिक है, तो कुल प्रवाह क्षमता ~2k tps है और विलंबता लगभग ~300ms है।

अद्यतन विवरण निर्माण कोड इस प्रकार है:


  @Override
  public String createUpdateStatement(StatementType updateType) {
    String[] fieldKeys = updateType.getFieldString().split(",");
    StringBuilder update = new StringBuilder("UPDATE ");
    update.append(updateType.getTableName());
    update.append(" SET ");
    for (int i = 0; i < fieldKeys.length; i++) {
      update.append(fieldKeys[i]);
      String randStr = RandomCharStr();  // 1) 3K tps with 300ms latency
      //String randStr = "Hardcode-Field-Value";  // 2) 20K tps with 20ms latency
      update.append(" = '" + randStr + "'");
      if (i < fieldKeys.length - 1) {
        update.append(", ");
      }
    }
    // update.append(fieldKey);
    update.append(" WHERE ");
    update.append(JdbcDBClient.PRIMARY_KEY);
    update.append(" = ?");
    return update.toString();
  }

हम इस प्रदर्शन अंतर के लिए कैसे खाते हैं? क्या यह DistSQL क्वेरी कैश के कारण है, जैसा कि इस पोस्ट में चर्चा की गई है?

2
user1584887 30 अप्रैल 2019, 05:50

1 उत्तर

सबसे बढ़िया उत्तर

मैं इस पोस्ट से यह पता लगाने का प्रबंधन करता हूं (समान लेनदेन जब मैं कई बार भागा ) और pr (https://github. com/pingcap/tidb/issues/7644)। ऐसा इसलिए है क्योंकि यदि अद्यतन फ़ील्ड पिछले मान के समान है तो TiDB txn निष्पादित नहीं करेगा।

1
user1584887 2 मई 2019, 07:51