20200312

@ShiKaiWi

Plan

60min: ClickHouse Write Procedure

Notes

今天借助 lldb 的调试功能,迅速摸清了写入流程:

┌──────────────────────────────┐                             
│TCPHandler.cpp:249            │                             
│executeQuery                  │                             
└──────────────────────────────┘                             
     ┌──────────────────────────────┐                        
     │executeQuery.cpp:572          │                        
     │executeQueryImpl              │                        
     └──────────────────────────────┘                        
         ┌──────────────────────────────┐                    
         │executeQuery.cpp:328          │                    
         │res = interpreter->execute(); │                    
         └──────────────────────────────┘                    
              ┌───────────────────────────────────────┐      
              │InterpreterInsertQuery.cpp:204         │      
              │res.pipeline.addStorageHolder(table);  │      
              └───────────────────────────────────────┘      
              ┌───────────────────────────────────────┐      
              │InterpreterInsertQuery.cpp:146         │      
              │make PushingToViewsBlockOutputStream   │      
              └───────────────────────────────────────┘      
                    ┌───────────────────────────────────────┐
                    │PushingToViewsBlockOutputStream.cpp:23 │
                    │make PushingToViewsBlockOutputStream   │
                    └───────────────────────────────────────┘
                                                             
 ┌──────────────────────────────┐                            
 │TCPHandler.cpp:660            │                            
 │state.io.onFinish();          │                            
 └──────────────────────────────┘                            

目前发现写入流程的关键控制在于 PushingToViewsBlockOutputStream.cpp 里面的实现,明天需要再深入研究一下,明天的断点可以设置在:

breakpoint set --file src/DataStreams/PushingToViewsBlockOutputStream.cpp --line 168

ClickHouse 的主体流程是一个 TCP server,定义在 TCPHandler.cpp 里面,处理所有的 query,其中 Insert 也是 query。

More