在线QQ客服:1922638
专业的SQL Server、MySQL数据库同步软件
阅读更多
原始地址:http://software.intel.com/zh-cn/blogs/2010/09/01/mysql4innodb/
1.主要数据结构(buf0buf.h)?
(1)Buf_pool
Buf_pool是整个缓冲区系统的核心数据结构,数据库中的所有操作都将反映在此缓冲区层中。我们可以在配置文件(InnoDB_buffer_pool_size)中指定缓冲池的大小。
缓冲池还包含多层数据结构:为了实现buffer_pool的在线大小调整,引入了块数据结构;
块
块数据结构是一种更特定的内存缓存,主要包含控制内存块的块结构;
块
页面结构必须放在结构的第一位置,以便将来使用指针时可以轻松在页面和块之间进行转换。
例如:(buf_page_t *)buf_block_t * p
您可以获得类型为buf_page的指针
页面
页面结构主要用于存储硬盘上的文件,仅通过空间和偏移量对应于硬盘上的数据库文件; io_fix指示页面的类型(读或写);压缩存储压缩页面;
Buf_pool原理图
Io_threads
在InnoDB中,使用默认配置参数时,有一个总共10个线程,包括:4个读取线程,4个写入线程,负责异步读写操作,1个日志写入线程,负责将操作记录到日志文件中,一个srv_master线程,负责将数据定期写入磁盘和其他工作。
初始化InnoDB插件时,它将调用innobase_start_or_create_for_mysql。此功能将完成InnoDB存储引擎的初始化。创建io线程的部分在函数中
os_thread_create(io_handler_thread,n + i,thread_ids + i)
其中io_handler_thread是回调函数,主要是为每个任务分配任务后台线程
for(i = 0 ;; i ++){
fil_aio_wait(段);
Mutex_enter(\ ios_mutex);
iOS ++;
Mutex_exit(\ ios_mutex);
}
fil_aio_wait的主要功能是os_aio_simulated_handle。此函数根据InnoDB中的线程号模拟异步IO设置。
segment = os_aio_get_array_and_local_segment(\ array,global_segment);
Aio和同步aio
mysql诞生时,Linux上没有AIO机制,因此InnoDB本身实现了一组异步io框架。
关于Linux aio的引入,AIO首先以2.5进入Linux内核,现在已成为2.6生产内核的标准功能。 http://www.ibm.com/developerworks/linux/library/l-async/
Innobase最近在innodb插件中实现了真正的AIO机制。 http://blogs.innodb.com/wp/2010/04/innodb-performance-aio-linux/
数组
os_aio_read_array//异步读取
os_aio_write_array//异步写入
os_aio_ibuf_array//插入缓冲区
os_aio_log_array//日志数组在InnoDB中引入了异步同步,目标是在代码级别与aio的格式保持一致。
为了实现InnoDB异步IO引入的数组,系统中有五种类型的数组:发生IO请求时,异步机制将插入请求
段
放入其中一个插槽(插槽),然后等待信号执行请求; IO已完成,从插槽中删除。 ,该段用作数组的标识符,并且数组的类型可以为o根据细分值获得。例如,在默认的阵列数量(4次读取,4次写入)下,数字3表示读取阵列
插槽
用于存储异步读写请求的插槽。
2.调用过程
在InnoDB中,为了提高响应速度,有时需要立即返回数据,在这种情况下,使用了同步读取机制。而在其他对速度要求不是很高的情况下,例如预读取,InnoDB将使用异步读取方式将数据加载到内存中。根据系统,当打开双重写入缓冲区以写入数据时,InnoDB将首先将数据写入硬盘上称为双重写入缓冲区的特定区域,然后在将来的某个时候将其写入磁盘。 ■当前加载和当前内存中的脏页数有不同的延迟。
异步读写时等待请求:
读取和写入缓存块时/文件完成后,发出信号:; pthread_cond_broadcast()
大小:38.8 KB
大小:2.1 KB
大小:13.4 KB
大小:10.3 KB
大小:63.1 KB
大小:3.6 KB
大小:29.7 KB
大小:5.5 KB
大小:51.1 KB
大小:17.1 KB
查看图片附件
分享给:
MySQL源代码分析(5):Innodb缓存系统(传输)
|
MySQL源代码分析(三):详细的配置文件(传输)
2012-02-03 18:29
浏览1936年
评论(0)
类别:数据库
查看更多
评论
发表评论
您尚未登录,请登录并发表评论