自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 MySQL 深潜 - 一文详解 MySQL Data Dictionary Hope Lee

MySQL data dictionary 解决了背景所述旧架构中的诸多问题,使元数据的访问更加安全,存储和管理成本更低。架构实现非常的精巧,通过大量的模版类实现使得代码能够最大程度上被复用。多层缓存的实现也许能显著提升访问效率。通过 client 简洁的接口,让 Server 层和存储层能在任何地方方便的访问元数据。

2024-03-26 20:07:09 324

原创 mysql join

这就是我们预测的执行过程。//这个函数在两个地方赋值,一个是在exec中通过make_simple_join赋值为join_init_read_record(没有被优化的join使用这个方法,并且它通过调用init_read_record,初始化该join_table下的read_record方法,如全表扫描为rr_sequential,然后再调用read_record方法读取第一条记录);

2024-03-26 20:06:31 729

原创 MySQL查询优化器源码分析

get_mm_tree()函数用于根据所有查询条件的键,生成一颗查询树。该函数被setup_tables_and_check_access()函数(sql/sql_base.cc:8058)调用,而setup_tables_and_check_access()函数用于准备表以及检查表的是否可以访问,在JOIN::prepare()函数中被调用,而该函数分别调用setup_tables()和check_single_table_access(),其中后者对所有需要的表,循环进行检查是否可以访问。

2024-03-26 20:06:00 827

原创 mysql中的join算法

BlockNestLoopJoin(BNLJ):MySQL采用了批量技术,即一次利用join_buffer_size缓存足够多的记录,每次遍历内表时,每条内表记录与这一批数据进行条件判断,这样就减少了扫描内表的次数,如果内表比较大,间接就缓解了IO的读压力。如果我们能对内表的join条件建立索引,那么对于外表的每条记录,无需再进行全表扫描内表,只需要一次Btree-Lookup即可,整体时间复杂度降低为N*O(logM)。

2024-03-26 20:05:28 602

原创 MySQL的join buffer原理及如何提高查询效率

当join buffer满或者是最后一条记录的时候,此时开始启动对于tsecer表的扫描,对于tsecer表中读取的每一个记录,结合前面缓存的每一个记录,看是否满足自己判断条件。在这个使用buffer的例子中,可以看到这个地方只是对于tsecer表进行了一次扫描,而通常来说,数据库的扫描代码是最高的(因为要涉及到磁盘读取),这样使用buffer的方式将tsecer表的扫描降低为1次,所以这个效率提高很多,特别是在涉及到的多个table,并且/或者 每个table中的记录数量都很多的情况下。

2024-03-26 20:04:55 894

原创 Mysql代码学习

断住之后,分别打印p *qep_tab->read_record.table和p *qep_tab->read_record.table.next会发现,哪个表的数据少,哪个表在table里,而数据多的会在table.next里。不断地变换两个表的数据,总是这样的表现。eliminate_item_equal里用了个add_at_head方法,把后面的表达式加到了前面。实际计算的时候是先算name='a',后算BF='bf'。实际计算的时候是先算BF='bf',后算name='a'。

2024-03-26 20:04:17 159

原创 mysql修改语法

【代码】mysql修改语法。

2024-03-26 20:01:07 244

原创 valgrind调mysql

=3375== by 0x4005BC: main (main.c:14)如上表示,使用malloc申请了4个字节的内存,但在a.c的第8行,对第4(从0开始计数)个字节进行了写操作。重点看HEAP SUMMARY、Invalid free、Invalid read、Invalid write.

2024-03-26 19:56:50 367

原创 JNI内存方面说明以及相关类型手动释放内存

它的生命期是在Native Method的执行期开始创建(从Java代码切换到Native代码环境时,或者在Native Method执行时调用JNI函数时),在Native Method执行完毕切换回Java代码时,所有Local Reference被删除(GC会回收其内存),生命期结束(调用DeleteLocalRef()可以提前回收内存,结束其生命期)。供Java应用程序使用的,所有java对象的内存都是从这里分配的,它不是物理上连续的,但是逻辑上是连续的。

2024-03-26 19:52:22 456

原创 Local Reference的生命周期

不断在各个点打印GetObjectRefType的结果,看看是1还是0。发现DetachCurrentThread后立刻从1变成0了。但是一个奇怪的点是:调用DeleteLocalRef之后居然不会从1变成0,原因暂时未知。简单来说,FindClass、NewObject方法都会返回一个local reference的jobject。DetachCurrentThread的时候local reference失效。这个结论是不是绝对正确的,还不好说。

