• 2023-11-06 monetdb-事务-insert-delta缓存-分析


    摘要:

    monetdb在事务处理时, 会将数据写入delta缓存中, 然后在commit时将数据写入wal文件, 随后由控制器决定何时将wal中的数据真正的写入BAT列文件中.

    本文从delta缓存入手, 分析monetdb在事务处理中的细节.

    SQL:

    DML:

    create table t1 (a int);

    事务DDL:

    START TRANSACTION;
    insert into t1 values (4);
    COMMIT;

    trace日志:

    mserver启动后第一次执行insert:

    1. ALGO monetdb5/mal/mal_interpreter.c:716 runMALsequence calling querylog.define
    2. ALGO monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.transaction_begin
    3. ALGO monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.exportOperation
    4. ALGO monetdb5/mal/mal_interpreter.c:716 runMALsequence calling querylog.define
    5. ALGO monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.mvc
    6. ALGO monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.claim
    7. ALGO monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.append
    8. IO_ gdk/gdk_bbp.c:3156 getBBPdescriptor load tmp_550
    9. IO_ gdk/gdk_storage.c:637 DESCload DESCload: 05/550
    10. IO_ gdk/gdk_storage.c:536 GDKload GDKload: name=05/550.tail, ext=, mode 1
    11. IO_ gdk/gdk_storage.c:558 GDKload read(dst 0x7f01e8040cc0, n_expected 12, fd 9) = 12
    12. ALGO gdk/gdk_bat.c:1039 BUNappendmulti tmp_550#3@0[int]P appending 1 values
    13. ALGO monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.depend
    14. ALGO monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.affectedRows
    15. ALGO monetdb5/mal/mal_interpreter.c:716 runMALsequence calling querylog.define
    16. ALGO monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.transaction_commit
    17. IO_ gdk/gdk_bbp.c:3156 getBBPdescriptor load tmp_551
    18. IO_ gdk/gdk_storage.c:637 DESCload DESCload: 05/551
    19. IO_ gdk/gdk_storage.c:536 GDKload GDKload: name=05/551.tail, ext=, mode 1
    20. IO_ gdk/gdk_storage.c:558 GDKload read(dst 0x7f01e8037d30, n_expected 4, fd 9) = 4
    21. ALGO monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.exportOperation

    mserver启动后第二次连续执行两次insert:

    1. monetdb5/mal/mal_interpreter.c:716 runMALsequence calling querylog.define
    2. monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.transaction_begin
    3. monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.exportOperation
    4. monetdb5/mal/mal_interpreter.c:716 runMALsequence calling querylog.define
    5. monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.mvc
    6. monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.claim
    7. monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.append
    8. gdk/gdk_bat.c:1039 BUNappendmulti tmp_550#4@0[int]P appending 1 values
    9. monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.depend
    10. monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.affectedRows
    11. monetdb5/mal/mal_interpreter.c:716 runMALsequence calling querylog.define
    12. monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.mvc
    13. monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.claim
    14. monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.append
    15. gdk/gdk_bat.c:1039 BUNappendmulti tmp_550#5@0[int]P appending 1 values
    16. monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.depend
    17. monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.affectedRows
    18. monetdb5/mal/mal_interpreter.c:716 runMALsequence calling querylog.define
    19. monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.transaction_commit
    20. monetdb5/mal/mal_interpreter.c:687 runMALsequence calling sql.exportOperation

    核心处理:

    BUNappendmulti

    1. #0 BUNappendmulti (b=0x1a366680, values=0x7f01e803c600, count=1, force=true) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/gdk/gdk_bat.c:1028
    2. #1 0x00007f0283fb03d6 in delta_append_val (tr=0x7f01e8004540, batp=0x7f027e1f51e8, id=7590, offset=6, i=0x7f01e803c600, cnt=1, storage_type=0x0, tt=6)
    3. at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/sql/storage/bat/bat_storage.c:2319
    4. #2 0x00007f0283fb0688 in append_col_execute (tr=0x7f01e8004540, delta=0x7f027e1f51e8, id=7590, offset=6, offsets=0x0, incoming_data=0x7f01e803c600, cnt=1, tt=6, storage_type=0x0)
    5. at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/sql/storage/bat/bat_storage.c:2354
    6. #3 0x00007f0283fb0969 in append_col (tr=0x7f01e8004540, c=0x1a571380, offset=6, offsets=0x0, data=0x7f01e803c600, cnt=1, tpe=6)
    7. at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/sql/storage/bat/bat_storage.c:2384
    8. #4 0x00007f0283e38a3c in mvc_append_wrap (cntxt=0x237c610, mb=0x7f01e8035660, stk=0x7f01e803c4d0, pci=0x7f01e8045000)
    9. at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/sql/backends/monet5/sql.c:1842
    10. #5 0x00007f0297637047 in runMALsequence (cntxt=0x237c610, mb=0x7f01e8035660, startpc=1, stoppc=0, stk=0x7f01e803c4d0, env=0x0, pcicaller=0x0)
    11. at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/monetdb5/mal/mal_interpreter.c:688
    12. #6 0x00007f02976357be in runMAL (cntxt=0x237c610, mb=0x7f01e8035660, mbcaller=0x0, env=0x0) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/monetdb5/mal/mal_interpreter.c:357
    13. #7 0x00007f0283e5963b in SQLrun (c=0x237c610, m=0x7f01e80168d0) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/sql/backends/monet5/sql_execute.c:259
    14. #8 0x00007f0283e5af37 in SQLengineIntern (c=0x237c610, be=0x7f01e8036150) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/sql/backends/monet5/sql_execute.c:709
    15. #9 0x00007f0283e58505 in SQLengine (c=0x237c610) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/sql/backends/monet5/sql_scenario.c:1358
    16. #10 0x00007f02976568c0 in runPhase (c=0x237c610, phase=4) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/monetdb5/mal/mal_scenario.c:453
    17. #11 0x00007f0297656a2a in runScenarioBody (c=0x237c610, once=0) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/monetdb5/mal/mal_scenario.c:479
    18. #12 0x00007f0297656c36 in runScenario (c=0x237c610, once=0) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/monetdb5/mal/mal_scenario.c:510
    19. #13 0x00007f0297659048 in MSserveClient (c=0x237c610) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/monetdb5/mal/mal_session.c:589
    20. #14 0x00007f02976588c1 in MSscheduleClient (command=0x7f01e8000b70 '\333' 199 times>, 333>..., challenge=0x7f027e1f5ce3 "HJBNRi7c", fin=0x7f01e8002b90,
    21. fout=0x7f01f0003e20, protocol=PROTOCOL_9, blocksize=8190) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/monetdb5/mal/mal_session.c:445
    22. #15 0x00007f029771e232 in doChallenge (data=0x7f01f0000b70) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/monetdb5/modules/mal/mal_mapi.c:222
    23. #16 0x00007f0296fcf749 in THRstarter (a=0x7f01f0006310) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/gdk/gdk_utils.c:1668
    24. #17 0x00007f029704cb43 in thread_starter (arg=0x7f01f0006380) at /root/work/monetdb-dev/trunk/monetdb-sep2022_sp3_release/gdk/gdk_system.c:862
    25. #18 0x00007f029658d1ca in start_thread () from /lib64/libpthread.so.0
    26. #19 0x00007f02961f9e73 in clone () from /lib64/libc.so.6

  • 相关阅读:
    jQuery绑定事件bind
    【EI会议征稿】2023年第二届信号处理、计算机网络与通信国际学术会议(SPCNC2023)
    java毕业设计畅言情感互助网站mybatis+源码+调试部署+系统+数据库+lw
    怎么提取视频中的音乐保存到本地?其实方法很简单
    centos7 安装docker 步骤整理
    苹果iPhone 15/Pro新机发布,毫米波5G仍然只限美国版
    JavaScript基础---JavaScript对象---10.19
    中文分词的词典中的词性标记
    常用的开源网关 API Gateway
    vue钩子函数以及例子
  • 原文地址:https://blog.csdn.net/adofsauron/article/details/134246325