Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Schema和历史resource单独分配大小;下文仅考虑其余写数据部分大小。
  • 每个SG统计自身的chunk_metadata和unseal_resource大小;
  • 全局ArrayPool统计buffered和out of buffer的array大小
  • 系统统计总的大小

Image RemovedImage Added


写入流程:

  1. 给定一个request(req)/insertPlan,找到其对应的StorageGroupProcessorTSP;
  2. 检查SystemInfo是否为reject状态;如果是,则该写入线程循环sleep 100ms 等待flush线程释放内存,system置回正常状态再进行写入;如果等待6000ms后仍为reject状态,抛出写入异常;
  3. 统计该plan中的各列,预估本次写入完成后增加的chunk_metadata和 unseal_resouce的内存占用,根据memtable中TVList的使用现状统计本次写入需要增加的内存空间占用,统计后将这些增加的内存记录在TspInfo和SgInfo中。
  4. 如果SGInfo变化超过System 上报的阈值(*),向System进行上报;
    1. 如果此时 `总写入内存 * 50% <= SystemInfo中统计的总内存 < 总写入内存 * 80%`, 触发flush
    2. 如果此时 `总写入内存 * 80% <= SystemInfo中统计的总内存`, SystemInfo 置于reject状态,触发flush
    3. 再次检查SystemInfo是否为reject状态;如果是,则该写入线程循环sleep 100ms 等待flush线程释放内存,system置回正常状态再进行写入;如果等待30s后仍为reject状态,抛出写入异常;
  5. 若此时捕获到写入异常,本次写入失败,返回客户端
  6. 若写入正常,开始向working memtable中写入数据,当memtable中Array空间不足时,向Array Pool申请新的Array。array pool判断是否有已向系统报备过的该类型array(即Buffered array)
    1. 如果Buffered arrayArray Pool申请Buffered array并写入数据;
    2. 如果没有,则需要申请OOB(out of buffered)的数组

...