2024-03-26 19:51:33 215

原创 JNI/NDK开发指南(十)——JNI局部引用、全局引用和弱全局引用

https://www.cnblogs.com/fnlingnzb-learner/p/7372189.html

2024-03-26 19:50:32 60

原创 JNI多线程调用ojdbc报错问题排查

从日志里可以看出,8号线程,也就是主线程在isDriverAllowed里传入的classLoader是有效的,而9号线成传入的则是null。各个线程通过FindClass都能够找到DriverManager类,也能够找到getConnection方法,所以不存在多线程找不到类的问题。从这个现象看,跟线程有关。只有主线程,也就是调用JNI_CreateJavaVM的线程能够正常连接,并执行查询返回结果集。看了DriverManager的代码,getConnection的时候报错,有两种可能。

2024-03-26 19:49:47 583

原创 Mysql JDBC调用流程

也没有getConnection的实现(其实有getConnection的实现,但是都不是DriverManager类的,不是上面代码里用到的getConnection)。getConnection会调用具体某个jdbc驱动的connect方法,在这里就是mysql jdbc驱动的connect方法。ServerPreparedStatement.serverPrepare又会调用ServerPreparedQuery.serverPrepare,真正的核心流程在。

2024-03-26 19:43:34 306

原创 eclipse配置流程

_USE_GNUEDOM__x86_64__NULL=0。

2024-03-26 11:17:38 205

原创 调试LIBGCC

Server使用静态链接-static-libgcc的方式使用libgcc,使用的可能不是.dep_create目录下的静态库,而是系统环境的库,所以需要把系统的两个库替换成新编的debug版本的静态库。另外,ARM平台make install之后需要替换的.a文件不再usr/local/下,而是在.dep_create下,可能跟具体的编译环境有关。的错误,解决方法是不要再gcc的源码中直接执行./configure、make、make install等命令。编译7.5的时候遇到。

2023-12-26 16:03:36 395 1

原创 编译debug版本LLVM

export CXX=/usr/local/gcc-5.2.0/bin/g++export CC=/usr/local/gcc-5.2.0/bin/gccexportLD_LIBRARY_PATH=/usr/local/lib/export LD_LIBRARY_PATH=/data/2/ryan.ly/22x/oceanbase/rpm/.dep_create/var/usr/local/gcc-5.2.0/lib64/:$LD_LIBRARY_PATHmkdir llvm_build && cd llv

2023-12-26 15:55:28 370 1

原创 ARM平台偶现4026问题分析

grep __builtin_aarch64_xpaclri,发现7.5的代码中有该定义,进一步发现,uw_init_context_1的实现里增加了MD_POST_EXTRACT_ROOT_ADDR,会在AArch64的情况下对计算出的ra进行进一步修正。从uw_frame_state_for对_Unwind_Find_FDE的调用我们发现,_Unwind_Find_FDE的第一个入参pc是通过context->ra + _Unwind_IsSignalFrame (context) - 1计算出来的。

2023-12-26 15:54:50 1028 1

原创 JNI访问C端struct

这里解决的问题是把C的struct传给Java,并读写其中的内容。仅仅是读写C的struct,不需要把C的数据结构映射到java。定义Java的访问接口JNIDemo.java编译Java生成h文件定义C方法编译so注意需要指定jni.h的目录。执行Java结果...

2022-06-21 16:00:31 135 1

原创 Mysql修改系统表

以在columns中增加一列xxx_type为例修改系统表定义sql/dd/impl/tables/columns.h里增加enum:FIELD_XXX_TYPE sql/dd/impl/tables/columns.cc里增加:m_target_def.add_field(FIELD_XXX_TYPE, "FIELD_XXX_TYPE", "xxx_type BIGINT UNSIGNED");修

2021-12-23 20:57:23 611

原创 Mysql大对象的存储

建一张表,插入一行大数据。CREATE TABLE t1 (f1 INT PRIMARY KEY, f2 BLOB, f3 TEXT);INSERT INTO t1 VALUES(3, REPEAT( 'a', 20000), REPEAT( 'b', 20000));gdb查看mysql代码堆栈如下。#0 dtuple_convert_big_rec (index=0x7fa8cc3497b8, upd=0x0, entry=0x7fa8cc36f128) at /home/data

2021-12-23 20:49:01 1808

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除