zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

2022-09-22 mysql列存储引擎-ZKF项目-Too many tuples追踪

mysql引擎存储项目 2022 22 09 追踪
2023-09-27 14:25:42 时间

摘要:

mysql列存储引擎-ZKF项目-Too many tuples追踪

SQL:


    SELECT
    contract.id,
    sum( item_quantity ) AS total_nums,
    sum( detail_price ) AS total_prices 
    FROM
    contract
    JOIN contract_detail ON contract.id = contract_detail.contract_id
    JOIN day_dimension ON contract_detail.sign_day = day_dimension.day_str 
    GROUP BY
    contract.id;

故障追踪:

问题堆栈:
 

(gdb) bt
#0  Tianmu::core::Filter::Filter (this=0x7fc08c040800, no_obj=12752490335846400, power=16, all_ones=false, shallow=false)
    at /data2/jenkins/workspace/stonedb5.7-zsl-centos7.9-30-238/storage/tianmu/core/filter.cpp:41
#1  0x0000000002d1586f in Tianmu::core::MIUpdatingIterator::MIUpdatingIterator (this=0x7fc468da4620, _mind=0x7fc08c033790, dimensions=...)
    at /data2/jenkins/workspace/stonedb5.7-zsl-centos7.9-30-238/storage/tianmu/core/mi_updating_iterator.cpp:31
#2  0x0000000002d3cb79 in Tianmu::core::ParameterizedFilter::FilterDeletedByTable (this=0x7fc08c03ad80, rcTable=0x7fc08c02e2b0, no_dims=0)
    at /data2/jenkins/workspace/stonedb5.7-zsl-centos7.9-30-238/storage/tianmu/core/parameterized_filter.cpp:1470
#3  0x0000000002d3a03f in Tianmu::core::ParameterizedFilter::UpdateMultiIndex (this=0x7fc08c03ad80, count_only=false, limit=-1)
    at /data2/jenkins/workspace/stonedb5.7-zsl-centos7.9-30-238/storage/tianmu/core/parameterized_filter.cpp:991
#4  0x0000000002a0537f in Tianmu::core::Query::Preexecute (this=0x7fc468da58e0, qu=..., sender=0x7fc08c03ab50, display_now=true)
    at /data2/jenkins/workspace/stonedb5.7-zsl-centos7.9-30-238/storage/tianmu/core/query.cpp:777
#5  0x00000000029d729e in Tianmu::core::Engine::Execute (this=0x58a8f50, thd=0x7fc08c019b60, lex=0x7fc08c01bcd8, result_output=0x7fc08c012a10, unit_for_union=0x0)
    at /data2/jenkins/workspace/stonedb5.7-zsl-centos7.9-30-238/storage/tianmu/core/engine_execute.cpp:421
#6  0x00000000029d648e in Tianmu::core::Engine::HandleSelect (this=0x58a8f50, thd=0x7fc08c019b60, lex=0x7fc08c01bcd8, result=@0x7fc468da5df8: 0x7fc08c012a10, setup_tables_done_option=0, 
    res=@0x7fc468da5df4: 0, optimize_after_tianmu=@0x7fc468da5dec: 1, tianmu_free_join=@0x7fc468da5df0: 1, with_insert=0)
    at /data2/jenkins/workspace/stonedb5.7-zsl-centos7.9-30-238/storage/tianmu/core/engine_execute.cpp:232
#7  0x0000000002abbc9c in Tianmu::dbhandler::TIANMU_HandleSelect (thd=0x7fc08c019b60, lex=0x7fc08c01bcd8, result=@0x7fc468da5df8: 0x7fc08c012a10, setup_tables_done_option=0, res=@0x7fc468da5df4: 0, 
    optimize_after_tianmu=@0x7fc468da5dec: 1, tianmu_free_join=@0x7fc468da5df0: 1, with_insert=0)
    at /data2/jenkins/workspace/stonedb5.7-zsl-centos7.9-30-238/storage/tianmu/handler/ha_rcengine.cpp:82
#8  0x00000000022fff87 in execute_sqlcom_select (thd=0x7fc08c019b60, all_tables=0x7fc08c010d10) at /data2/jenkins/workspace/stonedb5.7-zsl-centos7.9-30-238/sql/sql_parse.cc:5182
#9  0x00000000022f9daf in mysql_execute_command (thd=0x7fc08c019b60, first_level=true) at /data2/jenkins/workspace/stonedb5.7-zsl-centos7.9-30-238/sql/sql_parse.cc:2831
#10 0x0000000002300c8e in mysql_parse (thd=0x7fc08c019b60, parser_state=0x7fc468da6f00) at /data2/jenkins/workspace/stonedb5.7-zsl-centos7.9-30-238/sql/sql_parse.cc:5621
#11 0x00000000022f70d8 in dispatch_command (thd=0x7fc08c019b60, com_data=0x7fc468da7660, command=COM_QUERY) at /data2/jenkins/workspace/stonedb5.7-zsl-centos7.9-30-238/sql/sql_parse.cc:1495
#12 0x00000000022f627b in do_command (thd=0x7fc08c019b60) at /data2/jenkins/workspace/stonedb5.7-zsl-centos7.9-30-238/sql/sql_parse.cc:1034
#13 0x00000000023fa1bb in handle_connection (arg=0x72ad880) at /data2/jenkins/workspace/stonedb5.7-zsl-centos7.9-30-238/sql/conn_handler/connection_handler_per_thread.cc:313
#14 0x0000000002915df1 in pfs_spawn_thread (arg=0x7fa1550) at /data2/jenkins/workspace/stonedb5.7-zsl-centos7.9-30-238/storage/perfschema/pfs.cc:2197
#15 0x00007fc4b3d55ea5 in start_thread (arg=0x7fc468da8700) at pthread_create.c:307
#16 0x00007fc4b129eb0d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

异常点:

void MultiIndex::MultiplyNoTuples(uint64_t factor) {
  no_tuples = SafeMultiplication(no_tuples, factor);
  if (no_tuples >= static_cast<uint64_t>(common::NULL_VALUE_64)) no_tuples_too_big = true;
  TIANMU_LOG(LogCtl_Level::INFO, "MultiIndex::MultiplyNoTuples factor: %lld no_tuples: %lld too_big: %s", 
      factor, no_tuples, no_tuples_too_big ? "true" : "false");
}

Filter::Filter(int64_t no_obj, uint32_t power, bool all_ones, bool shallow)
    : block_status(0),
      blocks(0),
      block_allocator(0),
      no_of_bits_in_last_block(0),
      shallow(shallow),
      block_last_one(NULL),
      delayed_stats(-1),
      delayed_block(-1),
      delayed_stats_set(-1),
      no_power(power) {
  MEASURE_FET("Filter::Filter(int, bool, bool)");
  DEBUG_ASSERT(no_obj >= 0);
  pack_def = 1 << no_power;
  if (no_obj > common::MAX_ROW_NUMBER) throw common::OutOfMemoryException("Too many tuples.    (48)");

constexpr double PLUS_INF_DBL = DBL_MAX;
constexpr double MINUS_INF_DBL = DBL_MAX * -1;
constexpr int64_t PLUS_INF_64 = 0x7FFFFFFFFFFFFFFFULL;
constexpr int64_t MINUS_INF_64 = 0x8000000000000000ULL;
constexpr int64_t NULL_VALUE_64 = 0x8000000000000001ULL;
constexpr int32_t NULL_VALUE_32 = 0x80000000;
constexpr short NULL_VALUE_SH = -32768;
constexpr char NULL_VALUE_C = -128;
constexpr uint32_t NULL_VALUE_U = 0xFFFFFFFC;
constexpr int64_t MAX_ROW_NUMBER = 0x00007FFFFFFFFFFFULL;  // 2^47 - 1

问题定位:

屏蔽查询时对于删除标记的查询,异常退出消失。追踪到删除的逻辑,需要继续追踪

void ParameterizedFilter::FilterDeletedByTable(JustATable *rcTable , int no_dims) {
  Descriptor desc(table, no_dims);
  desc.op = common::Operator::O_EQ_ALL;
  desc.encoded = true;

  DimensionVector dims(mind->NumOfDimensions());
  desc.DimensionUsed(dims);
  mind->MarkInvolvedDimGroups(dims);  // create iterators on whole groups (important for
                                      // multidimensional updatable iterators)
  dims.SetAll();

  MIUpdatingIterator mit(mind, dims);
  desc.CopyDesCond(mit);
  // Use column 0 to filter the table data
  int firstColumn = 0;
  PhysicalColumn *phc = rcTable->GetColumn(firstColumn);
  vcolumn::SingleColumn *vc = new vcolumn::SingleColumn(phc, mind, 0, 0, rcTable, no_dims);
  if (!vc) throw common::OutOfMemoryException();

  vc->LockSourcePacks(mit);
  while (mit.IsValid()) {
    vc->EvaluatePack(mit, desc);
    if (mind->m_conn->Killed()) throw common::KilledException();
  }
  vc->UnlockSourcePacks();
  mit.Commit();
  delete vc;
}